Skip to main content

scores

GET /slots/{slot}/entities/{entity_type}/{entity_id}/bands​

Get the bands of an entity's served state

The bands of the entity's current state row under the named slot (WP-V13 req 2 / AC2; band_binding.json $defs/entity_bands), derived at read time by THE WP-M19 assign_band under the slot's current band bindings (PUT /slots/\{slot\}/bands) from the row's scores — the same derivation as POST /slots/\{slot\}/bands:derive, episode snapshots and score.band_changed; bands are never stored with the state. An additive operation: GET …/state, scores:batch, exports and score.updated are unchanged and band-free (003 §1); derive their bands with bands:derive over the scores they carry. bands is an empty object when the slot has no binding (or no bound binary label is scored), never an invented band. If the WP-M19 banding implementation is unavailable on the deployment and the slot has bindings, 400 failed_precondition (reason banding_unavailable). A slot name outside the resolved project is 404 not_found (003 §3); an entity_type that differs from the slot's entity type is 400 invalid_argument; an entity with no state row is 404 not_found with details[0].reason == "no_state". Requires the read scope. An entity in a suppression set covering general reads exactly like one without state (WP-V12 req 4); if suppression state cannot be read the request fails with 503 unavailable (WP-V12 req 5). A once-activated slot whose bundle was deactivated (POST /slots/\{slot_id\}:deactivate) or withdrawn serves nothing: the read is 400 failed_precondition with details[0].reason == "no_active_bundle" (its stored state is retained, not served); a never-activated slot keeps the per-entity 404 no_state (D-R9-3).

Operation ID: getSlotEntityBands · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
entity_idpathyesstringThe customer's entity id (opaque, 002 §2).
entity_typepathyesstringCustomer-declared entity type (002 §2).
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Responses​

StatusSchemaDescription
200EntityBandsStateThe derived bands of the entity's served state row.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

GET /slots/{slot}/entities/{entity_type}/{entity_id}/hazard​

Get an entity's hazard horizons under a slot

The WP-M17 hazard columns of the entity's current state row under the named slot: per declared target, the calibrated cumulative probability that the target fires within each horizon of the grid (non-decreasing in the horizon by construction), the calibration status of each horizon (calibrated, identity_fallback below the 50-positive fit floor, insufficient_support), and the expected-time summary with the survival mass beyond the last horizon reported separately. Values were written in the same fenced mutation as the row's scores, at the row's observation time (as_of when an observation-time slot wrote it, so they rise as silence accumulates under WP-V14 sweeps). An additive operation: GET …/state and scores:batch responses are unchanged (003 §1). A slot name outside the resolved project is 404 not_found (003 §3); an entity_type that differs from the slot's entity type is 400 invalid_argument; an entity with no state row is 404 not_found with details[0].reason == "no_state"; a row without hazard columns of the slot's ACTIVE bundle (the bundle serves no hazard heads, the row predates the enablement, or a previous bundle wrote it) is 404 not_found with details[0].reason == "no_hazard". A row of the active bundle whose hazard document failed validation at scoring time (an out-of-range value, dropped fail closed for that entity while its scores still wrote) is 404 not_found with details[0].reason == "hazard_cells_dropped" until its next scoring rewrites it. If the active bundle's hazard sidecar fails re-verification the request fails with 503 unavailable (details[0].reason == "hazard_sidecar_unverified"). A per-horizon status is omitted when the row carries no status map (absent-tolerant). An entity in a suppression set covering general reads exactly like one without state (WP-V12 req 4); if suppression state cannot be read the request fails with 503 unavailable (WP-V12 req 5). Requires the read scope; metered as state_reads quantity 1 (002 §11).

Operation ID: getSlotEntityHazard · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
entity_idpathyesstringThe customer's entity id (opaque, 002 §2).
entity_typepathyesstringCustomer-declared entity type (002 §2).
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Responses​

StatusSchemaDescription
200EntityHazardStateThe entity's hazard horizons under the slot.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

