Skip to main content
The Agent Feedback Protocol v1 is the language-neutral specification that every official SDK implements. It defines the key format, capability-signing algorithm, HTTP response envelope, and telemetry batch shape. You need this document if you are implementing your own SDK in an unsupported language, writing a conformance test, or auditing an existing adapter. The specification is deliberately small: you only need standard HTTP, JSON, HMAC-SHA256, UUID, and base64url libraries.

Key format

V2 product keys always follow this shape:
The 32-character hex segment is the public key ID embedded in every capability token. The remainder is the signing secret. The backend stores only a SHA-256 hash of the full key — the raw secret never leaves your environment.

Capability signing algorithm

For each eligible product response, your SDK must produce a short-lived, write-only capability token. The algorithm is:
The resulting token is used as the Bearer value in submit.authorization. It is scoped to one interaction, expires in at most two hours, and contains no customer data, product content, or personal information.

Conformance vector

Use these exact values to verify your signing implementation. If your implementation reproduces the token field from the inputs below, it is correct.
The nonce AQIDBAUGBwgJCgsMDQ4PEBES is a fixed deterministic value used only in this test vector. Your production implementation must generate cryptographically random nonces for every real interaction.

HTTP response envelope

Attach the feedback contract to eligible 2xx responses. The envelope schema (envelope.schema.json) requires all of these fields:
The surface determines where the envelope is placed: Always add Cache-Control: private, no-store to instrumented responses because each capability token is unique per interaction.

Route normalization

Normalize route paths before recording them as the operation field in telemetry. Replace numeric segments and UUID-like segments with the placeholder :id, and strip the query string:
The Node SDK implements this in normalizeOperation from core.ts:

Telemetry batch format

Enqueue telemetry locally and POST it to POST /api/v2/telemetry/batches using the company product key (not the scoped capability). Batches must have between 1 and 100 events. The five required fields per event are interactionId, surface, operation, classification, and occurredAt.
Product responses must never wait for telemetry delivery. Queue events in a bounded in-memory buffer and flush asynchronously. Drop events rather than blocking the response or growing the queue without bound.
HTTP and header surfaces begin with classification: "unclassified". The backend promotes an interaction to confirmed when a valid outcome is submitted against its capability. MCP tool calls begin as confirmed immediately.

Protocol discovery and SDK downloads

Fetch the discovery document to find the canonical download URLs for all official SDK packages:
The document returns a JSON object with download URLs for .tgz, .tar.gz, and .whl packages for each language SDK.

Conformance requirements

An adapter is conformant when it:
  • Produces the exact signing vector in conformance.json
  • Preserves the original JSON object shape without wrapping
  • Leaves excluded and unsafe responses (errors, redirects, health/metrics endpoints, assets, streams, binary bodies) untouched
  • Never blocks or fails a product response when telemetry is unavailable
  • Emits the normalized operation and correct initial classification in telemetry
  • Rejects untrusted outcome destinations in any agent-side helpers
  • Passes all language-specific conformance tests