Download OpenAPI specification:
Axiom is programmable insurance infrastructure: one engine for every line of insurance, where the rules are data and every decision can be explained to the person it affects.
Axiom provides a complete REST API across the five universal insurance primitives — parties/roles, covers/products, policies/versions, premiums/payments, and events/assertions (under the governed contract). Every feature is designed API-first under the governed contract.
All API requests (except health checks) require:
Authorization header (JWT from auth service)X-Tenant-Context header (server-minted token, required on tenant-scoped endpoints)Most endpoints currently return a legacy envelope format:
{
"data": { ... },
"status": "success",
"message": "optional description"
}
Error responses:
{
"error": "Human-readable error message",
"status": "error"
}
Newer endpoints (inbox, ingress, webhooks, vendors) use the JSON:API format under the governed contract. Migration of legacy endpoints to JSON:API is planned.
List endpoints declare their pagination profile per operation. Newer converged list endpoints use cursor-based pagination:
page[size] — maximum items per pagepage[after] — opaque cursor from the previous pageLegacy alpha list endpoints may still use offset-based pagination until they are migrated:
limit — maximum items per pageoffset — number of items to skipCursor response metadata includes has_more and may include next_cursor.
Offset response metadata includes total, limit, and offset.
Example offset metadata:
{
"data": [...],
"meta": { "total": 150, "limit": 20, "offset": 0 },
"status": "success"
}
Include X-Correlation-ID header for end-to-end request tracing.
If omitted, the server generates one. The response always includes
X-Correlation-ID for support reference.
API families are in the URL path (/v1/...). The published contract
version is SemVer and is emitted in info.version, X-API-Version, and
response telemetry under the governed contract.
When a tenant-scoped route has an active runtime rate-limit policy, responses include budget headers:
X-RateLimit-Limit — active tenant policy limit for the routeX-RateLimit-Remaining — remaining requests in the current windowX-RateLimit-Reset — window reset time (Unix timestamp)Rejected calls return 429 with Retry-After.
Dashboard metrics, retained claim-family compatibility analysis, revenue trends, and product performance.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Published for route accountability in API 0.1.0. The runtime currently returns 501 until tenant-owned analytics projections are implemented.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Published for route accountability in API 0.1.0. The route name and operationId are retained public compatibility identifiers over event/assertion status analytics. The runtime currently returns 501 until tenant-owned analytics projections are implemented.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Published for route accountability in API 0.1.0. The runtime currently returns 501 until tenant-owned analytics projections are implemented.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Published for route accountability in API 0.1.0. The runtime currently returns 501 until tenant-owned analytics projections are implemented.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Audit trail — recent audit entries for compliance and debugging.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns recent audit log entries for the tenant, ordered by timestamp descending (newest first).
Audit entries record all significant actions: resource creation, updates, deletions, state transitions, authentication events, and compliance checks.
Supports filtering by subject type and cursor-based pagination. Legacy limit/offset pagination is rejected; clients must use page[size] and page[after].
| page[size] | integer [ 1 .. 50 ] Default: 10 Maximum number of audit entries to return in this cursor page (default 10, max 50) |
| page[after] | string Opaque cursor returned as meta.next_cursor by the previous page |
| subject_type | string Example: subject_type=policy Filter by subject type (e.g. policy, event, assertion, party, vendor, product). When omitted, returns entries for all subject types. |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": [
- {
- "id": "audit_entry_20260408_0001",
- "action": "state_transition",
- "subject_type": "assertion",
- "subject_id": "subject_ref_20260408_0001",
- "actor": "assertion-assessor@tenant.example.com",
- "details": {
- "from_state": "open",
- "to_state": "under_investigation",
- "reason": "Assigned to motor assessor for vehicle inspection"
}, - "correlation_id": "corr_20260408_0001",
- "timestamp": "2026-03-12T14:22:00Z"
}, - {
- "id": "audit_entry_20260408_0001",
- "action": "created",
- "subject_type": "policy",
- "subject_id": "subject_ref_20260408_0001",
- "actor": "onboarding-service",
- "details": {
- "product_code": "motor-comprehensive",
- "policy_number": "POL-US-2026-00142"
}, - "timestamp": "2026-03-12T14:15:00Z"
}
], - "status": "success",
- "meta": {
- "page_size": 10,
- "has_more": true,
- "next_cursor": "eyJwZXJmb3JtZWRfYXQiOiIyMDI2LTAzLTEyVDE0OjE1OjAwWiIsImlkIjoiYjBjMWQyZTMtZjRhNS02Nzg5LTAxMjMtNDU2Nzg5YWJjZGVmIn0"
}
}Benefit balance computation (governed contract). Parameterised queries for benefit utilisation, available balance, and usage decomposition.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Evaluate and persist a tenant-owned event-effective proration decision for an existing event/assertion. The operation creates an immutable proration decision with typed components. Financial components may post through the ledger; non-financial components are durable decision inputs consumed by dynamic balance and temporal engines.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| policy_id required | string Policy identity in wire form. |
| premium_id | string Optional premium identity in wire form when the decision affects a known premium. |
| product_id required | string Product identity in wire form. Used by the server to resolve the proration_adjustments ruleset binding. |
| proration_intent required | string Tenant ruleset key that declares what adjustment intent to evaluate. |
| reason | string <= 1024 characters Operator-supplied reason for the adjustment request. |
| correction_of_decision_id | string Existing proration decision UUID corrected by this decision. |
required | object |
required | object |
object Tenant-owned rule inputs. Shape is validated by the resolved tenant ruleset. |
{- "policy_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "premium_id": "prm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "product_id": "prd_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "proration_intent": "mid_year_join",
- "reason": "string",
- "correction_of_decision_id": "string",
- "affected": {
- "party_role_id": "string",
- "cover_id": "string",
- "cover_term_id": "string",
- "cover_item_id": "string",
- "cover_item_term_id": "string",
- "policy_object_id": "string",
- "treaty_id": "string"
}, - "effective_times": {
- "premium_period_start": "2019-08-24T14:15:22Z",
- "premium_period_end": "2019-08-24T14:15:22Z",
- "cover_start": "2019-08-24T14:15:22Z",
- "cover_end": "2019-08-24T14:15:22Z",
- "entitlement_start": "2019-08-24T14:15:22Z",
- "entitlement_end": "2019-08-24T14:15:22Z"
}, - "inputs": { }
}{- "status": "success",
- "data": {
- "id": "evt_20260408_kyc",
- "event_id": "evt_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "status": "posted",
- "event_type": "string",
- "proration_intent": "string",
- "components": [
- {
- "component_type": "money",
- "consumer": "ledger",
- "affected": { },
- "amount_minor": 0,
- "currency": "string",
- "ratio_bps": 10000,
- "effective_start": "2019-08-24T14:15:22Z",
- "effective_end": "2019-08-24T14:15:22Z",
- "reason_code": "string",
- "metadata": { }
}
], - "ledger_entry_ids": [
- "string"
], - "explanation_tree_id": "string",
- "evidence_entry_id": 0,
- "ruleset": {
- "ruleset_type": "proration_adjustments",
- "ruleset_id": "string",
- "ruleset_version": "string",
- "resolved_at": "2019-08-24T14:15:22Z"
}, - "correction_of_decision_id": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Returns the current balance for a specific benefit type on a policy, showing how much of the benefit limit has been consumed.
Supports point-in-time queries via as_of and period-scoped queries
via period_start/period_end for benefits with annual or periodic
limits (e.g. annual dental limit, per-incident excess cap).
under the governed contract, benefit balances are computed from the ledger and are always consistent with contract-response payments and adjustments.
| policy_id required | string Example: policy_id=ref_20260408_0001 Policy UUID to query benefits for |
| benefit_type required | string Example: benefit_type=hospitalisation Benefit type identifier (e.g. hospitalisation, dental, optical, roadside_assistance, personal_accident). |
| period_start | string <date> Example: period_start=2026-01-01 Start of the benefit period (ISO 8601 date) |
| period_end | string <date> Example: period_end=2026-12-31 End of the benefit period (ISO 8601 date) |
| as_of | string <date-time> Example: as_of=2026-03-12T00:00:00Z Point-in-time query. Returns the benefit balance as it was at this timestamp. Defaults to current time if omitted. |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "policy_id": "pol_01abcdefghjkmnpqrstvwxyz01",
- "benefit_type": "hospitalisation",
- "limit": "500000.00",
- "consumed": "125000.00",
- "balance": "375000.00",
- "currency": "USD",
- "period_start": "2026-01-01",
- "period_end": "2026-12-31",
- "as_of": "2026-03-12T00:00:00Z",
- "claims_count": 2
}, - "status": "success"
}Returns the currently available (claimable) amount for a benefit type on a policy, accounting for in-flight claims that have been filed but not yet settled.
This differs from /balance in that it includes pending claims
as reserved amounts, giving a more conservative view of availability
suitable for claim intake decisions.
| policy_id required | string Example: policy_id=ref_20260408_0001 Policy UUID to query benefit availability for |
| benefit_type required | string Example: benefit_type=dental Benefit type identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "policy_id": "pol_01abcdefghjkmnpqrstvwxyz01",
- "benefit_type": "dental",
- "limit": "25000.00",
- "consumed": "8500.00",
- "reserved": "3200.00",
- "available": "13300.00",
- "currency": "USD",
- "pending_claims": 1
}, - "status": "success"
}Read a tenant-owned policy-scoped balance derived from accepted proration decision components for implemented governed contract proration consumers. Slice 1 supports fund and earning balances; treaty-scoped reinsurance balances fail closed until governed treaty authority exists.
| policy_id required | string Policy ID in pol_ wire form. |
| consumer required | string Enum: "fund_balance" "earning_balance" "reinsurance_balance" Implemented proration balance consumer. |
| period_start required | string <date-time> Inclusive balance period start. |
| period_end required | string <date-time> Exclusive balance period end. |
| fund_account_code | string Fund account code, required for fund_balance unless account_code is supplied. |
| account_code | string Generic account code for fund or earning balance scope. |
| earning_period_key | string Earning period key, required for earning_balance unless account_code is supplied. |
| decompose | boolean Default: false Include constituent proration component IDs and operation details. |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
{- "status": "success",
- "data": {
- "currency": "string",
- "amount": "string",
- "item_count": 0,
- "metadata": { },
- "explanation": { }
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}This route is intentionally unavailable in alpha. It remains present for route accountability as a retained public compatibility identifier, but consumers must use the benefit balance and available-benefit routes until the event/assertion and cover/entitlement model authority exists for this ratio.
| id required | string Resource identifier. |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Catalogue parent lifecycle, bi-temporal entries, temporal values, relationships, labels, descriptor, source provenance, and bulk-write operations. Governed by governed contract.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns catalogue parents visible to the caller's tenant. Tenant-scoped catalogues from other tenants are filtered out (not 404'd individually). Tenant isolation is enforced at the persistence layer by tenant-isolated.
Optional slug filter for exact slug match; include_discarded exposes
soft-discarded parents for audit / recovery purposes (defaults false).
| slug | string Exact catalogue slug filter (e.g. |
| include_discarded | boolean When true, includes soft-discarded catalogue parents in the result. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "data": [
- {
- "id": "ref_20260408_0001",
- "slug": "icd-10-za",
- "name": "ICD-10-ZA",
- "source": "WHO/DoH-ZA",
- "refresh_frequency": "annual",
- "substrate": "bi-temporal",
- "has_descriptor": false,
- "created_at": "2026-01-15T08:00:00Z",
- "updated_at": "2026-01-15T08:00:00Z"
}
], - "meta": {
- "limit": 0,
- "offset": 0,
- "count": 1
}
}Fetch a single catalogue parent by its slug identifier. Returns
discarded parents too (audit / as-was reconstruction); the
discarded_at, discarded_by, and discard_reason fields are
populated when set.
Tenant isolation enforced at persistence layer by tenant-isolated. Cross-tenant slugs yield 404, not 403.
| catalogue-ref required | string Logical catalogue identifier (slug, e.g. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "data": {
- "id": "ref_20260408_0001",
- "slug": "icd-10-za",
- "name": "ICD-10-ZA",
- "source": "WHO/DoH-ZA",
- "refresh_frequency": "annual",
- "substrate": "bi-temporal",
- "has_descriptor": false,
- "created_at": "2026-01-15T08:00:00Z",
- "updated_at": "2026-01-15T08:00:00Z"
}
}Returns bi-temporal catalogue entries for the given catalogue parent,
filtered by the two-axis as-was window (as_of / recorded_at).
Tenant isolation enforced at the persistence layer by tenant-isolated.
Optional filters:
logical_entry_id — return all versions of a single logical entry UUID.code — exact code match.q — keyword search on description.order_by=attr.<field> — sort by a descriptor-declared attribute field
(contract rule; fails 400 DESCRIPTOR_FIELD_NOT_SORTABLE when the field is not
declared in the catalogue descriptor's roles.sort.fields).dir=asc|desc — sort direction (default asc).attr.<key>=<value> — JSONB-containment filter on any attribute field
(contract rule; when the catalogue descriptor declares roles.search.fields,
only declared fields are accepted; undeclared → 400 DESCRIPTOR_FIELD_NOT_SEARCHABLE).| catalogue-ref required | string Logical catalogue identifier (slug, e.g. |
| as_of | string <date-time> Real-world validity axis instant (RFC 3339). When provided, only
entries whose |
| recorded_at | string <date-time> Physical-anchor axis instant (RFC 3339). When provided, only
entries whose |
| logical_entry_id | string UUID of the logical entry; returns all bi-temporal versions for that entry. |
| code | string Exact code match filter. |
| q | string Keyword search on the entry description field. |
| order_by | string Attribute sort field in the form |
| dir | string Enum: "asc" "desc" Sort direction. One of |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "entries": [
- {
- "id": "cae_01j1234567890abcdefghijk",
- "logical_entry_id": "ref_20260408_0001",
- "catalogue_id": "cat_01j1234567890abcdefghijk",
- "code": "J18.9",
- "description": "Pneumonia, unspecified organism",
- "status": "active",
- "valid_from": "2026-01-01T00:00:00Z",
- "recorded_from": "2026-01-15T08:00:00Z",
- "created_at": "2026-01-15T08:00:00Z"
}
], - "count": 1
}Atomic batch create under the governed contract. Either every row in the
relationships array is persisted, or none are. The path
:catalogue-ref scopes the batch — every row's source_catalogue MUST
equal the path. Unlike the single-create endpoint, source fields are
NOT defaulted from the path; each row must specify them explicitly.
Maximum batch size is 10000 (BATCH_SIZE_EXCEEDED 400 above that).
| catalogue-ref required | string Logical catalogue identifier (e.g. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
required | Array of objects (CatalogueRelationshipBody) [ 1 .. 10000 ] items |
{- "relationships": [
- {
- "source_catalogue": "string",
- "source_code": "string",
- "target_catalogue": "string",
- "target_code": "string",
- "relationship_type": "parent_of",
- "attributes": { },
- "scope": "universal",
- "jurisdiction": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z"
}
]
}{- "data": {
- "count": 0,
- "relationships": [
- {
- "id": "crl_01ARZ3NDEKTSV4RRFFQ69G5FAV",
- "source_catalogue": "string",
- "source_code": "string",
- "target_catalogue": "string",
- "target_code": "string",
- "relationship_type": "parent_of",
- "attributes": { },
- "scope": "universal",
- "jurisdiction": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}
}Claims processing — submission, assessment, payment, and closure. Status: submitted → assessing → assessed → approved → paying → paid → closed. Also: submitted → rejected → closed. Deprecated (RFC-8594; Sunset 2026-08-31) in favour of Assertion.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Record an governed contract authorisation sub-event against the retained claim-family compatibility surface. Axiom canon is events/assertions; the authorisation row is append-only and carries the authorising actor, authorised scope, budget, governing-version binding, optional compliance state, decision date, and explanation-node reference.
Payment operations may cite the returned authorisation id. When they do, the payment path runs the authorisation compliance gate before disbursement.
Side effects: persists an authorisation_transitions row under the
tenant context and returns the recorded authorisation.
| id required | string <typed-prefix-id> Unique retained claim-family compatibility identifier. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| logical_authorisation_id | string or null Logical thread id for grant/amend/revoke chains. Generated when omitted. |
| transition_kind required | string Sector-neutral transition verb. |
| authorisation_kind required | string Tenant-keyed authorisation kind. |
| authorising_actor required | string Party-in-role actor that granted the authorisation. |
object Typed grant envelope such as procedures, codes, or engagement scope. | |
| budget_minor | integer or null <int64> Exact integer minor units for the authorised budget ceiling. |
| budget_currency_code | string or null^[a-z]{3}$ Lowercase ISO-4217 currency code. Present iff budget_minor is present. |
| governing_version_kind | string or null Governing-version discriminator such as catalogue, rule, cover, or engagement-terms. |
| governing_version_row_id | string or null Immutable row-id revision of the governing version current at the decision date. |
| compliance_kind | string or null Tenant-keyed compliance kind such as accreditation or sanctions-screening. |
| compliance_outcome | string or null Enum: "clear" "hit" "pending" "unset" "override" Compliance outcome consulted by the payment gate when payment cites this authorisation. |
| compliance_list_version | string or null Tenant-supplied as-was list or standard version. |
| compliance_list_authority | string or null Tenant-keyed list authority such as cms, ofac, ofsi, or eu. |
| decision_date required | string <date-time> Moment the authorisation decision was made. |
| explanation_node_id required | string Explanation-node reference for the authorisation decision. |
| finding_reference | string or null Required by the persistence rule on revoke or withdrawal transitions. |
{- "transition_kind": "authorisation-granted",
- "authorisation_kind": "pre-auth",
- "authorising_actor": "usr_20260408_0001",
- "authorised_scope": {
- "procedure_code": "1234",
- "visit_limit": 3
}, - "budget_minor": 250000,
- "budget_currency_code": "zar",
- "governing_version_kind": "catalogue",
- "governing_version_row_id": "governance_version_20260408_0001",
- "decision_date": "2026-07-06T10:00:00Z",
- "explanation_node_id": "explanation_node_20260408_0001"
}{- "data": {
- "id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "logical_authorisation_id": "authz_logical_20260408_0001",
- "entity_type": "claim",
- "entity_id": "entity_ref_20260408_0001",
- "transition_kind": "authorisation-granted",
- "authorisation_kind": "pre-auth",
- "authorising_actor": "usr_20260408_0001",
- "authorised_scope": {
- "procedure_code": "1234",
- "visit_limit": 3
}, - "budget_minor": 250000,
- "budget_currency_code": "zar",
- "decision_date": "2026-07-06T10:00:00Z",
- "explanation_node_id": "explanation_node_20260408_0001",
- "valid_from": "2026-07-06T10:00:00Z",
- "asserted_from": "2026-07-06T10:00:00Z"
}, - "status": "success",
- "message": "Claim authorisation recorded successfully"
}Close a retained claim-family compatibility resource through the runtime service. The handler enforces tenant context, typed compatibility IDs, actor attribution, and terminal-state transition checks before recording the closure.
| id required | string <typed-prefix-id> Unique retained claim-family compatibility identifier. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| closure_reason | string Reason for closing the retained compatibility resource. |
| closed_by | string Identifier of the user or system closing the retained compatibility resource. |
{- "closure_reason": "Final settlement disbursed and accepted by claimant",
- "closed_by": "claims-manager-001"
}{- "status": "success",
- "data": {
- "id": "clm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "claim_number": "CLM-2026-00042",
- "event_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "policy_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "status": "submitted",
- "primary_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f4",
- "event_date": "2026-02-15T14:30:00Z",
- "reported_date": "2026-02-16T09:00:00Z",
- "total_claimed_amount": 4500000,
- "description": "Rear-end collision at intersection of Main St and 5th Ave. Third-party vehicle damage and whiplash injury to driver.",
- "priority": "medium",
- "attributes": {
- "loss_location": "London, Greater London",
- "police_report_number": "MET-2026-LDN-3321",
- "weather_conditions": "clear"
}, - "claim_items": [
- {
- "id": "cli_01j9zxkp8wqrm2n4v6t5s3d7f5",
- "claim_id": "clm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "item_type": "vehicle_damage",
- "description": "Rear bumper replacement and respray — 2024 Toyota Corolla",
- "claimed_amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "approved_amount": {
- "amount_minor": 2600000,
- "currency_code": "zar"
}, - "paid_amount": {
- "amount_minor": 2600000,
- "currency_code": "zar"
}, - "service_date": "2026-03-01T08:00:00Z",
- "attributes": {
- "repair_shop": "Cape Auto Body",
- "part_numbers": [
- "TB-2024-RR-01",
- "PS-2024-FW-03"
]
}, - "status": "approved",
- "salvage_status": "not_applicable",
- "salvage_amount": "0",
- "created_at": "2026-02-16T09:00:00Z"
}
], - "fraud_score": "0.25",
- "fraud_status": "not_evaluated",
- "requires_investigation": false,
- "is_subrogated": false,
- "subrogation_status": "not_identified",
- "recovery_status": "none",
- "assessments": [
- {
- "id": "cla_01j9zxkp8wqrm2n4v6t5s3d7f6",
- "claim_id": "clm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "assessment_type": "initial",
- "assessed_by": "assessor-jvd-001",
- "assessed_at": "2026-02-18T16:00:00Z",
- "status": "approved",
- "approved_amount": {
- "amount_minor": 4200000,
- "currency_code": "zar"
}, - "denial_reason": null,
- "notes": "All claimed items verified against repair quotations. Approved less R3,000 excess.",
- "rule_results": [
- {
- "rule_id": "rule-fraud-score-v2",
- "rule_name": "Fraud Probability Score",
- "outcome": "pass",
- "value": "0.12",
- "error": null,
- "executed_at": "2026-02-18T15:58:00Z"
}
]
}
], - "payments": [
- {
- "id": "cpy_01j9zxkp8wqrm2n4v6t5s3d7f7",
- "claim_id": "clm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "payment_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "amount_paid": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "bank_transfer",
- "processed_at": "2026-02-25T10:00:00Z",
- "processed_by": "payments-officer-mk-003",
- "status": "processed",
- "authorisation_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "authorisation_gate_outcome": "clear"
}
], - "created_at": "2026-02-16T09:00:00Z",
- "updated_at": "2026-02-20T11:30:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Generate a PDF document summarising the retained claim-family compatibility resource, including event details, assessment results, payment information, and lifecycle history.
The PDF is generated on demand and returned as a binary response. For large retained resources with extensive documentation, generation may take several seconds.
The generated PDF includes:
This endpoint returns binary PDF data (application/pdf), not a JSON envelope.
| id required | string <typed-prefix-id> Unique retained claim-family compatibility identifier. |
| party_id | string <typed-prefix-id> Optional party access check for the generated claim report. When present,
must be the canonical typed-prefix party id ( |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Returns the tenant-scoped audit trail for the retained claim-family compatibility resource after verifying that it exists for the operating tenant.
| id required | string Resource identifier. |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "string",
- "action": "state_transition",
- "subject_type": "assertion",
- "subject_id": "audit_entry_20260408_0001",
- "actor": "assertion-assessor@tenant.example.com",
- "details": {
- "from_state": "open",
- "to_state": "under_investigation",
- "reason": "Assigned to assessor for inspection"
}, - "correlation_id": "string",
- "timestamp": "2026-03-12T14:22:00Z"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Compliance evaluation engine (governed contract). Evaluates subjects against regulatory requirements and produces compliance reports.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns a compliance report for a completed evaluation, including per-jurisdiction findings, pack metadata, and explanation tree reference.
under the governed contract: compliance_assertion is always false — reports are evidence-enabling, not compliance-asserting.
| evaluation_id required | string Example: cmp_eval_20260408_0001 Compliance evaluation UUID |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "evaluation_id": "cmp_eval_20260408_0001",
- "generated_at": "2026-04-08T12:00:05Z",
- "compliance_assertion": false,
- "findings": [
- {
- "jurisdiction_code": "ZA",
- "status": "pass",
- "evidence_references": [
- "cmp_eval_20260408_0001"
], - "missing_evidence": [ ]
}
], - "ruleset_metadata": [
- {
- "pack_id": "cmp_pack_20260408_0001",
- "pack_version": "1.0.0"
}
], - "explanation_tree_id": "cmp_tree_20260408_0001"
}, - "status": "success"
}Generated OpenAPI contract served by the deployed API binary.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns the generated OpenAPI 3 contract embedded in the running API binary.
The SHA-256 digest of this exact document is exposed on /v1/health under
contract.sha256 for deployed-contract verification.
{- "openapi": "3.2.0",
- "info": { },
- "paths": { }
}Returns the current state of an async job. Terminal states
(succeeded, failed, dead_letter) are cacheable; non-terminal states
(queued, running) are returned with no-store.
The response is a bare {data: ...} envelope (no status field).
This operation reports workqueue execution status only. It does not expose
workflow_execution_id, does not promise workflow execution tracking, and
must not be treated as a public workflow execution registry.
| job_id required | string Example: job_20260408_0001 UUID of the async job to poll. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "data": {
- "id": "job_20260408_0001",
- "kind": "catalogue.ingest",
- "state": "running",
- "submitted_at": "2026-06-02T12:00:00Z",
- "attempt": 1,
- "max_attempts": 3,
- "progress": {
- "completed_units": 1200,
- "total_units": 5000,
- "message": "ingesting entries"
}
}
}Event and assertion workflows exposed in the developer-preview API.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Contract authority for GET /v1/events (listEvents) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/events/{id} (getEvent) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for POST /v1/events/{event_id}/documents (uploadEventDocuments) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| event_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Record a tenant-reported event with supporting documents. An event is the Axiom assertion primitive — it captures what happened, who reported it, and what documentary evidence supports it. The operation is idempotency-optional; events are append-only and duplicate-safe through the assertion model. Ledger effects, if any, are produced by downstream rules evaluation against the stored assertion.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| event_data required | string JSON object (as a string) describing the event. Supported fields mirror the Event projection's tenant-reportable fields: event_id, event_type, event_subtype, occurred_at, reported_at, policy_id, policy_object_id, primary_party_id, event_details, metadata, description, and the other optional event facts exposed on the Event schema. |
| property name* additional property | string <binary> |
{- "status": "success",
- "data": {
- "event_id": "string",
- "event": {
- "id": "evt_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "event_type": "accident",
- "event_subtype": "string",
- "occurred_at": "2019-08-24T14:15:22Z",
- "reported_at": "2019-08-24T14:15:22Z",
- "validated_at": "2019-08-24T14:15:22Z",
- "status": "validated",
- "severity": "string",
- "location": "string",
- "coordinates": { },
- "event_details": { },
- "primary_party_id": "string",
- "involved_parties": [
- { }
], - "policy_id": "string",
- "policy_object_id": "string",
- "validation_method": "string",
- "validation_reference": "string",
- "estimated_loss": 5000000,
- "currency": "zar",
- "requires_notification": true,
- "notification_sent": "2019-08-24T14:15:22Z",
- "notification_reference": "string",
- "reported_by": "string",
- "source_system": "string",
- "external_reference": "string",
- "metadata": { },
- "description": "string",
- "investigation_notes": "string"
}, - "documents": [
- {
- "archive_object_id": "string",
- "original_filename": "string",
- "mime_type": "string"
}
], - "document_errors": [
- "string"
], - "message": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Evaluate and persist a tenant-owned event-effective proration decision for an existing event/assertion. The operation creates an immutable proration decision with typed components. Financial components may post through the ledger; non-financial components are durable decision inputs consumed by dynamic balance and temporal engines.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| policy_id required | string Policy identity in wire form. |
| premium_id | string Optional premium identity in wire form when the decision affects a known premium. |
| product_id required | string Product identity in wire form. Used by the server to resolve the proration_adjustments ruleset binding. |
| proration_intent required | string Tenant ruleset key that declares what adjustment intent to evaluate. |
| reason | string <= 1024 characters Operator-supplied reason for the adjustment request. |
| correction_of_decision_id | string Existing proration decision UUID corrected by this decision. |
required | object |
required | object |
object Tenant-owned rule inputs. Shape is validated by the resolved tenant ruleset. |
{- "policy_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "premium_id": "prm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "product_id": "prd_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "proration_intent": "mid_year_join",
- "reason": "string",
- "correction_of_decision_id": "string",
- "affected": {
- "party_role_id": "string",
- "cover_id": "string",
- "cover_term_id": "string",
- "cover_item_id": "string",
- "cover_item_term_id": "string",
- "policy_object_id": "string",
- "treaty_id": "string"
}, - "effective_times": {
- "premium_period_start": "2019-08-24T14:15:22Z",
- "premium_period_end": "2019-08-24T14:15:22Z",
- "cover_start": "2019-08-24T14:15:22Z",
- "cover_end": "2019-08-24T14:15:22Z",
- "entitlement_start": "2019-08-24T14:15:22Z",
- "entitlement_end": "2019-08-24T14:15:22Z"
}, - "inputs": { }
}{- "status": "success",
- "data": {
- "id": "evt_20260408_kyc",
- "event_id": "evt_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "status": "posted",
- "event_type": "string",
- "proration_intent": "string",
- "components": [
- {
- "component_type": "money",
- "consumer": "ledger",
- "affected": { },
- "amount_minor": 0,
- "currency": "string",
- "ratio_bps": 10000,
- "effective_start": "2019-08-24T14:15:22Z",
- "effective_end": "2019-08-24T14:15:22Z",
- "reason_code": "string",
- "metadata": { }
}
], - "ledger_entry_ids": [
- "string"
], - "explanation_tree_id": "string",
- "evidence_entry_id": 0,
- "ruleset": {
- "ruleset_type": "proration_adjustments",
- "ruleset_id": "string",
- "ruleset_version": "string",
- "resolved_at": "2019-08-24T14:15:22Z"
}, - "correction_of_decision_id": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Compatibility contract for retained POST /v1/claims (submitClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims (listClaims) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id} (getClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/assess (assessClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; the route assesses the contract-facing assertion for the retained claim-family surface. Claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/pay (payClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
required | object Amount to disburse (exact integer minor units + lowercase ISO-4217 currency code). Must be non-empty. |
| payment_method required | string Payment disbursement method |
| payment_notes | string or null Notes accompanying the payment |
| authorisation_id | string or null governed contract authorisation row to cite and gate before payment. |
object or null Operational metadata for the payment |
{- "paid_amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "bank_transfer",
- "payment_notes": "Final settlement — retained assertion fully resolved",
- "authorisation_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "metadata": {
- "bank_reference": "JPMC-ACH-2026030801",
- "beneficiary_account": "****4521"
}
}{- "status": "success",
- "data": {
- "id": "cpy_01j9zxkp8wqrm2n4v6t5s3d7f7",
- "claim_id": "clm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "payment_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "amount_paid": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "bank_transfer",
- "processed_at": "2026-02-25T10:00:00Z",
- "processed_by": "payments-officer-mk-003",
- "status": "processed",
- "authorisation_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "authorisation_gate_outcome": "clear"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { },
- "ledger_entries": [
- {
- "entry_id": "ledger_entry_claim_payment_0001",
- "transaction_id": "txn_claim_payment_0001",
- "account_code": "LIABILITY_CLAIMS_PAYABLE",
- "entry_type": "debit",
- "amount_minor": 8000000,
- "currency_code": "zar",
- "entity_type": "claim",
- "entity_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "content_sha256": "8c2f1d7d9d4e52f9e3b9f3e72855c78ff4d93d6c7ef16b7a0f8e7f734fd6a9a4"
}
]
}Compatibility contract for retained POST /v1/claims/{id}/reserves (createReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/reserves (listClaimReserves) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/reserves/{reserveId} (getReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained PATCH /v1/claims/{id}/reserves/{reserveId} (updateReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/release (releaseReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/cancel (cancelReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/reestablish (reestablishReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/reserves (listPolicyReserves) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/investigations (createOrAdvanceInvestigation) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{claimId}/recoveries (createRecovery) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| claimId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{claimId}/recoveries/{recoveryId}/corrections (createCorrection) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| claimId required | string Path parameter |
| recoveryId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/settlement-statements/{decisionId} (getClaimSettlementStatement) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| decisionId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/assertions (listAssertions) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/assertions/{id} (getAssertion) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for POST /v1/inbox/messages (receiveInboxMessage) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/mailroom/outbox/webhook-deliveries/{delivery_id} (getWebhookDeliveryStatus) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| delivery_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Evidence records and packs for audit and compliance (governed contract). Tamper-evident records with content hashing and integrity verification.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns a short-lived presigned PUT URL the caller uses to upload a binary
payload directly to object storage (S3-compatible), bypassing the API for
the bytes themselves. The returned upload_id is then referenced in a
downstream ingest call (e.g. POST /v1/catalogues/{catalogue-ref}/bulk-write).
The response is a bare {data: ...} envelope (no status field).
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "data": {
- "upload_id": "ref_20260408_0001",
- "object_uri": "managed-object://redacted",
- "expires_at": "2026-06-02T13:00:00Z"
}
}Multipart upload of a single binary payload into the Axiom archive.
The file part is required; original_filename, mime_type, and source
are optional. When omitted, the API derives them from the file header,
Content-Type, and literal source "api".
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
| file required | string <binary> The binary payload to archive. |
| original_filename | string Original filename; falls back to the upload part's filename. |
| mime_type | string MIME type; falls back to the part Content-Type or application/octet-stream. |
| source | string Provenance tag (default "api"). |
{- "status": "success",
- "data": {
- "id": "string",
- "object_uri": "string",
- "content_hash": "string",
- "mime_type": "string",
- "original_filename": "string",
- "size_bytes": 0
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Record a tenant-reported event with supporting documents. An event is the Axiom assertion primitive — it captures what happened, who reported it, and what documentary evidence supports it. The operation is idempotency-optional; events are append-only and duplicate-safe through the assertion model. Ledger effects, if any, are produced by downstream rules evaluation against the stored assertion.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| event_data required | string JSON object (as a string) describing the event. Supported fields mirror the Event projection's tenant-reportable fields: event_id, event_type, event_subtype, occurred_at, reported_at, policy_id, policy_object_id, primary_party_id, event_details, metadata, description, and the other optional event facts exposed on the Event schema. |
| property name* additional property | string <binary> |
{- "status": "success",
- "data": {
- "event_id": "string",
- "event": {
- "id": "evt_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "event_type": "accident",
- "event_subtype": "string",
- "occurred_at": "2019-08-24T14:15:22Z",
- "reported_at": "2019-08-24T14:15:22Z",
- "validated_at": "2019-08-24T14:15:22Z",
- "status": "validated",
- "severity": "string",
- "location": "string",
- "coordinates": { },
- "event_details": { },
- "primary_party_id": "string",
- "involved_parties": [
- { }
], - "policy_id": "string",
- "policy_object_id": "string",
- "validation_method": "string",
- "validation_reference": "string",
- "estimated_loss": 5000000,
- "currency": "zar",
- "requires_notification": true,
- "notification_sent": "2019-08-24T14:15:22Z",
- "notification_reference": "string",
- "reported_by": "string",
- "source_system": "string",
- "external_reference": "string",
- "metadata": { },
- "description": "string",
- "investigation_notes": "string"
}, - "documents": [
- {
- "archive_object_id": "string",
- "original_filename": "string",
- "mime_type": "string"
}
], - "document_errors": [
- "string"
], - "message": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Creates a new evidence record capturing a decision, evaluation, or state transition for audit and compliance purposes.
Evidence records are immutable once created. The content_hash (SHA-256)
is computed server-side and enables tamper detection.
Supports platform principle (Explainability) — every material decision emits a durable explanation tree stored as evidence.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| record_type required | string Classification of the evidence record |
| subject_type required | string Type of the entity this evidence pertains to |
| subject_id required | string Identifier of the subject entity |
required | object Structured evidence payload |
| created_by | string Identifier of the creating user or service |
{- "record_type": "rule_evaluation",
- "subject_type": "policy",
- "subject_id": "subject_ref_20260408_0001",
- "content": {
- "evaluation": "premium_calculation",
- "inputs": {
- "vehicle_value": 450000,
- "driver_age": 32,
- "prior_events_count": 0,
- "region": "New York"
}, - "rule_version": "motor-pricing-v2.0.1",
- "base_premium": 8100,
- "loadings": [ ],
- "discounts": [
- {
- "type": "event_free_rating_discount",
- "percentage": 0.2
}
], - "final_premium": 6480
}, - "created_by": "pricing-engine"
}{- "status": "success",
- "data": {
- "id": "evd_20260408_0001",
- "type": "evidence",
- "attributes": {
- "evidence_id": "evd_20260408_0001",
- "content_hash": "3a7bd3e2e2d5f90c1e9b3c8a4d6f7e8b9a0c1d2e3f4567890abcdef12345678",
- "canonicalization_version": "jcs-rfc8785-v1"
}
}
}Returns a single evidence record including its full content payload and integrity hash.
| evidence_id required | string Example: evd_20260408_0001 Evidence record UUID |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "status": "success",
- "data": {
- "id": "evd_20260408_0001",
- "type": "evidence",
- "attributes": {
- "content_hash": "string",
- "canonicalization_version": "jcs-rfc8785-v1",
- "integrity_status": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "evidence_type": "string",
- "entity_id": "string",
- "entity_type": "string",
- "occurred_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "metadata": { }
}
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Searches evidence records using structured filters. Supports filtering by subject, record type, date range, and content attributes.
POST is used instead of GET to support complex query payloads that exceed URL length limits.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| subject_type | string Filter by subject type |
| subject_id | string Filter by subject identifier |
| record_type | string Filter by evidence record type |
| from_date | string <date-time> Filter records created on or after this timestamp |
| to_date | string <date-time> Filter records created before this timestamp |
| limit | integer [ 1 .. 100 ] Default: 20 Maximum number of records to return |
| offset | integer >= 0 Default: 0 Number of records to skip |
{- "subject_type": "assertion",
- "subject_id": "subject_ref_20260408_0001",
- "record_type": "decision_trace",
- "from_date": "2026-03-01T00:00:00Z",
- "limit": 50
}{- "status": "success",
- "data": [
- {
- "id": "evd_20260408_0001",
- "record_type": "decision_trace",
- "subject_type": "assertion",
- "subject_id": "evd_20260408_0001",
- "content": {
- "decision": "assertion_accepted",
- "inputs": {
- "asserted_amount_minor": 1250000,
- "policy_excess_minor": 250000,
- "cover_limit_minor": 50000000
}, - "rule_version": "motor-assertion-assessment-v3.2.0",
- "evaluation_steps": [
- {
- "rule": "cover_active_check",
- "result": true
}, - {
- "rule": "excess_applied",
- "result": true,
- "excess_amount_minor": 250000
}, - {
- "rule": "within_cover_limit",
- "result": true
}
], - "contract_response_amount_minor": 1000000
}, - "content_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "created_at": "2026-03-08T14:22:15Z",
- "created_by": "assertion-assessment-service"
}
], - "message": "string",
- "meta": {
- "next_cursor": "string"
}, - "links": { },
- "telemetry": { }
}Recomputes the content hash for the specified evidence record and compares it against the stored hash. Returns a verification result indicating whether the record has been tampered with.
| evidence_id required | string Example: evd_20260408_0001 Evidence record UUID to verify |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "status": "success",
- "data": {
- "id": "evd_20260408_0001",
- "type": "integrity-verification",
- "attributes": {
- "verification_id": "evv_20260408_0001",
- "expected_hash": "3a7bd3e2e2d5f90c1e9b3c8a4d6f7e8b9a0c1d2e3f4567890abcdef12345678",
- "actual_hash": "3a7bd3e2e2d5f90c1e9b3c8a4d6f7e8b9a0c1d2e3f4567890abcdef12345678",
- "status": "verified",
- "verified_at": "2026-03-12T10:20:00Z"
}
}
}Verifies the integrity of multiple evidence records in a single request. Useful for periodic compliance audits or spot checks.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| evidence_ids required | Array of strings [ 1 .. 100 ] items List of evidence record IDs to verify |
{- "evidence_ids": [
- "evd_20260408_0001",
- "evd_20260408_0001",
- "evd_20260408_0001"
]
}{- "status": "success",
- "data": [
- {
- "record_id": "evd_20260408_0001",
- "content_hash": "3a7bd3e2e2d5f90c1e9b3c8a4d6f7e8b9a0c1d2e3f4567890abcdef12345678",
- "status": "VERIFIED"
}, - {
- "record_id": "evd_20260408_0001",
- "content_hash": "4a7bd3e2e2d5f90c1e9b3c8a4d6f7e8b9a0c1d2e3f4567890abcdef12345678",
- "status": "TAMPERED"
}
]
}Assembles a collection of evidence records into a named pack. Evidence packs provide a complete audit trail for a decision or event, bundling all related records for compliance reporting and review.
under the governed contract, packs are assembled on demand from existing records and are themselves immutable once created.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| name required | string Descriptive name for the evidence pack |
| record_ids required | Array of strings List of evidence record IDs to include in the pack |
| assembled_by | string Identifier of the user or service assembling the pack |
{- "name": "Claim CLM-2026-00142 — Marine Cargo Adjudication Evidence Pack",
- "record_ids": [
- "evd_20260408_0001",
- "evd_20260408_0001"
], - "assembled_by": "compliance-reporting-service"
}{- "status": "success",
- "data": {
- "id": "evd_20260408_0001",
- "type": "evidence-pack",
- "attributes": {
- "surface_code": "conduct_assertions",
- "generated_at": "2019-08-24T14:15:22Z",
- "inputs_fingerprint": "string",
- "pack_hash": "string",
- "assembly_rules": { },
- "evidence_entries": [
- { }
]
}
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Returns an evidence pack including all constituent evidence records.
| pack_id required | string Example: evd_20260408_0001 Evidence pack UUID |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "status": "success",
- "data": {
- "id": "evd_20260408_0001",
- "type": "evidence-pack",
- "attributes": {
- "surface_code": "conduct_assertions",
- "generated_at": "2019-08-24T14:15:22Z",
- "inputs_fingerprint": "string",
- "pack_hash": "string",
- "assembly_rules": { },
- "evidence_entries": [
- { }
]
}
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Service health and readiness checks. No authentication required.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns the current developer-facing API health status. Use this endpoint for connectivity checks and include X-Correlation-ID when escalating an unexpected result.
{- "status": "healthy",
- "timestamp": "2026-08-09T00:00:00Z",
- "version": "0.2.39"
}Authenticated actor, admitted tenant discovery, and tenant-context bootstrap.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns the tenants admitted for the authenticated actor. Use the returned tenant selection data to request a server-minted tenant context.
{- "status": "success",
- "data": [
- {
- "id": "tnt_01arz3ndektsv4rrffq69g5fav",
- "name": "Example Tenant",
- "granting_role": "tenant_operator"
}
], - "message": "string",
- "meta": {
- "total": 0,
- "limit": 0,
- "offset": 0
}, - "links": { },
- "telemetry": { }
}Mints a server-authoritative tenant-context token for one admitted tenant. Use that token as the X-Tenant-Context header on tenant-scoped API calls.
| tenant_id required | string <typed-prefix-id> ^tnt_[0-9a-hjkmnp-tv-z]{26}$ Tenant identifier selected from GET /v1/me/tenants. |
{- "tenant_id": "tnt_01arz3ndektsv4rrffq69g5fav"
}{- "status": "success",
- "data": {
- "tenant_context_token": "<server-minted tenant-context token>",
- "tenant_id": "tnt_01arz3ndektsv4rrffq69g5fav",
- "expires_at": "2026-08-10T12:00:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Async event ingestion (governed contract). Conditionally available event intake with transformation pipeline support. Uses JSON:API response format.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Receives an event into the Axiom ingress pipeline for asynchronous validation and processing.
This is an admitted alpha transport surface for asynchronous external
inputs. It persists a durable inbox record and a tenant-scoped status
record before returning 202 Accepted. 202 Accepted means durable
receipt only. It does not mean the submitted event is valid, accepted
into the insurance domain, processed, or linked downstream.
Callers must use the returned status_url or subscribe to a governed
notification channel when available. Polling the status endpoint is the
authoritative way to discover later validation and processing outcomes.
It is not a public self-service event catalogue, and event-type schemas are not yet published as a generated contract fragment. Event types, payload schemas, and promotion rules are tenant-owned configuration when promoted; they are not Axiom-owned public domain content.
Conditional availability: This endpoint may return 404 if async ingress is not enabled in the environment.
Response format: JSON:API style — not the legacy wrapper.
Idempotency: Events are deduplicated using X-Webhook-Delivery-ID
when supplied. If the header is absent, the runtime derives a stable key
from the source and request body bytes. Resubmitting the same key returns
the original ingress_id, current receipt status, and status_url.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| event_type required | string Tenant-owned external event type identifier. The public developer-preview contract does not publish a stable event type catalogue; use only values supplied in an issued tenant integration runbook. |
| source | string Optional source hint. The runtime may derive source from the
authenticated context or |
| occurred_at | string <date-time> When the event actually occurred (as opposed to when it was received). If omitted, the server uses the receipt timestamp. |
required | object Tenant-owned boundary payload. Structure varies by event_type. No public self-service payload schema catalogue is published in API 0.1.0. Treat payload shape as tenant-issued integration configuration, not Axiom-owned domain content. |
object Optional event metadata (routing hints, trace context) |
{- "event_type": "external.event.received",
- "source": "external-ingress",
- "occurred_at": "2026-03-12T09:30:00Z",
- "payload": {
- "external_reference": "event-2026-03-12-001",
- "occurred_at": "2026-03-12T09:30:00Z",
- "attributes": {
- "status": "received"
}
}
}{- "data": {
- "status": "received",
- "ingress_id": "ref_20260408_0001",
- "status_url": "/v1/ingress/events/ref_20260408_0001",
- "correlation_id": "corr_20260408_0001",
- "idempotency_key": "external-ingress:event-2026-03-12-001",
- "received_at": "2026-03-12T09:30:05Z"
}
}Returns the tenant-scoped status trail for an asynchronous event submission.
Use this endpoint after POST /v1/ingress/events returns 202 Accepted.
The status endpoint is authoritative: webhook or email notification
delivery can fail without hiding the validation result from the caller.
Status separates receipt, validation, domain acceptance, processing, and completion:
received means Axiom has durably received the submission.validation_failed means the submission failed asynchronous validation.accepted means validation has passed far enough for domain processing.processing_failed means domain processing failed after acceptance.completed means processing completed and any resulting domain
reference is visible in the response where available.No domain event or assertion exists until the ingress record reaches an accepted/processing/completed state.
| ingress_id required | string Assigned ingress record identifier returned by |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "id": "ref_20260408_0001",
- "status": "validation_failed",
- "stage": "url_validation",
- "status_url": "/v1/ingress/events/ref_20260408_0001",
- "submitted_at": "2026-03-12T09:30:05Z",
- "updated_at": "2026-03-12T09:30:08Z",
- "event_type": "external.event.received",
- "correlation_id": "corr_20260408_0001",
- "idempotency_key": "external-ingress:event-2026-03-12-001",
- "errors": [
- {
- "code": "URL_UNREACHABLE",
- "message": "The supplied evidence URL could not be reached within the validation window.",
- "field": "payload.evidence_url",
- "retryable": true
}
], - "events": [
- {
- "status": "received",
- "stage": "receipt",
- "recorded_at": "2026-03-12T09:30:05Z",
- "correlation_id": "corr_20260408_0001"
}, - {
- "status": "validation_failed",
- "stage": "url_validation",
- "recorded_at": "2026-03-12T09:30:08Z",
- "correlation_id": "corr_20260408_0001",
- "errors": [
- {
- "code": "URL_UNREACHABLE",
- "message": "The supplied evidence URL could not be reached within the validation window.",
- "field": "payload.evidence_url",
- "retryable": true
}
]
}
]
}
}Double-entry accounting ledger — entries, transactions, account balances, reversals, integrity verification, and reconciliation. Supports as-of temporal queries with explanation traces.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Computes and returns the balance for a specific ledger account.
Supports point-in-time queries via the as_of parameter for
historical balance lookups (as-was semantics per platform principle).
The response includes an explanation tree documenting the inputs, rule version, and computation method used.
| code required | string Example: PREM-RCV-001 Account code to query (e.g. PREM-RCV-001, CLM-PAY-001) |
| as_of | string <date-time> Example: as_of=2026-03-31T23:59:59Z Point-in-time for the balance computation (ISO 8601). If omitted, returns the current balance. |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": {
- "account_code": "PREM-RCV-001",
- "as_of": "2026-03-31T23:59:59Z",
- "currency": "usd",
- "amount": 4525075,
- "entry_count": 128,
- "explanation": {
- "inputs": {
- "account_code": "PREM-RCV-001",
- "date_from": "2026-01-01T00:00:00Z",
- "date_to": "2026-03-31T23:59:59Z",
- "include_pending": false
}, - "rule_version": "balance-calc-v2.1.0",
- "computation": "Sum of posted credits minus posted debits for account PREM-RCV-001",
- "entry_ids": [
- "ref_20260408_0001",
- "ref_20260408_0001"
]
}
}, - "status": "success",
- "message": "Account balance computed successfully"
}Creates a reversing entry for a previously posted ledger entry.
The original entry's status transitions to reversed, and a new
entry with the opposite entry_type and same amount is created.
This preserves the full audit trail rather than modifying or deleting the original entry (platform principle explainability).
| entry_id required | string Example: ref_20260408_0001 Ledger entry UUID to reverse |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| reason required | string Reason for the reversal (required for audit trail) |
| posted_by required | string User or service authorising the reversal |
| entry_date | string <date-time> Accounting date for the reversal (defaults to now) |
{- "reason": "Incorrect account code — premium posted to retained claim-family compatibility payable in error",
- "posted_by": "hello@axiom.express",
- "entry_date": "2026-04-01T00:00:00Z"
}{- "status": "success",
- "data": {
- "reversal_entry_id": "rev-http-1",
- "original_entry_id": "orig-http-1",
- "transaction_id": "txn-http-1",
- "content_hash": "2f1c0b6e2c8a...",
- "created_at": "2026-04-01T09:10:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Runs integrity checks on the ledger to detect anomalies such as unbalanced transactions, orphaned entries, or sequence gaps.
This is a read-only operation that does not modify any data.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| account_codes | Array of strings Restrict verification to specific accounts (all if omitted) |
| date_from | string <date-time> Start of verification period |
| date_to | string <date-time> End of verification period |
{- "account_codes": [
- "PREM-RCV-001"
], - "date_from": "2026-01-01T00:00:00Z",
- "date_to": "2026-03-31T23:59:59Z"
}{- "status": "success",
- "data": {
- "results": [
- {
- "entry_id": "orig-http-1",
- "status": "PASS",
- "failure_code": "",
- "computed_hash": "2f1c0b6e2c8a...",
- "stored_hash": "2f1c0b6e2c8a...",
- "chain_depth": 0
}
]
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Returns the tenant's ledger entries (keyset-ordered by entry_id
ascending). Cursor-paginated under the governed contract: pass page[size]
to bound the page and page[after] (an opaque cursor from a prior
response's meta.next_cursor) to fetch the next page. Each entry is a
double-entry posting line (governed contract); amounts are exact integer minor units.
Optional reference_id filter narrows the list to the postings recorded
against a single source reference (for example a retained claim-family
compatibility id, policy id, premium id, or payment id). Absent = all
entries for the tenant. The filter composes with
the existing operating-tenant tenant-isolated scope; it never widens it.
| reference_id | string Optional filter — return only entries posted against this source
reference id ( |
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of entries to return (cursor page size, governed contract). |
| page[after] | string Opaque cursor from a prior response's |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "ledger_entry_20260408_0001",
- "account_code": "PREM-RCV-001",
- "entry_type": "credit",
- "amount": 125000,
- "currency": "usd",
- "entry_date": "2026-03-01T00:00:00Z",
- "status": "posted",
- "posted_at": "2026-03-01T08:15:30Z",
- "posted_by": "premium-collection-service",
- "reference_type": "premium",
- "reference_id": "ledger_entry_20260408_0001"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Retrieves the correction history for a specific ledger entry, including any reversals and re-postings.
Results sorted by created_at descending.
This supports the full audit trail and explainability requirements. — every correction is traceable back to the original entry.
| entry_id required | string Example: ref_20260408_0001 Original ledger entry UUID |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "entry_id": "orig-http-1",
- "original_entry_id": "orig-http-1",
- "reversal_entry_id": "rev-http-1",
- "actor_type": "human",
- "actor_id": "user-1",
- "actor_original_id": "user-1",
- "reason_code": "correction",
- "content_hash": "2f1c0b6e2c8a...",
- "business_event_time": "2026-04-01T09:10:00Z"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Insurance lifecycle authoring — tenant-owned lifecycle definitions, compliance packs, validation, publication, and bindings. This is governed insurance product grammar and does not expose generic workflow/BPMN authoring, public PipelineTemplate authoring, or raw public rule evaluation.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Create a tenant-owned draft insurance lifecycle definition for an admitted product or business object. The server derives tenant authority from X-Tenant-Context and rejects generic workflow, BPMN, public PipelineTemplate, and raw public rule-evaluation authoring.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| lifecycle_key required | string^[a-z][a-z0-9_:-]{2,127}$ Server-scoped lifecycle key. It is not a raw workflow or PipelineTemplate identifier. |
| product_id required | string^[a-z][a-z0-9_:-]{2,127}$ Product or cover catalogue identifier governed by the operating tenant. |
| business_object_kind | string Enum: "policy" "replacement" "endorsement" "claim" "assertion" "premium" "payment" |
| lifecycle_purpose required | string Enum: "replacement" "endorsement" "claim" "assertion" "premium_collection" "payment_schedule" "policy_issue" "policy_cancellation" |
| jurisdiction | string [ 2 .. 16 ] characters ^[a-z][a-z0-9_:-]{1,15}$ |
| authoring_kind | string Value: "insurance_lifecycle" Closed authoring kind. Generic workflow, BPMN, raw PipelineTemplate, and raw rule evaluation are rejected. |
| initial_state required | string |
| terminal_states | Array of strings non-empty |
required | Array of objects (LifecycleState) >= 2 items |
required | Array of objects (LifecycleTransition) non-empty |
| compliance_pack_keys | Array of strings |
required | Array of objects (LifecycleObligation) non-empty |
required | Array of objects (LifecycleObligation) non-empty |
required | Array of objects (LifecycleObligation) non-empty |
required | Array of objects (LifecycleExplanationObligation) non-empty |
object |
{- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "lifecycle_key": "string",
- "product_id": "string",
- "lifecycle_purpose": "string",
- "publication_status": "draft",
- "version": 1,
- "content_hash": "string",
- "immutable_after_publish": true,
- "definition": {
- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}
}
}Validate an insurance lifecycle definition draft against Axiom lifecycle grammar, custody, transition, evidence, retention, and explanation rules before publication. Validation is deterministic and fails closed for generic workflow/BPMN, public PipelineTemplate, raw public rule evaluation, and caller-supplied tenant authority.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
required | object (LifecycleDefinitionDraftRequest) |
{- "definition": {
- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}
}{- "data": {
- "accepted": true,
- "canonical_request_hash": "string",
- "findings": [
- {
- "code": "string",
- "severity": "error",
- "message": "string"
}
]
}
}Publish a validated lifecycle definition version. Published versions are immutable, effective-time bound, and become eligible for server-side lifecycle binding resolution only after validation and publication evidence are recorded.
| definition_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| expected_version required | integer >= 1 |
| effective_from required | string <date-time> |
| validation_receipt_id required | string |
| canonical_request_hash required | string^sha256:[a-f0-9]{64}$ |
{- "expected_version": 1,
- "effective_from": "2019-08-24T14:15:22Z",
- "validation_receipt_id": "string",
- "canonical_request_hash": "string"
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "lifecycle_key": "string",
- "product_id": "string",
- "lifecycle_purpose": "string",
- "publication_status": "draft",
- "version": 1,
- "content_hash": "string",
- "immutable_after_publish": true,
- "definition": {
- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}
}
}Create a tenant-owned compliance-pack draft that can be pinned by lifecycle definitions and bindings. The pack records jurisdiction, legal references, obligations, evidence, disclosures, time gates, retention, and activation posture without becoming code-hidden compliance behavior.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| pack_key required | string^[a-z][a-z0-9_:-]{2,127}$ |
| jurisdiction required | string |
required | Array of objects (LifecycleObligation) non-empty |
| legal_references required | Array of strings non-empty |
| evidence_requirements required | Array of strings non-empty |
required | Array of objects (LifecycleObligation) non-empty |
Array of objects |
{- "pack_key": "string",
- "jurisdiction": "string",
- "obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "legal_references": [
- "string"
], - "evidence_requirements": [
- "string"
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "time_gates": [
- {
- "key": "string",
- "duration": "720h"
}
]
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "pack_key": "string",
- "jurisdiction": "string",
- "publication_status": "draft",
- "version": 1,
- "content_hash": "string",
- "pack": {
- "pack_key": "string",
- "jurisdiction": "string",
- "obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "legal_references": [
- "string"
], - "evidence_requirements": [
- "string"
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "time_gates": [
- {
- "key": "string",
- "duration": "720h"
}
]
}
}
}Create an effective-time lifecycle binding from tenant/product/business-object scope to published lifecycle definition and compliance-pack versions. The server resolves tenant authority and callers cannot supply raw PipelineTemplate identifiers, raw ruleset selectors, or tenant override facts.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| product_id required | string^[a-z][a-z0-9_:-]{2,127}$ |
| business_object_kind | string Enum: "policy" "replacement" "endorsement" "claim" "assertion" "premium" "payment" |
| lifecycle_purpose required | string |
| jurisdiction required | string^[a-z][a-z0-9_:-]{1,15}$ |
| definition_key required | string^[a-z][a-z0-9_:-]{2,127}$ |
| definition_version required | integer >= 1 |
| definition_content_hash required | string^sha256:[a-f0-9]{64}$ |
Array of objects (CompliancePackPin) | |
| effective_from required | string <date-time> |
| effective_until | string <date-time> |
{- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "string",
- "jurisdiction": "string",
- "definition_key": "string",
- "definition_version": 1,
- "definition_content_hash": "string",
- "compliance_pack_pins": [
- {
- "pack_key": "string",
- "pack_version": 1,
- "pack_content_hash": "string"
}
], - "effective_from": "2019-08-24T14:15:22Z",
- "effective_until": "2019-08-24T14:15:22Z"
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "product_id": "string",
- "lifecycle_purpose": "string",
- "jurisdiction": "string",
- "definition_key": "string",
- "definition_version": 0,
- "definition_content_hash": "string",
- "compliance_pack_pins": [
- {
- "pack_key": "string",
- "pack_version": 1,
- "pack_content_hash": "string"
}
], - "effective_from": "2019-08-24T14:15:22Z",
- "effective_until": "2019-08-24T14:15:22Z",
- "enabled": true
}
}Party management — individuals, organisations, brokers, agents, and providers. Parties are the actors in the policy lifecycle (policyholder roles, asserting parties, beneficiary roles, capacity-bearing parties).
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Returns the catalogue of party role types available to the tenant. This
is the permissible role_type vocabulary and metadata, not the set of role
types currently in use. Use GET /v1/parties/role-types/usage for active
assignment counts.
Runtime source: the tenant catalogue.role_types table. Bootstrap
registry metadata may enrich known seed codes, but the tenant catalogue is
the authority for which role_type values are available.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "code": "policyholder",
- "display_name": "Policyholder",
- "universal": true,
- "assignable_context_types": [
- "policy",
- "policy_item"
], - "requires_attribution": true
}, - {
- "code": "beneficiary",
- "display_name": "Beneficiary",
- "universal": true,
- "assignable_context_types": [
- "policy",
- "policy_item"
], - "requires_attribution": true
}
], - "meta": {
- "total": 18,
- "limit": 18,
- "offset": 0
}, - "status": "success"
}Returns each role type that has at least one active (non-revoked)
assignment for the tenant, with the count of holders. Role types in the
registry with zero holders are not returned — pair with
GET /v1/parties/role-types to render "available but unused" rows.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "code": "string",
- "count": 0
}
], - "message": "string",
- "meta": {
- "total": 87,
- "limit": 20,
- "offset": 40
}, - "links": { },
- "telemetry": { }
}Register a party identity record that may later carry roles. A party is the foundational Axiom primitive anchoring all relationships — to covers, policies, premiums, and events. This contract creates the identity record; role assignment is a separate operation.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| id | string <typed-prefix-id> Optional client-provided identifier. If omitted, the server generates one. |
| party_type required | string Enum: "individual" "organization" "system" Identity classification of the party. Contextual participation such as broker, provider, agent, adjuster, or assessor belongs to PartyRole.role_type. |
| external_id | string External identifier from source_system. If supplied, source_system is required. |
| source_system | string (PartyExternalIDSourceSystem) Enum: "unmapped" "kelevra_native" "broker_crm" "underwriter_pas" Authoritative alpha registry for Party external identifier provenance.
|
required | object Party-specific data (name, contact details, identifiers, etc.) |
| created_by | string Identifier of the user or service creating this party |
| status | string (PartyLifecycleStatus) Enum: "active" "inactive" "suspended" "deceased" "merged" "opted_out" Current Party lifecycle status.
|
| merged_into_party_id | string <typed-prefix-id> Required when status is merged; rejected for non-merged statuses. |
{- "id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "party_type": "individual",
- "external_id": "BRK-000123",
- "source_system": "broker_crm",
- "attributes": {
- "first_name": "Takeshi",
- "last_name": "Yamamoto",
- "email": "t.yamamoto@example.jp",
- "phone": "+81312345678"
}, - "created_by": "admin-user-001",
- "status": "active",
- "merged_into_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2"
}{- "status": "success",
- "data": {
- "id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "party_type": "individual",
- "status": "active",
- "merged_into_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
- "external_id": "BRK-000123",
- "source_system": "broker_crm",
- "attributes": {
- "first_name": "Maria",
- "last_name": "Eriksson",
- "date_of_birth": "1985-03-14",
- "email": "maria.eriksson@example.com"
}, - "roles": [
- {
- "id": "rol_01j9zxkp8wqrm2n4v6t5s3d7f3",
- "role_type": "policyholder",
- "context": {
- "entity_type": "group",
- "entity_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f4"
}, - "status": "active",
- "assigned_at": "2026-01-15T09:30:00Z"
}
], - "created_at": "2026-01-15T09:30:00Z",
- "updated_at": "2026-02-20T14:45:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Retrieve a paginated list of parties for the tenant. Results are sorted by created_at descending. Sort order is not configurable.
Supports cursor-based pagination via page[size] and page[after] query parameters.
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of parties to return in this cursor page. |
| page[after] | string Opaque cursor returned as meta.next_cursor by the previous page. |
| source_system | string (PartyExternalIDSourceSystem) Enum: "unmapped" "kelevra_native" "broker_crm" "underwriter_pas" Example: source_system=broker_crm Exact external identifier source-system filter. Must be supplied together with external_id; unknown values return 400 INVALID_REQUEST with accepted values in the error detail. |
| external_id | string Exact external identifier filter. Must be supplied together with source_system so bare external_id cannot create ambiguous identity resolution. |
| q | string >= 3 characters Free-text search term for Party lookup. The runtime rejects search terms shorter than three characters. |
| role | string Tenant |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "party_type": "individual",
- "status": "active",
- "merged_into_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
- "external_id": "BRK-000123",
- "source_system": "broker_crm",
- "attributes": {
- "first_name": "Maria",
- "last_name": "Eriksson",
- "date_of_birth": "1985-03-14",
- "email": "maria.eriksson@example.com"
}, - "roles": [
- {
- "id": "rol_01j9zxkp8wqrm2n4v6t5s3d7f3",
- "role_type": "policyholder",
- "context": {
- "entity_type": "group",
- "entity_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f4"
}, - "status": "active",
- "assigned_at": "2026-01-15T09:30:00Z"
}
], - "created_at": "2026-01-15T09:30:00Z",
- "updated_at": "2026-02-20T14:45:00Z"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Retrieve a single party by its unique identifier, including any assigned roles. When as_of or recorded_at is supplied, the response replays the party from the immutable party history substrate using effective time and recorded time as-was semantics.
| id required | string <typed-prefix-id> Unique party identifier |
| as_of | string <date-time> RFC3339 effective-time timestamp for party history replay. Defaults to current effective time. |
| recorded_at | string <date-time> RFC3339 recorded-time timestamp for as-was party history replay. Defaults to the latest recorded version. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": {
- "id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "party_type": "individual",
- "status": "active",
- "merged_into_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
- "external_id": "BRK-000123",
- "source_system": "broker_crm",
- "attributes": {
- "first_name": "Maria",
- "last_name": "Eriksson",
- "date_of_birth": "1985-03-14",
- "email": "maria.eriksson@example.com"
}, - "roles": [
- {
- "id": "rol_01j9zxkp8wqrm2n4v6t5s3d7f3",
- "role_type": "policyholder",
- "context": {
- "entity_type": "group",
- "entity_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f4"
}, - "status": "active",
- "assigned_at": "2026-01-15T09:30:00Z"
}
], - "created_at": "2026-01-15T09:30:00Z",
- "updated_at": "2026-02-20T14:45:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Update an existing party's attributes and/or status. Attribute updates are merged with existing attributes (partial update semantics).
Side effects: updates the party record; emits an audit entry recording the change.
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| external_id | string Replacement external identifier. If supplied, the effective source_system must be known and valid. |
| source_system | string (PartyExternalIDSourceSystem) Enum: "unmapped" "kelevra_native" "broker_crm" "underwriter_pas" Authoritative alpha registry for Party external identifier provenance.
|
object or null Updated party-specific data. Merged with existing attributes. | |
| status | string (PartyLifecycleStatus) Enum: "active" "inactive" "suspended" "deceased" "merged" "opted_out" Current Party lifecycle status.
|
| merged_into_party_id | string <typed-prefix-id> Required when transitioning to status=merged; rejected for non-merged statuses. |
| updated_by | string Identifier of the user or service performing the update |
{- "external_id": "BRK-000124",
- "source_system": "broker_crm",
- "attributes": {
- "email": "maria.new-email@example.com",
- "phone": "+46701234567"
}, - "status": "active",
- "merged_into_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
- "updated_by": "admin-user-002"
}{- "status": "success",
- "data": {
- "id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "party_type": "individual",
- "status": "active",
- "merged_into_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
- "external_id": "BRK-000123",
- "source_system": "broker_crm",
- "attributes": {
- "first_name": "Maria",
- "last_name": "Eriksson",
- "date_of_birth": "1985-03-14",
- "email": "maria.eriksson@example.com"
}, - "roles": [
- {
- "id": "rol_01j9zxkp8wqrm2n4v6t5s3d7f3",
- "role_type": "policyholder",
- "context": {
- "entity_type": "group",
- "entity_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f4"
}, - "status": "active",
- "assigned_at": "2026-01-15T09:30:00Z"
}
], - "created_at": "2026-01-15T09:30:00Z",
- "updated_at": "2026-02-20T14:45:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Retrieve all role assignments for a party across policies, claims, and other entities. Each role includes the context (entity type and ID) it is scoped to.
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "rol_01j9zxkp8wqrm2n4v6t5s3d7f3",
- "role_type": "policyholder",
- "context": {
- "entity_type": "group",
- "entity_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f4"
}, - "status": "active",
- "assigned_at": "2026-01-15T09:30:00Z"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Assign a new role to a party, scoped to a specific entity (e.g. a policy, claim, product, organization, policy item, or PartyGroup). For sponsor role assignments on a group context, the sponsor remains the Party role assignee and the PartyGroup is identified by entity_type=group/entity_id. Only one active sponsor is allowed per tenant/group context; duplicate active sponsor attempts return SPONSOR_CARDINALITY_VIOLATED (HTTP 409).
A party can hold multiple roles simultaneously, and the same party can hold different roles on different entities.
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| role_type required | string Tenant |
| entity_type required | string Enum: "policy" "claim" "organization" "product" "policy_item" "group" The type of entity this role is scoped to |
| entity_id required | string <typed-prefix-id> The identifier of the entity this role is scoped to |
| assigned_by required | string Identifier of the user or service assigning this role |
object or null Optional attributes for the role assignment |
{- "role_type": "string",
- "entity_type": "policy",
- "entity_id": "string",
- "assigned_by": "string",
- "attributes": { }
}{- "status": "success",
- "data": {
- "id": "rol_01j9zxkp8wqrm2n4v6t5s3d7f3",
- "role_type": "policyholder",
- "context": {
- "entity_type": "group",
- "entity_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f4"
}, - "status": "active",
- "assigned_at": "2026-01-15T09:30:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Retrieve all contact records associated with a party. A party may have multiple contacts (e.g. personal email, work email, mobile, landline).
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "email": "user@example.com",
- "phone": "string",
- "preferred_contact_method": "email"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Create a new contact record for a party. Each contact includes an email address, phone number, and/or preferred contact method. Parties in opted_out status reject new contact capture with a 409 while historical contact reads remain available.
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
string <email> Email address | |
| phone | string^\+?[1-9]\d{1,14}$ Phone number in E.164 format |
| preferred_contact_method | string Enum: "email" "phone" "mail" Preferred contact method |
{- "email": "user@example.com",
- "phone": "string",
- "preferred_contact_method": "email"
}{- "status": "success",
- "data": {
- "email": "user@example.com",
- "phone": "string",
- "preferred_contact_method": "email"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Update an existing contact record for a party.
| id required | string <typed-prefix-id> Unique party identifier |
| contactId required | string <typed-prefix-id> Unique contact identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
string <email> Email address | |
| phone | string^\+?[1-9]\d{1,14}$ Phone number in E.164 format |
| preferred_contact_method | string Enum: "email" "phone" "mail" Preferred contact method |
{- "email": "user@example.com",
- "phone": "string",
- "preferred_contact_method": "email"
}{- "status": "success",
- "data": {
- "email": "user@example.com",
- "phone": "string",
- "preferred_contact_method": "email"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Remove a contact record from a party.
| id required | string <typed-prefix-id> Unique party identifier |
| contactId required | string <typed-prefix-id> Unique contact identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "401",
- "code": "AUTHENTICATION_REQUIRED",
- "title": "Unauthorized",
- "detail": "Authentication is required to access this resource"
}
]
}Retrieve all identity documents associated with a party (e.g. passport, national ID, tax number, company registration). Each identity has a verification status.
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "pti_01J9ZXKP8WQRM2N4V6T5S3D7F5",
- "identity_type": "passport",
- "identity_value": "AB1234567",
- "issuing_country": "GB",
- "expiry_date": "2032-06-15",
- "status": "unverified",
- "verified_at": "2019-08-24T14:15:22Z"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Register a new identity document for a party. The identity is created in "unverified" status and must be verified separately via the verify endpoint.
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| identity_type required | string Type of identity document |
| identity_value required | string The identity document number or value |
| issuing_country | string^[A-Z]{2}$ ISO 3166-1 alpha-2 country code of issuing authority |
| expiry_date | string or null <date> Expiry date of the identity document |
{- "identity_type": "string",
- "identity_value": "string",
- "issuing_country": "string",
- "expiry_date": "2019-08-24"
}{- "status": "success",
- "data": {
- "id": "pti_01J9ZXKP8WQRM2N4V6T5S3D7F5",
- "identity_type": "passport",
- "identity_value": "AB1234567",
- "issuing_country": "GB",
- "expiry_date": "2032-06-15",
- "status": "unverified",
- "verified_at": "2019-08-24T14:15:22Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Mark an identity document as verified. This records the verification timestamp and transitions the identity status from "unverified" to "verified".
| id required | string <typed-prefix-id> Unique party identifier |
| identityId required | string <typed-prefix-id> Unique identity document identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| verification_method | string Method used for verification (e.g. manual, electronic, biometric) |
| verified_by | string Identifier of the user or service performing verification |
| notes | string or null Optional notes about the verification |
{- "verification_method": "string",
- "verified_by": "string",
- "notes": "string"
}{- "status": "success",
- "data": {
- "id": "pti_01J9ZXKP8WQRM2N4V6T5S3D7F5",
- "identity_type": "passport",
- "identity_value": "AB1234567",
- "issuing_country": "GB",
- "expiry_date": "2032-06-15",
- "status": "unverified",
- "verified_at": "2019-08-24T14:15:22Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Retrieve relationships for a party. The view parameter selects the response shape:
An unrecognised view value returns 400 INVALID_REQUEST under the governed contract.
| id required | string <typed-prefix-id> Unique party identifier |
| view | string Default: "list" Enum: "list" "distribution_chain" Response view type. Unknown values return 400 INVALID_REQUEST under the governed contract. |
| as_of | string <date-time> Point-in-time filter for relationships (ISO 8601). Defaults to current time. |
| relationship_type | string Comma-separated tenant |
| max_depth | integer [ 1 .. 16 ] Maximum traversal depth for view=distribution_chain (1-16). Ignored for view=list. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "ptr_01J9ZXKP8WQRM2N4V6T5S3D7F6",
- "from_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "to_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
- "relationship_type": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "metadata": { },
- "created_by": "string"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Creates a directed relationship from the identified party (from_party_id) to another party (to_party_id). On success, returns 201 Created with the new relationship resource.
| id required | string <typed-prefix-id> Unique party identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| to_party_id required | string <typed-prefix-id> Target party for the relationship |
| relationship_type required | string Tenant |
| effective_from | string or null <date-time> Relationship valid-from timestamp (ISO 8601). Defaults to now. |
| effective_to | string or null <date-time> Relationship expiry timestamp. Null means open-ended. |
object or null Optional key-value metadata for the relationship |
{- "to_party_id": "string",
- "relationship_type": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "metadata": { }
}{- "status": "success",
- "data": {
- "id": "ptr_01J9ZXKP8WQRM2N4V6T5S3D7F6",
- "from_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "to_party_id": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
- "relationship_type": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "metadata": { },
- "created_by": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Temporally deactivates a relationship by setting its effective_to to now. Idempotent — deactivating an already inactive relationship returns 204.
Body {"reason": "..."} is required (non-blank after trim) per .
Blank reason returns 400 PARTY_DEACTIVATION_REASON_REQUIRED.
| id required | string <typed-prefix-id> Unique party identifier |
| relId required | string <typed-prefix-id> Unique relationship identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| reason required | string Non-blank rationale for the deactivation. Recorded on the audit record under the governed contract. |
{- "reason": "string"
}{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Inverse projection — returns the groups the given party is a member
of as of as_of. Distinct from /v1/parties/:id/groups which
returns Policy Group (governed contract) memberships.
| id required | string <typed-prefix-id> Example: pty_01arz3ndektsv4rrffq69g5fav |
| as_of | string <date-time> |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Returns the transitive policy-group membership view for a party: the
groups the party belongs to by virtue of a policy binding, each annotated
with the via_policy_id that confers the membership. This is distinct
from /v1/parties/{id}/party-groups (first-class, directly-assigned
party-group memberships) — here membership is derived from policy
participation, not a direct grouping assignment.
Point-in-time: pass as_of (RFC3339) to resolve membership as it stood at
that instant; defaults to now.
| id required | string <typed-prefix-id> |
| as_of | string <date-time> Resolve membership as-of this instant (RFC3339). Defaults to now. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "group_id": "string",
- "name": "string",
- "grouping_rule_id": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "metadata": { },
- "via_policy_id": "string"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Retrieves a paginated list of payments associated with a specific party.
Returns only payments explicitly linked to the party via party_id.
Payments without party linkage (null party_id) are excluded.
Results are sorted by created_at descending with id as a stable
tie-breaker. Use page[size] and page[after] for pagination. Legacy
limit and offset query parameters are rejected.
| id required | string <typed-prefix-id> Unique party identifier |
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of payments to return |
| page[after] | string Opaque cursor returned as |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "status": "pending",
- "payment_method": "debit_order",
- "description": "Monthly premium — motor comprehensive policy POL-2026-00123",
- "reference_id": "pay_20260403_0001",
- "reference_type": "premium",
- "metadata": {
- "bank_reference": "ABSA-EFT-20260401-0042",
- "batch_id": "BATCH-2026-04-01",
- "reconciliation_status": "matched"
}, - "created_at": "2026-04-01T06:00:00Z",
- "updated_at": "2026-04-01T08:30:00Z",
- "processed_at": "2026-04-01T08:30:00Z",
- "party_id": "pay_20260403_0001"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Returns the per-party audit feed in chronological order
(performed_at DESC). Each event carries governed contract actor attribution
(actor_id / actor_type / actor_original_id) regardless of
writer path. The reader merges persistence-managed records and application writes
so the consumer sees a single shape.
Explanation enrichment fields (decision_id, rule_versions,
inputs) are populated for rules-evaluation records only and
empty otherwise (preview placeholder).
Use page[size] and page[after] for cursor pagination. Legacy
limit and offset query parameters are rejected by the runtime.
| id required | string <typed-prefix-id> |
| page[size] | integer [ 1 .. 200 ] Default: 50 Maximum number of audit entries to return in this cursor page. |
| page[after] | string Opaque cursor returned as |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "string",
- "table_name": "string",
- "operation": "string",
- "old_values": { },
- "new_values": { },
- "user_id": "string",
- "performed_at": "2019-08-24T14:15:22Z",
- "correlation_id": "string",
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string",
- "outcome": "string",
- "decision_id": "string",
- "operation_code": "string",
- "purpose": "string",
- "compliance_category": "string",
- "data_classification": "string",
- "additional_context": { },
- "rule_versions": [
- "string"
], - "inputs": { },
- "summary": "string"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Revoke an active role assignment from a Party. The role assignment remains part of the Party history and audit record; this operation changes its active status rather than deleting historical evidence.
| id required | string <typed-prefix-id> Unique party identifier |
| roleId required | string <typed-prefix-id> Party role assignment identifier to revoke. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": {
- "role_id": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Return the ledger-derived balance for a Party, optionally scoped by product, policy, cover, category, role, and as-of time. The response is computed from runtime ledger entries and is read-only.
| id required | string <typed-prefix-id> Unique party identifier |
| product_id | string <typed-prefix-id> Limit the balance to entries associated with this product. |
| policy_id | string <typed-prefix-id> Limit the balance to entries associated with this policy. |
| cover_id | string <typed-prefix-id> Limit the balance to entries associated with this cover. |
| category | string Limit the balance to a ledger category. |
| role | string Limit the balance to a tenant |
| as_of | string <date-time> Compute the balance as of this RFC3339 timestamp. Defaults to the current instant. |
| decompose | boolean Default: false Include balance computation explanation details when true. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": {
- "party_id": "string",
- "as_of": "2019-08-24T14:15:22Z",
- "currency": "string",
- "amount": "string",
- "entry_count": 0,
- "filters": {
- "product_id": "string",
- "policy_id": "string",
- "cover_id": "string",
- "category": "string",
- "role": "string"
}, - "explanation": {
- "inputs": {
- "property1": "string",
- "property2": "string"
}, - "rule_version": "string",
- "computation": "string",
- "entry_ids": [
- "string"
]
}
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Composable party-grouping primitive under the governed contract. Groups can contain parties and other groups (polymorphic DAG membership), support static and dynamic (CEL-rule-driven) membership, and can hold roles in their own right without inheriting to member parties. Distinct from Policy Group (governed contract) which groups policies for cover application.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Inverse projection — returns the groups the given party is a member
of as of as_of. Distinct from /v1/parties/:id/groups which
returns Policy Group (governed contract) memberships.
| id required | string <typed-prefix-id> Example: pty_01arz3ndektsv4rrffq69g5fav |
| as_of | string <date-time> |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Returns the per-group audit feed in chronological order
(performed_at DESC). party_groups + party_group_memberships have
no persistence-managed records, so every row is generated by the
application's NewAuditRecord path with a party.group_*
operation code.
Response shape mirrors /v1/parties/{id}/audit — see that endpoint
for the full AuditEntry field list.
Use page[size] and page[after] for cursor pagination. Legacy
limit and offset query parameters are rejected by the runtime.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| page[size] | integer [ 1 .. 200 ] Default: 50 Maximum number of audit entries to return in this cursor page. |
| page[after] | string Opaque cursor returned as |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "string",
- "table_name": "string",
- "operation": "string",
- "old_values": { },
- "new_values": { },
- "user_id": "string",
- "performed_at": "2019-08-24T14:15:22Z",
- "correlation_id": "string",
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string",
- "outcome": "string",
- "decision_id": "string",
- "operation_code": "string",
- "rule_versions": [
- "string"
], - "inputs": { },
- "summary": "string"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Returns party groups for the tenant with cursor pagination. Results are
ordered by created_at descending with id as a stable tiebreaker. Supports
a free-text search via q (3-character minimum under the governed contract).
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of party groups to return in this cursor page. |
| page[after] | string Opaque cursor returned as |
| q | string >= 3 characters Search across display_name, id, external_id (min 3 chars, governed contract) |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Creates a static or dynamic party group. For dynamic groups,
membership_rule_id is required and must reference a rule of type
party_grouping in the shared rules catalog (fail-loud; 400 on
invalid reference). Idempotent via standard Idempotency-Key header.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| group_type | string Enum: "static" "dynamic" Defaults to static when omitted |
| display_name required | string non-empty |
| description | string |
| external_id | string |
| id_namespace | string Default: "tenant" |
| membership_rule_id | string Required when group_type = dynamic |
{- "group_type": "static",
- "display_name": "string",
- "description": "string",
- "external_id": "string",
- "id_namespace": "tenant",
- "membership_rule_id": "rule-party-age-over-18"
}{- "status": "success",
- "data": {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Returns the group and its active memberships as of as_of (defaults
to now). Members include both party-type and group-type (developer preview
polymorphic DAG) — callers must discriminate on member_type.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| as_of | string <date-time> |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": {
- "party_group": {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}, - "members": [
- {
- "id": "string",
- "group_id": "string",
- "member_type": "party",
- "member_id": "string",
- "valid_from": "2026-04-18T09:30:00Z",
- "valid_to": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_by_actor_type": "string",
- "created_by_actor_id": "string"
}
]
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Partial update — only supplied fields are changed. Soft-delete is
achieved via setting status to inactive here OR calling DELETE.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| display_name | string |
| description | string |
| status | string Enum: "active" "inactive" |
{- "display_name": "string",
- "description": "string",
- "status": "active"
}{- "status": "success",
- "data": {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Soft-delete — flips status to inactive. The group row and its
memberships are preserved for audit under the governed contract. There is no hard
delete.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "errors": [
- {
- "status": "401",
- "code": "AUTHENTICATION_REQUIRED",
- "title": "Unauthorized",
- "detail": "Authentication is required to access this resource"
}
]
}Body must supply exactly one of party_id or group_id. Neither or
both → 400. Cycle detection happens at read time (bounded traversal, governed contract) — writes do not block cyclic membership.
Idempotent on (group, member_type, member_id) when a membership is
already open.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| party_id | string |
| group_id | string |
| valid_from | string <date-time> Defaults to now() server-side when omitted |
{- "party_id": "string",
- "group_id": "string",
- "valid_from": "2019-08-24T14:15:22Z"
}{- "status": "success",
- "data": {
- "id": "string",
- "group_id": "string",
- "member_type": "party",
- "member_id": "string",
- "valid_from": "2026-04-18T09:30:00Z",
- "valid_to": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "created_by_actor_type": "string",
- "created_by_actor_id": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Idempotent — if no open membership exists, returns 204 without error. Does not hard-delete the membership row; the closed window is preserved for audit (governed contract).
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| partyId required | string <typed-prefix-id> Example: pty_01arz3ndektsv4rrffq69g5fav Member id. The path parameter is named |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "errors": [
- {
- "status": "401",
- "code": "AUTHENTICATION_REQUIRED",
- "title": "Unauthorized",
- "detail": "Authentication is required to access this resource"
}
]
}Recursively walks the membership DAG and returns every party that is reachable — de-duplicated by party_id. Uses bounded traversal with a cycle guard (governed contract): diamonds are de-duped, cycles are short-circuited.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| as_of | string <date-time> |
| max_depth | integer [ 0 .. 16 ] BFS depth cap [1, 16]. Server returns 400 for out-of-range. 0 or omitted → default (4). |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "party_id": "string",
- "found_at_depth": 1,
- "via_path": [
- "string"
], - "membership_id": "string",
- "valid_from": "2019-08-24T14:15:22Z"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}BFS upward through the membership DAG up to max_depth.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| as_of | string <date-time> |
| max_depth | integer [ 0 .. 16 ] |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}BFS downward through the membership DAG up to max_depth.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| as_of | string <date-time> |
| max_depth | integer [ 0 .. 16 ] |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "ref_20260408_0001",
- "group_type": "static",
- "status": "active",
- "id_namespace": "tenant",
- "external_id": "acme-employees",
- "display_name": "ACME Employees",
- "description": "All employees of ACME Corp as of the current payroll run",
- "membership_rule": {
- "rule_id": "rule-party-age-over-18"
}, - "created_at": "2026-04-18T09:30:00Z",
- "updated_at": "2026-04-18T09:30:00Z",
- "created_by_actor_type": "human",
- "created_by_actor_id": "user-marcus@acme.example"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Read-only evaluation — calls the membership-rule evaluator and
returns is_member plus an explanation summary. Does NOT persist
membership. Only valid for group_type = dynamic; static groups
return 400. Classification: intentional_exception in the
post-route manifest (POST that doesn't mutate).
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| party_id required | string |
| as_of | string <date-time> Defaults to now() server-side |
{- "party_id": "string",
- "as_of": "2019-08-24T14:15:22Z"
}{- "status": "success",
- "data": {
- "group_id": "string",
- "party_id": "string",
- "is_member": true,
- "rule_id": "string",
- "rule_type": "party_grouping",
- "evaluated_at": "2019-08-24T14:15:22Z",
- "explanation_summary": "party_type == individual: matched; attributes.age >= 18: matched"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Returns roles where this group is the assignee (assignee_type = group). under the governed contract there is NO automatic inheritance —
these roles do not flow to member parties.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
{- "status": "success",
- "data": [
- {
- "id": "string",
- "role_type": "sponsor",
- "context": {
- "entity_type": "policy",
- "entity_id": "policy-12345"
}, - "effective_from": "2026-04-18T09:30:00Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "revoked_at": "2019-08-24T14:15:22Z",
- "revocation_reason": "string"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Assigns a role with the group as assignee. Idempotent via Idempotency-Key.
For role_type=accepted_provider_network:
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| role_type required | string Enum: "sponsor" "provider" "beneficiary" "accepted_provider_network" |
required | object |
| effective_from | string <date-time> |
{- "role_type": "accepted_provider_network",
- "context": {
- "entity_type": "product",
- "entity_id": "CM-MED-01"
}, - "effective_from": "2019-08-24T14:15:22Z"
}{- "status": "success",
- "data": {
- "id": "string",
- "role_type": "sponsor",
- "context": {
- "entity_type": "policy",
- "entity_id": "policy-12345"
}, - "effective_from": "2026-04-18T09:30:00Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "revoked_at": "2019-08-24T14:15:22Z",
- "revocation_reason": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Closes the role assignment with an optional reason supplied as a
JSON body {reason: "..."}.
| id required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| roleId required | string <typed-prefix-id> Example: plg_01arz3ndektsv4rrffq69g5fav |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| reason | string |
{- "reason": "string"
}{- "errors": [
- {
- "status": "401",
- "code": "AUTHENTICATION_REQUIRED",
- "title": "Unauthorized",
- "detail": "Authentication is required to access this resource"
}
]
}Payment processing — payment records and payment schedule management. Supports bank transfer, credit card, debit order, and other methods. Status: pending → processing → completed → failed → cancelled.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Retrieves a paginated list of payments associated with a specific party.
Returns only payments explicitly linked to the party via party_id.
Payments without party linkage (null party_id) are excluded.
Results are sorted by created_at descending with id as a stable
tie-breaker. Use page[size] and page[after] for pagination. Legacy
limit and offset query parameters are rejected.
| id required | string <typed-prefix-id> Unique party identifier |
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of payments to return |
| page[after] | string Opaque cursor returned as |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "status": "pending",
- "payment_method": "debit_order",
- "description": "Monthly premium — motor comprehensive policy POL-2026-00123",
- "reference_id": "pay_20260403_0001",
- "reference_type": "premium",
- "metadata": {
- "bank_reference": "ABSA-EFT-20260401-0042",
- "batch_id": "BATCH-2026-04-01",
- "reconciliation_status": "matched"
}, - "created_at": "2026-04-01T06:00:00Z",
- "updated_at": "2026-04-01T08:30:00Z",
- "processed_at": "2026-04-01T08:30:00Z",
- "party_id": "pay_20260403_0001"
}
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Retrieves a cursor-paginated list of payments for the current tenant.
Results are sorted by created_at descending with id as a stable tie-breaker.
Use page[size] and page[after] for pagination. Legacy limit and
offset query parameters are rejected.
| page[size] | integer [ 1 .. 100 ] Default: 20 Example: page[size]=20 Maximum number of items to return (default 20, max 100) |
| page[after] | string Opaque cursor returned as |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 125000,
- "currency_code": "usd"
}, - "status": "completed",
- "payment_method": "debit_order",
- "description": "Monthly premium — motor comprehensive policy POL-2026-00123",
- "reference_id": "ref_20260408_0001",
- "reference_type": "premium",
- "created_at": "2026-04-01T06:00:00Z",
- "updated_at": "2026-04-01T08:30:00Z",
- "processed_at": "2026-04-01T08:30:00Z"
}, - {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 340000,
- "currency_code": "gbp"
}, - "status": "pending",
- "payment_method": "bank_transfer",
- "description": "Quarterly premium — property all-risks POL-2026-00456",
- "reference_id": "ref_20260408_0001",
- "reference_type": "premium",
- "created_at": "2026-04-02T09:15:00Z",
- "updated_at": "2026-04-02T09:15:00Z",
- "processed_at": null
}
], - "meta": {
- "page_size": 20,
- "has_more": true,
- "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNC0wMlQwOToxNTowMFoiLCJpZCI6ImM5ZDBlMWYyLWEzYjQtNTY3OC1jZGVmLTc4OTAxMjM0NTY3OCJ9"
}, - "status": "success",
- "message": "Payments retrieved successfully"
}Creates a new payment record in pending status.
The payment is not processed immediately. Use the
POST /v1/payments/{id}/process endpoint to initiate processing.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| Idempotency-Key required | string [ 1 .. 256 ] characters Example: idem-payment-20260821-001 Client-supplied idempotency key for replay-safe mutation requests. The server scopes the key to the tenant, HTTP method, and matched path.
A replay with the same key and same payload returns the original response.
A replay with the same key and a different payload returns |
| X-Correlation-ID | string Request correlation ID for tracing |
required | object Payment amount (exact integer minor units + lowercase ISO-4217 currency code). Must be non-empty. |
| payment_method required | string (PaymentMethod) Enum: "bank_transfer" "credit_card" "debit_order" "cash" "cheque" Supported payment methods:
|
| description | string or null Human-readable description of the payment purpose |
| reference_id | string or null Reference to the associated resource (premium, retained claim-family compatibility resource, etc.) |
| reference_type | string or null Type of the referenced resource |
| party_id | string or null Reference to the party associated with this payment. Must be a valid party ID within the tenant. |
object or null Extensible key-value metadata |
{- "amount": {
- "amount_minor": 275000,
- "currency_code": "kes"
}, - "payment_method": "bank_transfer",
- "description": "Annual premium — liability professional indemnity POL-2026-00789",
- "reference_id": "ref_20260408_0001",
- "reference_type": "premium",
- "party_id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "metadata": {
- "source": "broker-portal",
- "broker_id": "BRK-0087"
}
}{- "data": {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 275000,
- "currency_code": "kes"
}, - "status": "pending",
- "payment_method": "bank_transfer",
- "description": "Annual premium — liability professional indemnity POL-2026-00789",
- "reference_id": "ref_20260408_0001",
- "reference_type": "premium",
- "party_id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "metadata": {
- "source": "broker-portal",
- "broker_id": "BRK-0087"
}, - "created_at": "2026-04-03T10:00:00Z",
- "updated_at": "2026-04-03T10:00:00Z",
- "processed_at": null
}, - "status": "success",
- "message": "Payment created successfully"
}Retrieves a single payment by its unique identifier.
| id required | string Example: pay_20260403_0001 Typed payment identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "status": "pending",
- "payment_method": "debit_order",
- "description": "Monthly premium — motor comprehensive policy POL-2026-00123",
- "reference_id": "pay_20260403_0001",
- "reference_type": "premium",
- "metadata": {
- "bank_reference": "ABSA-EFT-20260401-0042",
- "batch_id": "BATCH-2026-04-01",
- "reconciliation_status": "matched"
}, - "created_at": "2026-04-01T06:00:00Z",
- "updated_at": "2026-04-01T08:30:00Z",
- "processed_at": "2026-04-01T08:30:00Z",
- "party_id": "pay_20260403_0001"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Updates a payment record. Only payments in pending status can be updated.
Fields that can be updated: amount, currency, payment_method, description, reference_id, reference_type, metadata.
| id required | string Example: pay_20260403_0001 Typed payment identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
object Updated payment amount (exact integer minor units + lowercase ISO-4217 currency code). | |
| payment_method | string (PaymentMethod) Enum: "bank_transfer" "credit_card" "debit_order" "cash" "cheque" Supported payment methods:
|
| description | string or null Updated human-readable description |
| reference_id | string or null Updated reference to associated resource |
| reference_type | string or null Updated type of referenced resource |
object or null Updated extensible metadata |
{- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "debit_order",
- "description": "Adjusted monthly premium — motor comprehensive policy POL-2026-00123",
- "reference_id": "string",
- "reference_type": "string",
- "metadata": { }
}{- "status": "success",
- "data": {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "status": "pending",
- "payment_method": "debit_order",
- "description": "Monthly premium — motor comprehensive policy POL-2026-00123",
- "reference_id": "pay_20260403_0001",
- "reference_type": "premium",
- "metadata": {
- "bank_reference": "ABSA-EFT-20260401-0042",
- "batch_id": "BATCH-2026-04-01",
- "reconciliation_status": "matched"
}, - "created_at": "2026-04-01T06:00:00Z",
- "updated_at": "2026-04-01T08:30:00Z",
- "processed_at": "2026-04-01T08:30:00Z",
- "party_id": "pay_20260403_0001"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Initiates processing for a pending payment.
Transitions the payment through the lifecycle:
pending -> processing -> completed (or failed).
This is an asynchronous operation. The response confirms the payment has been submitted for processing. Poll the payment status or use webhooks to track completion.
| id required | string Example: pay_20260403_0001 Typed payment identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| Idempotency-Key required | string [ 1 .. 256 ] characters Example: idem-payment-20260821-001 Client-supplied idempotency key for replay-safe mutation requests. The server scopes the key to the tenant, HTTP method, and matched path.
A replay with the same key and same payload returns the original response.
A replay with the same key and a different payload returns |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 125000,
- "currency_code": "usd"
}, - "status": "pending",
- "payment_method": "debit_order",
- "description": "Monthly premium — motor comprehensive policy POL-2026-00123",
- "created_at": "2026-04-01T06:00:00Z",
- "updated_at": "2026-04-01T08:30:00Z",
- "processed_at": null
}, - "status": "success",
- "message": "Payment submitted for processing"
}Cancels a payment. Only payments in pending or processing status
can be cancelled.
Transitions the payment to cancelled status. This action cannot be undone.
| id required | string Example: pay_20260403_0001 Typed payment identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| Idempotency-Key required | string [ 1 .. 256 ] characters Example: idem-payment-20260821-001 Client-supplied idempotency key for replay-safe mutation requests. The server scopes the key to the tenant, HTTP method, and matched path.
A replay with the same key and same payload returns the original response.
A replay with the same key and a different payload returns |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": {
- "id": "pay_20260403_0001",
- "amount": {
- "amount_minor": 125000,
- "currency_code": "usd"
}, - "status": "cancelled",
- "payment_method": "debit_order",
- "description": "Monthly premium — motor comprehensive policy POL-2026-00123",
- "created_at": "2026-04-01T06:00:00Z",
- "updated_at": "2026-04-03T11:00:00Z",
- "processed_at": null
}, - "status": "success",
- "message": "Payment cancelled successfully"
}Retrieves a cursor-paginated list of payment schedules for the current tenant.
Results are derived from aggregate Premium rows and sorted by effective_date descending with id as a stable tie-breaker.
Payment schedules define recurring cadence obligations tied to policies (e.g. monthly debit orders for motor premiums, quarterly bank transfers for property cover). The list surface reports cadence definitions; per- instalment paid/overdue state belongs to the payment settlement surface.
| page[size] | integer [ 1 .. 100 ] Default: 20 Example: page[size]=20 Maximum number of payment schedules to return in this page. |
| page[after] | string Opaque cursor returned as |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "pay_20260403_0001",
- "policy_id": "pol_01h9xg2c7e8f4a5b6c7d8e9f0a",
- "frequency": "monthly",
- "amount": {
- "amount_minor": 125000,
- "currency_code": "zar"
}, - "status": "active",
- "next_due_date": "2026-05-01",
- "created_at": "2026-01-15T10:00:00Z",
- "updated_at": "2026-04-01T08:30:00Z"
}, - {
- "id": "pay_20260403_0001",
- "policy_id": "pol_01h9xg2c7e8f4a5b6c7d8e9f0b",
- "frequency": "quarterly",
- "amount": {
- "amount_minor": 850000,
- "currency_code": "zar"
}, - "status": "active",
- "next_due_date": "2026-07-01",
- "created_at": "2026-02-01T12:00:00Z",
- "updated_at": "2026-04-01T12:00:00Z"
}
], - "meta": {
- "page_size": 20,
- "has_more": true,
- "next_cursor": "eyJlZmZlY3RpdmVfZGF0ZSI6IjIwMjYtMDItMDFUMDA6MDA6MDBaIiwiaWQiOiJhMmIzYzRkNS1lNmY3LTg5MDEtYmNkZS05MDEyMzQ1Njc4OTAifQ=="
}, - "status": "success",
- "message": "Payment schedules retrieved successfully"
}Published for route accountability in API 0.1.0. The runtime currently returns 501 until the payment-schedule lifecycle is implemented.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| policy_id required | string Reference to the policy this schedule services |
| frequency required | string (PaymentFrequency) Enum: "monthly" "quarterly" "half_yearly" "annual" Payment schedule frequency:
|
| amount required | integer <int64> >= 0 Scheduled payment amount per period in the smallest currency unit (e.g. cents). Exact integer representation. |
| currency required | string^[A-Z]{3}$ ISO 4217 currency code |
| next_due_date required | string <date> First scheduled payment date |
{- "policy_id": "pol_01abcdefghjkmnpqrstvwxyz01",
- "frequency": "half_yearly",
- "amount": 420000,
- "currency": "EUR",
- "next_due_date": "2026-06-01"
}{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Published for route accountability in API 0.1.0. The runtime currently returns 501 until the payment-schedule detail lifecycle is implemented.
| id required | string Example: pay_20260403_0001 Typed payment schedule identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Published for route accountability in API 0.1.0. The runtime currently returns 501 until the payment-schedule lifecycle state machine is implemented.
| id required | string Example: pay_20260403_0001 Typed payment schedule identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Published for route accountability in API 0.1.0. The runtime currently returns 501 until the payment-schedule lifecycle state machine is implemented.
| id required | string Example: pay_20260403_0001 Typed payment schedule identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "MISSING_PARAMETER",
- "title": "Bad Request",
- "detail": "Required parameter 'tenant context' is missing",
- "source": {
- "parameter": "tenant context"
}
}
]
}Retrieves a paginated list of invoices for the current tenant using cursor-based pagination under the governed contract.
Legacy offset-based pagination (limit/offset query params) is rejected with 400 LEGACY_PAGINATION.
Results sorted by created_at descending.
| page[size] | integer [ 1 .. 100 ] Default: 25 Maximum number of items to return (default 25, max 100) |
| page[after] | string Cursor for the next page (invoice ID from previous response) |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- { }
], - "message": "string",
- "meta": {
- "cursor": "eyJpZCI6MTAwfQ==",
- "next_cursor": "eyJpZCI6MTIwfQ==",
- "has_more": true,
- "page_size": 20,
- "total_count": 150
}, - "links": { },
- "telemetry": { }
}Retrieves a single invoice by its unique identifier. Returns 404 for unknown IDs or cross-tenant access attempts.
| id required | string Invoice identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": { },
- "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Finalizes a draft invoice, making it immutable. Requires actor attribution headers under the governed contract.
| id required | string Invoice identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| X-Actor-ID required | string Actor identifier (governed contract) |
| X-Actor-Type required | string Enum: "human" "service" "agent" Actor type (governed contract) |
{- "status": "success",
- "data": { },
- "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Closes a billing cycle for the specified period, generating an invoice. Requires actor attribution headers under the governed contract.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| X-Actor-ID required | string Actor identifier (governed contract) |
| X-Actor-Type required | string Enum: "human" "service" "agent" Actor type (governed contract) |
| period_start required | string <date-time> Start of the billing period (RFC3339) |
| period_end required | string <date-time> End of the billing period (RFC3339) |
| idempotency_key | string Optional idempotency key for deduplication |
{- "period_start": "2026-03-01T00:00:00Z",
- "period_end": "2026-03-31T23:59:59Z",
- "idempotency_key": "string"
}{- "status": "success",
- "data": { },
- "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Policy lifecycle — creation, versioning, endorsements, and status transitions. A policy binds a product to parties with specific terms and coverage dates. Status: draft → active → suspended → cancelled → expired → lapsed.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Starts a replacement workflow that supersedes one or more existing policies with a replacement policy. Returns the initial workflow state including the allowed transitions from the starting step.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
| policy_id required | string The replacement policy id (typed-prefix wire form). |
| existing_policy_ids required | Array of strings Policies being superseded by this replacement. |
| jurisdiction_code required | string ISO 3166-1 alpha-2 jurisdiction code (lowercase). |
required | object (replacementActor) |
| reason required | string Human-intelligible justification (audit trail). |
| occurred_at required | string <date-time> Business-event timestamp (RFC 3339). |
object Optional caller-supplied metadata. |
{- "policy_id": "pol_01j1234567890abcdefghijk",
- "existing_policy_ids": [
- "pol_01j9876543210abcdefghijk"
], - "jurisdiction_code": "za",
- "actor": {
- "actor_type": "human",
- "actor_id": "usr_01j1234567890abcdefghijk",
- "actor_original_id": "usr_01j1234567890abcdefghijk"
}, - "reason": "Customer requested upgrade to comprehensive cover",
- "occurred_at": "2026-06-02T12:00:00Z"
}{- "data": {
- "id": "string",
- "policy_id": "string",
- "existing_policy_ids": [
- "string"
], - "jurisdiction_code": "string",
- "state": "string",
- "config_pack_version_id": "string",
- "step_evidence": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "step_timestamps": {
- "property1": "2019-08-24T14:15:22Z",
- "property2": "2019-08-24T14:15:22Z"
}, - "transition_history": [
- { }
], - "allowed_transitions": [
- "string"
], - "explanation_tree_id": "string",
- "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "time_gate_info": {
- "step_name": "string",
- "min_wait_duration": "string",
- "earliest_advance": "2019-08-24T14:15:22Z"
}
}
}Fetch the current state of a replacement workflow by id.
| id required | string Example: prp_01j1234567890abcdefghijk Replacement workflow identifier (prp_ typed-prefix). |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "data": {
- "id": "string",
- "policy_id": "string",
- "existing_policy_ids": [
- "string"
], - "jurisdiction_code": "string",
- "state": "string",
- "config_pack_version_id": "string",
- "step_evidence": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "step_timestamps": {
- "property1": "2019-08-24T14:15:22Z",
- "property2": "2019-08-24T14:15:22Z"
}, - "transition_history": [
- { }
], - "allowed_transitions": [
- "string"
], - "explanation_tree_id": "string",
- "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "time_gate_info": {
- "step_name": "string",
- "min_wait_duration": "string",
- "earliest_advance": "2019-08-24T14:15:22Z"
}
}
}Advances the workflow to the next step, supplying the evidence payload
required by the current step. Optimistic-concurrency via version.
| id required | string Example: prp_01j1234567890abcdefghijk Replacement workflow identifier (prp_ typed-prefix). |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
required | object (replacementActor) |
| reason required | string Human-intelligible justification for the advance. |
| occurred_at required | string <date-time> Business-event timestamp (RFC 3339). |
required | object Step-specific evidence required to advance. |
| version required | integer Optimistic-concurrency version of the workflow being advanced. |
{- "actor": {
- "actor_type": "human",
- "actor_id": "usr_01j1234567890abcdefghijk",
- "actor_original_id": "usr_01j1234567890abcdefghijk"
}, - "reason": "Replacement disclosure acknowledged",
- "occurred_at": "2026-06-02T12:05:00Z",
- "evidence_payload": {
- "disclosure_acknowledged": true
}, - "version": 1
}{- "data": {
- "id": "string",
- "policy_id": "string",
- "existing_policy_ids": [
- "string"
], - "jurisdiction_code": "string",
- "state": "string",
- "config_pack_version_id": "string",
- "step_evidence": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "step_timestamps": {
- "property1": "2019-08-24T14:15:22Z",
- "property2": "2019-08-24T14:15:22Z"
}, - "transition_history": [
- { }
], - "allowed_transitions": [
- "string"
], - "explanation_tree_id": "string",
- "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "time_gate_info": {
- "step_name": "string",
- "min_wait_duration": "string",
- "earliest_advance": "2019-08-24T14:15:22Z"
}
}
}Cancels an in-flight replacement workflow. Optimistic-concurrency via version.
| id required | string Example: prp_01j1234567890abcdefghijk Replacement workflow identifier (prp_ typed-prefix). |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
required | object (replacementActor) |
| reason required | string Human-intelligible cancellation justification. |
| occurred_at required | string <date-time> Business-event timestamp (RFC 3339). |
| version required | integer Optimistic-concurrency version of the workflow being cancelled. |
{- "actor": {
- "actor_type": "human",
- "actor_id": "usr_01j1234567890abcdefghijk",
- "actor_original_id": "usr_01j1234567890abcdefghijk"
}, - "reason": "Customer withdrew request",
- "occurred_at": "2026-06-02T12:10:00Z",
- "version": 1
}{- "data": {
- "id": "string",
- "policy_id": "string",
- "existing_policy_ids": [
- "string"
], - "jurisdiction_code": "string",
- "state": "string",
- "config_pack_version_id": "string",
- "step_evidence": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "step_timestamps": {
- "property1": "2019-08-24T14:15:22Z",
- "property2": "2019-08-24T14:15:22Z"
}, - "transition_history": [
- { }
], - "allowed_transitions": [
- "string"
], - "explanation_tree_id": "string",
- "version": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "time_gate_info": {
- "step_name": "string",
- "min_wait_duration": "string",
- "earliest_advance": "2019-08-24T14:15:22Z"
}
}
}Returns the evidence collected per step for a replacement workflow.
| id required | string Example: prp_01j1234567890abcdefghijk Replacement workflow identifier (prp_ typed-prefix). |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract). |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "data": {
- "replacement_id": "string",
- "step_evidence": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "evidence_order": [
- "string"
]
}
}Evaluate and persist a tenant-owned event-effective proration decision for an existing event/assertion. The operation creates an immutable proration decision with typed components. Financial components may post through the ledger; non-financial components are durable decision inputs consumed by dynamic balance and temporal engines.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| policy_id required | string Policy identity in wire form. |
| premium_id | string Optional premium identity in wire form when the decision affects a known premium. |
| product_id required | string Product identity in wire form. Used by the server to resolve the proration_adjustments ruleset binding. |
| proration_intent required | string Tenant ruleset key that declares what adjustment intent to evaluate. |
| reason | string <= 1024 characters Operator-supplied reason for the adjustment request. |
| correction_of_decision_id | string Existing proration decision UUID corrected by this decision. |
required | object |
required | object |
object Tenant-owned rule inputs. Shape is validated by the resolved tenant ruleset. |
{- "policy_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "premium_id": "prm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "product_id": "prd_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "proration_intent": "mid_year_join",
- "reason": "string",
- "correction_of_decision_id": "string",
- "affected": {
- "party_role_id": "string",
- "cover_id": "string",
- "cover_term_id": "string",
- "cover_item_id": "string",
- "cover_item_term_id": "string",
- "policy_object_id": "string",
- "treaty_id": "string"
}, - "effective_times": {
- "premium_period_start": "2019-08-24T14:15:22Z",
- "premium_period_end": "2019-08-24T14:15:22Z",
- "cover_start": "2019-08-24T14:15:22Z",
- "cover_end": "2019-08-24T14:15:22Z",
- "entitlement_start": "2019-08-24T14:15:22Z",
- "entitlement_end": "2019-08-24T14:15:22Z"
}, - "inputs": { }
}{- "status": "success",
- "data": {
- "id": "evt_20260408_kyc",
- "event_id": "evt_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "status": "posted",
- "event_type": "string",
- "proration_intent": "string",
- "components": [
- {
- "component_type": "money",
- "consumer": "ledger",
- "affected": { },
- "amount_minor": 0,
- "currency": "string",
- "ratio_bps": 10000,
- "effective_start": "2019-08-24T14:15:22Z",
- "effective_end": "2019-08-24T14:15:22Z",
- "reason_code": "string",
- "metadata": { }
}
], - "ledger_entry_ids": [
- "string"
], - "explanation_tree_id": "string",
- "evidence_entry_id": 0,
- "ruleset": {
- "ruleset_type": "proration_adjustments",
- "ruleset_id": "string",
- "ruleset_version": "string",
- "resolved_at": "2019-08-24T14:15:22Z"
}, - "correction_of_decision_id": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Issue a new insurance policy under an active product. The policy is created in
"draft" status by default. At least one party must be assigned (typically the
policyholder). Draft policies are not endorsement-eligible; use
POST /v1/policies/bind to create an active, endorsement-eligible policy.
The product must be in "active" status before policies can be issued against it. The effective date must not be in the past (backdating requires special permissions).
Side effects: persists the policy in draft status with assigned parties; emits an audit entry recording the creation.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| product_id required | string Identifier of the product to issue the policy under |
required | string or string Date from which the policy provides coverage. YYYY-MM-DD and RFC3339 date-time are accepted; runtime normalizes the value before persistence. |
required | string or string Date on which the policy coverage ends. YYYY-MM-DD and RFC3339 date-time are accepted; runtime normalizes the value before persistence. |
object or null Policy-specific data | |
required | Array of objects (PolicyPartyRequest) non-empty Parties to assign to the policy (at least one required) |
| created_by | string Optional caller-supplied audit label. Authoritative actor attribution is derived from the authenticated actor context when omitted. |
| binding_mode | string Default: "individual" Enum: "individual" "group" Policy binding mode. When omitted, defaults to "individual" for backward compatibility. Set to "group" for master policy inception (group/employer/family). |
object or null Required when binding_mode=group; must be absent for individual policies. Describes the group contract metadata. |
{- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "effective_date": "2026-04-01",
- "expiry_date": "2027-03-31",
- "attributes": {
- "vehicle_registration": "AB12 CDE",
- "vehicle_make": "Volkswagen",
- "vehicle_model": "Golf",
- "vehicle_year": 2023,
- "sum_insured": 1000000,
- "territory": "UK"
}, - "parties": [
- {
- "party_id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "role": "policyholder"
}, - {
- "party_id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "role": "insured"
}
], - "created_by": "agent-user-012"
}{- "data": {
- "id": "ref_20260408_0001",
- "policy_number": "POL-2026-000142",
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "status": "draft",
- "effective_date": "2026-04-01",
- "expiry_date": "2027-03-31",
- "attributes": {
- "vehicle_registration": "AB12 CDE",
- "vehicle_make": "Volkswagen",
- "vehicle_model": "Golf",
- "vehicle_year": 2023,
- "sum_insured": 1000000,
- "territory": "UK"
}, - "parties": [
- {
- "party_id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "party_type": "individual",
- "role": "policyholder",
- "status": "active",
- "assigned_at": "2026-03-12T08:00:00Z"
}, - {
- "party_id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "party_type": "individual",
- "role": "insured",
- "status": "active",
- "assigned_at": "2026-03-12T08:00:00Z"
}
], - "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-03-12T08:00:00Z"
}, - "status": "success",
- "message": "Policy created successfully"
}Retrieve a cursor-paginated list of policies for the tenant.
Results are sorted by most-recently-recorded first. Sort order is not configurable.
Legacy limit and offset query parameters are rejected.
Returns policies across all statuses (draft, quoted, bound, active, lapsed, cancelled, expired).
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of policies to return in this cursor page |
| page[after] | string Opaque cursor returned as meta.next_cursor by the previous page |
| party_id | string Optional filter — return only policies the party is bound to in any role
(the party appears in |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "ref_20260408_0001",
- "policy_number": "POL-2026-000142",
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "status": "active",
- "effective_date": "2026-04-01",
- "expiry_date": "2027-03-31",
- "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-04-01T00:00:00Z"
}, - {
- "id": "ref_20260408_0001",
- "policy_number": "POL-2026-000143",
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "status": "cancelled",
- "effective_date": "2026-03-01",
- "expiry_date": "2027-02-28",
- "created_at": "2026-02-28T11:00:00Z",
- "updated_at": "2026-03-10T09:00:00Z"
}
], - "meta": {
- "page_size": 20,
- "has_more": false
}, - "status": "success"
}Bind parties to covers through an active policy version. This contract is the primary policy-creation operation — it reads party and covers/products context, creates an immutable policy version, and conditionally triggers premium effects. Requires idempotency: callers must supply an idempotency key to prevent duplicate policy creation on retry.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| quote_id | string Quote identifier for quote-backed bind. Mutually exclusive with inline fields (product_id, effective_date, expiry_date). |
| product_id | string Product identifier for inline bind. Required when quote_id is not provided. |
| effective_date | string <date-time> RFC3339 timestamp for policy activation. Required for inline bind (when quote_id is not provided). |
| expiry_date | string <date-time> RFC3339 timestamp for policy expiry. Required for inline bind (when quote_id is not provided). |
object | |
required | Array of objects non-empty |
| payment_method required | string |
| bound_by required | string |
| binding_mode | string Default: "individual" Enum: "individual" "group" Policy binding mode. Defaults to "individual" for backward compatibility. Set to "group" for master policy inception. |
object or null Required when binding_mode=group; must be absent for individual. |
{- "quote_id": "string",
- "product_id": "string",
- "effective_date": "2019-08-24T14:15:22Z",
- "expiry_date": "2019-08-24T14:15:22Z",
- "underwriting_data": { },
- "parties": [
- {
- "party_id": "string",
- "role": "policyholder"
}
], - "payment_method": "string",
- "bound_by": "string",
- "binding_mode": "individual",
- "group_context": {
- "group_type": "family",
- "group_name": "string",
- "external_group_ref": "string"
}
}{- "status": "success",
- "data": {
- "policy_id": "string",
- "policy_number": "string",
- "status": "active",
- "premium_breakdown": { },
- "bound_at": "2019-08-24T14:15:22Z",
- "premium_id": "string",
- "explanation_tree_id": "string",
- "ledger_entry_ids": [
- "string"
]
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Retrieve a single policy with its full details including assigned parties and premium schedule.
| id required | string Unique policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": {
- "id": "ref_20260408_0001",
- "policy_number": "POL-2026-000142",
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "status": "active",
- "effective_date": "2026-04-01",
- "expiry_date": "2027-03-31",
- "attributes": {
- "vehicle_registration": "AB12 CDE",
- "vehicle_make": "Volkswagen",
- "vehicle_model": "Golf",
- "sum_insured": 1000000
}, - "parties": [
- {
- "party_id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "party_type": "individual",
- "role": "policyholder",
- "status": "active",
- "assigned_at": "2026-03-12T08:00:00Z"
}
], - "premiums": [
- {
- "id": "ref_20260408_0001",
- "amount": 11500,
- "due_date": "2026-04-01",
- "status": "paid",
- "payment_method": "debit_order"
}, - {
- "id": "ref_20260408_0001",
- "amount": 11500,
- "due_date": "2026-05-01",
- "status": "pending",
- "payment_method": "debit_order"
}
], - "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-04-01T00:00:00Z"
}, - "status": "success"
}Create a new version snapshot of the policy. Policy versions provide an immutable record of the policy state at each point in time, supporting "as-was" semantics required for claims adjudication and regulatory reporting.
Each version captures the complete policy state including attributes, parties, and coverage details at the time of creation.
Side effects: creates a new immutable policy version through the VersionService, including retroactive guard enforcement, rule snapshot capture, atomic close/open validity transition, explanation provenance, outbox emission, and post-mutation audit.
| id required | string Unique policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| effective_date required | string <date> Date from which this version takes effect |
| reason | string Reason for creating a new version |
| created_by | string Identifier of the user or service creating this version |
{- "effective_date": "2026-06-01",
- "reason": "Mid-term adjustment — sum insured increase from 250,000 to 300,000",
- "created_by": "underwriter-user-003"
}{- "data": {
- "id": "pov_4d5e6f7a8b9c0123defa234567890123",
- "policy_id": "pol_1a2b3c4d5e6f7890abcdef1234567890",
- "version_number": 2,
- "version_type": "endorsement",
- "effective_from": "2026-06-01T00:00:00Z",
- "effective_to": null,
- "change_reason": "Mid-term adjustment — sum insured increase from 250,000 to 300,000",
- "created_by": "underwriter-user-003",
- "previous_version": "pov_1a2b3c4d5e6f7890abcdef1234567890",
- "created_at": "2026-05-28T14:00:00Z"
}, - "status": "success",
- "message": "Policy version created successfully"
}Return every immutable version snapshot for the policy, ordered by version_number ascending.
| id required | string Unique policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "string",
- "policy_id": "string",
- "version_number": 2,
- "version_type": "issuance",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "change_reason": "string",
- "created_by": "string",
- "previous_version": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
], - "message": "string",
- "meta": {
- "total": 87,
- "limit": 20,
- "offset": 40
}, - "links": { },
- "telemetry": { }
}Transition a policy from draft to bound status. The policy must have at least one party with the policyholder role assigned.
Side effects: persists the status change and emits an audit entry with operation code policy.issue in a single transaction.
| id required | string Unique policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| issued_by required | string Identifier of the user or service issuing the policy |
| notes | string Optional notes for the issue action |
{- "issued_by": "string",
- "notes": "string"
}{- "data": {
- "id": "ref_20260408_0001",
- "policy_number": "POL-2026-000142",
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "status": "bound",
- "effective_date": "2026-04-01",
- "expiry_date": "2027-03-31",
- "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-03-20T10:00:00Z"
}, - "status": "success",
- "message": "Policy issued successfully"
}Transition a policy from bound to active status. The policy's effective date must be in the past or present (effective_date <= now).
Side effects: persists the status change and emits an audit entry with operation code policy.activate in a single transaction.
| id required | string Unique policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| activated_by required | string Identifier of the user or service activating the policy |
{- "activated_by": "string"
}{- "data": {
- "id": "ref_20260408_0001",
- "policy_number": "POL-2026-000142",
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "status": "active",
- "effective_date": "2026-04-01",
- "expiry_date": "2027-03-31",
- "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-03-20T10:30:00Z"
}, - "status": "success",
- "message": "Policy activated successfully"
}Submit an endorsement (mid-term adjustment) to an active policy. Endorsements
record structured changes to the policy terms, coverage, or parties.
The policy must be in active status; endorsing a draft or other non-active
policy returns HTTP 422 with code INVALID_STATE_TRANSITION.
Each endorsement receives a sequential number within the policy (END-001, END-002, etc.) and triggers the creation of a new policy version when applied.
Side effects: creates a new immutable policy version and persists party-role
changes when change_type=parties. Emits an audit entry when audit is configured.
Common endorsement types:
| id required | string Unique policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| change_type required | string Enum: "parties" "coverages" "terms" "premium" Classification of the endorsement change |
| description required | string Human-readable description of the changes |
Array of objects New parties to add (for change_type 'parties') | |
object or null Structured representation of attribute changes | |
| endorsed_by required | string Identifier of the user or process creating the endorsement |
| effective_at | string <date-time> Effective timestamp for party endorsements (change_type=parties). Must not be retroactive. Required when change_type=parties. |
Array of objects Party mutations for change_type=parties endorsements. Each entry specifies an operation (add/revoke/replace), party_id, and role. |
{- "change_type": "coverages",
- "description": "Increase vehicle insured value following market revaluation",
- "updated_attributes": {
- "sum_insured": {
- "from": 350000,
- "to": 420000
}, - "monthly_premium": {
- "from": 1850,
- "to": 2150
}
}, - "endorsed_by": "underwriter-user-003"
}{- "data": {
- "id": "ref_20260408_0001",
- "policy_id": "pol_01abcdefghjkmnpqrstvwxyz01",
- "endorsement_number": "END-001",
- "type": "amendment",
- "description": "Increase vehicle insured value following market revaluation",
- "effective_date": "2026-07-01",
- "status": "pending",
- "changes": {
- "sum_insured": {
- "from": 350000,
- "to": 420000
}, - "monthly_premium": {
- "from": 1850,
- "to": 2150
}
}, - "endorsed_by": "underwriter-user-003",
- "created_at": "2026-06-25T14:00:00Z"
}, - "status": "success",
- "message": "Endorsement created successfully"
}Return the policy's endorsements, ordered by version_number ascending. Endorsements are stored as policy version snapshots (no separate entity); this list is the policy's versions filtered to version_type == endorsement.
| id required | string Unique policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "string",
- "policy_id": "string",
- "version_number": 2,
- "version_type": "issuance",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "change_reason": "string",
- "created_by": "string",
- "previous_version": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
], - "message": "string",
- "meta": {
- "total": 87,
- "limit": 20,
- "offset": 40
}, - "links": { },
- "telemetry": { }
}Retrieve a read-only certificate of insurance for a specific member on a
group policy. Resolves the effective policy version and active roles at the
as_of timestamp (defaults to now). Returns the master policy_id, party_id,
role list, effectivity window, and pinned version_id.
No persistence side effects — this is a pure read projection.
Returns 404 if the party is unknown or inactive at the given as_of time.
| id required | string Unique policy identifier |
| party_id required | string Identifier of the member party |
| as_of | string <date-time> Point-in-time for certificate resolution (defaults to now) |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": {
- "policy_id": "pol_1a2b3c4d5e6f7890abcdef1234567890",
- "party_id": "par_a1b2c3d4e5f67890abcdef1234567890",
- "version_id": "pov_4d5e6f7a8b9c0123defa234567890123",
- "roles": [
- "policyholder",
- "insured"
], - "effective_from": "2026-04-01T00:00:00Z",
- "effective_to": null
}, - "status": "success",
- "message": "Certificate retrieved successfully"
}Create a tenant-owned draft insurance lifecycle definition for an admitted product or business object. The server derives tenant authority from X-Tenant-Context and rejects generic workflow, BPMN, public PipelineTemplate, and raw public rule-evaluation authoring.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| lifecycle_key required | string^[a-z][a-z0-9_:-]{2,127}$ Server-scoped lifecycle key. It is not a raw workflow or PipelineTemplate identifier. |
| product_id required | string^[a-z][a-z0-9_:-]{2,127}$ Product or cover catalogue identifier governed by the operating tenant. |
| business_object_kind | string Enum: "policy" "replacement" "endorsement" "claim" "assertion" "premium" "payment" |
| lifecycle_purpose required | string Enum: "replacement" "endorsement" "claim" "assertion" "premium_collection" "payment_schedule" "policy_issue" "policy_cancellation" |
| jurisdiction | string [ 2 .. 16 ] characters ^[a-z][a-z0-9_:-]{1,15}$ |
| authoring_kind | string Value: "insurance_lifecycle" Closed authoring kind. Generic workflow, BPMN, raw PipelineTemplate, and raw rule evaluation are rejected. |
| initial_state required | string |
| terminal_states | Array of strings non-empty |
required | Array of objects (LifecycleState) >= 2 items |
required | Array of objects (LifecycleTransition) non-empty |
| compliance_pack_keys | Array of strings |
required | Array of objects (LifecycleObligation) non-empty |
required | Array of objects (LifecycleObligation) non-empty |
required | Array of objects (LifecycleObligation) non-empty |
required | Array of objects (LifecycleExplanationObligation) non-empty |
object |
{- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "lifecycle_key": "string",
- "product_id": "string",
- "lifecycle_purpose": "string",
- "publication_status": "draft",
- "version": 1,
- "content_hash": "string",
- "immutable_after_publish": true,
- "definition": {
- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}
}
}Validate an insurance lifecycle definition draft against Axiom lifecycle grammar, custody, transition, evidence, retention, and explanation rules before publication. Validation is deterministic and fails closed for generic workflow/BPMN, public PipelineTemplate, raw public rule evaluation, and caller-supplied tenant authority.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
required | object (LifecycleDefinitionDraftRequest) |
{- "definition": {
- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}
}{- "data": {
- "accepted": true,
- "canonical_request_hash": "string",
- "findings": [
- {
- "code": "string",
- "severity": "error",
- "message": "string"
}
]
}
}Publish a validated lifecycle definition version. Published versions are immutable, effective-time bound, and become eligible for server-side lifecycle binding resolution only after validation and publication evidence are recorded.
| definition_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| expected_version required | integer >= 1 |
| effective_from required | string <date-time> |
| validation_receipt_id required | string |
| canonical_request_hash required | string^sha256:[a-f0-9]{64}$ |
{- "expected_version": 1,
- "effective_from": "2019-08-24T14:15:22Z",
- "validation_receipt_id": "string",
- "canonical_request_hash": "string"
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "lifecycle_key": "string",
- "product_id": "string",
- "lifecycle_purpose": "string",
- "publication_status": "draft",
- "version": 1,
- "content_hash": "string",
- "immutable_after_publish": true,
- "definition": {
- "lifecycle_key": "string",
- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "replacement",
- "jurisdiction": "za",
- "authoring_kind": "insurance_lifecycle",
- "initial_state": "string",
- "terminal_states": [
- "string"
], - "states": [
- {
- "key": "string",
- "label": "string",
- "terminal": true
}, - {
- "key": "string",
- "label": "string",
- "terminal": true
}
], - "transitions": [
- {
- "key": "string",
- "from": "string",
- "to": "string",
- "actor_authority": [
- {
- "actor_role": "string",
- "authority_kind": "tenant_operator"
}
], - "ruleset_refs": [
- "string"
], - "time_gate_refs": [
- "string"
], - "evidence_refs": [
- "string"
], - "audit_refs": [
- "string"
], - "retention_refs": [
- "string"
], - "explanation_refs": [
- "string"
]
}
], - "compliance_pack_keys": [
- "string"
], - "evidence_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "audit_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "explanation_obligations": [
- {
- "key": "string",
- "description": "string",
- "audiences": [
- "tenant_operator"
]
}
], - "metadata": {
- "property1": "string",
- "property2": "string"
}
}
}
}Create a tenant-owned compliance-pack draft that can be pinned by lifecycle definitions and bindings. The pack records jurisdiction, legal references, obligations, evidence, disclosures, time gates, retention, and activation posture without becoming code-hidden compliance behavior.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| pack_key required | string^[a-z][a-z0-9_:-]{2,127}$ |
| jurisdiction required | string |
required | Array of objects (LifecycleObligation) non-empty |
| legal_references required | Array of strings non-empty |
| evidence_requirements required | Array of strings non-empty |
required | Array of objects (LifecycleObligation) non-empty |
Array of objects |
{- "pack_key": "string",
- "jurisdiction": "string",
- "obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "legal_references": [
- "string"
], - "evidence_requirements": [
- "string"
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "time_gates": [
- {
- "key": "string",
- "duration": "720h"
}
]
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "pack_key": "string",
- "jurisdiction": "string",
- "publication_status": "draft",
- "version": 1,
- "content_hash": "string",
- "pack": {
- "pack_key": "string",
- "jurisdiction": "string",
- "obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "legal_references": [
- "string"
], - "evidence_requirements": [
- "string"
], - "retention_obligations": [
- {
- "key": "string",
- "description": "string"
}
], - "time_gates": [
- {
- "key": "string",
- "duration": "720h"
}
]
}
}
}Create an effective-time lifecycle binding from tenant/product/business-object scope to published lifecycle definition and compliance-pack versions. The server resolves tenant authority and callers cannot supply raw PipelineTemplate identifiers, raw ruleset selectors, or tenant override facts.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| product_id required | string^[a-z][a-z0-9_:-]{2,127}$ |
| business_object_kind | string Enum: "policy" "replacement" "endorsement" "claim" "assertion" "premium" "payment" |
| lifecycle_purpose required | string |
| jurisdiction required | string^[a-z][a-z0-9_:-]{1,15}$ |
| definition_key required | string^[a-z][a-z0-9_:-]{2,127}$ |
| definition_version required | integer >= 1 |
| definition_content_hash required | string^sha256:[a-f0-9]{64}$ |
Array of objects (CompliancePackPin) | |
| effective_from required | string <date-time> |
| effective_until | string <date-time> |
{- "product_id": "string",
- "business_object_kind": "policy",
- "lifecycle_purpose": "string",
- "jurisdiction": "string",
- "definition_key": "string",
- "definition_version": 1,
- "definition_content_hash": "string",
- "compliance_pack_pins": [
- {
- "pack_key": "string",
- "pack_version": 1,
- "pack_content_hash": "string"
}
], - "effective_from": "2019-08-24T14:15:22Z",
- "effective_until": "2019-08-24T14:15:22Z"
}{- "data": {
- "id": "pty_01abcdefghjkmnpqrstvwxyz01",
- "type": "policy",
- "product_id": "string",
- "lifecycle_purpose": "string",
- "jurisdiction": "string",
- "definition_key": "string",
- "definition_version": 0,
- "definition_content_hash": "string",
- "compliance_pack_pins": [
- {
- "pack_key": "string",
- "pack_version": 1,
- "pack_content_hash": "string"
}
], - "effective_from": "2019-08-24T14:15:22Z",
- "effective_until": "2019-08-24T14:15:22Z",
- "enabled": true
}
}Creates a persisted premium calculation (quote) with a 30-minute TTL. Exactly one of pricing_snapshot_id, products, or product_id must be provided.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| pricing_snapshot_id | string Reference to a prior rate result snapshot (mutually exclusive with products) |
Array of objects Inline product + risk_profile pairs (mutually exclusive with pricing_snapshot_id) | |
| product_id | string Legacy single-product shorthand (backward compatible) |
| effective_date required | string <date> |
| expiry_date required | string <date> |
object | |
| covers_selected | Array of strings Default: [] |
| comparison_ref | string Links comparison sets for quote comparison |
| supersedes | string Quote ID this quote supersedes |
Array of objects (QuoteParty) Party snapshot for bind-time matching |
{- "pricing_snapshot_id": "string",
- "products": [
- {
- "product_id": "string",
- "risk_profile": { }
}
], - "product_id": "string",
- "effective_date": "2026-04-01",
- "expiry_date": "2027-04-01",
- "underwriting_data": {
- "age": 35,
- "vehicle_value": 25000
}, - "covers_selected": [ ],
- "comparison_ref": "string",
- "supersedes": "string",
- "parties": [
- {
- "party_id": "string",
- "role": "string"
}
]
}{- "status": "success",
- "data": {
- "quote_id": "qte-a1b2c3d4",
- "product_id": "prod-abc123",
- "effective_date": "2026-04-01T00:00:00Z",
- "expiry_date": "2027-04-01T00:00:00Z",
- "underwriting_data": {
- "age": 35,
- "vehicle_value": 25000
}, - "covers_selected": [
- "COMP",
- "TPL"
], - "pricing_snapshot": { },
- "created_at": "2026-06-10T10:00:00Z",
- "valid_until": "2026-06-10T10:30:00Z",
- "actor_type": "human",
- "actor_id": "usr-abc",
- "actor_original_id": "usr-abc"
}, - "telemetry": {
- "total_ms": 42,
- "trace_id": "trace-abc123"
}
}Returns all quotes for a given comparison_ref, ordered by created_at DESC. Tenant-scoped to prevent cross-tenant leakage.
| comparison_ref required | string Comparison reference to filter quotes |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "quote_id": "qte-a1b2c3d4",
- "product_id": "prod-abc123",
- "effective_date": "2026-04-01T00:00:00Z",
- "expiry_date": "2027-04-01T00:00:00Z",
- "underwriting_data": { },
- "covers_selected": [ ],
- "pricing_snapshot": { },
- "created_at": "2026-06-10T10:00:00Z",
- "valid_until": "2026-06-10T10:30:00Z",
- "actor_type": "human",
- "actor_id": "usr-abc",
- "actor_original_id": "usr-abc",
- "comparison_ref": "cmp-xyz789"
}
], - "telemetry": {
- "total_ms": 18,
- "trace_id": "trace-def456"
}
}Returns the persisted quote if active. Returns 404 for unknown IDs (including cross-tenant lookups) and 410 Gone for expired quotes.
| id required | string Quote identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": {
- "quote_id": "qte-a1b2c3d4",
- "product_id": "prod-abc123",
- "effective_date": "2026-04-01T00:00:00Z",
- "expiry_date": "2027-04-01T00:00:00Z",
- "underwriting_data": { },
- "covers_selected": [ ],
- "pricing_snapshot": { },
- "created_at": "2026-06-10T10:00:00Z",
- "valid_until": "2026-06-10T10:30:00Z",
- "actor_type": "human",
- "actor_id": "usr-abc",
- "actor_original_id": "usr-abc"
}, - "telemetry": {
- "total_ms": 12,
- "trace_id": "trace-ghi789"
}
}Transitions a quote from indicative to firm status. Requires actor attribution (governed contract).
| id required | string Quote identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": {
- "quote_id": "qte-a1b2c3d4",
- "product_id": "prod-abc123",
- "effective_date": "2026-04-01T00:00:00Z",
- "expiry_date": "2027-04-01T00:00:00Z",
- "underwriting_data": { },
- "covers_selected": [ ],
- "pricing_snapshot": { },
- "created_at": "2026-06-10T10:00:00Z",
- "valid_until": "2026-06-10T10:30:00Z",
- "actor_type": "human",
- "actor_id": "usr-abc",
- "actor_original_id": "usr-abc"
}, - "telemetry": {
- "total_ms": 15,
- "trace_id": "trace-jkl012"
}
}Transitions a quote to declined status. Requires a reason_code. Requires actor attribution (governed contract).
| id required | string Quote identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| reason_code required | string Machine-readable reason for declining the quote |
{- "reason_code": "string"
}{- "status": "success",
- "data": {
- "quote_id": "qte-a1b2c3d4",
- "product_id": "prod-abc123",
- "effective_date": "2026-04-01T00:00:00Z",
- "expiry_date": "2027-04-01T00:00:00Z",
- "underwriting_data": { },
- "covers_selected": [ ],
- "pricing_snapshot": { },
- "created_at": "2026-06-10T10:00:00Z",
- "valid_until": "2026-06-10T10:30:00Z",
- "actor_type": "human",
- "actor_id": "usr-abc",
- "actor_original_id": "usr-abc"
}, - "telemetry": {
- "total_ms": 11,
- "trace_id": "trace-mno345"
}
}Binds a firm quote, creating a policy, premium allocation, ledger entries, and explanation tree. Only firm quotes can be bound. Requires actor attribution (governed contract).
| id required | string Quote identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| Idempotency-Key required | string Idempotency key for bind operations (required under the governed contract) |
| payment_method required | string |
| bound_by required | string |
Array of objects (QuoteParty) Bind-time parties (must match quote snapshot if provided) |
{- "payment_method": "string",
- "bound_by": "string",
- "parties": [
- {
- "party_id": "string",
- "role": "string"
}
]
}{- "status": "success",
- "data": {
- "quote_id": "qte-a1b2c3d4",
- "policy_id": "pol-xyz789",
- "premium_ids": [
- "prm-abc001"
], - "allocation_explanation_tree_id": "tree-001",
- "ledger_entry_ids": [
- "led-001",
- "led-002"
]
}, - "telemetry": {
- "total_ms": 340,
- "trace_id": "trace-pqr678"
}
}Returns the full supersession chain for a quote, ordered oldest-first. Walks backward through supersedes_quote_id links and reverses.
| id required | string Quote identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "quote_id": "qte-earlier",
- "product_id": "prod-abc123",
- "effective_date": "2026-04-01T00:00:00Z",
- "expiry_date": "2027-04-01T00:00:00Z",
- "underwriting_data": { },
- "covers_selected": [ ],
- "pricing_snapshot": { },
- "created_at": "2026-06-09T10:00:00Z",
- "valid_until": "2026-06-09T10:30:00Z",
- "actor_type": "human",
- "actor_id": "usr-abc",
- "actor_original_id": "usr-abc"
}, - {
- "quote_id": "qte-a1b2c3d4",
- "product_id": "prod-abc123",
- "effective_date": "2026-04-01T00:00:00Z",
- "expiry_date": "2027-04-01T00:00:00Z",
- "underwriting_data": { },
- "covers_selected": [ ],
- "pricing_snapshot": { },
- "created_at": "2026-06-10T10:00:00Z",
- "valid_until": "2026-06-10T10:30:00Z",
- "actor_type": "human",
- "actor_id": "usr-abc",
- "actor_original_id": "usr-abc",
- "supersedes_quote_id": "qte-earlier"
}
], - "telemetry": {
- "total_ms": 9,
- "trace_id": "trace-stu901"
}
}Read a tenant-owned policy-scoped balance derived from accepted proration decision components for implemented governed contract proration consumers. Slice 1 supports fund and earning balances; treaty-scoped reinsurance balances fail closed until governed treaty authority exists.
| policy_id required | string Policy ID in pol_ wire form. |
| consumer required | string Enum: "fund_balance" "earning_balance" "reinsurance_balance" Implemented proration balance consumer. |
| period_start required | string <date-time> Inclusive balance period start. |
| period_end required | string <date-time> Exclusive balance period end. |
| fund_account_code | string Fund account code, required for fund_balance unless account_code is supplied. |
| account_code | string Generic account code for fund or earning balance scope. |
| earning_period_key | string Earning period key, required for earning_balance unless account_code is supplied. |
| decompose | boolean Default: false Include constituent proration component IDs and operation details. |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
{- "status": "success",
- "data": {
- "currency": "string",
- "amount": "string",
- "item_count": 0,
- "metadata": { },
- "explanation": { }
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Premium management — billing records and premium calculation engine. Includes standalone premium CRUD and product-based calculation with adjustments and commission breakdowns.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Evaluate and persist a tenant-owned event-effective proration decision for an existing event/assertion. The operation creates an immutable proration decision with typed components. Financial components may post through the ledger; non-financial components are durable decision inputs consumed by dynamic balance and temporal engines.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
| policy_id required | string Policy identity in wire form. |
| premium_id | string Optional premium identity in wire form when the decision affects a known premium. |
| product_id required | string Product identity in wire form. Used by the server to resolve the proration_adjustments ruleset binding. |
| proration_intent required | string Tenant ruleset key that declares what adjustment intent to evaluate. |
| reason | string <= 1024 characters Operator-supplied reason for the adjustment request. |
| correction_of_decision_id | string Existing proration decision UUID corrected by this decision. |
required | object |
required | object |
object Tenant-owned rule inputs. Shape is validated by the resolved tenant ruleset. |
{- "policy_id": "pol_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "premium_id": "prm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "product_id": "prd_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "proration_intent": "mid_year_join",
- "reason": "string",
- "correction_of_decision_id": "string",
- "affected": {
- "party_role_id": "string",
- "cover_id": "string",
- "cover_term_id": "string",
- "cover_item_id": "string",
- "cover_item_term_id": "string",
- "policy_object_id": "string",
- "treaty_id": "string"
}, - "effective_times": {
- "premium_period_start": "2019-08-24T14:15:22Z",
- "premium_period_end": "2019-08-24T14:15:22Z",
- "cover_start": "2019-08-24T14:15:22Z",
- "cover_end": "2019-08-24T14:15:22Z",
- "entitlement_start": "2019-08-24T14:15:22Z",
- "entitlement_end": "2019-08-24T14:15:22Z"
}, - "inputs": { }
}{- "status": "success",
- "data": {
- "id": "evt_20260408_kyc",
- "event_id": "evt_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "status": "posted",
- "event_type": "string",
- "proration_intent": "string",
- "components": [
- {
- "component_type": "money",
- "consumer": "ledger",
- "affected": { },
- "amount_minor": 0,
- "currency": "string",
- "ratio_bps": 10000,
- "effective_start": "2019-08-24T14:15:22Z",
- "effective_end": "2019-08-24T14:15:22Z",
- "reason_code": "string",
- "metadata": { }
}
], - "ledger_entry_ids": [
- "string"
], - "explanation_tree_id": "string",
- "evidence_entry_id": 0,
- "ruleset": {
- "ruleset_type": "proration_adjustments",
- "ruleset_id": "string",
- "ruleset_version": "string",
- "resolved_at": "2019-08-24T14:15:22Z"
}, - "correction_of_decision_id": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Validates a proposed allocation breakdown without persisting it. Accepts only simulation_preview as trigger. Returns 422 for semantic validation failures (sum mismatch, missing rule_id, invalid inputs).
Each operation in the request specifies a benefit change (add, remove, change) with proposed allocation values in allocation_inputs.
| id required | string Policy identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
required | object |
{- "data": {
- "type": "allocation-simulations",
- "attributes": {
- "as_of": "2019-08-24T14:15:22Z",
- "base_policy_version_id": "string",
- "trigger": "simulation_preview",
- "operations": [
- {
- "op": "add_benefit",
- "benefit_id": "string",
- "allocation_inputs": {
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "allocation_percentage_bps": 0,
- "allocation_basis": "bottom_up",
- "calculation_version": "string",
- "allocation_rule_id": "string"
}
}
]
}
}
}{- "data": [
- {
- "type": "allocation-simulations",
- "id": "string",
- "attributes": {
- "benefit_id": "string",
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "allocation_percentage_bps": 0,
- "allocation_basis": "string",
- "calculation_version": "string",
- "allocation_rule_id": "string",
- "trigger": "string"
}
}
], - "meta": {
- "simulated": true,
- "calculation_version": "string"
}
}Returns cursor-paginated temporal allocation snapshots for all premiums in a policy. Ordered by effective_from DESC, created_at DESC, premium_id ASC. Uses half-open [effective_from, effective_to) temporal semantics under the governed contract.
| id required | string Policy identifier |
| page[size] | integer [ 1 .. 100 ] Default: 20 Number of resources per page |
| page[after] | string Cursor for forward pagination (allocation ID) |
| page[before] | string Cursor for backward pagination (allocation ID) |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "type": "policy-allocation-history-entries",
- "id": "string",
- "attributes": {
- "premium_id": "string",
- "benefit_id": "string",
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "allocation_percentage_bps": 0,
- "allocation_basis": "bottom_up",
- "calculation_version": "string",
- "allocation_rule_id": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "trigger": "string"
}
}
], - "meta": {
- "page_size": 0,
- "has_more": true,
- "next_cursor": "string"
}
}Retrieve a paginated list of aggregate premium records for the operating
tenant (one Premium per policy, the contract model). Cursor-paginated with
page[size] default 20 / max 100 and opaque page[after] cursors.
Legacy limit and offset query parameters are rejected.
The policy_id / party_id filter parameters are validated fail-loud (a
malformed typed-prefix value returns 400, governed contract); they compose with the
operating-tenant tenant-isolated scope, never widen it.
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of premiums to return in this cursor page |
| page[after] | string Opaque cursor returned as meta.next_cursor by the previous page |
| policy_id | string Optional filter — return only premiums for this policy.
Accepts the canonical typed-prefix policy id ( |
| party_id | string Optional filter — return only premiums owed by this party (the premium
debtor / policyholder). Accepts the canonical typed-prefix party id
( |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "prm_01abcdefghjkmnpqrstvwxyz01",
- "policy_id": "pol_6wcq9sjx7b8q8vwbhdzbwdzzbd",
- "premium_type": "initial",
- "status": "active",
- "currency": "zar",
- "base_premium": 125000,
- "total_discount": 0,
- "total_surcharge": 0,
- "tax_amount": 0,
- "net_premium": 125000,
- "final_premium": 125000,
- "installment_count": 12,
- "installment_amount_minor": 10417,
- "payment_frequency": "monthly",
- "effective_date": "2026-01-01T00:00:00Z",
- "created_at": "2026-01-01T00:00:00Z",
- "updated_at": "2026-01-01T00:00:00Z"
}, - {
- "id": "prm_01abcdefghjkmnpqrstvwxyz01",
- "policy_id": "pol_6wcq9sjx7b8q8vwbhdzbwdzzbd",
- "premium_type": "renewal",
- "status": "draft",
- "currency": "gbp",
- "base_premium": 9550,
- "total_discount": 0,
- "total_surcharge": 0,
- "tax_amount": 0,
- "net_premium": 9550,
- "final_premium": 9550,
- "installment_count": 1,
- "installment_amount_minor": 9550,
- "payment_frequency": "annual",
- "effective_date": "2026-02-15T00:00:00Z",
- "created_at": "2026-01-15T00:00:00Z",
- "updated_at": "2026-01-15T00:00:00Z"
}
], - "meta": {
- "page_size": 20,
- "has_more": false
}, - "status": "success"
}Persist a new aggregate premium (inflow-obligation) record for a policy and
return it with 201 Created. Exactly one Premium exists per policy
(the (tenant context, policy_id) uniqueness constraint, the contract model) — a create for a policy
that already has a premium fails loud with 409 Conflict.
This persists a manually-entered / imported inflow-obligation record at
status=draft. It is NOT a rated premium decision — the rated path is
POST /v1/premiums/calculate, which evaluates versioned CEL rules and emits
an explanation tree. A draft obligation carries no rating decision to
explain (platform principle untouched).
The premium is scoped to the operating tenant — tenant context is taken from the
tenant-context, never the request body. Intentional defaults applied on
create (documented, not silent): status=draft, premium_type defaults to
initial, and an unrated draft sets base_premium = net_premium = final_premium = amount.amount_minor (no discounts/commission yet, contract rule).
Idempotent via the Idempotency-Key header: same key + same body returns the
original 201; same key + different body returns 409.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| policy_id required | string Reference to the policy this premium belongs to, in the canonical
typed-prefix form ( |
required | object Premium amount (exact integer minor units + lowercase ISO-4217 currency code). Must be non-empty. |
| premium_type | string Optional classifier on the aggregate premium (defaults to
|
| party_id | string Optional reference to the party who owes this premium, in the
canonical typed-prefix form ( |
{- "policy_id": "pol_6wcq9sjx7b8q8vwbhdzbwdzzbd",
- "amount": {
- "amount_minor": 125000,
- "currency_code": "zar"
}, - "premium_type": "initial"
}{- "data": {
- "id": "prm_01abcdefghjkmnpqrstvwxyz01",
- "policy_id": "pol_6wcq9sjx7b8q8vwbhdzbwdzzbd",
- "premium_type": "initial",
- "status": "draft",
- "currency": "zar",
- "base_premium": 125000,
- "total_discount": 0,
- "total_surcharge": 0,
- "tax_amount": 0,
- "net_premium": 125000,
- "final_premium": 125000,
- "installment_count": 1,
- "installment_amount_minor": 125000,
- "payment_frequency": "annual",
- "effective_date": "2026-03-12T08:00:00Z",
- "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-03-12T08:00:00Z"
}, - "status": "success",
- "message": "Premium created successfully"
}Retrieve a single premium record by its unique identifier.
| id required | string Unique premium identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": {
- "id": "prm_01abcdefghjkmnpqrstvwxyz01",
- "policy_id": "pol_6wcq9sjx7b8q8vwbhdzbwdzzbd",
- "party_id": "pty_01h9xg2c7e8f4a5b6c7d8e9f0a",
- "premium_type": "initial",
- "status": "active",
- "currency": "zar",
- "base_premium": 125000,
- "total_discount": 0,
- "total_surcharge": 0,
- "tax_amount": 0,
- "net_premium": 125000,
- "final_premium": 125000,
- "installment_count": 12,
- "installment_amount_minor": 10417,
- "payment_frequency": "monthly",
- "effective_date": "2026-01-01T00:00:00Z",
- "due_date": "2026-04-01T00:00:00Z",
- "created_at": "2026-01-01T00:00:00Z",
- "updated_at": "2026-03-02T08:30:00Z"
}, - "status": "success"
}Calculate a premium quotation for a given product and rating profile. This is a read-only operation that does not create any records -- it returns the calculated premium breakdown including base premium, adjustments, commissions, and totals.
The calculation uses the product's configured pricing rules and evaluates them against the provided rating factors. Each adjustment is itemised with the rule name and human-readable explanation for full transparency.
On the CEL pricing path (triggered by effective_date in rating_inputs), commission
is derived from versioned CEL rules classified as entity_type=pricing and
rule_type=commission_rate within the same ruleset binding. When no commission rule
exists for the resolved product and effective date, commission is zero and the
commissions list is empty; legacy product JSON is not consulted. Commission amounts
are exact int64 minor units; float outputs are rejected.
This endpoint supports quote journeys where the premium is calculated before a policy is issued.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| policy_id required | string Reference to the policy being priced. Required for CEL context assembly. |
| product_id required | string Reference to the product to calculate premium for |
required | object Rating inputs for premium calculation. When |
{- "policy_id": "pol_6wcq9sjx7b8q8vwbhdzbwdzzbd",
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "rating_inputs": {
- "effective_date": "2026-04-01T00:00:00Z",
- "risk_profile": {
- "driver_age": 28,
- "vehicle_value": 350000,
- "vehicle_make": "Volkswagen",
- "vehicle_model": "Polo",
- "vehicle_year": 2023,
- "prior_events_count": 0,
- "event_free_years": 3,
- "state": "New York",
- "parking_type": "secure_garage"
}
}
}{- "data": {
- "product_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "base_premium": {
- "amount_minor": 1200000,
- "currency_code": "usd"
}, - "total_premium": {
- "amount_minor": 1380000,
- "currency_code": "usd"
}, - "gross_premium": {
- "amount_minor": 1380000,
- "currency_code": "usd"
}, - "discount_total": {
- "amount_minor": 0,
- "currency_code": "usd"
}, - "net_premium": {
- "amount_minor": 1380000,
- "currency_code": "usd"
}, - "adjusted_premium": {
- "amount_minor": 1380000,
- "currency_code": "usd"
}, - "final_premium": {
- "amount_minor": 1380000,
- "currency_code": "usd"
}, - "adjustments": [
- {
- "rule_name": "young_driver_loading",
- "adjustment": 180000,
- "description": "Young driver loading — primary driver age 28, 15% applied to base premium"
}, - {
- "rule_name": "event_free_discount",
- "adjustment": -120000,
- "description": "Event-free rating discount — 3 event-free years, 10% discount applied"
}, - {
- "rule_name": "urban_risk_loading",
- "adjustment": 120000,
- "description": "Geographical risk loading — New York state, 10% applied"
}
], - "discounts": [ ],
- "commissions": [
- {
- "role_type": "broker",
- "amount": 207000,
- "commission_type": "initial"
}
], - "calculated_at": "2026-03-12T08:00:00Z"
}, - "status": "success",
- "message": "Premium calculated successfully"
}Computes the cancellation return-premium for the supplied policy/event using
the as-was product ruleset binding (governed contract). Non-zero refunds post a
balanced premium_refund ledger transaction (governed contract) — one
debit against premium-income and one credit against
premium-refund-payable. Zero-refund decisions persist an explanation tree
and return an empty ledger entry list without fabricating ledger rows. The
refund amount is calculated by the configured method on the binding:
pro_rata, short_rate, or minimum_earned. All amounts are exact int64
minor units; basis points are int64 (governed contract).
The same call durably persists an AC-7 explanation tree (governed contract). For
non-zero refunds the tree is persisted in the same transaction as
the ledger entries; the persisted tree's ID is stamped on both ledger legs
as explanation_tree_id.
Idempotency is keyed strictly on the client-supplied Idempotency-Key
header (governed contract). Replays return 200 OK with is_replay=true and the
original transaction's ledger entry IDs; first-posts return 201 Created.
An empty Idempotency-Key returns 422 IDEMPOTENCY_KEY_REQUIRED.
Cancellation return premium (pro-rata, short-rate, minimum-earned). All required inputs and configuration must be present and well-formed; missing or malformed cancellation_refund.* keys surface as typed 422 errors with stable codes.
| id required | string Unique premium identifier |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| Idempotency-Key required | string non-empty Client-supplied idempotency key (governed contract). Required. The server
derives the per-leg ledger row keys as |
required | object |
{- "data": {
- "type": "premium-cancellation-refunds",
- "attributes": {
- "policy_id": "pol_6wcq9sjx7b8q8vwbhdzbwdzzbd",
- "product_id": "prod-001",
- "cancellation_event_id": "evt-001",
- "cancellation_date": "2026-04-01T00:00:00Z",
- "coverage_start": "2026-01-01T00:00:00Z",
- "coverage_end": "2027-01-01T00:00:00Z",
- "refund_beneficiary_party_id": "party-001"
}
}
}{- "data": {
- "type": "premium-cancellation-refunds",
- "id": "string",
- "attributes": {
- "transaction_id": "string",
- "is_replay": true,
- "ledger_entry_ids": [
- "string"
], - "explanation_tree_id": "string",
- "refund_amount": 0,
- "currency": "string"
}
}
}Returns the benefit-level allocation breakdown for a premium at a point in time. Uses half-open temporal semantics under the governed contract.
Each allocation row includes benefit_id, amount (Money object with amount_minor + currency_code), allocation_percentage_bps, allocation_basis, calculation_version, and allocation_rule_id (when basis is rule_based).
| id required | string Premium identifier |
| as_of | string <date-time> Point-in-time for temporal query (RFC3339). Defaults to now. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "type": "premium-allocation-snapshots",
- "id": "string",
- "attributes": {
- "premium_id": "string",
- "benefit_id": "string",
- "amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "allocation_percentage_bps": 10000,
- "allocation_basis": "bottom_up",
- "calculation_version": "string",
- "allocation_rule_id": "string",
- "effective_from": "2019-08-24T14:15:22Z",
- "effective_to": "2019-08-24T14:15:22Z",
- "trigger": "string"
}
}
]
}Read a tenant-owned policy-scoped balance derived from accepted proration decision components for implemented governed contract proration consumers. Slice 1 supports fund and earning balances; treaty-scoped reinsurance balances fail closed until governed treaty authority exists.
| policy_id required | string Policy ID in pol_ wire form. |
| consumer required | string Enum: "fund_balance" "earning_balance" "reinsurance_balance" Implemented proration balance consumer. |
| period_start required | string <date-time> Inclusive balance period start. |
| period_end required | string <date-time> Exclusive balance period end. |
| fund_account_code | string Fund account code, required for fund_balance unless account_code is supplied. |
| account_code | string Generic account code for fund or earning balance scope. |
| earning_period_key | string Earning period key, required for earning_balance unless account_code is supplied. |
| decompose | boolean Default: false Include constituent proration component IDs and operation details. |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
{- "status": "success",
- "data": {
- "currency": "string",
- "amount": "string",
- "item_count": 0,
- "metadata": { },
- "explanation": { }
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Record a collected premium payment as a balanced ledger transaction with one debit entry and one or more per-allocation credit entries. The request is idempotent by business event: replay returns the original transaction with is_replay=true and no duplicate ledger entries.
| id required | string Premium identifier. Accepts the canonical |
required | object |
{- "data": {
- "type": "premium-collections",
- "attributes": {
- "payment_id": "pay_01h9xg2c7e8f4a5b6c7d8e9f0a",
- "collected_at": "2026-04-01T10:00:00Z"
}
}
}{- "data": {
- "type": "premium-collections",
- "id": "string",
- "attributes": {
- "transaction_id": "string",
- "is_replay": true,
- "debit_entry": {
- "id": "string",
- "account_code": "string",
- "entry_type": "debit",
- "amount": 0,
- "currency": "string",
- "entity_type": "string",
- "entity_id": "string"
}, - "credit_entries": [
- {
- "id": "string",
- "account_code": "string",
- "entry_type": "debit",
- "amount": 0,
- "currency": "string",
- "entity_type": "string",
- "entity_id": "string"
}
]
}
}, - "status": "success"
}Insurance product catalogue — product definitions, covers, cover provisions, terms, pricing rules, and commissions. Products are templates from which policies are created. Supports motor, property, health, life, liability, and more.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Create a product definition in the catalogue. Products define the coverage template from which policies are issued. A product includes coverage sections (covers), configurable terms, pricing rules, and commission structures.
Products are created in "draft" status and must be explicitly activated before policies can be issued against them.
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| product_code required | string Human-readable product code (must be unique within the tenant) |
| name required | string Display name of the product |
| type required | string Product classification |
| description required | string Detailed description of the product |
| currency required | string^[a-z]{3}$ Lowercase ISO-4217 currency code. Uppercase input is accepted and normalized to lowercase canonical form by the runtime. |
required | object Product configuration including required base_premium. governed contract: missing base_premium is an error, not a default. |
required | Array of objects (AddCoverRequest) non-empty Required: at least one coverage section (governed contract: no silent defaults) |
required | Array of objects (ProductTermCreate) non-empty Required: at least one configurable term (governed contract: no silent defaults). Create-shaped: no server-minted term id (governed contract / governed contract). |
{- "product_code": "MOTOR-TPL-2026",
- "name": "Motor Third-Party Liability",
- "type": "motor",
- "description": "Mandatory third-party liability cover for motor vehicles registered in the United Kingdom",
- "currency": "gbp",
- "attributes": {
- "base_premium": 120000,
- "region": "UK",
- "regulatory_class": "compulsory",
- "minimum_age": 17
}, - "covers": [
- {
- "code": "TPL-BODILY",
- "name": "Third-Party Bodily Injury",
- "description": "Covers liability for bodily injury to third parties arising from vehicle use",
- "type": "basic",
- "sum_insured": 1000000,
- "deductible": 0
}, - {
- "code": "TPL-PROPERTY",
- "name": "Third-Party Property Damage",
- "description": "Covers liability for damage to third-party property",
- "type": "basic",
- "sum_insured": 250000,
- "deductible": 500
}
], - "terms": [
- {
- "code": "POLICY-DURATION",
- "name": "Policy Duration",
- "data_type": "integer",
- "required": true
}
]
}{- "data": {
- "id": "prd_3f8a9c1e2b7d4f60",
- "product_code": "MOTOR-TPL-2026",
- "name": "Motor Third-Party Liability",
- "type": "motor",
- "status": "draft",
- "description": "Mandatory third-party liability cover for motor vehicles registered in the United Kingdom",
- "currency": "gbp",
- "attributes": {
- "base_premium": 120000,
- "region": "UK",
- "regulatory_class": "compulsory",
- "minimum_age": 17
}, - "covers": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "TPL-BODILY",
- "name": "Third-Party Bodily Injury",
- "type": "basic",
- "sum_insured": 1000000,
- "deductible": 0,
- "status": "active"
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "TPL-PROPERTY",
- "name": "Third-Party Property Damage",
- "type": "basic",
- "sum_insured": 250000,
- "deductible": 500,
- "status": "active"
}
], - "terms": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "POLICY-DURATION",
- "name": "Policy Duration",
- "data_type": "integer",
- "required": true
}
], - "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-03-12T08:00:00Z"
}, - "status": "success",
- "message": "Product created successfully"
}Retrieve a paginated list of products in the tenant's catalogue. Results are sorted by recorded_at descending with a stable cursor tiebreaker. Sort order is not configurable.
Both draft and active products are returned. Use the status field to filter if needed (client-side filtering).
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of products to return in this cursor page |
| page[after] | string Opaque product cursor from the previous response meta.next_cursor |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "prd_3f8a9c1e2b7d4f60",
- "product_code": "MOTOR-TPL-2026",
- "name": "Motor Third-Party Liability",
- "type": "motor",
- "status": "active",
- "description": "Mandatory third-party liability cover for motor vehicles",
- "currency": "gbp",
- "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-03-12T08:00:00Z"
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "product_code": "HEALTH-COMP-2026",
- "name": "Comprehensive Health Cover",
- "type": "health",
- "status": "active",
- "description": "Comprehensive health plan covering inpatient, outpatient, dental, and optical care",
- "currency": "usd",
- "created_at": "2026-03-11T14:00:00Z",
- "updated_at": "2026-03-11T14:00:00Z"
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "product_code": "LIFE-TERM-2026",
- "name": "Term Life Assurance",
- "type": "life",
- "status": "draft",
- "description": "Fixed-term life assurance with lump sum death benefit",
- "currency": "usd",
- "created_at": "2026-03-10T09:00:00Z",
- "updated_at": "2026-03-10T09:00:00Z"
}
], - "meta": {
- "page_size": 20,
- "has_more": false
}, - "status": "success"
}Retrieve a single product with its full configuration including covers, terms, pricing rules, and commission structures.
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": {
- "id": "prd_3f8a9c1e2b7d4f60",
- "product_code": "LIAB-PROF-2026",
- "name": "Professional Indemnity Insurance",
- "type": "liability",
- "status": "active",
- "description": "Professional indemnity cover for regulated professionals including legal, accounting, and consulting firms",
- "currency": "eur",
- "attributes": {
- "market": "EMEA",
- "eligible_professions": [
- "legal",
- "accounting",
- "consulting",
- "engineering"
]
}, - "covers": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "PI-CLAIMS",
- "name": "Professional Negligence Claims",
- "type": "basic",
- "sum_insured": 2000000,
- "deductible": 5000,
- "status": "active"
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "PI-DEFENCE",
- "name": "Legal Defence Costs",
- "type": "basic",
- "sum_insured": 500000,
- "deductible": 0,
- "status": "active"
}
], - "terms": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "RETRO-DATE",
- "name": "Retroactive Date",
- "data_type": "date",
- "required": true
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "RUN-OFF-YEARS",
- "name": "Run-Off Period",
- "data_type": "integer",
- "required": false,
- "default_value": "6"
}
], - "pricing_rules": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "name": "Revenue Band Rating",
- "rule_type": "risk_factor",
- "base_rate": 0.005,
- "expression": "revenue_band == 'high' ? 0.008 : 0.005",
- "status": "active"
}
], - "commissions": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "role_type": "broker",
- "commission_type": "initial",
- "rate": 0.15,
- "calculation_basis": "gross_premium",
- "status": "active"
}
], - "created_at": "2026-02-01T10:00:00Z",
- "updated_at": "2026-03-01T16:00:00Z"
}, - "status": "success"
}Update an existing product's metadata, attributes, or status. Products can be transitioned from "draft" to "active" status via this endpoint.
Updating an active product creates a new version. Existing policies issued under previous versions are not affected.
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| name | string Updated display name |
| description | string Updated description |
| status | string Enum: "draft" "active" "suspended" "discontinued" Updated product lifecycle status. Status-only changes use the status-only persistence path and do not rewrite the cover graph. |
| base_premium | integer <int64> Base premium amount in the smallest currency unit. |
object or null Updated extensible attributes. | |
| updated_by | string Deprecated Retired compatibility field. Product update attribution is derived from the authenticated actor context. |
{- "status": "active"
}{- "data": {
- "id": "prd_3f8a9c1e2b7d4f60",
- "product_code": "MOTOR-TPL-2026",
- "name": "Motor Third-Party Liability",
- "type": "motor",
- "status": "active",
- "description": "Mandatory third-party liability cover for motor vehicles",
- "currency": "gbp",
- "created_at": "2026-03-12T08:00:00Z",
- "updated_at": "2026-03-12T10:00:00Z"
}, - "status": "success",
- "message": "Product updated successfully"
}Retrieve all coverage sections (covers) defined for a product. Each cover includes its sum insured, deductible, type (basic/optional/rider), and any associated cover provision definitions and terms.
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "TPL-BODILY",
- "name": "Third-Party Bodily Injury",
- "description": "Covers liability for bodily injury to third parties",
- "type": "basic",
- "sum_insured": 1000000,
- "deductible": 0,
- "status": "active"
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "TPL-PROPERTY",
- "name": "Third-Party Property Damage",
- "description": "Covers liability for damage to third-party property",
- "type": "basic",
- "sum_insured": 25000000,
- "deductible": 50000,
- "status": "active"
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "code": "WINDSCREEN",
- "name": "Windscreen Cover",
- "description": "Covers repair or replacement of windscreens and vehicle glass",
- "type": "optional",
- "sum_insured": 500000,
- "deductible": 0,
- "status": "active"
}
], - "status": "success"
}CRS-3: add a cover to a draft product. The cover may carry nested
cover_items (each with terms) and cover-level cover_terms, persisted
as the full canonical cover.* row graph in one atomic transaction. Money
boundaries are exact integer minor units with a lowercase ISO-4217 currency;
a monetary boundary missing its currency is rejected (422). Co-insurance
panel splits (basis points) must sum to 10000bp (100%) or the request is
rejected (422).
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| code required | string Short code for this coverage section |
| name required | string Display name |
| description | string Detailed description of coverage |
| type required | string Enum: "basic" "optional" "rider" Coverage type within the product |
| sum_insured | integer or null <int64> Maximum amount payable under this cover in the smallest currency unit (e.g. cents). Exact integer representation. |
| deductible | integer or null <int64> Excess amount the insured must pay before the cover responds in the smallest currency unit (e.g. cents). Exact integer representation. |
object or null Extensible attributes | |
Array of objects or null (AddCoverItemRequest) CRS-3: nested cover items, each with its own terms. Persisted as the full canonical cover.* row graph in one atomic transaction. | |
Array of objects or null (AddCoverTermRequest) CRS-3: nested cover-level terms (conditions, limits, exclusions). |
{- "code": "TPL-BODILY",
- "name": "Third-Party Bodily Injury",
- "description": "Covers liability for bodily injury to third parties arising from vehicle use",
- "type": "basic",
- "sum_insured": 100000000,
- "deductible": 50000,
- "attributes": { },
- "cover_items": [
- {
- "code": "gp-consultation",
- "name": "GP Consultation",
- "description": "string",
- "type": "benefit",
- "classification": "string",
- "triggers": [
- "string"
], - "attributes": { },
- "terms": [
- {
- "code": "annual-limit",
- "name": "Annual Limit",
- "description": "string",
- "type": "limit",
- "expression": "string",
- "boundary": {
- "min": 0,
- "max": 50000000,
- "currency": "EUR",
- "unit": "days"
}, - "attributes": { }
}
]
}
], - "cover_terms": [
- {
- "code": "annual-limit",
- "name": "Annual Limit",
- "description": "string",
- "type": "limit",
- "expression": "string",
- "boundary": {
- "min": 0,
- "max": 50000000,
- "currency": "EUR",
- "unit": "days"
}, - "attributes": { }
}
]
}{- "status": "success",
- "data": {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "INPATIENT",
- "name": "Inpatient Hospital Cover",
- "description": "Covers hospitalisation, surgery, and intensive care unit stays",
- "type": "basic",
- "sum_insured": 50000000,
- "deductible": 100000,
- "attributes": {
- "waiting_period_days": 30,
- "co_payment_percentage": 20
}, - "status": "active",
- "cover_items": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "SURG-BEN",
- "name": "Surgical Benefit",
- "description": "Covers elective and emergency surgical procedures",
- "type": "benefit",
- "classification": "medical",
- "triggers": [
- "hospitalisation",
- "day_surgery"
], - "attributes": { },
- "terms": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "MAX-CLAIM-LIMIT",
- "name": "Maximum Claim Limit",
- "description": "Maximum contract-response amount per event",
- "type": "limit",
- "parent_type": "cover",
- "parent_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "expression": "assertion.amount_minor <= 25000000",
- "boundary": {
- "min": 0,
- "max": 50000000,
- "currency": "EUR",
- "unit": "days"
}, - "attributes": { }
}
]
}
], - "cover_terms": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "MAX-CLAIM-LIMIT",
- "name": "Maximum Claim Limit",
- "description": "Maximum contract-response amount per event",
- "type": "limit",
- "parent_type": "cover",
- "parent_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "expression": "assertion.amount_minor <= 25000000",
- "boundary": {
- "min": 0,
- "max": 50000000,
- "currency": "EUR",
- "unit": "days"
}, - "attributes": { }
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Creates or supersedes the active product↔ruleset binding for the given
ruleset_type (pipeline stage). under the governed contract a single product
carries one binding per (tenant context, product_id, ruleset_type, effective_from); binding a different ruleset_type does NOT close the
prior stage's active row — supersession is per-stage.
ruleset_type is REQUIRED and must be in the canonical allowlist
(see 400 INVALID_RULESET_TYPE body for the accepted set). Earlier
runtime behaviour silently defaulted the field to claims_assessment
at the persistence boundary. The current contract rejects missing or
unknown values at the HTTP boundary with the accepted set listed in the
error body.
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| ruleset_id required | string ID of the ruleset to bind to the product |
| ruleset_type required | string Pipeline stage the binding satisfies. Must be in the canonical allowlist; see 400 INVALID_RULESET_TYPE response for the full set. |
| ruleset_version required | integer >= 1 Version number of the bound ruleset |
| effective_from required | string <date> Date this binding becomes active (YYYY-MM-DD) |
{- "ruleset_id": "string",
- "ruleset_type": "premium_rating",
- "ruleset_version": 1,
- "effective_from": "2026-01-01"
}{- "data": {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "product_id": "prd_d4e5f6a7b8c90123def0123456789abc",
- "ruleset_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "ruleset_type": "premium_rating",
- "ruleset_version": 1,
- "effective_from": "2026-01-01T00:00:00Z",
- "created_by": "usr_abc123"
}, - "status": "success"
}Returns the binding history for a product in deterministic order
(effective_from DESC, created_at DESC, id DESC). Each item includes
ruleset_type so callers can distinguish stages without re-querying.
Optional ?ruleset_type= filter narrows the response to a single
stage. Unknown values are rejected with 400 INVALID_RULESET_TYPE
(no silent empty-list).
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| ruleset_type | string Filter by pipeline stage; must be in the canonical allowlist |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "product_id": "prd_d4e5f6a7b8c90123def0123456789abc",
- "ruleset_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "ruleset_type": "premium_rating",
- "ruleset_version": 2,
- "effective_from": "2026-03-01T00:00:00Z",
- "created_by": "usr_abc123"
}, - {
- "id": "cov_01abcdefghjkmnpqrstvwxyz01",
- "product_id": "prd_d4e5f6a7b8c90123def0123456789abc",
- "ruleset_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "ruleset_type": "premium_rating",
- "ruleset_version": 1,
- "effective_from": "2026-01-01T00:00:00Z",
- "effective_to": "2026-03-01T00:00:00Z",
- "created_by": "usr_abc123"
}
], - "status": "success"
}Transition a product from draft to active status. The product must have at least one cover and defined terms (with explicit validation bounds) before activation.
This is a status-only transition: it does NOT re-persist the product's cover graph, so it never collides on existing covers (unlike a full PUT update). Side effects: persists the status change and emits a formal activation explanation tree (governed contract).
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| activated_by | string Deprecated Retired compatibility field. Product activation attribution is derived from the authenticated actor context and this value is ignored. |
{- "activated_by": "usr_3f8a"
}{- "status": "success",
- "data": {
- "id": "prd_3f8a9c1e2b7d4f60",
- "product_code": "HEALTH-COMP-2026",
- "name": "Comprehensive Health Cover",
- "type": "health",
- "status": "draft",
- "description": "Comprehensive health insurance covering inpatient, outpatient, and dental care",
- "currency": "zar",
- "attributes": {
- "underwriting_class": "standard",
- "renewable": true
}, - "covers": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "INPATIENT",
- "name": "Inpatient Hospital Cover",
- "description": "Covers hospitalisation, surgery, and intensive care unit stays",
- "type": "basic",
- "sum_insured": 50000000,
- "deductible": 100000,
- "attributes": {
- "waiting_period_days": 30,
- "co_payment_percentage": 20
}, - "status": "active",
- "cover_items": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "SURG-BEN",
- "name": "Surgical Benefit",
- "description": "Covers elective and emergency surgical procedures",
- "type": "benefit",
- "classification": "medical",
- "triggers": [
- "hospitalisation",
- "day_surgery"
], - "attributes": { },
- "terms": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "MAX-CLAIM-LIMIT",
- "name": "Maximum Claim Limit",
- "description": "Maximum contract-response amount per event",
- "type": "limit",
- "parent_type": "cover",
- "parent_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "expression": "assertion.amount_minor <= 25000000",
- "boundary": {
- "min": 0,
- "max": 50000000,
- "currency": "EUR",
- "unit": "days"
}, - "attributes": { }
}
]
}
], - "cover_terms": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "MAX-CLAIM-LIMIT",
- "name": "Maximum Claim Limit",
- "description": "Maximum contract-response amount per event",
- "type": "limit",
- "parent_type": "cover",
- "parent_id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "expression": "assertion.amount_minor <= 25000000",
- "boundary": {
- "min": 0,
- "max": 50000000,
- "currency": "EUR",
- "unit": "days"
}, - "attributes": { }
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string"
}
], - "terms": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "code": "POLICY-TERM-MONTHS",
- "name": "Policy Term",
- "description": "Duration of the policy in months",
- "data_type": "integer",
- "required": true,
- "default_value": "12",
- "validations": [
- {
- "rule_type": "min",
- "value": 1,
- "error_message": "Policy term must be at least 1 month"
}
], - "attributes": { }
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string",
- "pricing_rules": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "name": "Age Rating Factor",
- "rule_type": "age_factor",
- "base_rate": 1.25,
- "expression": "age >= 50 ? 1.5 : 1.0",
- "attributes": {
- "age_bands": [
- {
- "min_age": 18,
- "max_age": 35,
- "factor": 1
}, - {
- "min_age": 36,
- "max_age": 50,
- "factor": 1.25
}
]
}, - "status": "active"
}
], - "commissions": [
- {
- "id": "prd_01abcdefghjkmnpqrstvwxyz01",
- "role_type": "broker",
- "commission_type": "initial",
- "rate": 0.1,
- "min_amount": 5000,
- "max_amount": 500000,
- "calculation_basis": "gross_premium",
- "attributes": { },
- "status": "active"
}
], - "created_at": "2026-01-10T08:00:00Z",
- "updated_at": "2026-02-01T16:30:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Contract-admitted operation for external process tooling to ask Axiom a named governed product decision question at a process decision point. Axiom owns tenant context, product binding resolution, ruleset/pipeline selection, audit evidence, and explanation evidence.
This Slice 2 contract admits the runtime binding skeleton. A runtime call is parsed, tenant-bound, actor-bound, checked against the contract-owned allowlists, and delegated to the internal Product Decision Evaluation service. Until ruleset or pipeline execution, audit persistence, and explanation persistence are wired, the service must fail closed with a typed technical error, never with a business outcome.
Callers must not supply raw ruleset_id, raw pipeline template
identifiers, tenant authority fields, retention policy, explanation
audience overrides, or transport-failure-to-business-outcome mappings.
BPMN and workflow engines route only on the stable decision_code
returned by Axiom after a successful evaluation.
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
| Idempotency-Key required | string [ 8 .. 128 ] characters ^[A-Za-z0-9._:-]+$ Idempotency key scoped by operating tenant. |
| decision_intent required | string (ProductDecisionIntent) ^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$ Decision intent name from the contract-owned decision-intent registry. Slice 1 admits the naming and validation shape; runtime registry lookup is owned by the implementation slice. |
| product_stage required | string (ProductDecisionStage) ^[a-z][a-z0-9_]*$ Product-stage name from the contract-owned product-stage registry. A stage names process decision context; it does not select a ruleset or workflow model. |
| effective_at required | string <date-time> Timestamp used for as-was product binding resolution. |
| requested_outputs required | Array of strings (ProductDecisionRequestedOutput) non-empty unique Items Enum: "decision_code" "reason_codes" "routeable_outputs" "required_document_codes" "premium_amount" "referral_reason" "settlement_amount" |
required | object Controlled input facts or references needed by the named decision intent. Facts are data only and never grant tenant, ruleset, pipeline, retention, or explanation authority. Runtime evaluation must reject nested authority-shaped facts such as raw ruleset, pipeline, tenant, retention, explanation-audience, transport-status, or infrastructure-status selectors. |
| canonical_request_hash required | string^sha256:[a-f0-9]{64}$ SHA-256 hash of the canonical product decision evaluation request
payload. The canonical payload contains exactly |
{- "decision_intent": "quote.premium_rating",
- "product_stage": "quotation",
- "effective_at": "2026-09-06T10:00:00Z",
- "requested_outputs": [
- "decision_code",
- "reason_codes",
- "routeable_outputs",
- "premium_amount"
], - "facts": {
- "party_ref": "par_01example000000000000000001",
- "quote_ref": "quo_01example000000000000000001",
- "declared_income_band": "middle",
- "smoker_status": false,
- "requested_cover_amount_minor": 50000000,
- "currency": "zar"
}, - "canonical_request_hash": "sha256:0c4f36305a512094cb6ec2e150823254a2db606243293c210a8def41ed0be464"
}{- "data": {
- "decision_evaluation_id": "pde_01example000000000000000001",
- "decision_intent": "quote.premium_rating",
- "product_stage": "quotation",
- "decision_code": "accept",
- "reason_codes": [
- "premium_rated"
], - "routeable_outputs": {
- "next_route": "continue_to_underwriting",
- "premium_amount": {
- "amount_minor": 125000,
- "currency": "zar"
}
}, - "binding": {
- "ruleset_type": "premium_rating",
- "ruleset_id": "rst_01example000000000000000001",
- "ruleset_version": 3,
- "pipeline_version": "pipe_2026_09_06",
- "effective_at": "2026-09-06T10:00:00Z"
}, - "audit_ref": "aud_01example000000000000000001",
- "explanation_ref": "exp_01example000000000000000001",
- "evaluation_at": "2026-09-06T10:00:01Z",
- "canonical_request_hash": "sha256:0c4f36305a512094cb6ec2e150823254a2db606243293c210a8def41ed0be464"
}, - "status": "success"
}Returns the per-product audit feed in descending performed-at order. The feed is scoped to the admitted tenant context, verifies that the product exists before reading audit rows, and never returns a silent empty feed for an unknown product identifier.
Use limit and offset for the current bounded alpha page contract.
The runtime default is 50 rows from offset 0.
| id required | string^prd_[A-Za-z0-9]+$ Typed product identifier rendered by the API. The storage UUID remains internal. |
| limit | integer [ 1 .. 200 ] Default: 50 Maximum number of audit entries to return. |
| offset | integer >= 0 Default: 0 Zero-based audit entry offset. |
| X-Tenant-Context required | string Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract) |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": [
- {
- "id": "string",
- "action": "state_transition",
- "subject_type": "assertion",
- "subject_id": "audit_entry_20260408_0001",
- "actor": "assertion-assessor@tenant.example.com",
- "details": {
- "from_state": "open",
- "to_state": "under_investigation",
- "reason": "Assigned to assessor for inspection"
}, - "correlation_id": "string",
- "timestamp": "2026-03-12T14:22:00Z"
}
], - "message": "string",
- "meta": {
- "limit": 0,
- "offset": 0,
- "has_more": true
}, - "links": { },
- "telemetry": { }
}Report generation and export (PDF, CSV).
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Published for route accountability in API 0.1.0. The runtime currently returns 501 until the tenant-owned report-runner substrate is implemented.
Supported report types:
premium_collection — Premium collection summary by product and periodclaims_register — Claims register with status, amounts, and settlement detailsloss_ratio — Loss ratio analysis by product linepolicy_register — Policy register with coverage and premium detailsreconciliation — Ledger reconciliation reportcommission_statement — Broker commission statementWhen implemented, successful responses will return report file content rather than a JSON envelope. API 0.1.0 does not yet publish that runtime promise.
| type required | string Enum: "premium_collection" "claims_register" "loss_ratio" "policy_register" "reconciliation" "commission_statement" Example: type=premium_collection Report type to generate |
| format required | string Enum: "pdf" "csv" Example: format=pdf Output format for the report |
| date_from | string <date> Example: date_from=2026-01-01 Start date for the report period (inclusive, ISO 8601 date) |
| date_to | string <date> Example: date_to=2026-03-31 End date for the report period (inclusive, ISO 8601 date) |
| product_code | string Example: product_code=motor-comprehensive Filter report to a specific product code |
| currency | string^[A-Z]{3}$ Example: currency=USD Currency for monetary amounts (defaults to tenant base currency) |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "errors": [
- {
- "status": "400",
- "code": "INVALID_REQUEST",
- "title": "Invalid request",
- "detail": "unknown report type \"unknown\"",
- "meta": {
- "schema_version": "axiom.report-export.unavailable.v1",
- "requested_type": "unknown",
- "accepted_types": [
- "premium_collection",
- "claims_register",
- "loss_ratio",
- "policy_register",
- "reconciliation",
- "commission_statement"
], - "evidence_ref": "docs/reference/shape-contract-corpus/specs/s2-reporting-analytics-contract.md",
- "explanation_ref": "docs/audits/search-reporting-analytics-read-models/remediation/evidence/AUD-SEARCH-REPORTING-ANALYTICS-READ-MODELS-0005.md",
- "freshness_status": "unavailable",
- "degraded": true,
- "redaction_posture": "not-run-no-export-payload",
- "consumer_metadata": "report-runner-not-admitted",
- "runtime_authority": "no-admitted-report-runner",
- "availability_state": "unavailable"
}
}
]
}Business rules engine — rulesets, rules, testing, and deployment. Rules are data.: explicit, versioned, deterministic, auditable. Supports CEL expressions, conditions, and actions.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Creates a new ruleset in draft status.
Rulesets are versioned containers of business rules that govern domain rule lanes such as underwriting, pricing, retained claim-family assessment, document completeness, or discount composition. Rules are data. — explicit, versioned, deterministic, and auditable.
Optionally specify a base_ruleset UUID to copy rules from
an existing ruleset as a starting point. Copied rules preserve their
business codes and receive new technical IDs.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| code required | string Machine-readable ruleset code (must be unique within the tenant) |
| name required | string Human-readable ruleset name |
| entity_type required | string Enum: "annual_cap" "cancellation_and_refunds" "claims_assessment" "commission" "coverage" "discount" "document_completeness" "eligibility" "payments" "premium_collection" "premium_rating" "procedure_eligibility" "proration_adjustments" "rating" "regulatory" "shortfall_calculation" "waiting_periods" Canonical ruleset_type / pipeline stage this ruleset governs. The
service validates this value against ProductRulesetBinding's canonical
allowlist and rejects retired lane words such as |
| description required | string Detailed description of the ruleset purpose |
object or null Optional metadata (jurisdiction, product line, etc.) | |
| base_ruleset | string or null Existing ruleset UUID to use as a creation-time template. Codes are not accepted for this field. The successor draft receives the next numeric version, lineage metadata in attributes, and copied rules with their business codes preserved. This is a bounded compatibility copy path only; governed evaluation composition uses CompositionResolver / PipelineExecutor and live ruleset bindings, not BaseRuleset snapshot inheritance. |
{- "code": "health-gap-ng-v1",
- "name": "Nigeria Health Gap Cover",
- "entity_type": "premium_rating",
- "description": "Pricing rules for health gap cover in Nigeria",
- "attributes": {
- "jurisdiction": "NG",
- "product_line": "health",
- "effective_from": "2026-07-01"
}
}{- "data": {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "health-gap-ng-v1",
- "name": "Nigeria Health Gap Cover",
- "entity_type": "premium_rating",
- "description": "Pricing rules for health gap cover in Nigeria",
- "status": "draft",
- "version": 1,
- "attributes": {
- "jurisdiction": "NG",
- "product_line": "health",
- "effective_from": "2026-07-01"
}, - "rules": [ ],
- "created_at": "2026-04-03T10:00:00Z",
- "updated_at": "2026-04-03T10:00:00Z"
}, - "status": "success",
- "message": "Ruleset created successfully"
}Retrieves a paginated list of rulesets for the current tenant.
Results are sorted by recorded_at descending with the ruleset id as
a stable cursor tiebreaker. Legacy limit and offset query parameters
are rejected; use page[size] and page[after].
| page[size] | integer [ 1 .. 100 ] Default: 20 Example: page[size]=20 Maximum number of items to return (default 20, max 100) |
| page[after] | string Example: page[after]=eyJyZWNvcmRlZF9hdCI6IjIwMjYtMDgtMTVUMTI6MDA6MDBaIiwiaWQiOiJiMWMyZDNlNC1mNWE2LTc4OTAtYmNkZS1mMTIzNDU2Nzg5MDEifQ Opaque cursor returned as |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "data": [
- {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "motor-comprehensive-v1",
- "name": "Motor Vehicle Rating Rules",
- "entity_type": "pricing",
- "description": "Validation and pricing rules for comprehensive motor insurance",
- "status": "active",
- "version": 3,
- "attributes": {
- "jurisdiction": "US",
- "product_line": "motor"
}, - "rules": null,
- "created_at": "2026-01-10T08:00:00Z",
- "updated_at": "2026-03-01T14:30:00Z"
}, - {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "property-allrisks-gb-v1",
- "name": "UK Property All-Risks",
- "entity_type": "underwriting",
- "description": "Validation and underwriting rules for all-risks property cover in the UK",
- "status": "draft",
- "version": 1,
- "attributes": {
- "jurisdiction": "GB",
- "product_line": "property"
}, - "rules": null,
- "created_at": "2026-03-15T09:00:00Z",
- "updated_at": "2026-03-15T09:00:00Z"
}
], - "meta": {
- "page_size": 20,
- "has_more": false
}, - "status": "success",
- "message": "Rulesets retrieved successfully"
}Retrieves a single ruleset by its unique identifier, including all associated business rules.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "motor-comprehensive-v1",
- "name": "Motor Vehicle Rating Rules",
- "entity_type": "premium_rating",
- "description": "Validation and pricing rules for comprehensive motor insurance products",
- "status": "active",
- "version": 3,
- "attributes": {
- "jurisdiction": "US",
- "product_line": "motor",
- "effective_from": "2026-01-01"
}, - "rules": [
- {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "rule_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "min-driver-age",
- "name": "Minimum Driver Age Rule",
- "rule_type": "validation",
- "expression": "applicant.age >= 18 && applicant.age <= 75",
- "description": "Drivers must be between 18 and 75 years old for standard motor cover",
- "priority": 10,
- "status": "active",
- "attributes": {
- "regulatory_ref": "FSCA-PPR-2018-S4.3",
- "risk_category": "driver_eligibility"
}, - "conditions": [
- {
- "field": "vehicle.year_of_manufacture",
- "operator": "gte",
- "value": 2015,
- "logic": "and"
}
], - "actions": [
- {
- "action_type": "add_loading",
- "target": "premium.young_driver_loading",
- "value": 0.15,
- "attributes": {
- "reason": "Driver under 25 — young driver loading applied",
- "loading_type": "percentage"
}
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string",
- "created_at": "2026-01-10T08:30:00Z"
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string",
- "created_at": "2026-01-10T08:00:00Z",
- "updated_at": "2026-03-01T14:30:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Updates the metadata of a ruleset (name, description, attributes).
Only rulesets in draft status can be updated. Active or deprecated
rulesets are immutable — create a new version instead.
This does not modify individual rules. Use the rule-level endpoints to add, update, or remove rules.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| name | string Updated human-readable name |
| description | string Updated description |
object or null Updated metadata |
{- "name": "Motor Vehicle Rating Rules (Updated)",
- "description": "Validation, pricing, and eligibility rules for comprehensive motor insurance",
- "attributes": {
- "jurisdiction": "US",
- "product_line": "motor",
- "effective_from": "2026-04-01"
}
}{- "status": "success",
- "data": {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "motor-comprehensive-v1",
- "name": "Motor Vehicle Rating Rules",
- "entity_type": "premium_rating",
- "description": "Validation and pricing rules for comprehensive motor insurance products",
- "status": "active",
- "version": 3,
- "attributes": {
- "jurisdiction": "US",
- "product_line": "motor",
- "effective_from": "2026-01-01"
}, - "rules": [
- {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "rule_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "min-driver-age",
- "name": "Minimum Driver Age Rule",
- "rule_type": "validation",
- "expression": "applicant.age >= 18 && applicant.age <= 75",
- "description": "Drivers must be between 18 and 75 years old for standard motor cover",
- "priority": 10,
- "status": "active",
- "attributes": {
- "regulatory_ref": "FSCA-PPR-2018-S4.3",
- "risk_category": "driver_eligibility"
}, - "conditions": [
- {
- "field": "vehicle.year_of_manufacture",
- "operator": "gte",
- "value": 2015,
- "logic": "and"
}
], - "actions": [
- {
- "action_type": "add_loading",
- "target": "premium.young_driver_loading",
- "value": 0.15,
- "attributes": {
- "reason": "Driver under 25 — young driver loading applied",
- "loading_type": "percentage"
}
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string",
- "created_at": "2026-01-10T08:30:00Z"
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string",
- "created_at": "2026-01-10T08:00:00Z",
- "updated_at": "2026-03-01T14:30:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Evaluates the entire ruleset against the provided input facts and returns the evaluation results.
This is a dry-run — no state is modified. The response includes a full explanation tree showing which rules fired, their inputs, intermediate results, and final decisions (platform principle explainability).
The ruleset must be active before this endpoint runs. Testing a draft
ruleset returns 409 RULESET_NOT_ACTIVE; use /test-rule for isolated
expression checks while authoring.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
required | object Input facts for rule evaluation. Structure depends on the ruleset's entity_type and the rules defined within it. |
{- "facts": {
- "applicant": {
- "age": 32,
- "licence_years": 10,
- "prior_events_count": 0
}, - "vehicle": {
- "make": "Toyota",
- "model": "Hilux",
- "year_of_manufacture": 2023,
- "value": 450000
}, - "cover": {
- "type": "comprehensive",
- "sum_insured": 450000
}
}
}{- "status": "success",
- "data": {
- "overall_passed": true,
- "results": [
- {
- "rule_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "rule_name": "Minimum Driver Age Rule",
- "passed": true,
- "outcome": "passed",
- "message": ""
}
], - "rules_count": 2
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Evaluates a single rule expression against the provided input facts. Useful for iterative rule development and debugging before the rule is added to a ruleset.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| expression required | string CEL expression to test. |
required | object Input facts for rule evaluation |
{- "expression": "applicant.age >= 18",
- "data": {
- "applicant": {
- "age": 17,
- "licence_years": 0
}
}
}{- "status": "success",
- "data": {
- "passed": true,
- "outcome": "passed",
- "message": ""
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Transitions a ruleset from draft to active status, making it
available for evaluation in live policy lifecycles, retained claim-family
compatibility lifecycles, and premium calculation pipelines.
This increments the ruleset version number. The previous active
version (if any) is transitioned to deprecated and retained
for as-was auditability.
This operation cannot be undone — to roll back, deploy the previous version's rules in a new ruleset.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| activated_by required | string Actor identifier recorded in the deployment audit trail. |
{- "activated_by": "underwriter-user-003"
}{- "data": {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "health-gap-ng-v1",
- "name": "Nigeria Health Gap Cover",
- "entity_type": "pricing",
- "description": "Pricing rules for health gap cover in Nigeria",
- "status": "active",
- "version": 2,
- "attributes": {
- "jurisdiction": "NG",
- "product_line": "health",
- "effective_from": "2026-07-01"
}, - "created_at": "2026-04-03T10:00:00Z",
- "updated_at": "2026-04-03T11:00:00Z"
}, - "status": "success",
- "message": "Ruleset deployed successfully"
}Adds a new business rule to a ruleset. The ruleset must be in
draft status.
Rules are defined as CEL (Common Expression Language) expressions that must be deterministic and side-effect free.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| code required | string <= 50 characters ^[A-Za-z0-9_.:-]+$ Machine-readable rule code (must be unique within the ruleset) |
| name required | string Human-readable rule name |
| rule_type required | string Enum: "validation" "calculation" "condition" "action" "commission_rate" "commission_split" "group_discount" "discount_composition" Classification of the rule's purpose |
| expression required | string CEL expression for rule evaluation. Both complex expressions (e.g., "cover.sum_insured <= 50000000") and bare literals (e.g., "25000") are valid CEL. JSON request facts may bind numeric values as CEL double values; use explicit int(), uint(), or double() conversions when an operator requires a specific numeric type. |
| description | string or null Human-readable explanation of the rule |
| priority required | integer Execution priority (lower executes first) |
object or null Optional rule metadata | |
Array of objects or null (RuleCondition) Deprecated Legacy compatibility metadata only. Conditions are not executable rule
authority in the governed ruleset runtime; the CEL | |
Array of objects or null (RuleAction) Deprecated Legacy compatibility metadata only. Actions are preserved for historical rulepack round-trip evidence but are not executed by the ruleset runtime. |
{- "code": "max-vehicle-age",
- "name": "Maximum Vehicle Age",
- "rule_type": "validation",
- "expression": "vehicle.year_of_manufacture >= 2011",
- "description": "Vehicle must be no more than 15 years old for comprehensive cover in the test year",
- "priority": 20,
- "attributes": {
- "risk_category": "vehicle_eligibility"
}
}{- "status": "success",
- "data": {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "rule_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "min-driver-age",
- "name": "Minimum Driver Age Rule",
- "rule_type": "validation",
- "expression": "applicant.age >= 18 && applicant.age <= 75",
- "description": "Drivers must be between 18 and 75 years old for standard motor cover",
- "priority": 10,
- "status": "active",
- "attributes": {
- "regulatory_ref": "FSCA-PPR-2018-S4.3",
- "risk_category": "driver_eligibility"
}, - "conditions": [
- {
- "field": "vehicle.year_of_manufacture",
- "operator": "gte",
- "value": 2015,
- "logic": "and"
}
], - "actions": [
- {
- "action_type": "add_loading",
- "target": "premium.young_driver_loading",
- "value": 0.15,
- "attributes": {
- "reason": "Driver under 25 — young driver loading applied",
- "loading_type": "percentage"
}
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string",
- "created_at": "2026-01-10T08:30:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Updates an existing business rule within a ruleset. The ruleset
must be in draft status.
Updatable fields: name, expression, description, priority, status, attributes, conditions, actions.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| ruleId required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed rule identifier within the ruleset |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
| name | string Updated rule name |
| expression | string Updated CEL expression |
| description | string or null Updated description |
| priority | integer Updated execution priority |
| status | string Enum: "draft" "active" "deprecated" Updated rule status |
object or null Updated metadata | |
Array of objects or null (RuleCondition) | |
Array of objects or null (RuleAction) |
{- "name": "Maximum Vehicle Age (Extended)",
- "expression": "vehicle.year_of_manufacture >= 2006",
- "description": "Vehicle must be no more than 20 years old for extended comprehensive cover",
- "priority": 20,
- "status": "draft",
- "attributes": { },
- "conditions": [
- {
- "field": "vehicle.year_of_manufacture",
- "operator": "gte",
- "value": 2015,
- "logic": "and"
}
], - "actions": [
- {
- "action_type": "add_loading",
- "target": "premium.young_driver_loading",
- "value": 0.15,
- "attributes": {
- "reason": "Driver under 25 — young driver loading applied",
- "loading_type": "percentage"
}
}
]
}{- "status": "success",
- "data": {
- "id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "rule_id": "rst_01abcdefghjkmnpqrstvwxyz01",
- "code": "min-driver-age",
- "name": "Minimum Driver Age Rule",
- "rule_type": "validation",
- "expression": "applicant.age >= 18 && applicant.age <= 75",
- "description": "Drivers must be between 18 and 75 years old for standard motor cover",
- "priority": 10,
- "status": "active",
- "attributes": {
- "regulatory_ref": "FSCA-PPR-2018-S4.3",
- "risk_category": "driver_eligibility"
}, - "conditions": [
- {
- "field": "vehicle.year_of_manufacture",
- "operator": "gte",
- "value": 2015,
- "logic": "and"
}
], - "actions": [
- {
- "action_type": "add_loading",
- "target": "premium.young_driver_loading",
- "value": 0.15,
- "attributes": {
- "reason": "Driver under 25 — young driver loading applied",
- "loading_type": "percentage"
}
}
], - "annotations": [
- {
- "element": "string",
- "meaning": "string",
- "source_ref": "string"
}
], - "source_provenance_id": "string",
- "created_at": "2026-01-10T08:30:00Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Removes a rule from a ruleset. The ruleset must be in draft status.
Rules in active or deprecated rulesets cannot be deleted — deprecate the rule instead to preserve the audit trail.
| id required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed ruleset identifier |
| ruleId required | string Example: rst_01abcdefghjkmnpqrstvwxyz01 Typed rule identifier within the ruleset |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Request correlation ID for tracing |
{- "status": "success",
- "data": { },
- "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Tenant-facing support request intake and status over the canonical collaboration_request substrate. Internal triage, support-session approval, Council escalation, product commitment, and SDLC conversion operations are excluded from the public Support API.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Submit a support, incident, bug, enhancement, feature, documentation,
integration, or commercial request into the canonical
collaboration_request support lifecycle. Email and assisted support channels are
adapter references only; this operation creates the same canonical record
type. Public callers cannot approve support access, create internal work, make
product commitments, or force internal lifecycle transitions.
| X-Correlation-ID | string Correlation id for request tracing. |
| Idempotency-Key required | string non-empty Required for support request mutations. |
| request_class required | string Enum: "support_question" "incident" "bug_report" "integration_help" "enhancement_request" "feature_request" "documentation_request" "commercial_request" |
| summary required | string non-empty |
| details | string |
| requester_reference | string |
| stated_severity | string |
| affected_environment | string |
| affected_surface | string |
| affected_canonical_noun | string Enum: "parties_roles" "covers_products" "policies_versions" "premiums_payments" "events_assertions" |
| affected_substrate | string |
| correlation_ids | Array of strings |
| external_references | Array of strings Inert references only; they are not fetched or promoted implicitly. |
Array of objects (SupportAttachmentReference) | |
object (SupportAgentContext) | |
| idempotency_key | string Body mirror for clients that cannot set Idempotency-Key; header remains preferred. |
{- "request_class": "support_question",
- "summary": "string",
- "details": "string",
- "requester_reference": "string",
- "stated_severity": "string",
- "affected_environment": "string",
- "affected_surface": "string",
- "affected_canonical_noun": "parties_roles",
- "affected_substrate": "string",
- "correlation_ids": [
- "string"
], - "external_references": [
- "string"
], - "attachment_refs": [
- {
- "reference_class": "archive_object",
- "custody_ref": "string",
- "sha256": "string",
- "classification": "string",
- "admission_status": "string",
- "redaction_status": "string",
- "retention_ref": "string",
- "legal_hold_ref": "string",
- "derived_from": "string"
}
], - "agent_context": {
- "tenant_actor_id": "string",
- "represented_principal": "string",
- "delegation_ref": "string",
- "allowed_scopes": [
- "string"
], - "operating_scope": "string",
- "expires_at": "2019-08-24T14:15:22Z",
- "revoked": true,
- "origin_chain_audit_ref": "string"
}, - "idempotency_key": "string"
}{- "status": "success",
- "data": {
- "request_id": "string",
- "state": "submitted",
- "request_class": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tenant_or_account_scope": "string",
- "visible_summary": "string",
- "next_action": "string",
- "allowed_actions": [
- "string"
], - "support_access_status": "not_requested",
- "support_session_disclosure_refs": [
- "string"
], - "visible_support_session_ref": "string",
- "support_access_expires_at": "2019-08-24T14:15:22Z",
- "support_access_ended_at": "2019-08-24T14:15:22Z",
- "links": { },
- "audit_reference": [
- "string"
], - "affected_surface": "string",
- "affected_canonical_noun": "string",
- "affected_substrate": "string",
- "requester_stated_severity": "string",
- "kelevra_assigned_priority": "string",
- "message_count": 0,
- "attachment_reference_count": 0,
- "retention_policy_ref": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}List support requests visible to the authenticated actor in the current tenant/account scope. The response is tenant-isolated and exposes only redacted tenant-facing state and affordances.
| limit | integer [ 1 .. 200 ] Default: 50 |
| offset | integer >= 0 Default: 0 |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "status": "success",
- "data": [
- {
- "request_id": "string",
- "state": "submitted",
- "request_class": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tenant_or_account_scope": "string",
- "visible_summary": "string",
- "next_action": "string",
- "allowed_actions": [
- "string"
], - "support_access_status": "not_requested",
- "support_session_disclosure_refs": [
- "string"
], - "visible_support_session_ref": "string",
- "support_access_expires_at": "2019-08-24T14:15:22Z",
- "support_access_ended_at": "2019-08-24T14:15:22Z",
- "links": { },
- "audit_reference": [
- "string"
], - "affected_surface": "string",
- "affected_canonical_noun": "string",
- "affected_substrate": "string",
- "requester_stated_severity": "string",
- "kelevra_assigned_priority": "string",
- "message_count": 0,
- "attachment_reference_count": 0,
- "retention_policy_ref": "string"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Read one support request visible to the authenticated actor in the current tenant/account scope. Internal work links, support-session internals, Council material, and private triage notes are not tenant-facing authority.
| request_id required | string^crq_[0-9a-f-]{36}$ Canonical collaboration_request identifier. |
| X-Correlation-ID | string Correlation id for request tracing. |
{- "status": "success",
- "data": {
- "request_id": "string",
- "state": "submitted",
- "request_class": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tenant_or_account_scope": "string",
- "visible_summary": "string",
- "next_action": "string",
- "allowed_actions": [
- "string"
], - "support_access_status": "not_requested",
- "support_session_disclosure_refs": [
- "string"
], - "visible_support_session_ref": "string",
- "support_access_expires_at": "2019-08-24T14:15:22Z",
- "support_access_ended_at": "2019-08-24T14:15:22Z",
- "links": { },
- "audit_reference": [
- "string"
], - "affected_surface": "string",
- "affected_canonical_noun": "string",
- "affected_substrate": "string",
- "requester_stated_severity": "string",
- "kelevra_assigned_priority": "string",
- "message_count": 0,
- "attachment_reference_count": 0,
- "retention_policy_ref": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Add a tenant-visible follow-up message to a support request thread. This operation appends communication content only; it cannot force internal state transitions such as accepted, converted_to_sdlc_intent, closed, or reopened.
| request_id required | string^crq_[0-9a-f-]{36}$ Canonical collaboration_request identifier. |
| X-Correlation-ID | string Correlation id for request tracing. |
| Idempotency-Key required | string non-empty Required for support request mutations. |
| body required | string non-empty |
| adapter_ref | string |
| correlation_id | string |
{- "body": "string",
- "adapter_ref": "string",
- "correlation_id": "string"
}{- "status": "success",
- "data": {
- "request_id": "string",
- "state": "submitted",
- "request_class": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tenant_or_account_scope": "string",
- "visible_summary": "string",
- "next_action": "string",
- "allowed_actions": [
- "string"
], - "support_access_status": "not_requested",
- "support_session_disclosure_refs": [
- "string"
], - "visible_support_session_ref": "string",
- "support_access_expires_at": "2019-08-24T14:15:22Z",
- "support_access_ended_at": "2019-08-24T14:15:22Z",
- "links": { },
- "audit_reference": [
- "string"
], - "affected_surface": "string",
- "affected_canonical_noun": "string",
- "affected_substrate": "string",
- "requester_stated_severity": "string",
- "kelevra_assigned_priority": "string",
- "message_count": 0,
- "attachment_reference_count": 0,
- "retention_policy_ref": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Attach or reference evidence that has already entered governed object custody. Raw URLs and adapter attachments are not evidence authority for this operation.
| request_id required | string^crq_[0-9a-f-]{36}$ Canonical collaboration_request identifier. |
| X-Correlation-ID | string Correlation id for request tracing. |
| Idempotency-Key required | string non-empty Required for support request mutations. |
| reference_class required | string Enum: "archive_object" "redacted_derivative" "communication_message" "support_session_disclosure" "audit_event" "gitlab_work_item" "council_record" "ci_release_evidence" |
| custody_ref required | string |
| sha256 required | string^sha256:[0-9a-f]{16,64}$ |
| classification required | string |
| admission_status required | string |
| redaction_status required | string |
| retention_ref required | string |
| legal_hold_ref | string |
| derived_from | string |
{- "reference_class": "archive_object",
- "custody_ref": "string",
- "sha256": "string",
- "classification": "string",
- "admission_status": "string",
- "redaction_status": "string",
- "retention_ref": "string",
- "legal_hold_ref": "string",
- "derived_from": "string"
}{- "status": "success",
- "data": {
- "request_id": "string",
- "state": "submitted",
- "request_class": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "tenant_or_account_scope": "string",
- "visible_summary": "string",
- "next_action": "string",
- "allowed_actions": [
- "string"
], - "support_access_status": "not_requested",
- "support_session_disclosure_refs": [
- "string"
], - "visible_support_session_ref": "string",
- "support_access_expires_at": "2019-08-24T14:15:22Z",
- "support_access_ended_at": "2019-08-24T14:15:22Z",
- "links": { },
- "audit_reference": [
- "string"
], - "affected_surface": "string",
- "affected_canonical_noun": "string",
- "affected_substrate": "string",
- "requester_stated_severity": "string",
- "kelevra_assigned_priority": "string",
- "message_count": 0,
- "attachment_reference_count": 0,
- "retention_policy_ref": "string"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Vendor registry and risk management (governed contract). Tracks vendors, integrations, data access, and subprocessor approvals.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Creates a vendor record for a third-party service provider.
Vendors represent external organisations that process, store, or access tenant data. Each vendor is tracked for compliance purposes (POPIA, GDPR) including data classification, security review status, and subprocessor chains.
Request and response use JSON:API envelope format.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
required | object |
{- "data": {
- "type": "vendors",
- "attributes": {
- "name": "MediCheck Health Services",
- "purpose": "Medical underwriting and claims verification for health insurance products",
- "classification": "C",
- "accessed_data_classes": [
- "health",
- "personal_identifiable"
], - "integrations": [
- {
- "system_name": "MediCheck Claims API",
- "data_categories": [
- "health_records"
], - "data_direction": "ingress",
- "transfer_method": "rest_api"
}
]
}
}
}{- "data": {
- "type": "vendors",
- "attributes": {
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "MediCheck Health Services",
- "purpose": "Medical underwriting and claims verification for health insurance products",
- "classification": "C",
- "accessed_data_classes": [
- "health",
- "personal_identifiable"
], - "status": "draft",
- "integrations": [
- {
- "integration_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "system_name": "MediCheck Claims API",
- "data_categories": [
- "health_records"
], - "data_direction": "ingress",
- "transfer_method": "rest_api"
}
], - "security_review_status": "pending",
- "security_review_approved_at": null,
- "created_at": "2026-03-12T10:00:00Z",
- "updated_at": "2026-03-12T10:00:00Z"
}
}
}Returns a paginated list of vendor records for the tenant.
Supports cursor-based pagination via page[size] and page[after] query parameters.
Response uses a JSON:API-style collection envelope with data array and meta object.
| page[size] | integer [ 1 .. 100 ] Default: 20 Maximum number of vendors to return (default 20, max 100) |
| page[after] | string Opaque cursor for next page; obtained from previous response meta.next_cursor |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": [
- {
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "MediCheck Health Services",
- "purpose": "Medical underwriting and claims verification",
- "classification": "C",
- "accessed_data_classes": [
- "health",
- "personal_identifiable"
], - "status": "active",
- "created_at": "2026-02-01T09:00:00Z",
- "updated_at": "2026-03-05T16:20:00Z"
}, - {
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "SafePay Financial Gateway",
- "purpose": "Premium collection and payment processing",
- "classification": "B",
- "accessed_data_classes": [
- "financial",
- "personal_identifiable"
], - "status": "active",
- "created_at": "2025-11-15T10:00:00Z",
- "updated_at": "2026-02-28T14:00:00Z"
}
], - "meta": {
- "page_size": 20,
- "next_cursor": ""
}
}Returns the full vendor record including integrations and subprocessors. Response uses JSON:API envelope format.
| vendor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Typed vendor identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "type": "vendors",
- "attributes": {
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "party_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "CloudSure Technologies (Pty) Ltd",
- "purpose": "Cloud-based policy administration and document management",
- "classification": "B",
- "accessed_data_classes": [
- "personal_identifiable",
- "financial",
- "health"
], - "status": "active",
- "integrations": [
- {
- "integration_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "system_name": "CloudSure Policy API",
- "data_categories": [
- "policy_data",
- "policyholder_pii",
- "premium_amounts"
], - "data_direction": "bidirectional",
- "transfer_method": "rest_api"
}
], - "security_review_status": "approved",
- "security_review_approved_at": "2026-02-15T10:00:00Z",
- "created_at": "2025-11-01T09:00:00Z",
- "updated_at": "2026-03-05T16:20:00Z"
}
}
}Partially updates a vendor record. Only provided fields are modified. Security-review status is not accepted on this endpoint; use the authorized security-review decision endpoint. Request and response use JSON:API envelope format.
| vendor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Typed vendor identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
required | object |
{- "data": {
- "type": "vendors",
- "attributes": {
- "status": "active"
}
}
}{- "data": {
- "type": "vendors",
- "attributes": {
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "party_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "CloudSure Technologies (Pty) Ltd",
- "purpose": "Cloud-based policy administration and document management",
- "classification": "B",
- "accessed_data_classes": [
- "personal_identifiable",
- "financial",
- "health"
], - "status": "active",
- "integrations": [
- {
- "integration_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "system_name": "CloudSure Policy API",
- "data_categories": [
- "policy_data",
- "policyholder_pii",
- "premium_amounts"
], - "data_direction": "bidirectional",
- "transfer_method": "rest_api"
}
], - "security_review_status": "approved",
- "security_review_approved_at": "2026-02-15T10:00:00Z",
- "created_at": "2025-11-01T09:00:00Z",
- "updated_at": "2026-03-05T16:20:00Z"
}
}
}Records a security-review decision for a vendor through an explicitly
authorized attestation workflow. Ordinary vendor updates cannot change
security_review_status.
Request and response use JSON:API envelope format.
| vendor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Typed vendor identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
required | object |
{- "data": {
- "type": "vendor-security-review-decisions",
- "attributes": {
- "status": "approved",
- "decision_basis": "SOC 2 Type II report and security questionnaire reviewed"
}
}
}{- "data": {
- "type": "vendors",
- "attributes": {
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "party_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "CloudSure Technologies (Pty) Ltd",
- "purpose": "Cloud-based policy administration and document management",
- "classification": "B",
- "accessed_data_classes": [
- "personal_identifiable",
- "financial",
- "health"
], - "status": "active",
- "integrations": [
- {
- "integration_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "system_name": "CloudSure Policy API",
- "data_categories": [
- "policy_data",
- "policyholder_pii",
- "premium_amounts"
], - "data_direction": "bidirectional",
- "transfer_method": "rest_api"
}
], - "security_review_status": "approved",
- "security_review_approved_at": "2026-02-15T10:00:00Z",
- "created_at": "2025-11-01T09:00:00Z",
- "updated_at": "2026-03-05T16:20:00Z"
}
}
}Registers a subprocessor under a vendor. Subprocessors are third parties that the vendor engages to process data on behalf of the tenant.
Tracking subprocessors is required for POPIA and GDPR compliance, ensuring the full data processing chain is documented and approved.
Request and response use JSON:API envelope format.
| vendor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Parent vendor UUID |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
required | object |
{- "data": {
- "type": "subprocessors",
- "attributes": {
- "name": "Azure US East",
- "service_scope": "Disaster recovery and backup storage for policy documents"
}
}
}{- "data": {
- "type": "subprocessors",
- "attributes": {
- "subprocessor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "Azure US East",
- "service_scope": "Disaster recovery and backup storage for policy documents",
- "approval_status": "pending",
- "approved_by": null,
- "approved_at": null,
- "change_reason": null
}
}
}Partially updates a subprocessor record under a vendor. Approval status is not accepted on this endpoint; use the authorized subprocessor approval decision endpoint.
Request and response use JSON:API envelope format.
| vendor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Parent vendor UUID |
| subprocessor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Subprocessor UUID |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
required | object |
{- "data": {
- "type": "subprocessors",
- "attributes": {
- "change_reason": "Updated service scope after annual review"
}
}
}{- "data": {
- "type": "subprocessors",
- "attributes": {
- "subprocessor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "AWS EU West 2 London",
- "service_scope": "Infrastructure hosting and data storage for policy administration",
- "approval_status": "approved",
- "approved_by": "compliance-officer-001",
- "approved_at": "2026-01-20T11:30:00Z",
- "change_reason": "Annual subprocessor review completed — SOC 2 Type II report verified"
}
}
}Records a subprocessor approval decision through an explicitly authorized attestation workflow. Ordinary subprocessor create and update requests cannot set approval status, approver, or approval timestamp.
Request and response use JSON:API envelope format.
| vendor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Parent vendor UUID |
| subprocessor_id required | string Example: vnd_01abcdefghjkmnpqrstvwxyz01 Subprocessor UUID |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
required | object |
{- "data": {
- "type": "subprocessor-approval-decisions",
- "attributes": {
- "status": "approved",
- "decision_basis": "DPA and subprocessor security evidence accepted"
}
}
}{- "data": {
- "type": "subprocessors",
- "attributes": {
- "subprocessor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "vendor_id": "vnd_01abcdefghjkmnpqrstvwxyz01",
- "name": "AWS EU West 2 London",
- "service_scope": "Infrastructure hosting and data storage for policy administration",
- "approval_status": "approved",
- "approved_by": "compliance-officer-001",
- "approved_at": "2026-01-20T11:30:00Z",
- "change_reason": "Annual subprocessor review completed — SOC 2 Type II report verified"
}
}
}Outbound webhook dispatch (governed contract). Register webhook endpoints and track delivery status. Uses JSON:API response format.
Public maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.
Registers or updates a tenant-scoped outbound webhook endpoint.
This is an alpha transport-configuration surface governed by the
Mailroom transport registry, not an ordinary product API operation.
It records where outbound webhook deliveries may be sent and how the
delivery should be authenticated. Event subscription catalogues and
delivery routing rules are not yet published as a public self-service
contract. Do not send event_types, event schemas, routing rules,
ordering keys, or replay policy in this request; those semantics are
governed separately before publication.
Secrets are supplied by reference only. Do not send raw secret material in the request body.
For auth_method=hmac_sha256, each outbound delivery includes:
X-Axiom-Delivery-Id: typed whd_ durable delivery id.X-Correlation-ID: support trace id for the delivery workflow.X-Webhook-Timestamp: Unix seconds in UTC.X-Webhook-Signature: sha256=<hex> where the digest is
HMAC-SHA256(secret, X-Webhook-Timestamp + "." + raw request body bytes).Receivers should reject missing, malformed, stale, or mismatched signatures before processing the payload. A five-minute replay window is the alpha recommendation unless the issued integration runbook specifies a stricter tenant policy.
Outbound webhook delivery is at-least-once. Exactly-once delivery,
global ordering, and per-endpoint ordering are not guaranteed in the
alpha public contract. The same X-Axiom-Delivery-Id is reused across
retry attempts for one delivery record, but it is not a stable canonical
event id across endpoints, event streams, or schema revisions. Receivers
must be idempotent and tolerate duplicate, delayed, and out-of-order
deliveries.
Response format: Canonical success envelope.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| name required | string [ 1 .. 64 ] characters ^[a-zA-Z0-9_-]+$ Tenant-scoped endpoint name. Reusing the same name updates mutable endpoint settings. |
| url required | string <uri> HTTPS endpoint URL where webhook payloads will be delivered. Runtime validation rejects non-HTTPS URLs and known private, loopback, link-local, and non-routable targets. |
| description | string Human-readable description of this endpoint's purpose. |
| auth_method required | string Default: "hmac_sha256" Enum: "hmac_sha256" "bearer_token_ref" "none" Authentication method for webhook deliveries.
|
| auth_secret_ref | string Opaque secret reference resolved by the Mailroom dispatcher. Required when auth_method is hmac_sha256 or bearer_token_ref. Raw secret material must not be sent in this field. |
| enabled | boolean Default: true Whether the endpoint is active |
| max_retries required | integer [ 0 .. 10 ] Number of retry attempts after the first delivery attempt. |
| backoff_seconds required | Array of integers[ items [ 1 .. 3600 ] ] Retry backoff values in seconds. The array length must equal max_retries; each value must be between 1 and 3600 seconds. |
{- "name": "primary-events",
- "description": "Primary outbound event receiver",
- "auth_method": "hmac_sha256",
- "auth_secret_ref": "ref:webhooks/primary-events-signing-key",
- "max_retries": 3,
- "backoff_seconds": [
- 10,
- 30,
- 60
], - "enabled": true
}{- "status": "success",
- "data": {
- "id": "string",
- "name": "string",
- "description": "string",
- "auth_method": "hmac_sha256",
- "max_retries": 0,
- "backoff_seconds": [
- 0
], - "enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}List the bounded support-session disclosure history for the authenticated operating tenant. This route requires normal tenant context and never takes the tenant id from caller-supplied path or query input.
| X-Correlation-ID | string Correlation id for request tracing. |
{- "status": "success",
- "data": [
- {
- "support_session_id": "string",
- "target_tenant_id": "string",
- "reason": "string",
- "purpose_code": "string",
- "started_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "notified_at": "2019-08-24T14:15:22Z",
- "ended_at": "2019-08-24T14:15:22Z"
}
], - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { }
}Contract authority for GET /v1/events (listEvents) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/events/{id} (getEvent) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for POST /v1/events/{event_id}/documents (uploadEventDocuments) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| event_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims (submitClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims (listClaims) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id} (getClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/assess (assessClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; the route assesses the contract-facing assertion for the retained claim-family surface. Claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/pay (payClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
required | object Amount to disburse (exact integer minor units + lowercase ISO-4217 currency code). Must be non-empty. |
| payment_method required | string Payment disbursement method |
| payment_notes | string or null Notes accompanying the payment |
| authorisation_id | string or null governed contract authorisation row to cite and gate before payment. |
object or null Operational metadata for the payment |
{- "paid_amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "bank_transfer",
- "payment_notes": "Final settlement — retained assertion fully resolved",
- "authorisation_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "metadata": {
- "bank_reference": "JPMC-ACH-2026030801",
- "beneficiary_account": "****4521"
}
}{- "status": "success",
- "data": {
- "id": "cpy_01j9zxkp8wqrm2n4v6t5s3d7f7",
- "claim_id": "clm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "payment_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "amount_paid": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "bank_transfer",
- "processed_at": "2026-02-25T10:00:00Z",
- "processed_by": "payments-officer-mk-003",
- "status": "processed",
- "authorisation_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "authorisation_gate_outcome": "clear"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { },
- "ledger_entries": [
- {
- "entry_id": "ledger_entry_claim_payment_0001",
- "transaction_id": "txn_claim_payment_0001",
- "account_code": "LIABILITY_CLAIMS_PAYABLE",
- "entry_type": "debit",
- "amount_minor": 8000000,
- "currency_code": "zar",
- "entity_type": "claim",
- "entity_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "content_sha256": "8c2f1d7d9d4e52f9e3b9f3e72855c78ff4d93d6c7ef16b7a0f8e7f734fd6a9a4"
}
]
}Compatibility contract for retained POST /v1/claims/{id}/reserves (createReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/reserves (listClaimReserves) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/reserves/{reserveId} (getReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained PATCH /v1/claims/{id}/reserves/{reserveId} (updateReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/release (releaseReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/cancel (cancelReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/reestablish (reestablishReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/reserves (listPolicyReserves) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/investigations (createOrAdvanceInvestigation) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{claimId}/recoveries (createRecovery) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| claimId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{claimId}/recoveries/{recoveryId}/corrections (createCorrection) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| claimId required | string Path parameter |
| recoveryId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/settlement-statements/{decisionId} (getClaimSettlementStatement) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| decisionId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/assertions (listAssertions) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/assertions/{id} (getAssertion) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for POST /v1/inbox/messages (receiveInboxMessage) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/mailroom/outbox/webhook-deliveries/{delivery_id} (getWebhookDeliveryStatus) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| delivery_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/events (listEvents) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/events/{id} (getEvent) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for POST /v1/events/{event_id}/documents (uploadEventDocuments) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| event_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims (submitClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims (listClaims) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id} (getClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/assess (assessClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; the route assesses the contract-facing assertion for the retained claim-family surface. Claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/pay (payClaim) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
required | object Amount to disburse (exact integer minor units + lowercase ISO-4217 currency code). Must be non-empty. |
| payment_method required | string Payment disbursement method |
| payment_notes | string or null Notes accompanying the payment |
| authorisation_id | string or null governed contract authorisation row to cite and gate before payment. |
object or null Operational metadata for the payment |
{- "paid_amount": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "bank_transfer",
- "payment_notes": "Final settlement — retained assertion fully resolved",
- "authorisation_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "metadata": {
- "bank_reference": "JPMC-ACH-2026030801",
- "beneficiary_account": "****4521"
}
}{- "status": "success",
- "data": {
- "id": "cpy_01j9zxkp8wqrm2n4v6t5s3d7f7",
- "claim_id": "clm_01j9zxkp8wqrm2n4v6t5s3d7f1",
- "payment_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "amount_paid": {
- "amount_minor": 123456,
- "currency_code": "zar"
}, - "payment_method": "bank_transfer",
- "processed_at": "2026-02-25T10:00:00Z",
- "processed_by": "payments-officer-mk-003",
- "status": "processed",
- "authorisation_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "authorisation_gate_outcome": "clear"
}, - "message": "string",
- "meta": { },
- "links": { },
- "telemetry": { },
- "ledger_entries": [
- {
- "entry_id": "ledger_entry_claim_payment_0001",
- "transaction_id": "txn_claim_payment_0001",
- "account_code": "LIABILITY_CLAIMS_PAYABLE",
- "entry_type": "debit",
- "amount_minor": 8000000,
- "currency_code": "zar",
- "entity_type": "claim",
- "entity_id": "clm_01abcdefghjkmnpqrstvwxyz01",
- "content_sha256": "8c2f1d7d9d4e52f9e3b9f3e72855c78ff4d93d6c7ef16b7a0f8e7f734fd6a9a4"
}
]
}Compatibility contract for retained POST /v1/claims/{id}/reserves (createReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/reserves (listClaimReserves) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/reserves/{reserveId} (getReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained PATCH /v1/claims/{id}/reserves/{reserveId} (updateReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/release (releaseReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/cancel (cancelReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/reserves/{reserveId}/reestablish (reestablishReserve) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| reserveId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/reserves (listPolicyReserves) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{id}/investigations (createOrAdvanceInvestigation) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{claimId}/recoveries (createRecovery) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| claimId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained POST /v1/claims/{claimId}/recoveries/{recoveryId}/corrections (createCorrection) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| claimId required | string Path parameter |
| recoveryId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Compatibility contract for retained GET /v1/claims/{id}/settlement-statements/{decisionId} (getClaimSettlementStatement) in the Events/Assertions portfolio. Axiom canon is events/assertions; claim-family route names, operationIds, permission scopes, generated filenames, and SDK-facing identifiers are retained compatibility identifiers until a governed migration. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| decisionId required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/assertions (listAssertions) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/assertions/{id} (getAssertion) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for POST /v1/inbox/messages (receiveInboxMessage) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| Idempotency-Key required | string Idempotency key (scope: tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Contract authority for GET /v1/mailroom/outbox/webhook-deliveries/{delivery_id} (getWebhookDeliveryStatus) in the Events/Assertions portfolio. This contract records semantic authority for the existing runtime-owned operation; runtime proof remains with the owning remediation finding.
| delivery_id required | string Path parameter |
| X-Tenant-Context required | string Operating-tenant context (binding: operating_tenant). |
| X-Correlation-ID | string Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response. |
Creates a new schema definition in draft state. The schema must pass content validation (valid JSON object, canonical field names under the governed contract) before it can be published.
Requires actor attribution under the governed contract.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| name required | string Schema name (e.g. 'motor_vehicle') |
| scope required | string Value: "tenant" Tenant self-service schema scope |
| entity_type required | string Enum: "party" "party_role" "party_contact" "party_identity" "party_relationship" "party_group" "party_group_membership" "product" "product_term" "cover" "cover_item" "cover_term" "cover_item_term" "policy" "policy_version" "event" "assertion" "assertion_line" Target entity type |
| entity_sub_type | string Required for subtype-governed entity types. The schema name must be |
required | object Schema body as JSON object with canonical field names |
required | object |
| compatibility required | string Enum: "backward" "forward" "breaking" Compatibility classification under the governed contract |
| predecessor_schema_id | string ID of the predecessor schema version for lineage tracking |
| actor_type required | string Enum: "human" "service" "agent" |
| actor_id required | string |
| actor_original_id required | string |
| deprecation_target_at | string <date-time> Optional target date for future deprecation |
{- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version": {
- "major": 0,
- "minor": 0,
- "patch": 0
}, - "compatibility": "backward",
- "predecessor_schema_id": "string",
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z"
}{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Returns paginated schema definitions filtered by optional criteria. Uses cursor-based pagination under the governed contract. Legacy limit/offset pagination is rejected with 400.
| page[size] | integer [ 1 .. 100 ] Default: 25 Number of results per page (default 25, max 100) |
| page[after] | string Cursor token for next page (from previous response meta) |
| name | string Filter by schema name |
| state | string Enum: "draft" "published" "deprecated" Filter by lifecycle state |
| scope | string Value: "tenant" Filter by scope |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": [
- {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page_size": 0,
- "next_page_token": "string"
}, - "status": "string"
}Looks up a specific schema definition by name and exact semantic version triplet. Returns 404 with SCHEMA_NOT_FOUND if no match exists.
| name required | string Schema name to resolve |
| version required | string Example: version=1.0.0 Semantic version in major.minor.patch format |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Retrieves a single schema definition by its opaque schema identifier. Scoped to the tenant from the request context.
| schema_id required | string Opaque schema definition identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Transitions a schema from draft to published state. Requires expected_version for optimistic concurrency control.
Before publication, validates:
Published schemas are immutable — content, version, and compatibility cannot be changed after publication under the governed contract.
| schema_id required | string |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| expected_version required | integer Current version for optimistic locking |
| actor_type required | string Enum: "human" "service" "agent" |
| actor_id required | string |
| actor_original_id required | string |
{- "expected_version": 0,
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string"
}{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Transitions a schema from published to deprecated state. Requires a reason and expected_version for optimistic concurrency control.
Deprecation is idempotent — deprecating an already-deprecated schema returns success with the current state.
Deprecated schemas remain queryable but are marked as superseded. Published records are never deleted or mutated under the governed contract.
| schema_id required | string |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| expected_version required | integer Current version for optimistic locking |
| reason required | string Reason for deprecation |
| actor_type required | string Enum: "human" "service" "agent" |
| actor_id required | string |
| actor_original_id required | string |
{- "expected_version": 0,
- "reason": "string",
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string"
}{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Creates a new schema definition in draft state. The schema must pass content validation (valid JSON object, canonical field names under the governed contract) before it can be published.
Requires actor attribution under the governed contract.
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| name required | string Schema name (e.g. 'motor_vehicle') |
| scope required | string Value: "tenant" Tenant self-service schema scope |
| entity_type required | string Enum: "party" "party_role" "party_contact" "party_identity" "party_relationship" "party_group" "party_group_membership" "product" "product_term" "cover" "cover_item" "cover_term" "cover_item_term" "policy" "policy_version" "event" "assertion" "assertion_line" Target entity type |
| entity_sub_type | string Required for subtype-governed entity types. The schema name must be |
required | object Schema body as JSON object with canonical field names |
required | object |
| compatibility required | string Enum: "backward" "forward" "breaking" Compatibility classification under the governed contract |
| predecessor_schema_id | string ID of the predecessor schema version for lineage tracking |
| actor_type required | string Enum: "human" "service" "agent" |
| actor_id required | string |
| actor_original_id required | string |
| deprecation_target_at | string <date-time> Optional target date for future deprecation |
{- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version": {
- "major": 0,
- "minor": 0,
- "patch": 0
}, - "compatibility": "backward",
- "predecessor_schema_id": "string",
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z"
}{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Returns paginated schema definitions filtered by optional criteria. Uses cursor-based pagination under the governed contract. Legacy limit/offset pagination is rejected with 400.
| page[size] | integer [ 1 .. 100 ] Default: 25 Number of results per page (default 25, max 100) |
| page[after] | string Cursor token for next page (from previous response meta) |
| name | string Filter by schema name |
| state | string Enum: "draft" "published" "deprecated" Filter by lifecycle state |
| scope | string Value: "tenant" Filter by scope |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": [
- {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "page_size": 0,
- "next_page_token": "string"
}, - "status": "string"
}Looks up a specific schema definition by name and exact semantic version triplet. Returns 404 with SCHEMA_NOT_FOUND if no match exists.
| name required | string Schema name to resolve |
| version required | string Example: version=1.0.0 Semantic version in major.minor.patch format |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Retrieves a single schema definition by its opaque schema identifier. Scoped to the tenant from the request context.
| schema_id required | string Opaque schema definition identifier |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Transitions a schema from draft to published state. Requires expected_version for optimistic concurrency control.
Before publication, validates:
Published schemas are immutable — content, version, and compatibility cannot be changed after publication under the governed contract.
| schema_id required | string |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| expected_version required | integer Current version for optimistic locking |
| actor_type required | string Enum: "human" "service" "agent" |
| actor_id required | string |
| actor_original_id required | string |
{- "expected_version": 0,
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string"
}{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}Transitions a schema from published to deprecated state. Requires a reason and expected_version for optimistic concurrency control.
Deprecation is idempotent — deprecating an already-deprecated schema returns success with the current state.
Deprecated schemas remain queryable but are marked as superseded. Published records are never deleted or mutated under the governed contract.
| schema_id required | string |
| X-Tenant-Context required | string Example: <tenant-context token from POST /v1/me/tenant-context> Server-minted tenant-context token (TCT) in request header. Required for all tenant-scoped requests. Obtain it from
The API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request. |
| X-Correlation-ID | string Example: req-abc-123-def-456 Request correlation ID for end-to-end tracing. If not provided, the server generates one automatically. The response always includes this header for support reference. |
| expected_version required | integer Current version for optimistic locking |
| reason required | string Reason for deprecation |
| actor_type required | string Enum: "human" "service" "agent" |
| actor_id required | string |
| actor_original_id required | string |
{- "expected_version": 0,
- "reason": "string",
- "actor_type": "human",
- "actor_id": "string",
- "actor_original_id": "string"
}{- "data": {
- "id": "string",
- "name": "string",
- "scope": "tenant",
- "entity_type": "party",
- "entity_sub_type": "string",
- "content": { },
- "version_major": 0,
- "version_minor": 0,
- "version_patch": 0,
- "compatibility": "backward",
- "state": "draft",
- "predecessor_schema_id": "string",
- "actor_type": "string",
- "actor_id": "string",
- "actor_original_id": "string",
- "version": 0,
- "deprecation_reason": "string",
- "deprecation_target_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "status": "success"
}