GET /slots/{slot}/entities/{entity_type}/{entity_id}/markers​

Get an entity's marker states under a slot

The complete WP-C7 marker state the last marker-aware fenced state write stored for the entity (req 9): per evaluated marker its version, pattern_fingerprint, active, since (present while active) and the evaluated window with truncated — true when a trailing window reached past the oldest retained ledger row, so a verdict over partial history is visible, never silent (req 7). Additive to GET .../state, whose closed signals.markers items keep their original v1 shape and list active markers only. Served from the same single Bigtable row read; same tenancy, slot and no_state 404 rules as the state read. An entity in a suppression set covering general reads exactly like an entity with no state (WP-V12 req 4); if suppression state cannot be read the request fails with 503 unavailable and is not metered (WP-V12 req 5). Metered as state_reads quantity 1. A once-activated slot whose bundle was deactivated (POST /slots/\{slot_id\}:deactivate) or withdrawn serves nothing: the read is 400 failed_precondition with details[0].reason == "no_active_bundle" (its stored state is retained, not served); a never-activated slot keeps the per-entity 404 no_state (D-R9-3).

Operation ID: getSlotEntityMarkers · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
entity_idpathyesstringThe customer's entity id (opaque, 002 §2).
entity_typepathyesstringCustomer-declared entity type (002 §2).
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Responses​

StatusSchemaDescription
200EntityMarkerStatesResponseThe entity's marker states under the slot.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

GET /slots/{slot}/entities/{entity_type}/{entity_id}/observation​

Get the observation time of an entity's served state

The observation-time provenance of the entity's current state row under the named slot (WP-V14; ERRATA 2026-10-12 as_of fence amendment): the event cursor and computed_at of the row, its as_of — the causal observation cutoff the scores were computed at (the state is a function of the events with timestamp <= as_of and of as_of itself) — and its quiet_state (elapsed silence and the largest configured silence threshold crossed). An additive operation: GET …/state and scores:batch responses are unchanged (003 §1). as_of and quiet_state are present only when the row was written by an observation-time-enabled slot (omitted entirely otherwise, never null). A slot name outside the resolved project is 404 not_found (003 §3); an entity_type that differs from the slot's entity type is 400 invalid_argument; an entity with no state row is 404 not_found with details[0].reason == "no_state". Requires the read scope; sessions scope tenancy via X-Tessera-Project + X-Tessera-Environment (003 §2). An entity in a suppression set covering general reads exactly like one without state (WP-V12 req 4); if suppression state cannot be read the request fails with 503 unavailable (WP-V12 req 5). A once-activated slot whose bundle was deactivated (POST /slots/\{slot_id\}:deactivate) or withdrawn serves nothing: the read is 400 failed_precondition with details[0].reason == "no_active_bundle" (its stored state is retained, not served); a never-activated slot keeps the per-entity 404 no_state (D-R9-3).

Operation ID: getSlotEntityObservation · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
entity_idpathyesstringThe customer's entity id (opaque, 002 §2).
entity_typepathyesstringCustomer-declared entity type (002 §2).
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Responses​

StatusSchemaDescription
200EntityObservationStateThe observation-time provenance of the entity's state row.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

GET /slots/{slot}/entities/{entity_type}/{entity_id}/state​

Get an entity's current state under a slot

The entity's current 002 §8 state row under the named deployment slot: embedding, scores, label-free signals/segment_id when the row carries them (keys omitted entirely otherwise), and the mandatory freshness object (005 §7 — all four fields on every scored response, WP-V2 req 3). Served from a single Bigtable row read; slot metadata comes from a ≤ 30 s in-process cache, so a bundle activation is visible here within 30 s (WP-V2 req 2). A slot name outside the resolved project is 404 not_found (003 §3 — no existence leak); an entity_type that differs from the slot's entity type is 400 invalid_argument; an entity with no state row is 404 not_found with details[0] == \{type: "no_state", reason: "no_state", hint: "run a slot refresh"\} (WP-V2 req 4). An entity in a suppression set covering general reads exactly like an entity with no state (WP-V12 req 4); if suppression state cannot be read the request fails with 503 unavailable and is not metered (WP-V12 req 5). Metered as state_reads quantity 1 (002 §11). A once-activated slot whose bundle was deactivated (POST /slots/\{slot_id\}:deactivate) or withdrawn serves nothing: the read is 400 failed_precondition with details[0].reason == "no_active_bundle" (its stored state is retained, not served); a never-activated slot keeps the per-entity 404 no_state (D-R9-3).

