Stream organization-wide events
const url = 'http://localhost:8080/v1/admin/stream';const options = { method: 'GET', headers: {Authorization: 'Bearer <token>', 'X-Antares-Actor': '<X-Antares-Actor>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url http://localhost:8080/v1/admin/stream \ --header 'Authorization: Bearer <token>' \ --header 'X-Antares-Actor: <X-Antares-Actor>'The long-lived, organization-scoped Server-Sent Events stream the whole panel shell subscribes to once: onboarding milestones, quota warnings, index lifecycle and alerts. The HTTP body is an SSE byte stream; the response schema describes one decoded frame.
Same framing rules as the run stream — retry: 3000 once, :keepalive every 15 s, monotonic id:, Last-Event-ID resume — except that this stream never closes on its own. org.snapshot is sent once immediately on open so a page that just loaded renders the current state without a polling request. Role: viewer.
Authorizations
Abschnitt betitelt „Authorizations“Parameters
Abschnitt betitelt „Parameters“Header Parameters
Abschnitt betitelt „Header Parameters“The id: of the last frame the client processed. The server replays everything after it, so a reconnect never loses a run.skipped or a quota.warning.
Responses
Abschnitt betitelt „Responses“The organization event stream.
One decoded frame of GET /v1/admin/stream. The HTTP body is an SSE byte stream; this schema describes a single event:/data: pair after parsing.
object
The SSE event: name. It selects which schema data follows: org.snapshot → OrgSnapshotEvent, onboarding.first_search → OnboardingFirstSearchEvent, onboarding.first_click → OnboardingFirstClickEvent, quota.warning → QuotaWarningEvent, index.started and index.finished → IndexLifecycleEvent, alert.raised → AlertRaisedEvent.
Sent once, immediately on open, so a freshly loaded shell renders at once.
object
object
created — enqueued, nothing written yet. indexing — at least one batch landed. committed — sanity checks passed and the alias was swapped. aborted — the run failed or was superseded; the previous collection stayed live.
object
Searches counted in the current billing period.
The plan’s search cap for the period. 0 means unmetered.
warning from 80 % of any limit, exceeded at or above 100 % of any of them. On a paid plan exceeded still serves, with X-Antares-Quota: exceeded on the response; on sandbox or an expired trial it is 402 quota_exceeded.
sandbox is the free tenant a merchant splits off after an environment mismatch: it bills nothing and carries hard caps rather than soft ones. The other four are the commercial tiers.
trialing — our own 30-day trial, which runs on the Pro feature set with no Stripe subscription at all. active — paid and current. past_due — a payment failed and Stripe is retrying; service continues. grace — retries are exhausted and a countdown to hard capping is running. canceled — cancelled but paid to the end of the period. expired — no entitlement; hard caps apply.
The first search ever answered for this channel. Fires once per channel, ever — the onboarding checklist ticks itself off from it.
object
The first result click ever for this channel. Fires once per channel, ever.
object
Fires when the period’s usage crosses 80 % and again when it crosses 100 %.
object
Usage as a percentage of the limit. Can exceed 100 on a soft cap.
Carried by both index.started and index.finished; status distinguishes the outcome.
object
created — enqueued, nothing written yet. indexing — at least one batch landed. committed — sanity checks passed and the alias was swapped. aborted — the run failed or was superseded; the previous collection stayed live.
Raised for a zero-result spike, ingest stalled for 24 hours or more, an environment mismatch, or a price-context fallback rate above the threshold.
object
Stable id of this alert occurrence, so the panel can deduplicate and dismiss.
info is informational, warning needs attention this week, critical means search is degraded or blocked right now.
Machine-readable alert code, for example ingest_stalled. The panel maps it to a localised message and a deep link.
Headers
Abschnitt betitelt „Headers“Always no-cache, no-transform.
contract_validation_failed — the OpenAPI request validator rejected the request before the handler ran — or invalid_request when the body is unreadable or is not valid JSON for the declared operation.
RFC 9457 problem details. type is always https://api.antares.commergy.de/problems/{code} and is built in exactly one place. type, code and title are stable and never localised; only detail is localised, and only where the registry marks the audience as merchant.
object
Absolute problem type URI. Stable identifier, never localised.
Stable English summary of the problem type.
The HTTP status code, repeated in the body.
Human-readable explanation of this occurrence. The only localised field; may be German or English depending on Accept-Language.
The request path this occurrence relates to.
The registry code, for example price_context_token_expired. This is what a client branches on; never branch on title or detail.
Present only for per-item validation failures, above all ingest batches.
object
Dotted path of the offending field inside the request body, for example prices.CHF.gross.
What is wrong with it, in English.
0-based index into the request’s products array. Present only for ingest batches, and the only way to map an error back to a product without echoing it.
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "code": "example", "errors": [ { "field": "example", "message": "example", "productIndex": 1 } ]}unauthorized — the credential is missing, malformed, unknown or revoked. For /v1/admin this also covers an actor JWS that fails signature, exp or kid verification, and a kid that no key in the panel’s JWKS matches.
RFC 9457 problem details. type is always https://api.antares.commergy.de/problems/{code} and is built in exactly one place. type, code and title are stable and never localised; only detail is localised, and only where the registry marks the audience as merchant.
object
Absolute problem type URI. Stable identifier, never localised.
Stable English summary of the problem type.
The HTTP status code, repeated in the body.
Human-readable explanation of this occurrence. The only localised field; may be German or English depending on Accept-Language.
The request path this occurrence relates to.
The registry code, for example price_context_token_expired. This is what a client branches on; never branch on title or detail.
Present only for per-item validation failures, above all ingest batches.
object
Dotted path of the offending field inside the request body, for example prices.CHF.gross.
What is wrong with it, in English.
0-based index into the request’s products array. Present only for ingest batches, and the only way to map an error back to a product without echoing it.
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "code": "example", "errors": [ { "field": "example", "message": "example", "productIndex": 1 } ]}forbidden — authenticated, but the actor’s role does not carry the permission this route needs, or the operation is one of the three that refuse an impersonated actor (billing checkout, portal link, key rotation).
RFC 9457 problem details. type is always https://api.antares.commergy.de/problems/{code} and is built in exactly one place. type, code and title are stable and never localised; only detail is localised, and only where the registry marks the audience as merchant.
object
Absolute problem type URI. Stable identifier, never localised.
Stable English summary of the problem type.
The HTTP status code, repeated in the body.
Human-readable explanation of this occurrence. The only localised field; may be German or English depending on Accept-Language.
The request path this occurrence relates to.
The registry code, for example price_context_token_expired. This is what a client branches on; never branch on title or detail.
Present only for per-item validation failures, above all ingest batches.
object
Dotted path of the offending field inside the request body, for example prices.CHF.gross.
What is wrong with it, in English.
0-based index into the request’s products array. Present only for ingest batches, and the only way to map an error back to a product without echoing it.
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "code": "example", "errors": [ { "field": "example", "message": "example", "productIndex": 1 } ]}rate_limit_exceeded — the per-key or per-IP token bucket is exhausted.
RFC 9457 problem details. type is always https://api.antares.commergy.de/problems/{code} and is built in exactly one place. type, code and title are stable and never localised; only detail is localised, and only where the registry marks the audience as merchant.
object
Absolute problem type URI. Stable identifier, never localised.
Stable English summary of the problem type.
The HTTP status code, repeated in the body.
Human-readable explanation of this occurrence. The only localised field; may be German or English depending on Accept-Language.
The request path this occurrence relates to.
The registry code, for example price_context_token_expired. This is what a client branches on; never branch on title or detail.
Present only for per-item validation failures, above all ingest batches.
object
Dotted path of the offending field inside the request body, for example prices.CHF.gross.
What is wrong with it, in English.
0-based index into the request’s products array. Present only for ingest batches, and the only way to map an error back to a product without echoing it.
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "code": "example", "errors": [ { "field": "example", "message": "example", "productIndex": 1 } ]}Headers
Abschnitt betitelt „Headers“Seconds until the bucket refills enough for one request.
internal_error — unhandled failure. detail is always generic; the cause goes to the log with a correlation id.
RFC 9457 problem details. type is always https://api.antares.commergy.de/problems/{code} and is built in exactly one place. type, code and title are stable and never localised; only detail is localised, and only where the registry marks the audience as merchant.
object
Absolute problem type URI. Stable identifier, never localised.
Stable English summary of the problem type.
The HTTP status code, repeated in the body.
Human-readable explanation of this occurrence. The only localised field; may be German or English depending on Accept-Language.
The request path this occurrence relates to.
The registry code, for example price_context_token_expired. This is what a client branches on; never branch on title or detail.
Present only for per-item validation failures, above all ingest batches.
object
Dotted path of the offending field inside the request body, for example prices.CHF.gross.
What is wrong with it, in English.
0-based index into the request’s products array. Present only for ingest batches, and the only way to map an error back to a product without echoing it.
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "code": "example", "errors": [ { "field": "example", "message": "example", "productIndex": 1 } ]}