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.

  • OpenAI
    Every model call, and handoffs between agents
  • Anthropic
    Every model call
  • LangChain
    Chains, tools and retrievals as they run
  • LL
    LiteLLM
    Everything behind your gateway, including agents you did not write
  • Vapi
    Finished calls, and proof the AI disclosure played
  • OpenTelemetry
    Whatever you already trace
  • Amazon S3
    Write-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.

config.yaml
callbacks: auditant.gateway.handler
stamp the join key on requests
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.

python
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)
what maps to what
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.

direct Vapi connection
POST /v1/ingest/voice/vapi?log=t_…%2Fprod
x-vapi-secret: <AUDITANT_WEBHOOK_SECRET>
Retell or another audio loop — after signature verification
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.