DocsAdaptersBrowse
Adapters
The SDK captures agents you wrote. Adapters capture the rest: model traffic behind a gateway, framework spans, runs inside the OpenAI Agents SDK, and finished calls a voice platform reports by webhook. Each supplements the SDK; none replaces it — a gateway sees only what crosses it.
- OpenAIEvery model call, and handoffs between agents
- AnthropicEvery model call
- LangChainChains, tools and retrievals as they run
- LLLiteLLMEverything behind your gateway, including agents you did not write
- VapiFinished calls, and proof the AI disclosure played
- OpenTelemetryWhatever you already trace
- Amazon S3Write-once storage, where not even we can delete
LiteLLM gateway
One callback line captures every model call from every agent behind the gateway — including agents whose source you don't control — with MCP tool calls promoted to first-class tool_call events rather than buried in metadata.
callbacks: auditant.gateway.handler
curl $GATEWAY/v1/chat/completions \
-H "Authorization: Bearer sk-agent-loan-underwriter" \
-H "x-auditant-agent: loan-underwriter" \
-H "x-auditant-session: sess_b0f9c646" \
-d '{"model":"gpt-4.1","messages":[…]}'OpenAI Agents SDK
Nothing to add: when the agents package is importable, init() registers Auditant on the SDK's trace-processor bus and says so in handle.activated. The manual form remains for hosts that wire things themselves — it is idempotent, so calling both never chains a span twice.
import auditant handle = auditant.init(api_key="ak_…", log_id="t_…/prod", agent_id="support-bot") # "openai-agents-trace-processor" in handle.activated # or, with init(instrument=False): from auditant.openai_agents import install install(handle)
generation / response → model_call tokens observed function → tool_call name + input/output hashes handoff → delegation which agent handed to which guardrail (triggered) → policy_decision blocked, on the chain
Handoffs matter more than they look: multi-agent delegation is the case supervisors name as hardest to reconstruct, and here it is a first-class chained event.
Voice & vendor webhooks
Voice platforms report finished calls by webhook; the ingest endpoint maps them to lifecycle, per-turn decisions, tool calls — and a first-class disclosure event recording whether the “you are talking to an AI” line was actually played on this call, which nobody else produces as provable record.
POST /v1/ingest/voice/vapi?log=t_…%2Fprod x-vapi-secret: <AUDITANT_WEBHOOK_SECRET>
POST /v1/ingest/voice/retell?log=t_…%2Fprod
x-auditant-webhook-secret: <AUDITANT_WEBHOOK_SECRET>
{ "callId": "call_…", "agentId": "receptionist",
"transcript": […], "toolCalls": […], "costs": {…} }Vapi connects directly. Retell signs its own vendor-shaped webhook, so a small relay verifies x-retell-signature before mapping the call to the canonical body above; the same route works for any audio loop. The Auditant webhook secret is deliberately not the API key: it can write events and do nothing else — leaking it costs spam, never disclosure.