Innerva
API reference
Innerva API v0.1.0 · generated from the OpenAPI document this deployment serves
The live Innerva HTTP contract. Paths are added only when their handlers, authentication requirements, validation, and tests are implemented.
Protected operations carry a P-256 HTTP Message Signature and a fresh Innerva-Nonce. Credential-bearing POST operations also send Authorization, Content-Digest, and Idempotency-Key, as listed below. Use a client SDK where possible: each implements the canonical signing, callback binding, and stream processing the protocol requires, and is verified against shared conformance vectors.
This deployment: https://stg.innerva.net
Operations
GET /.well-known/innerva
Discover the protocol endpoints and supported profile.
Operation ID getDiscovery
Responses
200application/json-
Protocol discovery metadata.
POST /v1/access-requests
Create an access request and receive a customer interaction link.
Operation ID createAccessRequest
Parameters
Content-DigestInnerva-NonceSignature-InputSignatureIdempotency-Key-
Scopes an exact create-response replay to this proof key, route, and signed body.
Request body
AccessRequest as application/json, required.
Responses
200application/json-
Access request created or an idempotent result replayed.
defaultapplication/problem+json-
Request rejected.
POST /v1/access-requests/{id}/continue
Exchange a completed interaction for an inference capability.
Operation ID continueAccessRequest
Parameters
idAuthorization-
Send the issued opaque credential as
Innerva <token>. Content-DigestInnerva-NonceSignature-InputSignatureIdempotency-Key-
Required so a credential-consuming operation can safely return the same success response after response loss.
Request body
ContinuationRequest as application/json, required.
Responses
200application/json-
A new inference capability and its management credential, or the exact prior response for an idempotent retry.
defaultapplication/problem+json-
Request rejected.
DELETE /v1/capabilities/{id}
Revoke a capability and its grant.
Operation ID revokeCapability
Parameters
idAuthorization-
Send the issued opaque credential as
Innerva <token>. Innerva-NonceSignature-InputSignature
Responses
204-
Capability and grant revoked.
defaultapplication/problem+json-
Request rejected.
POST /v1/capabilities/{id}/rotate
Rotate an inference capability.
Operation ID rotateCapability
Parameters
idAuthorization-
Send the issued opaque credential as
Innerva <token>. Content-DigestInnerva-NonceSignature-InputSignatureIdempotency-Key-
Required so a credential-consuming operation can safely return the same success response after response loss.
Request body
EmptyRequest as application/json, required.
Responses
200application/json-
A rotated inference capability, or the exact prior successor for an idempotent retry.
defaultapplication/problem+json-
Request rejected.
POST /v1/responses
Stream a metered inference response.
Operation ID createInferenceResponse
Parameters
Authorization-
Send the issued opaque credential as
Innerva <token>. Content-DigestInnerva-NonceSignature-InputSignatureIdempotency-Key-
Required so a credential-consuming operation can safely return the same success response after response loss.
Request body
InferenceRequest as application/json, required.
Responses
200text/event-stream-
A normalized text response streamed as server-sent events. The stream starts with one response.created event, may contain response.output_text.delta events, and ends with exactly one response.completed, response.incomplete, or error event. Each SSE event has one event field naming the event and one data field whose JSON object matches InferenceCreatedEvent, InferenceDeltaEvent, InferenceTerminalEvent, or InferenceErrorEvent.
defaultapplication/problem+json-
Request rejected.
Server-sent events
Each streamed event's event field names it, and its data field is a JSON object matching the schema listed here.
response.createdInferenceCreatedEventresponse.output_text.deltaInferenceDeltaEventresponse.completed,response.incompleteInferenceTerminalEventerrorInferenceErrorEvent
A terminal response's status is completed or incomplete. See InferenceTerminalResponse for when an incomplete response is charged 0 credits and what retrying it means.
Problem codes
Rejected requests return application/problem+json matching Problem. Branch on code.
empty_output_brakeHTTP 429The grant recently produced too many uncharged empty responses (ADR 0003). New requests are refused until older empty responses leave the rolling window; no operator action is needed.
idempotency_mismatchHTTP 409The
Idempotency-Keywas already used with a different request.inference_already_startedHTTP 409An inference operation already exists for this
Idempotency-Key. Streamed content is never retained, so it cannot be replayed.insufficient_creditsHTTP 402The grant does not have enough available credits for this request.
internal_errorHTTP 500The request could not be completed.
invalid_content_digestHTTP 400Content-Digestis missing or does not match the request body.invalid_content_typeHTTP 400Content-Typemust beapplication/json.invalid_credentialHTTP 401The
Authorizationcredential is missing, malformed, or not valid for this operation.invalid_proofHTTP 401The HTTP message signature could not be verified.
invalid_proof_keyHTTP 400A public P-256 proof key is required.
invalid_requestHTTP 400The headers, path, or body do not match this contract or violate a policy bound.
invalid_spend_authorizationHTTP 401A staging spend authorization is missing, expired, or not issued for this proof key.
invalid_stateHTTP 409The operation is not valid in the resource's current state.
overloadedHTTP 503The service is temporarily overloaded; retry later.
provider_unavailableHTTP 502The inference provider could not start the request.
replayed_requestHTTP 401The signed request nonce has already been used.
request_expiredHTTP 410The access request is no longer active.
sandbox_unavailableHTTP 503Access fulfillment is not configured in this environment.
streaming_unavailableHTTP 500The HTTP server cannot stream this response.
unsupported_protocol_versionHTTP 400This server supports protocol version 0.1.
Schemas
AccessRequest
access_tokenclientclient_referenceinteractprotocol_version
AccessRequestCreated
continueexpires_ininstance_idinteractinteract.finishinteract.redirectprotocol_versionrequest_id
CapabilityResponse
access_token
Continuation
access_tokenuriwait
ContinuationRequest
interact_ref
Discovery
access_request_endpointinference_endpointinteraction_start_modes_supportedissuerjwk_algorithms_supportedopenapi_document-
The OpenAPI document this deployment was generated from, served verbatim as application/yaml with a Content-Digest header.
proof_methods_supportedprotocol_versionprotocol_versions_supportedsdk_index-
Human-readable index of client SDK downloads. The tarballs beneath it are embedded in the server binary at build time, so a download always matches the deployed protocol version.
EmptyRequest
GrantedAccess
actionscreditscredits.grant_limitcredits.grant_remainingcredits.unitgrant_idmodelstype
InferenceAccessToken
accessexpires_inkeykey.jktmanagemanage.access_tokenmanage.urivalue
InferenceCreatedEvent
responsetype
InferenceCreatedResponse
idmodelstatus
InferenceCredits
cappedchargedunit
InferenceDeltaEvent
delta-
The next normalized text fragment. Innerva does not persist it.
response_idtype
InferenceErrorEvent
errortype
InferenceRequest
inputmax_output_tokensmodelstream
InferenceStreamError
codemessage
InferenceTerminalEvent
responsetype
InferenceTerminalResponse
creditsidmodelstatus-
completed means output text was delivered and settled at measured usage. incomplete covers both a provider-declared incomplete response and a response that terminated without delivering any output text (for example a reasoning model consuming the entire output budget on reasoning tokens); in the no-output case the reservation is released and credits.charged is 0, so retrying an incomplete response with charged 0 repeats work that may again produce no output.
usage
InferenceUsage
input_unitsoutput_units
OpaqueAccessToken
value
Problem
An RFC 9457 problem details object returned for every rejected request. Branch on code rather than title or detail; the x-problem-codes extension lists the codes the public API returns.
codedetailstatustitletype
ProtocolVersion
PublicJWK
crvktyxy
RequestClient
displaydisplay.namedisplay.urikeykey.jwkkey.proof
RequestedAccess
actionscreditsdurationmodelstype
RequestedAccessToken
access
RequestedCredits
minimumsuggestedunit
RequestedInteraction
finishfinish.hash_methodfinish.methodfinish.noncefinish.uristart
ResourceID
Also available: OpenAPI document · client SDKs · Innerva home