This page assumes a collector is already reachable at a URL like
https://collector.internal. For the split-plane picture — what stays in your VPC versus what reaches the cloud — see How it works and Security.Your provider API key is forwarded by the collector to the upstream provider so the call can complete. It is used to authenticate to the provider and is never sent to Firedog cloud. See /security.
Prerequisites
A reachable collector
A collector running inside your VPC, exposing
POST /v1/chat/completions. Note its URL.An upstream provider key
The API key for whichever provider backs the models you call. The collector forwards it upstream; store it as an environment variable rather than inlining it.
Choose a path
- SDK (@firedog/sdk)
- Drop-in proxy (any OpenAI SDK)
The SDK mirrors the OpenAI client surface. You create a client pointed at your collector, set attribution defaults once, and pass per-call context on each request.
Create a client
Point
collectorUrl at your in-VPC collector. apiKey is forwarded to the upstream provider. defaultContext is attribution applied to every call from this client.A returned
callId means the call was priced and recorded. It should appear on the dashboard Home view attributed to macro-desk / market-research shortly after.What just happened
Priced
The collector priced the call from the shared pricing table using the model and token counts — no vendor invoice reverse-engineering required.
Attributed
Your
team / workflow (and salted userHash) landed on the call, so it rolls up per desk and workflow on the dashboard.Recorded in your VPC
The full record — prompt messages, any RAG chunks, and the response — was written to Postgres inside your VPC and never left it.
Metadata to the cloud
Only
CallMetadata (ids, model, tokens, cost, latency, labels) reached the dashboard. No prompt or response content.Next steps
Attribution
Model the
team, workflow, and userId context so every dollar files under the right desk and run.Security
See exactly what stays in your VPC, what the metadata contains, and how
SensitivityProfile controls it.