Generation ingest API
The generation ingest API receives structured generation data from AI Observability SDKs. It supports both HTTP and gRPC transports.
Note
AI Observability is referred to as “Sigil” in API paths, gRPC service names, and configuration. For example, the gRPC service is
sigil.v1.GenerationIngestServiceand authentication variables use theSIGIL_prefix.
Endpoints
| Transport | Endpoint |
|---|---|
| HTTP | POST /api/v1/generations:export |
| gRPC | sigil.v1.GenerationIngestService.ExportGenerations |
Authentication
The X-Scope-OrgID header identifies the tenant. When authentication is enabled (SIGIL_AUTH_ENABLED=true):
- HTTP requests without the header receive
401 Unauthorized. - gRPC requests without the header receive
Unauthenticated.
When authentication is disabled, the server injects the fake tenant ID.
Request body
Each request contains an array of generation objects. Key fields:
| Field | Required | Description |
|---|---|---|
id | Yes | Unique generation identifier (UUID). |
conversation_id | Yes | Groups generations into a conversation thread. |
model.provider | Yes | LLM provider name, for example, openai. |
model.name | Yes | Model name, for example, gpt-4o. |
mode | No | SYNC or STREAM. Default: SYNC. |
agent_name | No | Agent identifier for catalog tracking. |
agent_version | No | Informational version string. |
system_prompt | No | System prompt text. |
input | No | Array of input messages. |
output | No | Array of output messages. |
tools | No | Array of tool definitions. |
usage | No | Token usage breakdown. |
timestamps | No | Start, first token, and end timestamps. |
metadata | No | Key-value metadata pairs. |
tags | No | String tags for filtering. |
trace_id | No | OpenTelemetry trace ID. |
span_id | No | OpenTelemetry span ID. |
depends_on | No | List of upstream generation IDs for multi-agent dependency tracking. |
Token usage fields
| Field | Description |
|---|---|
input_tokens | Tokens in the request. |
output_tokens | Tokens in the response. |
cache_read_input_tokens | Tokens served from cache. |
cache_creation_input_tokens | Tokens written to cache. |
reasoning_tokens | Tokens used for reasoning/thinking. |
Tool definitions
| Field | Description |
|---|---|
name | Tool name. |
description | Tool description. |
type | Tool type. |
input_schema_json | JSON schema for tool input. |
deferred | Whether the tool is lazily loaded. |
Response
The response contains per-generation results:
| Field | Description |
|---|---|
generation_id | The generation ID. |
accepted | Whether the generation was accepted. |
error | Error message if rejected. |
Partial success is supported — some generations may be accepted while others are rejected.
Multi-agent dependency tracking
The depends_on field lets you declare parent-child relationships between generations. Set it to the list of generation IDs whose output the current generation consumes. Sigil uses these links to build a dependency DAG and propagate quality signals — if an upstream generation fails evaluation, all downstream dependents are flagged.
For example, in an orchestrator that spawns agents A, B, and C where C depends on A and B:
- A:
depends_on=[] - B:
depends_on=[] - C:
depends_on=["<A_GENERATION_ID>", "<B_GENERATION_ID>"]
Agent version computation
Sigil computes an effective agent version as sha256:<hex> from the canonical combination of system_prompt and tools. This version is used for agent catalog queries and doesn’t modify the stored payload.
Was this page helpful?
Related resources from Grafana Labs