Operation ID: getSlotEntityState · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
entity_idpathyesstringThe customer's entity id (opaque, 002 §2).
entity_typepathyesstringCustomer-declared entity type (002 §2).
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).
embedding_encodingquerynostringEmbedding wire encoding (WP-V2 req 6): float (default) returns a JSON float array; base64 returns the row's little-endian float32 bytes, base64-encoded. The two encodings decode to identical vectors.

Responses​

StatusSchemaDescription
200EntityStateResponseThe entity's current state under the slot.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

GET /slots/{slot}/hazard​

Get the hazard heads a slot serves

Whether the slot's active bundle serves WP-M17 hazard heads and, when it does, its targets, horizon grid and the per-(target, horizon) calibration status and holdout ECE recorded by the bundle's hazard sidecar and pinned eval report. Read from the active bundle's verified hazard sidecar; enabled: false (no other keys) when the active bundle serves none. A sidecar that fails re-verification against its registry fingerprint or bundle binding is 503 unavailable (details[0].reason == "hazard_sidecar_unverified"). A slot name outside the resolved project is 404 not_found (003 §3). Requires the read scope; not metered.

Operation ID: getSlotHazard · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Responses​

StatusSchemaDescription
200SlotHazardThe slot's hazard runtime.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

GET /slots/{slot}/observation-time​

Get a slot's observation-time serving configuration

The slot's observation-time configuration (https://spec.tessera.dev/schemas/observation_time_config.json; WP-V14): whether served state is a function of observation time, the silence thresholds, the re-score sweep schedule and the maturation lag. A slot that was never configured reads the defaults (enabled: false, no thresholds, no sweep schedule, maturation_lag: "0d"). A slot outside the resolved project is 404 not_found (003 §3). Requires the read scope; sessions scope tenancy via X-Tessera-Project + X-Tessera-Environment (003 §2).

Operation ID: getSlotObservationTime · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Responses​

StatusSchemaDescription
200SlotObservationTimeConfigThe slot's observation-time configuration.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

PUT /slots/{slot}/observation-time​

Replace a slot's observation-time serving configuration

