AxonFlow · Schema

AuditLogEntry

A single audit_logs row as serialized on the wire (orchestrator AuditEntry struct). Optional canonical-decision, cross-border and session fields are omitted when empty.

CompanyAI GovernanceAI AgentsPolicy EnforcementAudit LoggingComplianceMCPOpen Source

Properties

Name Type Description
id string
request_id string
timestamp string
user_id integer
user_email string
user_role string
client_id string
tenant_id string
org_id string
request_type string
query string The audited query/prompt (already redacted by the write path)
query_hash string
policy_decision string Verdict for the request. Canonical values are allowed, blocked, redacted, needs_approval, error; historical rows may carry legacy spellings.
policy_details object Nested decision detail exactly as the writer stored it (policy_ids / reasons / latency_ms plus writer-specific keys like gateway_id, tool_name, decision_id, override_id, policy_matches). Treat keys as
provider string
model string LLM model identifier the request was routed to (e.g. `gpt-4o-mini`, `llama3.2:latest`). Surfaced separately from `provider` so callers can filter audit reads by model without parsing the provider's ve
response_time_ms integer Measured duration for this row in whole milliseconds. ABSENT when this row's writer measured nothing (#3424). Absent is NOT `0`. This field used to be emitted unconditionally, so every row from a writ
tokens_used integer Provider tokens consumed by this request, OMITTED when the row carries no RECORDED provider usage (#3427). The omission says the usage was not recorded; it does NOT assert that no provider was called.
cost number Estimated provider cost for this request in USD, OMITTED when the row carries no recorded provider usage (#3427). Same rule, same two populations and same rationale as `tokens_used` above; note that `
redacted_fields array
error_message string Omitted when empty
response_sample string
compliance_flags array
security_metrics object
decision_id string Canonical decision-row id (#2597/ADR-058); present on planes that mint decisions, omitted on legacy writers
plane string Enforcement plane that wrote the row (e.g. mcp, llm); omitted on legacy writers. The orchestrator's four ENFORCEMENT planes are `orchestrator_request` for /api/v1/process and /api/v1/plan/execute, `wc
correlation_id string Decision-chain correlation key (#2611); omitted when not stitched
transfer_basis string UU PDP Pasal 56 cross-border transfer legal basis (adequacy, safeguards, pasal_56b_dpa, consent) — Enterprise LLM-forward path only (#2718)
data_residency string ISO 3166-1 alpha-2 destination country (#2718); Enterprise only
session_id string AI-tool session id (Claude Code / Desktop) forwarded via X-Session-Id; asserted attribution, not an auth boundary
View JSON Schema on GitHub

JSON Schema

axonflow-audit-log-entry-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/axonflow/main/json-schema/axonflow-audit-log-entry-schema.json",
  "title": "AuditLogEntry",
  "description": "A single audit_logs row as serialized on the wire (orchestrator\nAuditEntry struct). Optional canonical-decision, cross-border and\nsession fields are omitted when empty.\n",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/axonflow-orchestrator-openapi.yml#/components/schemas/AuditLogEntry",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "request_id": {
      "type": "string"
    },
    "timestamp": {
      "type": "string",
      "format": "date-time"
    },
    "user_id": {
      "type": "integer"
    },
    "user_email": {
      "type": "string"
    },
    "user_role": {
      "type": "string"
    },
    "client_id": {
      "type": "string"
    },
    "tenant_id": {
      "type": "string"
    },
    "org_id": {
      "type": "string"
    },
    "request_type": {
      "type": "string"
    },
    "query": {
      "type": "string",
      "description": "The audited query/prompt (already redacted by the write path)"
    },
    "query_hash": {
      "type": "string"
    },
    "policy_decision": {
      "type": "string",
      "description": "Verdict for the request. Canonical values are allowed, blocked,\nredacted, needs_approval, error; historical rows may carry\nlegacy spellings.\n"
    },
    "policy_details": {
      "type": "object",
      "description": "Nested decision detail exactly as the writer stored it\n(policy_ids / reasons / latency_ms plus writer-specific keys\nlike gateway_id, tool_name, decision_id, override_id,\npolicy_matches). Treat keys as writer-specific.\n",
      "additionalProperties": true
    },
    "provider": {
      "type": "string"
    },
    "model": {
      "type": "string",
      "description": "LLM model identifier the request was routed to (e.g.\n`gpt-4o-mini`, `llama3.2:latest`). Surfaced separately from\n`provider` so callers can filter audit reads by model without\nparsing the provider's vendor-specific naming.\n"
    },
    "response_time_ms": {
      "type": "integer",
      "format": "int64",
      "description": "Measured duration for this row in whole milliseconds. ABSENT when\nthis row's writer measured nothing (#3424).\n\nAbsent is NOT `0`. This field used to be emitted unconditionally, so\nevery row from a writer with no duration to record -- blocked\nrequest / response / media, failed request, workflow, plan and\ntool-call rows, HITL approvals, and the connector-exec MCP closure\n-- carried a literal `0`, which the portal's Latency column rendered\nas a confident \"0ms\". The key is now omitted for those rows rather\nthan set to null: this schema declares no `required` list, so the\nproperty was already optional and a conforming client already\nhandles its absence. Nothing about the declared contract changes.\n\nA `0` that DOES arrive is a real measurement: the column is whole\nmilliseconds, so a decision the platform timed at under 1ms is\nstored as the 0 its clock produced. The portal renders that as\n\"<1ms\" and an absent value as \"-\".\n\nThe quantity differs by `plane`: enforcement duration on\ndecision/gateway/mcp/openai_compat, a PROVIDER round trip on `llm`,\nand a client-asserted OTLP duration on cowork/claude_code (#3431).\nThe compliance summary's `avg_latency_ms` averages only the first.\n"
    },
    "tokens_used": {
      "type": "integer",
      "description": "Provider tokens consumed by this request, OMITTED when the row carries no RECORDED provider usage (#3427).\nThe omission says the usage was not recorded; it does NOT assert that no provider was called. Two distinct populations omit it:\n* Rows whose writer never reached a model at all -- a blocked\n  request, a redaction, a gateway pre-check deny, a media deny, a\n  workflow step, a plan or a tool-call row.\n* Rows written by the LLM RESPONSE-plane block writer, which runs\n  AFTER the forward: the call was made and the answer was withheld,\n  so a real round trip was paid for, but that writer records none\n  of the provider usage it is handed. That is a gap in the writer,\n  tracked separately, not a claim about the request.\n\nUntil #3427 both populations left the read paths as a literal `0`, which the portal's detail panel rendered as \"Tokens 0\" under a request no model saw. The key is now omitted for those rows rather than set to null: this schema declares no `required` list, so the property was already optional and a conforming client already handles its absence.\nA `0` that DOES arrive is a real report from a provider, not an absence.\n"
    },
    "cost": {
      "type": "number",
      "format": "double",
      "description": "Estimated provider cost for this request in USD, OMITTED when the row carries no recorded provider usage (#3427). Same rule, same two populations and same rationale as `tokens_used` above; note that `0` is a genuinely representable cost (a locally hosted or free-tier model), which is why absence is expressed by omitting the key rather than by a zero.\n"
    },
    "redacted_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "error_message": {
      "type": "string",
      "description": "Omitted when empty"
    },
    "response_sample": {
      "type": "string"
    },
    "compliance_flags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "security_metrics": {
      "type": "object",
      "additionalProperties": true
    },
    "decision_id": {
      "type": "string",
      "description": "Canonical decision-row id (#2597/ADR-058); present on planes\nthat mint decisions, omitted on legacy writers\n"
    },
    "plane": {
      "type": "string",
      "description": "Enforcement plane that wrote the row (e.g. mcp, llm); omitted on\nlegacy writers. The orchestrator's four ENFORCEMENT planes are\n`orchestrator_request` for /api/v1/process and\n/api/v1/plan/execute, `wcp` for the workflow step gate, `map` for a\nmulti-agent step and `orchestrator_response` for the LLM response.\n(`policy_simulation` and `policy_test` are the orchestrator's too,\nbut they are operator tools rather than enforcement points and\nwrite no decision row.)\n"
    },
    "correlation_id": {
      "type": "string",
      "description": "Decision-chain correlation key (#2611); omitted when not stitched"
    },
    "transfer_basis": {
      "type": "string",
      "description": "UU PDP Pasal 56 cross-border transfer legal basis (adequacy,\nsafeguards, pasal_56b_dpa, consent) — Enterprise LLM-forward\npath only (#2718)\n"
    },
    "data_residency": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 destination country (#2718); Enterprise only"
    },
    "session_id": {
      "type": "string",
      "description": "AI-tool session id (Claude Code / Desktop) forwarded via\nX-Session-Id; asserted attribution, not an auth boundary\n"
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/axonflow-audit-log-entry"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.