Replaces the slot's observation-time configuration (WP-V14 reqs 5, 7-9). enabled: true requires the slot's active bundle to pin a WP-M16 observation-time model (runtime.observation_time with an observation-time model config) — otherwise 400 failed_precondition with details[0].reason == "observation_time_bundle_required" and details[0].bundle_id naming the bundle (also when the slot has no active bundle). sweep_schedule requires enabled: true and at least one silence threshold (else 400 invalid_argument) and a scoring: realtime slot: on a batch_only slot it is 400 failed_precondition with details[0].reason == "sweeps_require_realtime_slot" (a batch-only slot's observation-time path is the lagged-cutoff refresh). The sweep schedule is a WP-V9 tick schedule of kind rescore_sweep; disabling or removing it pauses that schedule. Turning sweeps on (enabled: true with a sweep_schedule) on a decommissioned slot is 400 failed_precondition with details[0].reason == "slot_decommissioned" (restore the slot first; a decommission pauses the schedule and a restore re-arms it). Durations are a whole number of hours (h) or days (d), at most 3650 days; duplicate thresholds are 400 invalid_argument. The change and its observation_time.update audit record commit in one transaction (WP-A3 req 3). A slot outside the resolved project is 404 not_found (003 §3). Requires the admin scope. Responds with the stored configuration (thresholds in ascending order).

Operation ID: putSlotObservationTime · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Request body​

SlotObservationTimeConfig

Responses​

StatusSchemaDescription
200SlotObservationTimeConfigThe stored observation-time configuration.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

POST /slots/{slot}/scores:batch​

Read state for up to 1,000 entities synchronously

Synchronous batch state read (003 §1 :action; WP-V2 req 5): up to 1,000 entity refs, executed as one batched Bigtable read, with per-item results in request order. Missing entities are reported per item (status: not_found, state: null) — the response is HTTP 200 even when some items are not_found; more than 1,000 entries is 400 invalid_argument. include selects which state fields each found item carries (embedding, scores, signals, segment_id; default: all present on the row) — the freshness object is mandatory on every found item regardless (005 §7). Metered as state_reads with quantity = entities submitted (002 §11). An entity in a suppression set covering general is reported exactly like a missing entity (WP-V12 req 4); if suppression state cannot be read the request fails with 503 unavailable and is not metered (WP-V12 req 5). A once-activated slot whose bundle was deactivated (POST /slots/\{slot_id\}:deactivate) or withdrawn serves nothing: the read is 400 failed_precondition with details[0].reason == "no_active_bundle" (its stored state is retained, not served); a never-activated slot keeps the per-entity 404 no_state (D-R9-3).

Operation ID: batchSlotScores · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
Idempotency-KeyheadernostringIdempotency key accepted by all POSTs (003 §1): 24 h dedup window, keyed per project. POSTs that are reads (batchSlotScores, scoreSlotEvent, deriveSlotBands, validateSourceRawPreset, sampleSource, watchEventFeedHeads and the preview operations: previewSourceMapping, previewCatalogMapping, previewLabel, previewPatternLabel, previewMarker, previewDatasetEligibility, previewSlotAudience, previewSharedCheckpointImport, previewSlotAtlasInquiry) accept the key but never replay a stored response: a retry with the same key is executed again (and metered again) against current data. A stored response that names an entity is removed when that entity is erased. A key that already answered answers only a retry of the request that stored its response: the same caller, environment, operation, path, query, scoping headers and body (a JSON body by its content, a gzip body by its inflated content). The same key with any other request is 409 already_exists with details[0].reason idempotency_key_reused, and that request is not run. The window holds no in-flight marker: two first requests sent at once can both run. A response stored by a release before this rule cannot be matched to its request and is refused the same way until it expires; send the request again with a new key. A body over 8 MiB (ingest: over its 5 MiB request limit) is run and its response is not stored. The ingest batch (POST /events) is the exception, except for an application's credentials: under a key that answered another batch it runs again, uncached, and its events' ids deduplicate them; so it does when its stored response cannot be checked. The operations that return a one-time secret store their response sealed: the stored copy opens only for the same key and credential, and one that cannot be opened is 409 idempotency_key_reused. While the server cannot check a stored response (it cannot read the key that checks it, for one), the request is 503 unavailable with Retry-After: retry with the same key. An operation whose handler claims the key itself answers the same 503, before it runs, while the key-hash pepper cannot be read; any other request sent with a key runs meanwhile, and its response is not stored.
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Idempotency​

This operation never replays a stored response (003 §1): a retry carrying the same Idempotency-Key runs again, against current data.

Request body​

ScoresBatchRequest

Responses​

StatusSchemaDescription
200ScoresBatchResponsePer-item state results, in request order.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

POST /slots/{slot}/scores:compute​

Score one event synchronously, without storing anything

Synchronous, non-persisting scoring of the current event (WP-V17). The slot's active bundle decides the model family. An event model (WP-M25) scores the event from its own fields and returns per-label attributions in explanations. A sequence model rebuilds the entity's window exactly as the realtime scorer does after ingest, with the event merged into it in memory. Either way the scores equal the ones the platform computes for the same event once it is ingested (for sequence, with no other event in between). Nothing is stored: no event, state, history, marker, alert or webhook, and no response either: a retry carrying the same Idempotency-Key is scored again, never replayed. Send the event to POST /events (or the record to its raw source) as usual for it to be ingested. event.event_id is required and event.entity.type must equal the slot's entity type (400 invalid_argument). Instead of event, a request may carry raw_source_event: one record of a raw source bound to a raw-source preset, from which THE preset derives the event exactly as raw-source intake does; the proof then binds the derived event (inclusion.raw_source). For a sequence model, an already-ingested event that the served state covers returns that state's scores with outcome: already_incorporated. Refusals are 400 failed_precondition with details[0].reason: event_not_after_state_cursor (the realtime scorer would never persist a score that includes the event: it is at or before the served state's cursor, or ties with it at the same timestamp; read the state instead), event_conflicts_with_ledger, event_outside_window, event_type_not_scored, semantic_slot_unsupported, project_ingest_paused (ingest would dead-letter the event), source_not_preset_bound, slot_not_realtime or slot_not_serving. An erased or suppressed entity is 404 not_found with details[0].reason == "entity_unavailable" and is never scored. The scorer being unavailable, still activating the slot's current bundle, or past the request deadline is 503 unavailable (retryable); a saturated scorer is 429 resource_exhausted. \{slot\} is the slot NAME, exactly as on the state reads (getSlotEntityState): a slot id, or a slot name outside the resolved project, is 404 not_found ("slot not found", 003 §3). Requires the read scope; sessions scope tenancy via X-Tessera-Project + X-Tessera-Environment (003 §2). Metered as scores_served quantity 1 (dims mode: sync) when scored, or state_reads quantity 1 when already incorporated.

Operation ID: scoreSlotEvent · Service: serving-api

Authentication​

  • apiKey (http (bearer)) — Project API key (003 §2): tsk_live_… or tsk_test_… in Authorization: Bearer. Scoped to exactly one project + environment; scopes are a subset of ingest, read, admin. Keys are stored hashed and shown once at creation.
  • consoleSession (http (bearer)) — Console session (003 §2): Identity Platform JWT. Data-plane calls add X-Tessera-Project + X-Tessera-Environment headers, validated against org membership.

Parameters​

NameInRequiredTypeDescription
slotpathyesstringDeployment slot name (002 §9: the slot is the API-addressable unit and its name is stable while bundles rotate). Resolved within the credential's project only — a slot name that exists in another project is 404 not_found (WP-V2 req 1).

Idempotency​

This operation never replays a stored response (003 §1): a retry carrying the same Idempotency-Key runs again, against current data.

Request body​

SlotEventScoreRequest

Responses​

StatusSchemaDescription
200SlotEventScoreThe scores with the event included, attributions and the proof of inclusion.
defaultErrorEnvelopeError response (003 §1). Every non-2xx response uses this envelope; the HTTP status matches error.code. Rate-limited requests get 429 resource_exhausted with retry_after_seconds and a Retry-After header; the X-RateLimit-* headers ride on EVERY response, success or error (003 §1; plan-driven per API key + endpoint class — WP-B2). A 503 unavailable carries retry_after_seconds too for a lock-wait timeout (SQLSTATE 55P03), a rule preview at capacity (preview_capacity_exhausted), or a label preview during which the erasure of every entity holding its censor clock began (label_preview_clock_entity_erased): how long to wait before retrying.

Errors​

Every non-2xx response uses the 003 §1 error envelope; error.request_id matches the X-Request-Id response header, and the HTTP status always matches error.code:

{
"error": {
"code": "invalid_argument",
"details": [
{
"type": "field_violation"
}
],
"message": "human-readable",
"request_id": "req_01hxample"
}
}

Closed error-code set (003 §1): invalid_argument, unauthenticated, permission_denied, not_found, already_exists, failed_precondition, resource_exhausted, internal, unavailable.

resource_exhausted responses (HTTP 429) additionally carry retry_after_seconds. See ErrorEnvelope.