Skip to content

Essence Instance Service API ​

All OpenAPI documents

Version v1.0 · OpenAPI 3.0.1 · 266 operations · Download the JSON document

API for managing Essence Platform instances (Global, Sovereign, Organization). Multi-instance architecture with federation support. ## Architecture - **Global Instance**: Central instance for cross-organization features - **Sovereign Instance**: Self-hosted instances with data sovereignty - **Organization Instance**: Dedicated instances for enterprise customers ## Features - Instance lifecycle management (creation, configuration, monitoring) - Federation between instances with trust relationships - User management with multi-instance support - Message queuing and synchronization

Generated from the Instance service's code at build time (api-specs/generated/Instance/Essence.Core.Instance.Api.json) and drift-checked in CI. It describes what the code registers, which is not the same as what any one deployment has routed.

AdminOrganizations

POST/api/v1/admin/organizations

Creates a non-dedicated (shared-instance) organisation registry entry and publishes the standard `OrganizationCreatedEvent` bootstrap fan-out (Vault default vault, Billing B2B trial, TenantConfiguration defaults, Compliance profile, ModuleRegistry base modules). The caller-supplied Essence.Core.Instance.Api.Controllers.AdminCreateOrganizationRequest.OrgAdminUserId becomes the organisation's default-vault owner and B2B trial subscriber — grant it the `org-admin` role afterwards via `POST /api/v1/admin/users/{idOrEmail}/roles` to complete the "seed an org-admin member" fixture (the RBAC role and the event-driven bootstrap are separate concerns; this endpoint does not duplicate the role-grant surface that already exists).

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Created — string (uuid)
400Bad Request — ProblemDetails
401Unauthorized — ProblemDetails
403Forbidden — ProblemDetails
404Not Found — ProblemDetails

Certificates

GET/api/v1/Certificates/expiring

Retrieves certificates that are expiring within a specified number of days.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
daysUntilExpirationqueryinteger (int32)noNumber of days until expiration (default: 30)

Request body

No request body.

Responses

200Expiring certificates retrieved successfully — CertificateDto[]
500Internal server error — ProblemDetails
POST/api/v1/Certificates/issue

Issues a new certificate (intermediate or leaf).

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Certificate issued successfully — IssueCertificateResponse
400Invalid request data — ProblemDetails
500Internal server error — ProblemDetails
GET/api/v1/Certificates/{thumbprint}

Retrieves a certificate by thumbprint.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
thumbprintpathstringyesCertificate thumbprint

Request body

No request body.

Responses

200Certificate found — CertificateDto
404Certificate not found — ProblemDetails
500Internal server error — ProblemDetails
POST/api/v1/Certificates/{thumbprint}/revoke

Revokes a certificate.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
thumbprintpathstringyesCertificate thumbprint

Request body

Not marked as required in the document.

Responses

204Certificate revoked successfully
400Invalid request data — ProblemDetails
404Certificate not found — ProblemDetails
500Internal server error — ProblemDetails

Commercial

GET/api/v1/commercial/countries

Lists all supported countries from the reference data table. Used by the instance creation wizard for country selection.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200OK
GET/api/v1/commercial/invoices

Lists all invoices for the specified organization.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdquerystring (uuid)no—

Request body

No request body.

Responses

200OK
403Forbidden — ProblemDetails
502Bad Gateway
503Service Unavailable
GET/api/v1/commercial/licenses

Lists all module licenses for the specified organization.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdquerystring (uuid)no—

Request body

No request body.

Responses

200OK
403Forbidden — ProblemDetails
502Bad Gateway
503Service Unavailable
GET/api/v1/commercial/partners

Lists all active partners from the Partner Portal Service. Available to any authenticated user (needed during instance creation wizard).

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200OK
403Forbidden — ProblemDetails
502Bad Gateway
503Service Unavailable
GET/api/v1/commercial/pricing-plans

Lists all active pricing plans from the Billing Service. Available to any authenticated user (needed during instance creation wizard).

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200OK
403Forbidden — ProblemDetails
502Bad Gateway
503Service Unavailable
PUT/api/v1/commercial/pricing-plans/{id}

Updates a pricing plan (Admin only) — e.g. the Free plan's storage quota / base price. Proxies to the Billing service PUT endpoint. Fields omitted from the body are left unchanged; a supplied `features` map replaces the plan's features wholesale.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200OK
400Bad Request — ProblemDetails
403Forbidden — ProblemDetails
503Service Unavailable
GET/api/v1/commercial/subscriptions

Lists all subscriptions for the specified organization.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdquerystring (uuid)no—

Request body

No request body.

Responses

200OK
403Forbidden — ProblemDetails
502Bad Gateway
503Service Unavailable
GET/api/v1/commercial/usage

Retrieves usage breakdown for a given billing period.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
periodquerystringno—
subscriptionIdquerystring (uuid)no—

Request body

No request body.

Responses

200OK
403Forbidden — ProblemDetails
502Bad Gateway
503Service Unavailable

Compliance

GET/api/v1/compliance/assessments

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200OK
GET/api/v1/compliance/assessments/{id}

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

No request body.

Responses

404Not Found — ProblemDetails
GET/api/v1/compliance/audit-log

One filtered, paged slice of the platform audit log, from the Compliance service that owns it.

Every filter below used to be accepted and then dropped: the call downstream took only `page` and `pageSize`, so an investigator who narrowed by actor, action or date got the unfiltered first page back and no indication of it. On an evidential surface that turns "no results" into a statement about the log rather than about the query. The owning service does not expose a parameter for every filter this console offers. Those are named back in `unsupportedFilters` so the surface can say which part of the question went unasked, instead of presenting an unfiltered page as a filtered one.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
startDatequerystring (date-time)no—
endDatequerystring (date-time)no—
actorquerystringno—
actionTypequerystringno—
resourceTypequerystringno—
servicequerystringno—
organizationIdquerystringno—
searchquerystringno—
pagequeryinteger (int32)no—
pageSizequeryinteger (int32)no—

Request body

No request body.

Responses

200OK
GET/api/v1/compliance/evidence

Collected compliance evidence, optionally scoped to a single assessment.

This endpoint returned 501 until the owning service had a read it could use. The earlier note here said the Compliance service exposed no evidence endpoint, which was wrong - EvidenceController existed and served /api/v1/Evidence, and a grep for the word "evidence" in its route attributes could not find it because the routes are [controller]-derived. The conclusion held for a different reason: the only read was GET /api/v1/Evidence/control/{controlId}, and this endpoint is asked for evidence by ASSESSMENT or for everything, so there was no control id to scope to. Worse, that per-control route had no MediatR handler at all, so it would have thrown had anything called it. Both are now fixed: the owning service has the handler and a paged GET /api/v1/Evidence that accepts an assessment or instance scope, resolving an assessment to its regulation's controls on its own side. An unreachable owner is still reported as unavailable, never as an empty list. "No evidence has been recorded" is a claim an auditor could rely on, and this endpoint is only in a position to make it when the owning service actually said so.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
assessmentIdquerystring (uuid)no—
pagequeryinteger (int32)no—
pageSizequeryinteger (int32)no—

Request body

No request body.

Responses

200OK
503Service Unavailable
GET/api/v1/compliance/overview

Returns a placeholder compliance overview. Real scores will be projected from the EPIC 12 assessment repository once it lands.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200OK

CredentialLockdown

POST/api/v1/credential-lockdown/compromised

Flags a presented physical credential compromised (report stolen), locking it down and notifying the relying parties it was presented to.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Credential locked down; events emitted. — CredentialLockdownResponse
400Invalid request (validation or domain rule violation). — ProblemDetails
401Unauthorized — user not authenticated. — ProblemDetails

CrossBorder

GET/api/v1/cross-border/driving-entitlement

Reads the caller's held driving entitlement for cross-border presentation. Returns `{ data: null }` when the holder has no licence on file (a normal state, not an error).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
userIdquerystring (uuid)noOptional holder id supplied by the SPA; when present it MUST match the caller's own subject (a mismatch is refused as `403`). The authoritative owner is always the JWT subject.

Request body

No request body.

Responses

200The holder's held entitlement, or `null` when none is on file.
401Unauthorized — caller not authenticated. — ProblemDetails
403The requested holder is not the caller. — ProblemDetails
POST/api/v1/cross-border/driving-entitlement

Registers or replaces the caller's held driving entitlement from their wallet. The owner is always the caller's subject — any `userId` in the body is ignored.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200The registered (or replaced) held entitlement.
400Invalid request (validation or domain rule violation). — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
POST/api/v1/cross-border/returning-national/intake

Opens the caller's <b>inbound returning-national intake</b> — Step 1 of the `returning-expat-domestic-identity-reestablishment` journey. Captures the foreign credential references, resolves the corridor's residency / adequacy / lawful-basis decision, and previews the foreign-to-domestic assurance credit under the origin jurisdiction's acceptance policy. The returned `intakeId` is the handle Steps 2 (EPIC 9 bootstrap) and 3 (EPIC 2 vault reconciliation) key on, so the credentials are never re-entered. The response is the DTO <b>bare</b> — no `{ data: … }` envelope. The returning-national client unwraps `response.data` (the HTTP body) directly, unlike the cross-border engine client above which unwraps `data.data`. A corridor with no lawful basis is <b>refused</b> (409) and nothing is persisted — a blocked adequacy posture cannot be walked past into the downstream steps.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201The intake was opened. — ReturningNationalIntakeDto
400Invalid request, or no submitted credential can be credited. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
409The corridor has no lawful basis — nothing was recorded. — ProblemDetails

CrossRegionRollouts

GET/api/v1/global-instances/rollouts

Lists the most recent rolling releases, newest first.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
limitqueryinteger (int32)noHow many to return (1..100, default 20).

Request body

No request body.

Responses

200The rollouts (empty when none has ever run). — CrossRegionRolloutDto[]
POST/api/v1/global-instances/rollouts

Opens and starts a rolling release across the given regions, in order.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Started. — CrossRegionRolloutDto
400Malformed request. — ProblemDetails
409Another rollout is still live. — ProblemDetails
422The envelope step is a multi-major jump (FR-03.047). — ProblemDetails
GET/api/v1/global-instances/rollouts/{rolloutId}

Reads one rolling release.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

No request body.

Responses

200The rollout. — CrossRegionRolloutDto
404No rollout has that id. — ProblemDetails
POST/api/v1/global-instances/rollouts/{rolloutId}/abandon

Abandons a live rollout, rolling back to its from-version.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200Abandoned. — CrossRegionRolloutDto
400Bad Request — ProblemDetails
404No rollout has that id. — ProblemDetails
409The rollout has already completed or been abandoned. — ProblemDetails
POST/api/v1/global-instances/rollouts/{rolloutId}/halt

Halts an in-progress rollout by hand.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200Halted (`RolloutHaltedManual`). — CrossRegionRolloutDto
400Bad Request — ProblemDetails
404No rollout has that id. — ProblemDetails
409The rollout is not in progress. — ProblemDetails
POST/api/v1/global-instances/rollouts/{rolloutId}/regions/{region}/outcome

Reports a region's post-roll health outcome — the automatic guard. Healthy rolls the region; unhealthy halts the rollout into `RolloutHaltedAuto`.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—
regionpathstringyes—

Request body

Not marked as required in the document.

Responses

200Recorded; the body shows the resulting state. — CrossRegionRolloutDto
400Bad Request — ProblemDetails
404No rollout has that id. — ProblemDetails
409The rollout is not in progress, or the region is not the next to roll. — ProblemDetails
POST/api/v1/global-instances/rollouts/{rolloutId}/resume

Resumes a halted rollout (auto or manual).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

No request body.

Responses

200Resumed (`InProgress`). — CrossRegionRolloutDto
404No rollout has that id. — ProblemDetails
409The rollout is not halted. — ProblemDetails
GET/api/v1/instances/global/rollouts

Lists the most recent rolling releases, newest first.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
limitqueryinteger (int32)noHow many to return (1..100, default 20).

Request body

No request body.

Responses

200The rollouts (empty when none has ever run). — CrossRegionRolloutDto[]
POST/api/v1/instances/global/rollouts

Opens and starts a rolling release across the given regions, in order.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Started. — CrossRegionRolloutDto
400Malformed request. — ProblemDetails
409Another rollout is still live. — ProblemDetails
422The envelope step is a multi-major jump (FR-03.047). — ProblemDetails
GET/api/v1/instances/global/rollouts/{rolloutId}

Reads one rolling release.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

No request body.

Responses

200The rollout. — CrossRegionRolloutDto
404No rollout has that id. — ProblemDetails
POST/api/v1/instances/global/rollouts/{rolloutId}/abandon

Abandons a live rollout, rolling back to its from-version.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200Abandoned. — CrossRegionRolloutDto
400Bad Request — ProblemDetails
404No rollout has that id. — ProblemDetails
409The rollout has already completed or been abandoned. — ProblemDetails
POST/api/v1/instances/global/rollouts/{rolloutId}/halt

Halts an in-progress rollout by hand.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200Halted (`RolloutHaltedManual`). — CrossRegionRolloutDto
400Bad Request — ProblemDetails
404No rollout has that id. — ProblemDetails
409The rollout is not in progress. — ProblemDetails
POST/api/v1/instances/global/rollouts/{rolloutId}/regions/{region}/outcome

Reports a region's post-roll health outcome — the automatic guard. Healthy rolls the region; unhealthy halts the rollout into `RolloutHaltedAuto`.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—
regionpathstringyes—

Request body

Not marked as required in the document.

Responses

200Recorded; the body shows the resulting state. — CrossRegionRolloutDto
400Bad Request — ProblemDetails
404No rollout has that id. — ProblemDetails
409The rollout is not in progress, or the region is not the next to roll. — ProblemDetails
POST/api/v1/instances/global/rollouts/{rolloutId}/resume

Resumes a halted rollout (auto or manual).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
rolloutIdpathstring (uuid)yes—

Request body

No request body.

Responses

200Resumed (`InProgress`). — CrossRegionRolloutDto
404No rollout has that id. — ProblemDetails
409The rollout is not halted. — ProblemDetails

DedicatedMaterialisations

GET/api/v1/instances/materialisations

The environments waiting to be built, oldest first.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200The queue. Oldest first because a customer is waiting on each one, and the longest wait is the customer closest to asking where their instance is. — DedicatedMaterialisationQueueItem[]
POST/api/v1/instances/materialisations/{requestId}/complete

Report the environment you built. This is what makes the instance Active.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
requestIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

204Recorded; the instance is now Active.
400Refused — no database named, no endpoint, or the request is already completed. A dedicated instance whose database nobody named is the state this workstream exists to end; accepting a blank would recreate it with a human's signature on it. — ProblemDetails
404No such request. — ProblemDetails
POST/api/v1/instances/materialisations/{requestId}/fail

Report that the environment cannot be built.

The queue needs an exit that is not success. Without one an unbuildable environment — no capacity in the region until Q4, a platform not yet onboarded — sits Awaiting forever: the customer waits on a build that will never happen, and the operator has nowhere to put what they learned. <b>This does NOT cancel the organisation's subscription.</b> The instance and its saga are marked Failed with `rollbackSuccessful: false` — the platform's existing vocabulary for "an operator must reconcile the orphaned resources" — and the exposure is logged with the artifact ids. Auto-cancelling would be a commercial decision this endpoint has no standing to make: "no capacity until Q4" may be a customer who is happy to wait.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
requestIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

204Recorded. The organisation's billing is untouched and needs a decision.
400No reason given, or the request is already resolved. — ProblemDetails
404No such request. — ProblemDetails

DeveloperIds

GET/api/v1/developer-ids

Lists all developer IDs, optionally filtered by status.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
statusquerystringnoOptional status filter (active, suspended, revoked).

Request body

No request body.

Responses

200Developer IDs retrieved successfully.
400Unknown status filter. — ProblemDetails
POST/api/v1/developer-ids

Creates a new developer ID.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Developer ID created successfully. — DeveloperIdEntry
400Invalid request data, or the slug is already taken. — ProblemDetails
GET/api/v1/developer-ids/{id}

Retrieves a single developer ID by its unique identifier.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe developer ID identifier.

Request body

No request body.

Responses

200Developer ID retrieved successfully. — DeveloperIdEntry
404Developer ID not found. — ProblemDetails
POST/api/v1/developer-ids/{id}/revoke

Revokes a developer ID permanently.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe developer ID identifier.

Request body

No request body.

Responses

200Developer ID revoked successfully.
400Invalid operation (already revoked). — ProblemDetails
404Developer ID not found. — ProblemDetails
POST/api/v1/developer-ids/{id}/suspend

Suspends a developer ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe developer ID identifier.

Request body

Not marked as required in the document.

Responses

200Developer ID suspended successfully.
400Invalid operation (already suspended or revoked). — ProblemDetails
404Developer ID not found. — ProblemDetails

Discovery

GET/api/v1/discovery/.well-known/instance

RFC 8615 well-known metadata document for this instance. Returns the API surface, supported versions, instance type, and federation trust roots so external clients (and federated peers) can perform instance discovery without authentication.

This endpoint is intentionally Microsoft.AspNetCore.Authorization.AllowAnonymousAttribute because well-known discovery documents are part of RFC 8615 and must be reachable before authentication credentials are established. The document contains only public, non-PII metadata: instance ID, instance type, supported API versions, and the federation trust roots an external party would need to validate signed envelopes.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Discovery metadata document. — InstanceDiscoveryDocument
GET/api/v1/discovery/health

Routing health (EPIC 3 api-contracts §Discovery, `AllowAnonymous`): can discovery route a newcomer to a sovereign right now? `200` when at least one sovereign is `Active`, `503` when none is, with the same body either way (#10344).

Microsoft.AspNetCore.Authorization.AllowAnonymousAttribute — routing happens before authentication, like `GET /discovery/instances`, and this endpoint uses exactly that list's predicate (`OnlyHealthy` ⇒ `InstanceStatus.Active`). It returns two counts and a word, both counts derivable from that public list, so it is not an inventory or liveness oracle: no instance id, name, status or probe result is exposed. Per-instance health is `GET /discovery/health/{instanceId}`, which stays caller-scoped.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200At least one sovereign is routable. — RoutingHealthDto
503No sovereign is routable. — RoutingHealthDto
GET/api/v1/discovery/health/{instanceId}

Performs a comprehensive health check on a specific instance. Validates database connectivity, cache availability, and dependent services. Results are cached for 30 seconds to reduce health check overhead.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdpathstringyesThe unique identifier of the instance to check.

Request body

No request body.

Responses

200Health check completed successfully. — HealthStatus
400Invalid instance ID. — ProblemDetails
403Forbidden — ProblemDetails
500Internal server error.
POST/api/v1/discovery/home-realm

Home-realm discovery broker (EPIC 9 FR-09.032 / EPIC 3 FR-03.058). Resolves a sign-in address's <b>domain</b> to the authoritative home realm from the Global Registry and returns where the broker should redirect to complete authentication (the completing sovereign's OIDC authorize endpoint) plus an opaque short-TTL realm descriptor.

Microsoft.AspNetCore.Authorization.AllowAnonymousAttribute — discovery runs BEFORE authentication, so the answer must not be a statement about a person. It is keyed on the DOMAIN only, never the local-part (#8633). Keyed on the whole address it was an account-existence oracle in the one attribute that matters most on this platform: an anonymous caller could hash a candidate address, post it, and be told which sovereign holds that named individual's vault — residency class for a named person, to an unauthenticated stranger. Hashing did not help, because the attacker chooses the input. An unknown domain, a domain whose users span regions, and a request with no domain are one answer: the default-region realm, indistinguishable from a real default-region domain (NFR-09.020). No per-account branch is taken, in body or in timing, because no per-account state is consulted. Where the realm is therefore not disclosed the sign-in surface presents every configured IdP rather than a region-filtered subset (FR-09.036), so the user is not stranded at a door they cannot open.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200The resolved home realm + opaque redirect descriptor. — HomeRealmDiscoveryResponse
GET/api/v1/discovery/instances

Available SOVEREIGN instances for the pre-auth Register / sign-in surface: every sovereign currently in `Active` status. Lets the frontend instance selector scope itself to the sovereigns that are actually served instead of shipping a hardcoded list. <b>Global is deliberately NOT returned.</b> No vault data is ever global, so GLOBAL is not a jurisdiction a vault can live in and must not be offered as one. This endpoint answers "where may my vault live?", and Global is the router, not an answer to that question.

Microsoft.AspNetCore.Authorization.AllowAnonymousAttribute — instance choice happens BEFORE authentication. The response is public routing metadata ONLY (opaque id, jurisdiction code, display name); it never exposes health, status, compliance, data-residency, validator, or CDN detail — those stay on the admin-gated instance-management endpoints. Availability = `InstanceStatus.Active`, reusing the exact predicate the admin sovereign list applies for `onlyHealthy` (so an instance that is not serving is never advertised). Global was previously included on the grounds that "the SPA is served FROM the Global instance, so if this endpoint is reachable, Global is by definition available". That is true about AVAILABILITY and irrelevant to the question asked: reachability of the front door is not a licence to place a vault behind it.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200The available instances (Global + Active sovereigns). — PublicInstanceListResponse
GET/api/v1/discovery/latency

Measures the round-trip network latency to a specific instance endpoint. Used for routing decisions and performance monitoring. Probes the instance's liveness path with a 5-second timeout, where the liveness probe resolver says that instance is probed (#16678).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
endpointquerystringnoThe HTTP/HTTPS endpoint URL to measure latency.

Request body

No request body.

Responses

200Latency measured successfully. — LatencyMeasurementResult
400Invalid endpoint URL. — ProblemDetails
500Internal server error.
POST/api/v1/discovery/optimal

Resolves the optimal instance for a client from its GeoIP position — the contract binding of the FR-03.024b resolution also served by M:Essence.Core.Instance.Api.Controllers.DiscoveryController.ResolveSovereign(System.String,System.Nullable{System.Int32},System.Threading.CancellationToken).

The authoritative contract (api-contracts.md §1 Discovery) specifies `POST /api/v1/discovery/optimal` ("GeoIP optimal instance"); the implementation had only ever exposed this capability as `GET /api/v1/discovery/sovereign` (debt-2026-08-13-039). Both bindings resolve through the same `ISovereignFallbackRouter`, so they cannot diverge: the POST carries the GeoIP inputs in a body (the shape the contract was written against and the natural carrier for a lookup result), the GET keeps them on the query string for existing callers.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200An adequate instance was resolved (directly or via the default). — SovereignRouteResult
400Invalid country code or confidence. — ProblemDetails
422No adequate sovereign for the request (FR-03.024b `no_adequate_sovereign`). — ProblemDetails
500Internal server error.
POST/api/v1/discovery/org-realm

Org home-realm discovery (EPIC 3 FR-03.059/060). Resolves an org-branded host — the default `{orgid}.{region}.onessence.digital` scheme or a license-gated custom domain — to its Organisation Instance from the Global Registry, and returns where to route/redirect the org sign-in plus a signed realm descriptor. Used by the edge/gateway to route the org host.

Microsoft.AspNetCore.Authorization.AllowAnonymousAttribute — runs before authentication. A host that does not bind to a known org returns `404` uniformly (an unbound / unentitled custom domain and a disabled org are indistinguishable — FR-03.060), so it is not an entitlement/config oracle.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200The resolved org realm + signed redirect descriptor. — HomeRealmDiscoveryResponse
404The host does not resolve to a known org (uniform). — ProblemDetails
GET/api/v1/discovery/org-realm/organization

Resolves an org sign-in host to the organisation behind it, for FIRST-PARTY SERVICES ONLY (#4788).

<b>Why this is not on M:Essence.Core.Instance.Api.Controllers.DiscoveryController.DiscoverOrgRealm(Essence.Core.Instance.Application.DTOs.OrgRealmDiscoveryRequest,Essence.Core.Instance.Application.Registry.IOrgRealmResolver,Essence.Core.Instance.Application.Registry.IRealmRedirectSigner,System.Threading.CancellationToken).</b> The anonymous realm-discovery response deliberately carries no organisation id. That omission IS the protection: adding it would hand any visitor a host→organisation directory, harvestable by pointing the endpoint at every domain somebody is merely curious about. A caller that legitimately needs the id — the org portal, resolving which organisation's branding to serve a sign-in page — is a service, not a browser, so it asks here instead, under Essence.Core.Instance.Api.Authorization.Policies.PolicyNames.InstanceServiceAccount. <b>Bare `[Authorize]` would not have been enough.</b> The class-level attribute admits any authenticated principal, which includes every end-user bearer token on the platform — so the directory would have been open to any signed-in user rather than to nobody. The policy narrows it to the service-account and GlobalAdmin roles. <b>Uniform on failure, like its anonymous sibling.</b> An unknown host, a malformed host, a host whose region label disagrees with the instance, and an organisation whose white-label entitlement has lapsed all return `200` with a null id — the resolver's own `Unresolved`, unmodified. A 404 for "no such host" and a 200 for "found" would make this an existence oracle for anything holding a service token; the single shape does not.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
hostquerystringnoThe sign-in host, e.g. `meridian.gb.onessence.digital`.

Request body

No request body.

Responses

200Answered. `organizationId` is null when the host binds to no live, entitled organisation — deliberately a 200 rather than a 404. — OrgHostOrganizationResponse
POST/api/v1/discovery/route

Computes the optimal route between a source instance and a target instance. May return a direct route or a multi-hop route through intermediate instances based on latency.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200Route computed successfully. — RoutingDecision
400Invalid request parameters. — ProblemDetails
404No route found between instances. — ProblemDetails
500Internal server error.
GET/api/v1/discovery/sovereign

Resolves the sovereign a request should be routed to under the FR-03.024b GeoIP-unresolvable / no-adequate-sovereign fallback rule. The GeoIP country and confidence are supplied as query parameters (produced upstream by the GeoIP2 lookup); omitting countryCode models a GeoIP-unresolvable lookup. When no adequate sovereign can be resolved and the configured fallback mode rejects (or the default sovereign is itself inadequate) the endpoint returns `HTTP 422 no_adequate_sovereign`.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
countryCodequerystringnoOptional ISO 3166-1 alpha-2 client country from GeoIP2.
confidencequeryinteger (int32)noOptional GeoIP country-confidence (0–100); defaults to 0.

Request body

No request body.

Responses

200An adequate sovereign was resolved (directly or via the default). — SovereignRouteResult
400Invalid country code or confidence. — ProblemDetails
422No adequate sovereign for the request (FR-03.024b `no_adequate_sovereign`). — ProblemDetails
500Internal server error.
GET/api/v1/discovery/users/{userId}

Discovers the optimal instance for a user based on geo-location, health, and routing preferences. Results are cached for 5 minutes to support high throughput (1M queries/second).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
userIdpathstringyesThe unique identifier of the user requesting discovery.
latitudequerynumber (double)noOptional client latitude for geo-location based routing.
longitudequerynumber (double)noOptional client longitude for geo-location based routing.
requestedRegionquerystringnoOptional region hint. A user is always discovered to their home region: neither the home instance nor a fallback is ever taken from another region, whatever is requested (#17922).

Request body

No request body.

Responses

200Instance discovered successfully. — DiscoveryResult
400Invalid request parameters. — ProblemDetails
404No suitable instance found for user. — ProblemDetails
500Internal server error.
503Service Unavailable

Dns

GET/api/v1/dns/zones

Lists all DNS zones.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200DNS zones retrieved successfully. — DnsZoneDto[]
500Internal server error.
POST/api/v1/dns/zones

Creates a new DNS zone for an instance.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201DNS zone created successfully. — string (uuid)
400Invalid request data or validation failure. — ProblemDetails
500Internal server error.
GET/api/v1/dns/zones/by-name/{name}

Retrieves a DNS zone by its fully qualified domain name.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
namepathstringyesThe DNS zone name (FQDN).

Request body

No request body.

Responses

200DNS zone retrieved successfully. — DnsZoneDto
404DNS zone not found. — ProblemDetails
500Internal server error.
GET/api/v1/dns/zones/{id}

Retrieves a specific DNS zone by ID, including its records.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe DNS zone ID.

Request body

No request body.

Responses

200DNS zone retrieved successfully. — DnsZoneDto
404DNS zone not found. — ProblemDetails
500Internal server error.
POST/api/v1/dns/zones/{id}/records

Creates a new DNS record within a zone.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe DNS zone ID to add the record to.

Request body

Not marked as required in the document.

Responses

201DNS record created successfully. — string (uuid)
400Invalid request data or validation failure. — ProblemDetails
404DNS zone not found. — ProblemDetails
409The zone already holds a record with this name and type. — ProblemDetails
500Internal server error.
PUT/api/v1/dns/zones/{id}/records/{recordId}

Updates an existing DNS record within a zone.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe DNS zone ID containing the record.
recordIdpathstring (uuid)yesThe DNS record ID to update.

Request body

Not marked as required in the document.

Responses

200DNS record updated successfully.
400Invalid request data or validation failure. — ProblemDetails
404DNS zone or record not found. — ProblemDetails
500Internal server error.
DELETE/api/v1/dns/zones/{id}/records/{recordId}

Deletes a DNS record from a zone.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe DNS zone ID containing the record.
recordIdpathstring (uuid)yesThe DNS record ID to delete.

Request body

No request body.

Responses

204DNS record deleted successfully.
404DNS zone or record not found. — ProblemDetails
500Internal server error.
POST/api/v1/dns/zones/{id}/verify

Verifies the health of all DNS records in a zone by querying the DNS provider.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe DNS zone ID to verify.

Request body

No request body.

Responses

200DNS records verification completed.
404DNS zone not found. — ProblemDetails
500Internal server error.

Documents

POST/api/v1/documents

Uploads an encrypted document to a vault. Document content must be encrypted client-side before upload.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Document uploaded successfully. — string (uuid)
400Invalid request data or vault capacity exceeded. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden — ProblemDetails
404Vault not found, or the caller is not the owner (existence is not disclosed to non-owners — debt-2026-06-02-1365). — ProblemDetails
500Internal server error.
GET/api/v1/documents/vault/{vaultId}

Lists a bounded, keyset-paginated slice of the documents in a vault (DAT-006). Access is granted only to the vault owner.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
vaultIdpathstring (uuid)yesThe vault ID.
includeDeletedquerybooleannoWhether to include soft-deleted documents (default: false).
cursorquerystringnoOpaque continuation cursor from a prior page's NextCursor, or null for the first slice.
pageSizequeryinteger (int32)noRequested slice size; clamped to [1, 500] (DAT-006).

Request body

No request body.

Responses

200Documents retrieved successfully. — VaultDocumentRefCursorResult
401Unauthorized - user not authenticated. — ProblemDetails
404Vault not found, or the caller is not the owner (existence is not disclosed to non-owners — debt-2026-06-02-1365). — ProblemDetails
500Internal server error.
GET/api/v1/documents/vault/{vaultId}/search

Searches for documents by name prefix within a vault, returning a bounded, keyset-paginated slice (DAT-006). Access is granted only to the vault owner.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
vaultIdpathstring (uuid)yesThe vault ID.
searchTermquerystringnoThe name prefix to match against document names.
cursorquerystringnoOpaque continuation cursor from a prior page's NextCursor, or null for the first slice.
pageSizequeryinteger (int32)noRequested slice size; clamped to [1, 500] (DAT-006).

Request body

No request body.

Responses

200Documents retrieved successfully. — VaultDocumentRefCursorResult
401Unauthorized - user not authenticated. — ProblemDetails
404Vault not found, or the caller is not the owner (existence is not disclosed to non-owners — debt-2026-06-02-1365). — ProblemDetails
500Internal server error.
GET/api/v1/documents/{id}

Retrieves a document by its unique identifier. Access is granted only to the vault owner.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe document ID.

Request body

No request body.

Responses

200Document retrieved successfully. — VaultDocumentRef
401Unauthorized - user not authenticated. — ProblemDetails
404Document not found, or the caller does not own it (existence is not disclosed to non-owners — debt-2026-06-02-1390). — ProblemDetails
500Internal server error.
PUT/api/v1/documents/{id}

Updates document name and encrypted metadata.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe document ID.

Request body

Not marked as required in the document.

Responses

204Document updated successfully.
400Invalid request data. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user does not own the vault containing this document. — ProblemDetails
404Document or vault not found. — ProblemDetails
500Internal server error.
DELETE/api/v1/documents/{id}

Deletes a document from a vault (soft delete). Deleted documents can be restored within the retention period.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe document ID.

Request body

No request body.

Responses

204Document deleted successfully.
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user does not own the vault containing this document. — ProblemDetails
404Document or vault not found. — ProblemDetails
500Internal server error.

EdgeRoutes

GET/api/v1/edge/routes/{region}

Returns the Traefik dynamic configuration for every verified, entitled custom domain homed in the given region.

<b>Why `[AllowAnonymous]` and a pre-shared secret rather than a JWT (SEC-002).</b> The caller is Traefik's HTTP provider, which can attach static headers to its poll and cannot obtain, cache, or refresh a bearer token. The endpoint is nonetheless NOT public: the table enumerates customers' branded hostnames, so serving it openly would disclose which organisations are on the white-label SKU. It is therefore gated on a pre-shared secret compared in constant time (SEC-005), and the service <b>fails closed in every environment</b> — an unconfigured secret answers 503 rather than serving the table, so a misconfigured box cannot silently publish the customer list. There is no Development exception: the fleet runs as Development (#9480), so one would serve the list anonymously in production (#12083). A wrong or absent secret answers <b>404</b>, not 401: a 401 would confirm the endpoint exists and is worth attacking, and this surface has no legitimate interactive caller to help.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
regionpathstringyesRegion code (e.g. "gb", "de", "ae").

Request body

No request body.

Responses

200The dynamic configuration (possibly with zero routers). — TraefikDynamicConfiguration
404The secret was absent or wrong, or the region is malformed. — ProblemDetails
503No secret is configured on this host.

GlobalInstances

GET/api/v1/global-instances

Retrieves the current global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Global instance retrieved successfully. — GlobalInstance
404Global instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/global-instances

Creates a new global instance.

The only action on `POST /instances/global` (#14190). The cross-type facade Essence.Core.Instance.Api.Controllers.InstanceLifecycleController used to declare the same template, which made every create an `AmbiguousMatchException`. This action now returns the facade's response — the Essence.Core.Instance.Application.DTOs.CreateInstanceResponseDto body and a `Location` on the facade's type-agnostic read, `GET /instances/{id}` — which is a superset of the bare `{ id }` this action returned before.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Global instance created successfully. — CreateInstanceResponseDto
400Invalid request. — ProblemDetails
500Internal server error.
GET/api/v1/global-instances/{id}

Retrieves a global instance by ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

200Global instance retrieved successfully. — GlobalInstance
404Global instance not found. — ProblemDetails
500Internal server error.
DELETE/api/v1/global-instances/{id}

Terminates the global instance (irreversible operation).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance terminated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
409The instance still has live organisation instances (FR-03.007a). — ProblemDetails
500Internal server error.
PUT/api/v1/global-instances/{id}/configuration

Updates the global instance configuration.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Configuration updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
PUT/api/v1/global-instances/{id}/health

Updates the health status of the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Health status updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/global-instances/{id}/health

Updates the health status of the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Health status updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/global-instances/{id}/maintenance/begin

Begins maintenance mode for the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Maintenance mode started successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/global-instances/{id}/maintenance/complete

Completes maintenance mode for the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Maintenance mode completed successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
PUT/api/v1/global-instances/{id}/metadata

Updates the global instance metadata.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Metadata updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/global-instances/{id}/organization-instances

Retrieves connected organization instance IDs.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe global instance ID.

Request body

No request body.

Responses

200Organization instances retrieved successfully. — (string (uuid))[]
404Global instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/global-instances/{id}/provision

Provisions the global instance (transitions from Provisioning to Active status).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance provisioned successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/global-instances/{id}/resume

Resumes the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance resumed successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/global-instances/{id}/sovereign-instances

Retrieves connected sovereign instance IDs.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe global instance ID.

Request body

No request body.

Responses

200Sovereign instances retrieved successfully. — (string (uuid))[]
404Global instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/global-instances/{id}/suspend

Suspends the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance suspended successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/instances/global

Retrieves the current global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Global instance retrieved successfully. — GlobalInstance
404Global instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/global

Creates a new global instance.

The only action on `POST /instances/global` (#14190). The cross-type facade Essence.Core.Instance.Api.Controllers.InstanceLifecycleController used to declare the same template, which made every create an `AmbiguousMatchException`. This action now returns the facade's response — the Essence.Core.Instance.Application.DTOs.CreateInstanceResponseDto body and a `Location` on the facade's type-agnostic read, `GET /instances/{id}` — which is a superset of the bare `{ id }` this action returned before.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Global instance created successfully. — CreateInstanceResponseDto
400Invalid request. — ProblemDetails
500Internal server error.
GET/api/v1/instances/global/{id}

Retrieves a global instance by ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

200Global instance retrieved successfully. — GlobalInstance
404Global instance not found. — ProblemDetails
500Internal server error.
DELETE/api/v1/instances/global/{id}

Terminates the global instance (irreversible operation).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance terminated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
409The instance still has live organisation instances (FR-03.007a). — ProblemDetails
500Internal server error.
PUT/api/v1/instances/global/{id}/configuration

Updates the global instance configuration.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Configuration updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
PUT/api/v1/instances/global/{id}/health

Updates the health status of the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Health status updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/global/{id}/health

Updates the health status of the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Health status updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/global/{id}/maintenance/begin

Begins maintenance mode for the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Maintenance mode started successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/global/{id}/maintenance/complete

Completes maintenance mode for the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Maintenance mode completed successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
PUT/api/v1/instances/global/{id}/metadata

Updates the global instance metadata.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Metadata updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/instances/global/{id}/organization-instances

Retrieves connected organization instance IDs.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe global instance ID.

Request body

No request body.

Responses

200Organization instances retrieved successfully. — (string (uuid))[]
404Global instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/global/{id}/provision

Provisions the global instance (transitions from Provisioning to Active status).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance provisioned successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/global/{id}/resume

Resumes the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance resumed successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/instances/global/{id}/sovereign-instances

Retrieves connected sovereign instance IDs.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe global instance ID.

Request body

No request body.

Responses

200Sovereign instances retrieved successfully. — (string (uuid))[]
404Global instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/global/{id}/suspend

Suspends the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

204Instance suspended successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.

ImmigrationStatus

GET/api/v1/cross-border/immigration-status

Reads the caller's own transition, with their issued share codes and the checks made against them. Returns `204 No Content` when nothing is linked yet — a normal starting state, not an error, and the signal the surface uses to show the entry screen.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200The caller's transition. — ImmigrationStatusDto
204The caller has never linked an immigration status.
401Unauthorized — caller not authenticated. — ProblemDetails
GET/api/v1/cross-border/immigration-status/console

The verifying organisation's console read: its acceptance policy, every check it has made (each flagged when the subject's status has since moved on), and its outstanding requests.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200The console state. — ImmigrationVerificationConsoleDto
401Unauthorized — caller not authenticated. — ProblemDetails
403The caller is not acting for an organisation. — ProblemDetails
POST/api/v1/cross-border/immigration-status/cutover

Step 3 — the canonical cutover. Retires the BRP, makes the eVisa canonical, supersedes every previously issued code, and writes the audited supersession event through the outbox.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200The canonical transition, with its supersession receipt reference. — ImmigrationStatusDto
401Unauthorized — caller not authenticated. — ProblemDetails
404The caller has never linked an immigration status. — ProblemDetails
409No eVisa is established yet, or the cutover already happened. — ProblemDetails
POST/api/v1/cross-border/immigration-status/evisa

Step 2 seam — records an established eVisa verifiable credential against the caller's linked status. Issuing the credential is EPIC 24 base capability and happens elsewhere.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200The updated transition, now at the interim stage. — ImmigrationStatusDto
400Invalid request. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
404The caller has never linked an immigration status. — ProblemDetails
PUT/api/v1/cross-border/immigration-status/org-policy

Replaces the caller organisation's acceptance policy.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200The applied policy. — ImmigrationVerificationPolicyDto
400Invalid policy. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
403The caller is not acting for an organisation. — ProblemDetails
POST/api/v1/cross-border/immigration-status/share-codes

Step 4 — issues a typed share code proving one entitlement claim. The plaintext code is in this response and nowhere else, ever.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201The issued code, returned once. — IssuedShareCodeDto
400Invalid request. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
404The caller has never linked an immigration status. — ProblemDetails
POST/api/v1/cross-border/immigration-status/share-codes/{shareCodeId}/revoke

Revokes one of the caller's own share codes. Idempotent.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
shareCodeIdpathstring (uuid)yesThe code to revoke.

Request body

No request body.

Responses

200The updated transition, with the code now shown as revoked. — ImmigrationStatusDto
400The code does not belong to the caller's status. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
404The caller has never linked an immigration status. — ProblemDetails
POST/api/v1/cross-border/immigration-status/verification-requests

Raises bulk/invite verification requests — asks several individuals for a share code and starts tracking who has responded.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201The raised requests. — ImmigrationVerificationRequestDto[]
400Invalid request. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
403The caller is not acting for an organisation. — ProblemDetails
POST/api/v1/cross-border/immigration-status/verification-requests/{requestId}/withdraw

Withdraws one of the caller organisation's outstanding requests.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
requestIdpathstring (uuid)yesThe request to withdraw.

Request body

No request body.

Responses

200The withdrawn request. — ImmigrationVerificationRequestDto
400The request does not belong to the caller's organisation. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
403The caller is not acting for an organisation. — ProblemDetails
POST/api/v1/cross-border/immigration-status/verify

The verifier's redemption — enter a share code, get a stamped result. Every redemption resolves against the live status, so a code minted before the migrant's cutover comes back `superseded` rather than clean.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200The stamped verification result. — ImmigrationVerificationDto
400The code is not the right shape. — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
403The caller is not acting for an organisation. — ProblemDetails
404No share code matches. — ProblemDetails

InstanceLifecycle

GET/api/v1/instances

Retrieves all instances with optional filtering.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceTypequeryInstanceTypenoOptional instance type filter.
statusqueryInstanceStatusnoOptional status filter.

Request body

No request body.

Responses

200Instances retrieved successfully. — InstanceListDto[]
500Internal server error.
GET/api/v1/instances/hierarchy

Retrieves the full instance hierarchy tree (Global -> Sovereign -> Organization).

This endpoint materializes the whole fleet into a single in-memory tree, so it is bounded by Essence.Core.Instance.Application.Configuration.InstanceHierarchyOptions.MaxFleetSize (default 5000 total instances). When the live fleet exceeds that bound the endpoint trips a circuit breaker and returns HTTP 413, directing callers to the paginated instance-listing endpoints (`GET /api/v1/instances`) instead of returning an unbounded tree (debt-2026-06-13-1238).

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Hierarchy retrieved successfully. — unspecified[]
413Fleet size exceeds the maximum this endpoint can materialize; use the paginated endpoints. — ProblemDetails
500Internal server error.
GET/api/v1/instances/page

Retrieves a bounded, keyset-paginated slice of instances of a single type (DAT-006). Preferred over the unbounded M:Essence.Core.Instance.Api.Controllers.InstanceLifecycleController.GetAllInstances(System.Nullable{Essence.Core.Instance.Domain.Enums.InstanceType},System.Nullable{Essence.Core.Instance.Domain.Enums.InstanceStatus},System.Threading.CancellationToken) for client-facing listing of a fleet that can grow without bound (debt-2026-06-13-1244, debt-2026-06-13-1251).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceTypequeryInstanceTypenoThe instance type to page over (required).
statusqueryInstanceStatusnoOptional status filter.
cursorquerystringnoOpaque continuation token from a prior response's NextCursor, or null for the first page.
pageSizequeryinteger (int32)noRequested slice size (clamped server-side).

Request body

No request body.

Responses

200Instance page retrieved successfully. — InstanceListDtoCursorResult
500Internal server error.
GET/api/v1/instances/region/{region}

Retrieves instances in a specific region.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
regionpathstringyesThe region to filter by.
instanceTypequeryInstanceTypenoOptional instance type filter.
statusqueryInstanceStatusnoOptional status filter.

Request body

No request body.

Responses

200Instances retrieved successfully. — InstanceListDto[]
400Invalid region parameter. — ProblemDetails
500Internal server error.
GET/api/v1/instances/region/{region}/page

Retrieves a bounded, keyset-paginated slice of instances of a single type within a region (DAT-006). The region-filtered counterpart of `GET /instances/page`; the bounded hot-path replacement for the unbounded `GET /instances/region/{region}` on region-scoped fleets that can grow without bound (debt-2026-06-21-1062). Paginate each type separately — a single keyset cursor cannot span the three aggregate tables.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
regionpathstringyesThe region to filter by (case-insensitive, required).
instanceTypequeryInstanceTypenoThe instance type to page over (required).
statusqueryInstanceStatusnoOptional status filter.
cursorquerystringnoOpaque continuation token from a prior response's NextCursor, or null for the first page.
pageSizequeryinteger (int32)noRequested slice size (clamped server-side).

Request body

No request body.

Responses

200Instance region page retrieved successfully. — InstanceListDtoCursorResult
400Invalid region parameter. — ProblemDetails
500Internal server error.
GET/api/v1/instances/search

Searches instances of every type (Global, Sovereign, Organization) and returns a bounded, cursor-paginated slice (DAT-006). This is the cross-type counterpart to M:Essence.Core.Instance.Api.Controllers.InstanceLifecycleController.GetInstancesPage(Essence.Core.Instance.Domain.Enums.InstanceType,System.Nullable{Essence.Core.Instance.Domain.Enums.InstanceStatus},System.String,System.Int32,System.Threading.CancellationToken) (which pages a single required type): the admin "Instance Management" fleet view needs all types at once, filtered by an optional free-text name query, instanceType, and status. Distinct route segment `search` so the request no longer falls through to M:Essence.Core.Instance.Api.Controllers.InstanceLifecycleController.GetInstanceById(System.Guid,System.Threading.CancellationToken)'s `{id:guid}` template and 400s on a non-GUID segment (debt-2026-06-28-087).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceTypequeryInstanceTypenoOptional instance type filter.
statusqueryInstanceStatusnoOptional status filter.
queryquerystringnoOptional case-insensitive substring matched against the instance name.
cursorquerystringnoOpaque continuation token from a prior response's NextCursor, or null for the first page.
pageSizequeryinteger (int32)noRequested slice size (clamped server-side to 1..500, default 50).

Request body

No request body.

Responses

200Instance search results retrieved successfully. — InstanceListDtoCursorResult
400The supplied cursor is malformed. — ProblemDetails
500Internal server error.
GET/api/v1/instances/type/{type}

Retrieves instances of one type (EPIC 3 api-contracts §Instance, `GET /instances/type/{type}`, #10344). The type-keyed sibling of `GET /instances/region/{region}`, with the same policy, shape and (unbounded) listing; `GET /instances/page?instanceType=` is the keyset-paginated form (DAT-006).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
typepathInstanceTypeyesThe instance type: `Global`, `Sovereign` or `Organization`.
statusqueryInstanceStatusnoOptional status filter.

Request body

No request body.

Responses

200Instances retrieved successfully. — InstanceListDto[]
400Unknown instance type. — ProblemDetails
500Internal server error.
GET/api/v1/instances/{id}

Retrieves a specific instance by ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

200Instance retrieved successfully. — unspecified
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/{id}/activate

Activates an instance by setting its status to Active.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

200Instance activated successfully. — unspecified
404Instance not found. — ProblemDetails
500Internal server error.
PUT/api/v1/instances/{id}/health

Updates the health status of an instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Health status updated successfully.
400Invalid request data. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/{id}/suspend

Suspends an instance with an optional reason.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

200Instance suspended successfully. — unspecified
404Instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/{id}/terminate

Terminates an instance (soft delete).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

200Instance terminated successfully. — unspecified
404Instance not found. — ProblemDetails
409The instance still has live organisation instances and no drain was requested (FR-03.007a). — ProblemDetails
500Internal server error.

InstanceRegistry

GET/api/v1/registry

Retrieves the global instance registry.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Registry retrieved successfully. — InstanceRegistry
404Registry not found. — ProblemDetails
500Internal server error.
POST/api/v1/registry/instances

Registers a new instance in the registry.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Instance registered successfully. — string (uuid)
400Invalid request data. — ProblemDetails
409Instance already registered. — ProblemDetails
500Internal server error.
GET/api/v1/registry/instances/by-type/{instanceType}

Retrieves instances by type.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceTypepathInstanceTypeyesThe instance type filter.

Request body

No request body.

Responses

200Instances retrieved successfully. — InstanceRegistryEntry[]
400Invalid instance type. — ProblemDetails
500Internal server error.
GET/api/v1/registry/instances/count

Retrieves the total count of registered instances.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Count retrieved successfully. — integer (int32)
500Internal server error.
GET/api/v1/registry/instances/{instanceId}

Retrieves a specific instance entry from the registry.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdpathstring (uuid)yesThe instance ID.

Request body

No request body.

Responses

200Instance entry retrieved successfully. — InstanceRegistryEntry
404Instance not found. — ProblemDetails
500Internal server error.
DELETE/api/v1/registry/instances/{instanceId}

Unregisters an instance from the registry.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdpathstring (uuid)yesThe instance ID to unregister.

Request body

No request body.

Responses

204Instance unregistered successfully.
404Instance not found. — ProblemDetails
500Internal server error.
PUT/api/v1/registry/instances/{instanceId}/endpoint

Updates the endpoint URL for an instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdpathstring (uuid)yesThe instance ID.

Request body

Not marked as required in the document.

Responses

204Endpoint updated successfully.
400Invalid request. — ProblemDetails
404Instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/registry/instances/{instanceId}/registered

Checks if an instance is registered.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdpathstring (uuid)yesThe instance ID to check.

Request body

No request body.

Responses

200Check completed successfully. — boolean
500Internal server error.

InternalMessaging

POST/api/internal/messages

Receives a cross-instance message from another instance. Message is authenticated via mTLS through Istio service mesh. Payloads are bounded to 1 MB per NFR-03.022 (enforced at the Essence.Core.Instance.Domain.Entities.CrossInstanceMessage aggregate boundary); over-size payloads are rejected with HTTP 413.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

Not marked as required in the document.

Responses

202Message accepted for delivery. — ReceiveMessageResponse
400Invalid request parameters or payload. — ProblemDetails
429Rate limit exceeded (>10K messages/second). — ProblemDetails
500Internal server error.
GET/api/internal/messages/circuit-breaker

Gets the current circuit breaker states for all target instances. Useful for monitoring fault isolation and identifying unhealthy target instances.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Circuit breaker states retrieved successfully. — CircuitBreakerStatesResponse
403Forbidden — ProblemDetails
500Internal server error.
GET/api/internal/messages/health

Gets the health status of the messaging subsystem. Includes circuit breaker states, queue depth, and recent delivery statistics.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Health check successful. — MessagingHealthResponse
503Service unavailable (circuit breakers open or critical issues).
POST/api/internal/messages/retry-failed

Retries all failed messages currently in the queue. Processes messages with exponential backoff and respects circuit breaker states.

SEC-002/SEC-004 (debt-2026-06-29-325): the retry loop is an expensive, self-targeted operation, so it is gated to a platform operator (Essence.Core.Instance.Api.Authorization.Policies.PolicyNames.GlobalAdmin) — mirroring M:Essence.Core.Instance.Api.Controllers.InternalMessagingController.SendMessage(Essence.Core.Instance.Api.Controllers.SendMessageRequest,System.Threading.CancellationToken) — rather than any InstanceServiceAccount identity, and is bound by the "essence-strict" per-subject rate limit (10/min) so it cannot be invoked in a tight loop to amplify load against the local mesh.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Retry operation completed with count of successful retries. — RetryFailedMessagesResponse
500Internal server error.
POST/api/internal/messages/send

Sends a cross-instance message to another instance (admin/testing endpoint). Encrypts payload client-side before transmission through Istio service mesh with mTLS.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

Not marked as required in the document.

Responses

200Message delivered successfully. — SendMessageResponse
202Message queued for delivery. — SendMessageResponse
400Invalid request parameters. — ProblemDetails
403Forbidden - caller is not a platform operator. — ProblemDetails
500Internal server error.
GET/api/internal/messages/statistics

Gets comprehensive messaging statistics for monitoring and diagnostics. Statistics are aggregated over a rolling 5-minute window.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
targetInstanceIdquerystringnoOptional target instance ID to filter statistics.
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Statistics retrieved successfully. — MessagingStatistics
500Internal server error.
GET/api/internal/messages/{messageId}/status

Gets the delivery status of a previously sent cross-instance message. Provides real-time tracking of message delivery progress through the routing infrastructure.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
messageIdpathstringyesThe unique identifier of the message to track.
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Message status retrieved successfully. — MessageStatusResponse
400Invalid message ID. — ProblemDetails
404Message not found. — ProblemDetails
500Internal server error.
POST/api/v1/internal/messages

Receives a cross-instance message from another instance. Message is authenticated via mTLS through Istio service mesh. Payloads are bounded to 1 MB per NFR-03.022 (enforced at the Essence.Core.Instance.Domain.Entities.CrossInstanceMessage aggregate boundary); over-size payloads are rejected with HTTP 413.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

Not marked as required in the document.

Responses

202Message accepted for delivery. — ReceiveMessageResponse
400Invalid request parameters or payload. — ProblemDetails
429Rate limit exceeded (>10K messages/second). — ProblemDetails
500Internal server error.
GET/api/v1/internal/messages/circuit-breaker

Gets the current circuit breaker states for all target instances. Useful for monitoring fault isolation and identifying unhealthy target instances.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Circuit breaker states retrieved successfully. — CircuitBreakerStatesResponse
403Forbidden — ProblemDetails
500Internal server error.
GET/api/v1/internal/messages/health

Gets the health status of the messaging subsystem. Includes circuit breaker states, queue depth, and recent delivery statistics.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Health check successful. — MessagingHealthResponse
503Service unavailable (circuit breakers open or critical issues).
POST/api/v1/internal/messages/retry-failed

Retries all failed messages currently in the queue. Processes messages with exponential backoff and respects circuit breaker states.

SEC-002/SEC-004 (debt-2026-06-29-325): the retry loop is an expensive, self-targeted operation, so it is gated to a platform operator (Essence.Core.Instance.Api.Authorization.Policies.PolicyNames.GlobalAdmin) — mirroring M:Essence.Core.Instance.Api.Controllers.InternalMessagingController.SendMessage(Essence.Core.Instance.Api.Controllers.SendMessageRequest,System.Threading.CancellationToken) — rather than any InstanceServiceAccount identity, and is bound by the "essence-strict" per-subject rate limit (10/min) so it cannot be invoked in a tight loop to amplify load against the local mesh.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Retry operation completed with count of successful retries. — RetryFailedMessagesResponse
500Internal server error.
POST/api/v1/internal/messages/send

Sends a cross-instance message to another instance (admin/testing endpoint). Encrypts payload client-side before transmission through Istio service mesh with mTLS.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
X-Api-Versionheaderstringno—

Request body

Not marked as required in the document.

Responses

200Message delivered successfully. — SendMessageResponse
202Message queued for delivery. — SendMessageResponse
400Invalid request parameters. — ProblemDetails
403Forbidden - caller is not a platform operator. — ProblemDetails
500Internal server error.
GET/api/v1/internal/messages/statistics

Gets comprehensive messaging statistics for monitoring and diagnostics. Statistics are aggregated over a rolling 5-minute window.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
targetInstanceIdquerystringnoOptional target instance ID to filter statistics.
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Statistics retrieved successfully. — MessagingStatistics
500Internal server error.
GET/api/v1/internal/messages/{messageId}/status

Gets the delivery status of a previously sent cross-instance message. Provides real-time tracking of message delivery progress through the routing infrastructure.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
messageIdpathstringyesThe unique identifier of the message to track.
X-Api-Versionheaderstringno—

Request body

No request body.

Responses

200Message status retrieved successfully. — MessageStatusResponse
400Invalid message ID. — ProblemDetails
404Message not found. — ProblemDetails
500Internal server error.

JointVentures

GET/api/v1/joint-ventures

Every joint venture the caller's organisation is a party to — the ones it proposed and the ones awaiting its answer.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

403Forbidden — ProblemDetails
POST/api/v1/joint-ventures

Proposes a joint venture to a counterpart parent. The agreement is recorded and is NOT binding until the counterpart approves it; nothing is provisioned here.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Created — JointVentureDto
400Bad Request — ProblemDetails
403Forbidden — ProblemDetails
409Conflict — ProblemDetails
GET/api/v1/joint-ventures/acting-organisation

The organisation the caller acts for, as this service resolves it from their token.

The co-provisioning surface needs its own parent's organisation id to build the agreement — the billing split and the approval quorum are both keyed by it. It cannot read the claim itself (the SPA holds no decoded token, deliberately), and it must not invent or guess one: a fabricated sponsor id would key a quorum to an organisation that does not exist, and the resulting agreement would look complete and bind nobody. So the server says who the caller is, and a surface that cannot get an answer says so rather than rendering a blank parent.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

403Forbidden — ProblemDetails
GET/api/v1/joint-ventures/{jointVentureId}

Reads one agreement. Refused to any caller that is not a party to it.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
jointVentureIdpathstring (uuid)yes—

Request body

No request body.

Responses

200OK — JointVentureDto
403Forbidden — ProblemDetails
404Not Found — ProblemDetails
POST/api/v1/joint-ventures/{jointVentureId}/approve

The counterpart parent accepts co-ownership on these terms. Refused for the proposing parent, under every custody model.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
jointVentureIdpathstring (uuid)yes—

Request body

No request body.

Responses

200OK — JointVentureDto
403Forbidden — ProblemDetails
404Not Found — ProblemDetails
409Conflict — ProblemDetails
POST/api/v1/joint-ventures/{jointVentureId}/decline

The counterpart parent refuses the terms, and says why.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
jointVentureIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200OK — JointVentureDto
400Bad Request — ProblemDetails
403Forbidden — ProblemDetails
404Not Found — ProblemDetails
POST/api/v1/joint-ventures/{jointVentureId}/withdraw

The proposing parent withdraws before the counterpart has responded.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
jointVentureIdpathstring (uuid)yes—

Request body

No request body.

Responses

200OK — JointVentureDto
403Forbidden — ProblemDetails
404Not Found — ProblemDetails

Messages

POST/api/v1/messages

Sends an encrypted message to another user (same or different instance). Message subject and body must be encrypted client-side before sending.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Message sent successfully. — string (uuid)
400Invalid request data or business rule violation (e.g., self-messaging, inactive recipient). — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
404Recipient user not found. — ProblemDetails
500Internal server error.
GET/api/v1/messages/inbox

Retrieves the authenticated user's inbox messages with optional filtering and pagination.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
includeReadquerybooleannoWhether to include read messages (default: true).
skipqueryinteger (int32)noNumber of messages to skip for pagination (default: 0).
takequeryinteger (int32)noNumber of messages to retrieve (default: 50, max: 100).

Request body

No request body.

Responses

200Inbox messages retrieved successfully. — UserMessage[]
401Unauthorized - user not authenticated. — ProblemDetails
500Internal server error.
GET/api/v1/messages/inbox/unread-count

Retrieves the count of unread messages for the authenticated user. Useful for notification badges and inbox summaries.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Unread count retrieved successfully. — integer (int32)
401Unauthorized - user not authenticated. — ProblemDetails
500Internal server error.
GET/api/v1/messages/sent

Retrieves the authenticated user's sent messages with pagination.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
skipqueryinteger (int32)noNumber of messages to skip for pagination (default: 0).
takequeryinteger (int32)noNumber of messages to retrieve (default: 50, max: 100).

Request body

No request body.

Responses

200Sent messages retrieved successfully. — UserMessage[]
401Unauthorized - user not authenticated. — ProblemDetails
500Internal server error.
GET/api/v1/messages/{id}

Retrieves a single message by its unique identifier. Access is granted only to the sender or recipient of the message.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe message ID.

Request body

No request body.

Responses

200Message retrieved successfully. — UserMessage
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user is not the sender or recipient of this message. — ProblemDetails
404Message not found. — ProblemDetails
500Internal server error.
POST/api/v1/messages/{id}/read

Marks a message as read by the authenticated recipient. Updates the message status and records the read timestamp. Idempotent: safe to call multiple times.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe message ID.

Request body

No request body.

Responses

204Message marked as read successfully.
400Message is expired or already marked as read. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user is not the recipient of this message. — ProblemDetails
404Message not found. — ProblemDetails
500Internal server error.

Monitoring

GET/api/v1/monitoring/alerts

Retrieves alerts filtered by status.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
statusquerystringnoAlert status filter (active, acknowledged, resolved, suppressed).

Request body

No request body.

Responses

200Alerts retrieved successfully.
500Internal server error.
POST/api/v1/monitoring/alerts/{id}/{action}

Performs an action on an alert (acknowledge, resolve, suppress).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe alert ID.
actionpathstringyesThe action to perform (acknowledge, resolve, suppress).

Request body

Not marked as required in the document.

Responses

200Action performed successfully.
400Invalid action specified. — ProblemDetails
404Not Found — ProblemDetails
500Internal server error.
GET/api/v1/monitoring/dashboard

Retrieves the monitoring dashboard data including instance health, metrics, alerts, and connectivity.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Dashboard data retrieved successfully.
500Internal server error.
GET/api/v1/monitoring/health

Retrieves health status for all registered instances.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Health data retrieved successfully.
500Internal server error.
GET/api/v1/monitoring/incidents

Retrieves incidents filtered by status.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
statusquerystringnoIncident status filter (open, investigating, root-cause, resolved).

Request body

No request body.

Responses

200Incidents retrieved successfully.
500Internal server error.
POST/api/v1/monitoring/incidents/{id}/{action}

Performs an action on an incident (investigate, root-cause, resolve).

NOT WIRED, and reported as such. The incident BOARD reads from the Security service, which owns the incident aggregate (Essence.Core.Instance.Application.Services.Monitoring.IIncidentQueryService); this endpoint used to validate the id against the six invented seed incidents and then write a status into Essence.Core.Instance.Application.Services.IMonitoringActionStateStore.IncidentStatusOverrides — a dictionary that has no reader anywhere in the platform. So a real incident id 404'd, and a seed id (which no longer appears on the board at all) answered `{ success: true, status: "resolved" }` while changing nothing an operator or auditor would ever see again. A 200 that reports a lifecycle transition which did not happen is the worst available answer on an incident surface: it is the response an operator relies on to believe an incident is being handled. 501 says the console cannot yet drive the lifecycle, which is true, and leaves the Security service's own record uncontradicted. Wiring it (debt-2026-08-13-007) means calling the owner's `PUT /api/v1/incidents/{id}`, whose verbs are `StartInvestigation` / `Contain` / `Resolve`. Two mismatches must be settled first, and neither is a decision this endpoint can take on its own: `Resolve` REQUIRES a root cause that the admin console never collects, and the console's `root-cause` verb corresponds to no owner action (while the owner's `Contain` has no console button).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe incident ID.
actionpathstringyesThe action to perform (investigate, contain, resolve).

Request body

Not marked as required in the document.

Responses

400Invalid action specified. — ProblemDetails
501Recognised action; the console cannot write incident state yet.
GET/api/v1/monitoring/license-status

Retrieves the current air-gapped offline-license status (FR-03.034a / D-61, debt-2026-05-31-081, uxf-2026-05-31-085). Drives the platform admin-console "prominent warning" banner — audience Sovereign/Platform Admin — surfacing the grace/expired state that fails closed for NEW provisioning while existing workloads continue. This is a cheap read of the validator's cached status (refreshed by the periodic `AirGappedLicenseValidationHostedService` tick), not a re-verification of the signed license artifact. Reports `NotApplicable` (`shouldWarn: false`) for a connected, non-air-gapped deployment.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200License status retrieved successfully.
GET/api/v1/monitoring/metrics

Retrieves metric data points for the specified time range and metric type.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
startDatequerystring (date-time)noStart date for the metric range.
endDatequerystring (date-time)noEnd date for the metric range.
metricquerystringnoMetric name (e.g., cpu, memory, requests, latency).
typequerystringnoMetric aggregation type (e.g., instance, service).

Request body

No request body.

Responses

200Metrics retrieved successfully.
500Internal server error.
GET/api/v1/monitoring/self-health

The monitoring stack's health as reported by Prometheus and Alertmanager themselves.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Self-health measured.
503Prometheus is unreachable.
GET/api/v1/monitoring/services

Per-service golden signals — error rate, request rate, p50/p95/p99 latency and 30-day scrape uptime — measured from Prometheus.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Measured per-service health.
503Prometheus is unreachable, so nothing here is knowable.
GET/api/v1/monitoring/slas

Retrieves SLA entries for all monitored services.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200SLA data retrieved successfully.
500Internal server error.

Organization

GET/api/v1/organization/modulesdeprecated

<b>DEPRECATED — EPIC 26 owns per-organisation module assignment.</b> Use `GET /api/v1/orgs/{orgId}/modules` (and `…/modules/catalogue`) on the Module Registry instead. See Essence.Core.Instance.Api.Controllers.OrganizationModuleOwnership for the ruling, its evidence and what to do if you are reviving this tier. Lists all available modules and their enabled/disabled state. Reads from the `InstanceModuleAssignment` table, falls back to static data if empty. Still functional: deprecated is not retired, deliberately (#10521).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdquerystring (uuid)no—

Request body

No request body.

Responses

200OK
PUT/api/v1/organization/modules/{moduleId}deprecated

<b>DEPRECATED — EPIC 26 owns per-organisation module assignment.</b> Use `POST /api/v1/orgs/{orgId}/modules/{moduleId}/activate` and `…/deactivate` on the Module Registry instead. See Essence.Core.Instance.Api.Controllers.OrganizationModuleOwnership for the ruling, its evidence and what to do if you are reviving this tier. Enables or disables a module. Updates `InstanceModuleAssignment` if found, otherwise falls back to in-memory. Still functional: deprecated is not retired, deliberately (#10521).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
moduleIdpathstringyes—
instanceIdquerystring (uuid)no—

Request body

Not marked as required in the document.

Responses

200OK — ModuleEntry
404Not Found — ProblemDetails
GET/api/v1/organization/security

Retrieves the security settings for the caller's instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdquerystring (uuid)no—

Request body

No request body.

Responses

200Security settings retrieved successfully. — SecuritySettings
PUT/api/v1/organization/security

Updates the security settings for the caller's instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdquerystring (uuid)no—

Request body

Not marked as required in the document.

Responses

200Security settings updated successfully. — SecuritySettings
400Invalid request data. — ProblemDetails
GET/api/v1/organization/settings

Retrieves the organization settings for the caller's instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdquerystring (uuid)no—

Request body

No request body.

Responses

200Settings retrieved successfully. — OrgSettings
PUT/api/v1/organization/settings

Updates the organization settings for the caller's instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdquerystring (uuid)no—

Request body

Not marked as required in the document.

  • OrgSettings as application/*+json, application/json, text/json

Responses

200Settings updated successfully. — OrgSettings
400Invalid request data. — ProblemDetails

OrganizationInstances

GET/api/v1/instances/organization

Lists organization instances with optional filtering by sovereign instance or region. When sovereignInstanceId is provided, returns organization instances connected to that sovereign. Otherwise, returns all organization instances.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
sovereignInstanceIdquerystring (uuid)noOptional sovereign instance ID to filter by.
regionquerystringnoOptional region filter.
pagequeryinteger (int32)noPage number (1-based, defaults to 1). Applies to the unfiltered admin path.
pageSizequeryinteger (int32)noItems per page (defaults to 50, capped at 100).

Request body

No request body.

Responses

200Organization instances retrieved successfully. — OrganizationInstanceDto[]
403Forbidden — ProblemDetails
500Internal server error.
POST/api/v1/instances/organization

Creates a new organization instance within the multi-instance hierarchy.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Organization instance created successfully. — string (uuid)
400Invalid request data or validation failure. — ProblemDetails
404Parent sovereign or global instance not found. — ProblemDetails
409Conflict — ProblemDetails
500Internal server error.
GET/api/v1/instances/organization/{id}

Retrieves a specific organization instance by ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe organization instance ID.

Request body

No request body.

Responses

200Organization instance retrieved successfully. — OrganizationInstanceDto
404Organization instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/instances/organization/{id}/bootstrap-package

Retrieves the bootstrap package for a <b>self-hosted</b> organisation instance (Phase 4.4) — the runbook, prerequisites, and `docker-compose.org-instance.yml` environment template the organisation needs to stand its own instance up. Self-hosted is the one tenancy where Essence builds nothing. Without this the customer has a registry row and no way to use it. <b>The package carries no credential</b>, by construction — see Essence.Core.Instance.Domain.Services.SelfHostedBootstrapPackageBuilder. That is what makes it safe to serve to the organisation's administrator before the claim: credential issuance stays claim-gated (Phase 1 A3), and the runbook's own step 8 is "complete your claim".

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

No request body.

Responses

200The package. — SelfHostedBootstrapPackage
400Essence operates this instance, or its deployment model was never recorded — either way there is no package to give. — ProblemDetails
404Organization instance not found. — ProblemDetails
GET/api/v1/instances/organization/{id}/custom-domain

Reads the current custom-domain binding, including the DNS challenge still to be published (EPIC 3 FR-03.060).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe organisation instance id.

Request body

No request body.

Responses

200The binding state (which may be `None`). — CustomDomainBindingDto
404No such organisation instance. — ProblemDetails
POST/api/v1/instances/organization/{id}/custom-domain

Claims a custom login domain and issues its DNS-ownership challenge (EPIC 3 FR-03.060). The binding does <b>not</b> resolve until M:Essence.Core.Instance.Api.Controllers.OrganizationInstancesController.VerifyCustomDomain(System.Guid,System.Threading.CancellationToken) succeeds — the response carries the exact TXT record name and value the organisation must publish.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe organisation instance id.

Request body

Not marked as required in the document.

Responses

202Claim accepted; publish the returned TXT record, then verify. — CustomDomainBindingDto
400The host is malformed, an IP literal, platform-reserved, or already bound elsewhere. — ProblemDetails
402The organisation lacks the white-label add-on. — ProblemDetails
404No such organisation instance. — ProblemDetails
DELETE/api/v1/instances/organization/{id}/custom-domain

Removes the custom-domain binding, verified or not (EPIC 3 FR-03.060).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe organisation instance id.

Request body

No request body.

Responses

200The binding was removed (idempotent when nothing was bound). — CustomDomainBindingDto
404No such organisation instance. — ProblemDetails
POST/api/v1/instances/organization/{id}/custom-domain/verify

Re-checks the published DNS TXT record and, on success, brings the custom domain live (EPIC 3 FR-03.060).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe organisation instance id.

Request body

No request body.

Responses

200Ownership proven; the domain now resolves. — CustomDomainBindingDto
402The organisation's white-label add-on lapsed since the claim. — ProblemDetails
404No such organisation instance. — ProblemDetails
409The TXT record is absent or does not match the issued challenge. — ProblemDetails
503DNS could not be queried; ownership is unknown, retry shortly. — ProblemDetails
GET/api/v1/instances/organization/{id}/provisioning-status

Retrieves the provisioning status for an organization instance. Returns a sanitised Essence.Core.Instance.Application.DTOs.ProvisioningStatusDto — SubscriptionId, LicenseId, InvoiceId, raw step JSON, and error stack frames are NOT returned (STRIDE info-disclosure mitigation, debt-2026-05-17-086).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

No request body.

Responses

404Not Found — ProblemDetails
POST/api/v1/instances/organization/{id}/retry-provisioning

Re-drives a failed organization-instance provisioning — the S-03.03 retry affordance (reqf-2026-06-14-265 / reqf-2026-06-20-239) the organization dashboard invokes when Essence.Core.Instance.Application.DTOs.ProvisioningStatusDto.IsRetryable is true. Eligibility is re-evaluated server-side (a cleanly rolled-back Transient/Dependency failure); the read-model flag is advisory only. On success a fresh provisioning job is enqueued onto the same background pipeline the initial create used.

<b>The onboarding provisioner may call it</b> (Essence.Core.Instance.Api.Authorization.OrgProvisionerRetryableAttribute, #22452) to re-drive a rolled-back instance it created rather than create a second one, and only it may name the founding administrator in the body (#22453). <b>A platform operator may force it</b> (`{"force":true,"reason":"…"}`) for a cleanly rolled-back failure whose category is not retryable, once its cause is fixed — the recovery for organisations stranded by a failure that was classed Permanent. Recorded on the workflow.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

202Retry accepted; a fresh provisioning attempt was enqueued.
400A forced retry without a reason. — ProblemDetails
403A forced retry by anyone but a cross-instance platform operator. — ProblemDetails
404The instance or its provisioning workflow was not found. — ProblemDetails
409The provisioning is not in a retryable state. — ProblemDetails

OrgResidency

GET/api/v1/organizations/{organizationId}/residency/evidence

Reads the organisation's own residency evidence package — its status plus the full relocation-notice and acknowledgement history. This is the artefact Essence.Core.Instance.Contracts.DTOs.OrgResidencyStatusDto.EvidencePackageUrl points at, and it is readable by the same org administrator that can read the status (unlike the operator-scoped S-03.01 export).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdpathstring (uuid)yes—

Request body

No request body.

Responses

403Forbidden — ProblemDetails
404Not Found — ProblemDetails
GET/api/v1/organizations/{organizationId}/residency/notices

Reads the organisation's pre-cutover relocation notices, newest-first, each with the organisation's recorded response.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdpathstring (uuid)yes—

Request body

No request body.

Responses

403Forbidden — ProblemDetails
POST/api/v1/organizations/{organizationId}/residency/notices/{noticeId}/acknowledge

Records the organisation's response to a pre-cutover relocation notice — an acknowledgement or an objection with its reason.

Recording an objection does not itself halt the cutover: whether an organisation's approval is binding, or whether notification plus an audited operator override suffices, is the open product decision (Tension T1). The write exists so that whichever way that lands, the organisation's position is attributable and captured before the effective date. A notice may be answered once — a replacement would overwrite that evidence.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdpathstring (uuid)yes—
noticeIdpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

400Bad Request — ProblemDetails
403Forbidden — ProblemDetails
404Not Found — ProblemDetails
409Conflict — ProblemDetails
GET/api/v1/organizations/{organizationId}/residency/status

Reads the organisation's current residency status — region, when it took effect, the legal basis it is held on, a link to the organisation's own evidence package, and the pending pre-cutover relocation notice when one is in flight.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdpathstring (uuid)yes—

Request body

No request body.

Responses

403Forbidden — ProblemDetails
404Not Found — ProblemDetails

Registration

GET/api/v1/registration

Lists registration requests with optional filtering.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
targetInstanceIdquerystring (uuid)noOptional target instance ID filter.
statusquerystringnoOptional status filter (Pending, Approved, Completed, Rejected, Revoked, Expired).
requestingInstanceIdquerystring (uuid)noOptional requesting instance ID filter.

Request body

No request body.

Responses

200Registration requests retrieved successfully. — RegistrationRequestDto[]
500Internal server error.
POST/api/v1/registration/organization-to-sovereign

Submits an organization-to-sovereign registration request. An organization instance requests to register with a sovereign instance.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Registration request created successfully. — string (uuid)
400Invalid request data or validation failure. — ProblemDetails
403Forbidden — ProblemDetails
500Internal server error.
GET/api/v1/registration/requests

Lists registration requests with optional filtering.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
targetInstanceIdquerystring (uuid)noOptional target instance ID filter.
statusquerystringnoOptional status filter (Pending, Approved, Completed, Rejected, Revoked, Expired).
requestingInstanceIdquerystring (uuid)noOptional requesting instance ID filter.

Request body

No request body.

Responses

200Registration requests retrieved successfully. — RegistrationRequestDto[]
500Internal server error.
GET/api/v1/registration/requests/{id}

Retrieves a specific registration request by ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID.

Request body

No request body.

Responses

200Registration request retrieved successfully. — RegistrationRequestDto
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/requests/{id}/approve

Approves a pending registration request. Generates an HMAC-SHA256 approval token for the requesting instance to complete registration.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID to approve.

Request body

Not marked as required in the document.

Responses

200Registration request approved successfully.
400Invalid request data or validation failure. — ProblemDetails
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/requests/{id}/complete

Completes a registration by validating the approval token. The requesting instance uses the token received during approval to finalize registration.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID to complete.

Request body

Not marked as required in the document.

Responses

200Registration completed successfully.
400Invalid token or validation failure. — ProblemDetails
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/requests/{id}/reject

Rejects a pending registration request.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID to reject.

Request body

Not marked as required in the document.

Responses

204Registration request rejected successfully.
400Invalid request data or validation failure. — ProblemDetails
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/requests/{id}/revoke

Revokes a previously approved or completed registration.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID to revoke.

Request body

Not marked as required in the document.

Responses

204Registration revoked successfully.
400Invalid request data or validation failure. — ProblemDetails
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/sovereign-to-global

Submits a sovereign-to-global registration request. A sovereign instance requests to register with the global instance.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Registration request created successfully. — string (uuid)
400Invalid request data or validation failure. — ProblemDetails
403Forbidden — ProblemDetails
500Internal server error.
GET/api/v1/registration/{id}

Retrieves a specific registration request by ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID.

Request body

No request body.

Responses

200Registration request retrieved successfully. — RegistrationRequestDto
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/{id}/approve

Approves a pending registration request. Generates an HMAC-SHA256 approval token for the requesting instance to complete registration.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID to approve.

Request body

Not marked as required in the document.

Responses

200Registration request approved successfully.
400Invalid request data or validation failure. — ProblemDetails
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/{id}/complete

Completes a registration by validating the approval token. The requesting instance uses the token received during approval to finalize registration.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID to complete.

Request body

Not marked as required in the document.

Responses

200Registration completed successfully.
400Invalid token or validation failure. — ProblemDetails
404Registration request not found. — ProblemDetails
500Internal server error.
POST/api/v1/registration/{id}/reject

Rejects a pending registration request.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe registration request ID to reject.

Request body

Not marked as required in the document.

Responses

204Registration request rejected successfully.
400Invalid request data or validation failure. — ProblemDetails
404Registration request not found. — ProblemDetails
500Internal server error.

Registry

POST/api/v1/instances/registry/reassign

UPDATE: re-point the user's mapping at the Sovereign serving the new region (re-home).

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200OK
GET/api/v1/instances/registry/{userId}

Where does this user's data live? Returns the home instance mapping, or 404 if unmapped.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
userIdpathstring (uuid)yes—

Request body

No request body.

Responses

200OK
DELETE/api/v1/instances/registry/{userId}

DELETE: drop the user's mapping once their data has been erased from the Sovereign.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
userIdpathstring (uuid)yes—

Request body

No request body.

Responses

200OK

RenunciationTeardown

POST/api/v1/cross-border/renunciation/cases

Opens (or rejoins) the caller's renunciation teardown — the irreversible confirm behind the front door's review screen.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201The teardown timeline. — RenunciationTeardownCaseDto
400No jurisdiction supplied. — ProblemDetails
401Unauthorized — ProblemDetails
GET/api/v1/cross-border/renunciation/cases/current

Reads the caller's live teardown for a jurisdiction. Returns `{ data: null }` when none is in flight — a normal state, not an error.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
jurisdictionquerystringno—

Request body

No request body.

Responses

400Bad Request — ProblemDetails
401Unauthorized — ProblemDetails
GET/api/v1/cross-border/renunciation/cases/{caseId}

Reads one of the caller's teardown cases.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
caseIdpathstring (uuid)yes—

Request body

No request body.

Responses

401Unauthorized — ProblemDetails
404No such case for this caller (also returned for another subject's case). — ProblemDetails
POST/api/v1/cross-border/renunciation/cases/{caseId}/abandon

Abandons a teardown. Returns the timeline unchanged when something irreversible has already happened — there is nothing to abandon back to once a credential has been surrendered.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
caseIdpathstring (uuid)yes—

Request body

No request body.

Responses

401Unauthorized — ProblemDetails
404Not Found — ProblemDetails
POST/api/v1/cross-border/renunciation/cases/{caseId}/complete

Issues the teardown receipt. Returns the timeline unchanged (status still `InProgress`/`Blocked`, `receiptDigest` null) when a step is outstanding, so the caller can see exactly what is holding it up.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
caseIdpathstring (uuid)yes—

Request body

No request body.

Responses

401Unauthorized — ProblemDetails
404Not Found — ProblemDetails
GET/api/v1/cross-border/renunciation/template

Reads a jurisdiction's teardown template.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
jurisdictionquerystringno—

Request body

No request body.

Responses

200The template. — RenunciationTeardownTemplateDto
400No jurisdiction supplied, or its configured template is invalid. — ProblemDetails
401Unauthorized — ProblemDetails

Residency

POST/api/v1/residency/adequacy-matrix/corridors/inadequate

FR-03.029a matrix-maintenance write — the adequacy-decision authority flips a corridor to <b>inadequate</b>. Triggers enforcement: still-valid approvals over the corridor are auto-expired (system-initiated `Expired`, reason `adequacy-matrix-revoked`) and any in-flight transfer is halted at its next checkpoint (reason `matrix-change`), so a stale approval can never re-authorise a transfer the matrix no longer permits.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

202Accepted
400Bad Request — ProblemDetails
GET/api/v1/residency/approvals

S-03.02 (read) — cross-border approval queue. Returns pending / active / expiring approval requests with their resolved adequacy-matrix outcome and decision metadata.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
statusquerystringno—
cursorquerystringno—
pageSizequeryinteger (int32)no—

Request body

No request body.

Responses

POST/api/v1/residency/approvals

S-03.02 (write) — raises a new pending cross-border approval request (the C-03.02 "Request cross-border approval" affordance). The requesting actor is established server-side from the caller's identity.

SEC-002/SEC-004 (debt-2026-06-28-720): origination is restricted by an explicit role gate — only an admin for the instance (InstanceAdmin) or a cross-instance platform operator may originate a cross-border transfer request. This AND-combines with the controller-level Essence.Core.Instance.Api.Authorization.Policies.PolicyNames.InstanceAdminFor policy. The PascalCase role list it replaces could not match the platform's `platform-admin`, so the platform's own superuser was refused here (#22641). The "essence-strict" per-subject rate limit (10/min) bounds queue-flooding of the approval queue by any single caller.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

202Accepted
400Bad Request — ProblemDetails
POST/api/v1/residency/approvals/{id}/approve

S-03.02 (write) — approves a pending cross-border transfer request.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

202Accepted
404Not Found — ProblemDetails
POST/api/v1/residency/approvals/{id}/deny

S-03.02 (write) — denies a pending cross-border transfer request.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

202Accepted
404Not Found — ProblemDetails
POST/api/v1/residency/approvals/{id}/expire

S-03.02 (write) — gracefully expires a previously-approved transfer (no violation).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

202Accepted
404Not Found — ProblemDetails
GET/api/v1/residency/cross-border-verdict

S-03.02 (read) — the <b>binding</b> cross-border verdict (FR-03.029a) for a proposed migration corridor. Returns one authoritative Essence.Core.Instance.Contracts.DTOs.CrossBorderVerdictDto (Permitted / Pending / Denied) derived server-side from the adequacy-decision matrix and the recorded approval requests, so the vault-cross-instance-migration pre-flight surface can show and export a decision that gates the transfer instead of a client-side advisory preview (debt-2026-07-03-029). Metadata-only — corridor, legal basis, authority, timestamps.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
sourcequerystringno—
targetquerystringno—
recipientquerystringno—

Request body

No request body.

Responses

400Bad Request — ProblemDetails
POST/api/v1/residency/relocation-notices

Raises a pre-cutover residency relocation notice for one organisation — the operator write that opens the organisation-facing half of the residency-migration seam.

Issued when an EPIC 88 `ResidencyMigration` lifecycle operation begins, so the affected organisation learns of the move before it happens and the `ResidencyPositionApproved` gate has attributable notification evidence. The organisation reads the notice, and records its response, through Essence.Core.Instance.Api.Controllers.OrgResidencyController. The effective date must be in the future: a "pre-cutover notice" served on or after the cutover is not a notice, and accepting one would let the gate claim notification evidence it does not have.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

400Bad Request — ProblemDetails
GET/api/v1/residency/report

S-03.01 — cross-border residency report. Returns a metadata-only projection of cross-border transfer decisions, filterable by date range, sovereign pair, legal basis and outcome status. `format=json` (default) returns a keyset page; `format=csv|pdf` streams the full filtered set as a downloadable evidence artifact.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
fromquerystring (date-time)no—
toquerystring (date-time)no—
sourceSovereignquerystringno—
targetSovereignquerystringno—
legalBasisquerystringno—
statusquerystringno—
formatquerystringno—
cursorquerystringno—
pageSizequeryinteger (int32)no—

Request body

No request body.

Responses

200OK

ReturningNationalIntakeFacts

GET/api/v1/instances/returning-national-intakes/{intakeId}/subjects/{userId}

Reads the recorded facts of an intake the given subject opened.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
intakeIdpathstring (uuid)yes—
userIdpathstring (uuid)yes—

Request body

No request body.

Responses

200The intake's recorded corridor origin and basis credential facts. — ReturningNationalIntakeFacts
404No such intake for that subject. — ProblemDetails

SovereignInstanceOperatingTerms

GET/api/v1/instances/sovereign/{id}/operating-terms

Reads the instance's operator and service level.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

No request body.

Responses

200The terms, or `recorded: false` when no operator is recorded. — SovereignInstanceOperatingTermsDto
404No such sovereign instance. — ProblemDetails
PUT/api/v1/instances/sovereign/{id}/operating-terms/operator

Records the instance's operator, or changes it. A change needs a `reason`, and a change of operator clears the service level the previous operator committed to.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200The terms as now recorded. — SovereignInstanceOperatingTermsDto
400Not an ISO 3166-1 alpha-2 jurisdiction, no operator, or a change with no reason. — ProblemDetails
404No such sovereign instance. — ProblemDetails
409Another administrator changed the terms first. — ProblemDetails
PUT/api/v1/instances/sovereign/{id}/operating-terms/service-level

Declares the current operator's service level for the instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

Not marked as required in the document.

Responses

200The terms as now recorded. — SovereignInstanceOperatingTermsDto
400A value outside the accepted ranges, or an unknown coverage. — ProblemDetails
404No such sovereign instance. — ProblemDetails
409No operator is recorded, or another administrator changed the terms first. — ProblemDetails

SovereignInstances

GET/api/v1/instances/sovereign

Retrieves sovereign instances with optional filtering by region and/or jurisdiction.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
regionquerystringnoOptional sovereign region filter: an ISO 3166-1 alpha-2 code (e.g. GB, DE, AE). A cloud region is refused with 400 (EPIC 107 FR-HMF.010/012).
jurisdictionCodequerystringnoOptional jurisdiction code filter (e.g., EU, US, UK).
onlyHealthyquerybooleannoIf true, only returns instances with Active status.

Request body

No request body.

Responses

200Sovereign instances retrieved successfully. — SovereignInstanceDto[]
400The region is not a sovereign region (ISO 3166-1 alpha-2). — ValidationProblemDetails
500Internal server error.
POST/api/v1/instances/sovereign

Creates a new sovereign instance with jurisdiction-specific configuration.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Sovereign instance created successfully. — string (uuid)
400Invalid request data or validation failure. — ProblemDetails
404Global instance not found. — ProblemDetails
500Internal server error.
GET/api/v1/instances/sovereign/{id}

Retrieves a specific sovereign instance by ID.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe sovereign instance ID.

Request body

No request body.

Responses

200Sovereign instance retrieved successfully. — SovereignInstanceDto
404Sovereign instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/sovereign/{id}/activate

Activates a sovereign instance, transitioning it from Provisioning to Active. Idempotent: an already-Active instance returns 200. Activation is guarded on validator registration; supply validator material in the body to bootstrap a single-validator chain when none is registered yet.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe sovereign instance ID.

Request body

Not marked as required in the document.

Responses

200Sovereign instance activated (or already active).
404Sovereign instance not found. — ProblemDetails
409Cannot activate (e.g. validator not registered and no material supplied). — ProblemDetails
500Internal server error.
GET/api/v1/instances/sovereign/{id}/organization-instances

Lists all organization instances connected to this sovereign instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe sovereign instance ID.

Request body

No request body.

Responses

200Organization instances retrieved successfully. — OrganizationInstanceDto[]
500Internal server error.
POST/api/v1/instances/sovereign/{id}/organization-instances/{orgId}

Connects an organization instance to this sovereign instance. Establishes a sovereign-to-organization relationship.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe sovereign instance ID.
orgIdpathstring (uuid)yesThe organization instance ID to connect.

Request body

No request body.

Responses

204Organization instance connected successfully.
400Invalid request data or validation failure. — ProblemDetails
404Sovereign or organization instance not found. — ProblemDetails
500Internal server error.
DELETE/api/v1/instances/sovereign/{id}/organization-instances/{orgId}

Disconnects an organization instance from this sovereign instance. Removes the sovereign-to-organization relationship.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe sovereign instance ID.
orgIdpathstring (uuid)yesThe organization instance ID to disconnect.

Request body

No request body.

Responses

204Organization instance disconnected successfully.
400Invalid request data or validation failure. — ProblemDetails
404Sovereign or organization instance not found. — ProblemDetails
500Internal server error.
PUT/api/v1/instances/sovereign/{id}/region

Updates the data residency rules for a sovereign instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe sovereign instance ID.

Request body

Not marked as required in the document.

Responses

200Data residency rules updated successfully.
400Invalid request data or validation failure. — ProblemDetails
404Sovereign instance not found. — ProblemDetails
500Internal server error.
POST/api/v1/instances/sovereign/{id}/validator-registration/retry

Retries a failed validator-registration step for an existing sovereign instance. Operators invoke this when the Tier F-6 step 9 registration exhausted its retry budget during initial provisioning and the sovereign is stuck in Essence.Core.Instance.Domain.Enums.InstanceStatus.Provisioning status with `ValidatorRegistered = false`. Reuses the previously-generated Ed25519 keypair so the central validator-set recognises the retry as idempotent.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

No request body.

Responses

200Retry succeeded or converged to the desired state. — ValidatorRegistrationRetryResult
400Invalid sovereign instance ID. — ProblemDetails
404Sovereign instance not found. — ProblemDetails
409Validator-set rejected the retry (e.g. conflicting registration). — ProblemDetails
503Validator-set API unreachable after retries.

Sovereignty

POST/api/v1/sovereignty/cross-boundary-replication/attest

Records a cross-boundary encrypted-backup geo-replication and returns a signed CC-090 key-sovereignty attestation.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

400Bad Request — ProblemDetails

SponsoredResolutions

POST/api/v1/instances/sponsored-resolutions

Idempotently resolves a sponsored organisation's identity.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

200Resolved. The body cannot tell you which branch was taken. — SponsoredResolutionResponse
400Bad Request — ProblemDetails
GET/api/v1/instances/sponsored-resolutions/by-organization/{organizationId}

Resolves the supplier identity an organisation was invited under, for the token authority (EPIC 9) to stamp on that organisation's access tokens.

<b>Not an AC-19 surface.</b> AC-19 stops a SPONSOR learning whether the supplier it invited already existed; this route answers "which identity is THIS organisation", a fact the organisation already knows about itself. It is service-account only, it requires an organisation id as INPUT — which a sponsor is never given, precisely because M:Essence.Core.Instance.Api.Controllers.SponsoredResolutionsController.Resolve(Essence.Core.Instance.Api.Controllers.SponsoredResolutionRequest,System.Threading.CancellationToken) withholds it — and it returns no lifecycle state, no sponsor and no sponsorship count, so it cannot be used to probe either.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
organizationIdpathstring (uuid)yes—

Request body

No request body.

Responses

200Resolved. `supplierIdentityKey` is null when the organisation has no live sponsored identity — the ordinary case, and deliberately a 200 rather than a 404 so the caller cannot distinguish "no identity" from "no such organisation". — SupplierIdentityKeyResponse

SubjectResidency

GET/api/v1/residency/my/approvals

Lists the cross-border approval requests the caller raised for themselves, newest-first, each with its current state (Pending / Approved / Denied / Expired) and, once decided, the deciding authority and reason.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

POST/api/v1/residency/my/approvals

Raises a cross-border approval request for a corridor affecting the caller's OWN data. The request enters the same FR-03.029a approval queue an authority-raised one does, marked `Origin = DataSubject` so the console can tell that a person is waiting on the reply.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

202Accepted — CrossBorderApprovalDto
400Bad Request — ProblemDetails
GET/api/v1/residency/my/approvals/{id}

Reads one of the caller's own cross-border approval requests. A request that does not exist and one that belongs to another subject both return 404 — deliberately indistinguishable.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yes—

Request body

No request body.

Responses

404Not Found — ProblemDetails

SupervisedInstances

GET/api/v1/instances/supervised

Lists the supervised instances provisioned under the <b>authenticated</b> guardian — the roster that powers the supervised-accounts console, with each minor's graduation status and a majority-approaching transition flag. The roster is strictly caller-scoped: the guardian is read from the bearer token's subject claim, never from the request, so a guardian can never enumerate another guardian's minors (IDOR) — the same contract the sibling roster `GET /api/v1/family/wards` (`Vault/.../FamilyWardsController`) states, and the same reason `POST /api/v1/consent/guardian-grant` refuses a body-supplied grantor. A guardian who supervises nobody gets `200 []`; an empty roster is not an error (#6442 — a request-supplied guardian id made the no-query-string call bind System.Guid.Empty and the repository's non-empty guard turned it into a 500).

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
majorityApproachingWindowDaysqueryinteger (int32)noDays ahead of a supervision-end date that count as "approaching" (default 90).

Request body

No request body.

Responses

200Roster returned (empty when the caller supervises no minors). — SupervisedInstanceDto[]
401Unauthorized — caller not authenticated, or the token carries no subject. — ProblemDetails
POST/api/v1/instances/supervised

Provisions a single supervised (minor) instance under a guardian with a durable age-assurance attribute (the wizard's Step-2 seam).

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Supervised instance provisioned; audit event emitted. — SupervisedInstanceDto
400Invalid request (validation or domain rule violation). — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails
POST/api/v1/instances/supervised/batch

Batch-provisions a whole cohort of supervised instances under one guardian with one control template applied across every child, in a single atomic call (debt-2026-07-09-038). Either the whole roster is provisioned or none is.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Cohort provisioned atomically; audit events emitted. — BatchProvisionSupervisedInstancesResultDto
400Invalid request (validation or a roster entry already provisioned). — ProblemDetails
401Unauthorized — caller not authenticated. — ProblemDetails

Users

GET/api/v1/users

Lists users with optional status and search filters.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
statusquerystringnoOptional filter by active status ("active" or "inactive").
searchquerystringnoOptional search term to match against name or email.
pagequeryinteger (int32)noPage number (1-based, defaults to 1).
pageSizequeryinteger (int32)noItems per page (defaults to 50, capped at 100).

Request body

No request body.

Responses

200Users retrieved successfully. — unspecified
401Unauthorized — ProblemDetails
500Internal server error.
POST/api/v1/users

Creates a new user.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201User created successfully. — unspecified
400Invalid request data. — ProblemDetails
401Unauthorized — ProblemDetails
500Internal server error.
GET/api/v1/users/search

Searches for users by email or name within the current instance. Only returns active, email-verified users.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
searchTermquerystringnoThe search term to match against email, first name, or last name.
pagequeryinteger (int32)no1-based page index (defaults to 1).
pageSizequeryinteger (int32)noItems per page (defaults to 50, capped server-side at 100).

Request body

No request body.

Responses

200Users retrieved successfully. — UserSummaryResponse[]
400Invalid search term. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
500Internal server error.
GET/api/v1/users/{id}

Retrieves a user's profile by their unique identifier. Only returns profiles for active, email-verified users in the same instance.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.

Request body

No request body.

Responses

200User profile retrieved successfully. — UserSummaryResponse
401Unauthorized - user not authenticated. — ProblemDetails
404User not found or not accessible. — ProblemDetails
500Internal server error.
POST/api/v1/users/{id}/activate

Activates a user account.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.

Request body

No request body.

Responses

200User activated successfully. — unspecified
404User not found. — ProblemDetails
500Internal server error.
GET/api/v1/users/{id}/audit

Retrieves audit log entries for a user.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.
pagequeryinteger (int32)noPage number (1-based, defaults to 1).
pageSizequeryinteger (int32)noNumber of items per page (defaults to 20).

Request body

No request body.

Responses

200Audit entries retrieved successfully. — unspecified
404User not found. — ProblemDetails
500Internal server error.
GET/api/v1/users/{id}/permissions

Retrieves permissions for a user based on their assigned roles.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.

Request body

No request body.

Responses

200Permissions retrieved successfully. — unspecified
404User not found. — ProblemDetails
500Internal server error.
GET/api/v1/users/{id}/roles

Retrieves roles assigned to a user.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.

Request body

No request body.

Responses

200Roles retrieved successfully. — unspecified
404User not found. — ProblemDetails
500Internal server error.
POST/api/v1/users/{id}/roles

Assigns a role to a user.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.

Request body

Not marked as required in the document.

Responses

200Role assigned successfully. — unspecified
400Bad Request — ProblemDetails
404User not found. — ProblemDetails
500Internal server error.
DELETE/api/v1/users/{id}/roles/{roleId}

Removes a role from a user.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.
roleIdpathstringyesThe role ID to remove.

Request body

No request body.

Responses

200Role removed successfully. — unspecified
400Bad Request — ProblemDetails
404User not found. — ProblemDetails
500Internal server error.
POST/api/v1/users/{id}/suspend

Suspends a user account.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe user ID.

Request body

No request body.

Responses

200User suspended successfully. — unspecified
404User not found. — ProblemDetails
500Internal server error.

UserVaultRegistry

GET/api/v1/registry/users/me/vaults

Retrieves the authenticated caller's vault registry entries — one row per vault they own, across every sovereign region.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

No request body.

Responses

200Registry entries retrieved successfully.
401Unauthorized - user not authenticated. — ProblemDetails
500Internal server error.

VaultRehome

POST/api/v1/instances/vault-rehome

Starts a vault re-home for the <b>authenticated caller</b> — the INITIATION seam the family-separation-shared-vault-split journey needs (debt-2026-08-12-040). Builds the re-home set for the receiving party and moves the job to `Moving`; the returned status is the same shape `GET /status` subsequently serves, so the surface can render progress immediately without a second round trip. Ownership is taken from the caller's subject claim and never from the request body, so a caller cannot open a re-home job against another person's documents. The optional `clientCorrelationId` is the initiator's own opaque handle (for the family journey, the EPIC 30 `{splitId}:{itemId}` reference); it is echoed on the relay completion event so the initiator advances its record off the real completion. It must not carry PII.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201The re-home job was created and started; body is its status. — VaultRehomeStatusDto
400The request is invalid (no documents, duplicate document ids, missing names). — ProblemDetails
401The caller has no resolvable subject claim. — ProblemDetails
POST/api/v1/instances/vault-rehome/{id}/documents/{documentId}/retry

Safely retries a single failed document within the re-home job. Re-queues ONLY the named failed document — an already-moved document is never re-run. Returns the re-opened status.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe re-home job id.
documentIdpathstringyesThe opaque id of the failed document to retry.

Request body

No request body.

Responses

200The updated re-home status after re-queuing the document. — VaultRehomeStatusDto
404No such job (or not owned by the caller), or no such document in the job. — ProblemDetails
GET/api/v1/instances/vault-rehome/{id}/status

Gets the sanitised status of a vault re-home job — the "your documents are moving to your own vault" progress + confirmation surface, including the distinct `Partial` terminal state and the per-document breakdown.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe re-home job id.

Request body

No request body.

Responses

200The re-home status. — VaultRehomeStatusDto
404No re-home job exists for the id, or it is not owned by the caller. — ProblemDetails

Vaults

POST/api/v1/vaults

Creates a new vault for secure data storage.

Authentication:Bearer (the document-wide requirement)

Parameters

Takes no parameters.

Request body

Not marked as required in the document.

Responses

201Vault created successfully. — string (uuid)
400Invalid request data. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden — ProblemDetails
500Internal server error.
GET/api/v1/vaults/instance/{instanceId}

Lists all vaults for a specific instance. Requires InstanceAdmin or GlobalAdmin role.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
instanceIdpathstring (uuid)yesThe instance ID.
includeArchivedquerybooleannoWhether to include archived vaults (default: false).
cursorquerystringnoOpaque continuation cursor from a prior page's NextCursor, or null for the first slice.
pageSizequeryinteger (int32)noRequested slice size; clamped to [1, 500] (DAT-006).

Request body

No request body.

Responses

200Vaults retrieved successfully. — VaultProvisioningRecordCursorResult
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user does not have admin privileges. — ProblemDetails
500Internal server error.
GET/api/v1/vaults/owner/{ownerId}

Lists all vaults owned by a specific user.

Authorization boundary (debt-2026-06-28-254): the administrator cross-owner enumeration is <b>instance-scoped by design</b> — bounded to the caller's own `InstanceId`, pushed into the SQL predicate below, so cross-instance vault metadata is never loaded. There is no org-membership predicate within an instance, which is why the administrator here is the INSTANCE administrator: a sovereign instance hosts many organisations' members, so an organisation's administrator must not inherit an instance-wide read (#22641; the gate used to name "OrganizationAdmin", a role no token carries). Should organisation administrators need this read, an explicit org-membership predicate must be added to Essence.Core.Instance.Application.Queries.ListVaultsByOwnerQuery first — see the debt for the product decision.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
ownerIdpathstring (uuid)yesThe owner user ID.
includeArchivedquerybooleannoWhether to include archived vaults (default: false).

Request body

No request body.

Responses

200Vaults retrieved successfully. — VaultProvisioningRecord[]
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user cannot access another user's vaults. — ProblemDetails
500Internal server error.
GET/api/v1/vaults/{id}

Retrieves a vault by its unique identifier.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe vault ID.

Request body

No request body.

Responses

200Vault retrieved successfully. — VaultProvisioningRecord
401Unauthorized - user not authenticated. — ProblemDetails
404Vault not found, or the caller is not the owner (existence is not disclosed to non-owners — debt-2026-06-02-1365). — ProblemDetails
500Internal server error.
PUT/api/v1/vaults/{id}

Updates vault name and description.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe vault ID.

Request body

Not marked as required in the document.

Responses

204Vault updated successfully.
400Invalid request data. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user does not own this vault. — ProblemDetails
404Vault not found. — ProblemDetails
500Internal server error.
POST/api/v1/vaults/{id}/archive

Archives a vault (soft delete). Archived vaults cannot have documents added but existing data is preserved.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe vault ID.

Request body

No request body.

Responses

204Vault archived successfully.
400Vault is already archived. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user does not own this vault. — ProblemDetails
404Vault not found. — ProblemDetails
500Internal server error.
PUT/api/v1/vaults/{id}/limits

Updates vault storage and document limits.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe vault ID.

Request body

Not marked as required in the document.

Responses

204Vault limits updated successfully.
400Invalid request data - limits exceed current usage. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user does not own this vault. — ProblemDetails
404Vault not found. — ProblemDetails
500Internal server error.
POST/api/v1/vaults/{id}/restore

Restores an archived vault.

Authentication:Bearer (the document-wide requirement)

Parameters

NameInTypeRequiredDescription
idpathstring (uuid)yesThe vault ID.

Request body

No request body.

Responses

204Vault restored successfully.
400Vault is not archived. — ProblemDetails
401Unauthorized - user not authenticated. — ProblemDetails
403Forbidden - user does not own this vault. — ProblemDetails
404Vault not found. — ProblemDetails
500Internal server error.

Schemas

AcknowledgeRelocationNoticeBody

Request body for an organisation's response to a relocation notice.

PropertyTypeRequiredDescription
commentstring | nullnoThe organisation's comment; required when objecting.
responsestring | nullno"acknowledged" (default when omitted) or "objected". An objection must carry a Essence.Core.Instance.Api.Controllers.OrgResidencyController.AcknowledgeRelocationNoticeBody.Comment.

ActingOrganizationDto

PropertyTypeRequiredDescription
organizationIdstring (uuid)no—

ActivateSovereignInstanceCommand

PropertyTypeRequiredDescription
instanceIdstring (uuid)no—
validatorAddressstring | nullno—
validatorPublicKeyBase64string | nullno—

AdminCreateOrganizationRequest

Request body for M:Essence.Core.Instance.Api.Controllers.AdminOrganizationsController.CreateOrganization(Essence.Core.Instance.Api.Controllers.AdminCreateOrganizationRequest,System.Threading.CancellationToken).

PropertyTypeRequiredDescription
adminDisplayNamestring | nullno—
adminEmailstring | nullno—
globalInstanceIdstring (uuid)no—
orgAdminUserIdstring (uuid)no—
organizationIdstring (uuid)no—
organizationNamestring | nullno—
parentSovereignInstanceIdstring (uuid)no—
pricingPlanIdstring (uuid) | nullno—
regionstring | nullno—
slugstring | nullno—

AgeAssuranceLevel

"SelfDeclared" | "Basic" | "Substantial" | "High" with no declared properties.

AlertActionRequest

The body of a monitoring alert action. Only `suppress` requires it.

PropertyTypeRequiredDescription
reasonstring | nullnoWhy the alert is being muted.
suppressedUntilstring (date-time) | nullnoWhen the mute lapses (UTC). Must be in the future.

ApprovalDecisionBody

Request body for an approve / deny / expire decision (S-03.02 write).

PropertyTypeRequiredDescription
expiresAtstring (date-time) | nullnoOptional approval expiry (approve only); must be in the future.
mechanismstring | nullnoLegal mechanism name for an approval (SCC/BCR/TIA/Adequacy); defaults to SCC.
reasonstring | nullnoOperator-supplied reason for the decision (required).
scopestring | nullnoOptional decision scope qualifier (approve only).

ApproveRegistrationRequestBody

Request body for approving a registration request.

PropertyTypeRequiredDescription
conditionsstring | nullnoGets or sets optional conditions attached to the approval.

AssignRoleRequest

Request model for assigning a role to a user.

PropertyTypeRequiredDescription
expiresAtstring (date-time) | nullnoGets or sets the optional expiration date for the role assignment.
instanceScopestring | nullnoGets or sets the instance scope for the role.
roleIdstring | nullnoGets or sets the role ID to assign.

AssuranceCreditPreviewDto

PropertyTypeRequiredDescription
basisCredentialIdstring (uuid)no—
originLoAstring | nullno—
originSchemestring | nullno—
policyIdstring | nullno—
provisionalDomesticAssurancestring | nullno—
residualCheckDescriptionstring | nullno—
residualCheckRequiredbooleanno—

AttestCrossBoundaryReplicationRequest

Request to record + attest a CC-090 cross-boundary encrypted-backup geo-replication.

PropertyTypeRequiredDescription
backupIdstring (uuid)noBackup whose ciphertext is being replicated.
encryptionKeyIdstring | nullnoIdentifier (not material) of the encryption key that stays sovereign.
instanceIdstring (uuid)noSovereign instance the backup belongs to.
requestedBystring | nullnoActivating actor; overridden by the authenticated principal when present so the audit trail attributes to the real caller.
sourceRegionstring | nullnoSovereign-local source region.
sovereignKmsRegionstring | nullnoSovereign KMS region the encryption key never leaves.
targetRegionstring | nullnoForeign (out-of-boundary) target region for the ciphertext.

BatchProvisionSupervisedInstancesCommand

PropertyTypeRequiredDescription
controlTemplateRefstring | nullno—
graduationScheduleRefstring | nullno—
guardianIdstring (uuid)no—
rosterSupervisedInstanceRosterEntry[] | nullno—

BatchProvisionSupervisedInstancesResultDto

PropertyTypeRequiredDescription
batchIdstring (uuid)no—
controlTemplateRefstring | nullno—
instancesSupervisedInstanceDto[] | nullno—
provisionedCountinteger (int32)no—

BindCustomDomainRequest

PropertyTypeRequiredDescription
customDomainstring | nullno—

CertificateDto

PropertyTypeRequiredDescription
certificateTypeCertificateTypeyes—
expiresAtstring (date-time)yes—
instanceIdstring (uuid) | nullno—
isExpiringSoonbooleanno—
isHsmBackedbooleanyes—
isValidbooleanno—
issuedAtstring (date-time)yes—
revocationReasonCertificateRevocationReasonno—
revokedAtstring (date-time) | nullno—
serialNumberstring | nullyes—
statusCertificateStatusyes—
subjectNamestring | nullyes—
thumbprintstring | nullyes—

CertificateRevocationReason

"Unspecified" | "KeyCompromise" | "CACompromise" | "AffiliationChanged" | "Superseded" | "CessationOfOperation" | "CertificateHold" | "RemoveFromCRL" | "PrivilegeWithdrawn" | "AACompromise" with no declared properties.

CertificateStatus

"Valid" | "Revoked" | "Expired" | "Pending" with no declared properties.

CertificateType

"Root" | "Intermediate" | "Leaf" with no declared properties.

CircuitBreakerState

Represents the state of a circuit breaker for a specific target instance.

PropertyTypeRequiredDescription
breakDurationstring (date-span)noGets or sets the duration the circuit stays open before transitioning to half-open.
consecutiveFailureCountinteger (int32)noGets or sets the consecutive failure count.
failureThresholdinteger (int32)noGets or sets the failure threshold that triggers the circuit to open.
lastOpenedAtstring (date-time) | nullnoGets or sets the timestamp when the circuit was last opened (null if never opened).
statestring | nullnoGets or sets the current circuit state (Closed, Open, HalfOpen).
targetInstanceIdstring | nullnoGets or sets the target instance ID.

CircuitBreakerStatesResponse

Response model for circuit breaker states query.

PropertyTypeRequiredDescription
checkedAtstring (date-time)noGets or sets the timestamp when the states were checked.
circuitBreakersmap<string, CircuitBreakerState> | nullnoGets or sets the dictionary of circuit breaker states keyed by target instance ID.

CompleteMaterialisationRequest

PropertyTypeRequiredDescription
databaseConnectionStringstring | nullnoThe database the operator actually created.
endpointUrlstring | nullnoWhere the instance is reachable.

CompleteRegistrationRequestBody

Request body for completing a registration.

PropertyTypeRequiredDescription
approvalTokenstring | nullnoGets or sets the approval token to validate.

ComplianceStatus

"Compliant" | "NonCompliant" | "UnderReview" | "Exempt" with no declared properties.

ComputeRouteRequest

Request model for computing an optimal route between instances.

PropertyTypeRequiredDescription
sourceInstanceIdstring | nullnoGets or sets the source instance ID.
targetInstanceIdstring | nullnoGets or sets the target instance ID.

CreateDeveloperIdRequest

Request payload for creating a developer ID.

PropertyTypeRequiredDescription
displayNamestring | nullno—
notesstring | nullno—
ownerEmailstring | nullno—
slugstring | nullno—

CreateDnsRecordCommand

PropertyTypeRequiredDescription
healthCheckEnabledbooleanno—
healthCheckEndpointstring | nullno—
namestring | nullno—
priorityinteger (int32) | nullno—
ttlinteger (int32)no—
typestring | nullno—
valuestring | nullno—
weightinteger (int32) | nullno—
zoneIdstring (uuid)no—

CreateDnsZoneCommand

PropertyTypeRequiredDescription
ownerInstanceIdstring (uuid)no—
ownerInstanceTypestring | nullno—
parentZoneIdstring (uuid) | nullno—
providerstring | nullno—
providerConfigurationstring | nullno—
zoneNamestring | nullno—
zoneTypestring | nullno—

CreateGlobalInstanceCommand

PropertyTypeRequiredDescription
autoScalingEnabledbooleanno—
availabilityZonestring | nullno—
backupEnabledbooleanno—
backupRetentionDaysinteger (int32)no—
complianceCertificationsstring | nullno—
dataCenterstring | nullno—
endpointUrlstring | nullno—
highAvailabilityEnabledbooleanno—
jurisdictionstring | nullno—
maxApiRequestsPerHourinteger (int32)no—
maxConnectionsinteger (int32)no—
maxStorageGbinteger (int64)no—
monitoringEnabledbooleanno—
namestring | nullno—
regionstring | nullno—
tagsstring | nullno—
versionstring | nullno—

CreateInstanceResponseDto

PropertyTypeRequiredDescription
idstring (uuid)no—
locationstring | nullno—

CreateOrganizationInstanceCommand

PropertyTypeRequiredDescription
adminDisplayNamestring | nullno—
adminEmailstring | nullno—
autoScalingEnabledbooleanno—
availabilityZonestring | nullno—
backupEnabledbooleanno—
backupRetentionDaysinteger (int32)no—
commercialModelstring | nullno—
complianceCertificationsstring | nullno—
cpuCoresinteger (int32)no—
createdByUserIdstring (uuid)no—
creatorOrganizationIdstring (uuid) | nullno—
creatorTypeOrganizationCreatorTypeno—
customDomainstring | nullno—
customFieldsEnabledbooleanno—
customWorkflowsEnabledbooleanno—
dataCenterstring | nullno—
databaseSkustring | nullno—
dealRegistrationIdstring | nullno—
deploymentModelInstanceDeploymentModelno—
deploymentRegionstring | nullno—
endpointUrlstring | nullno—
faviconUrlstring | nullno—
founderUserIdstring (uuid) | nullno—
globalInstanceIdstring (uuid)no—
highAvailabilityEnabledbooleanno—
infrastructureProviderstring | nullno—
instanceLicenceSubscriptionIdstring (uuid) | nullno—
instancePricingPlanIdstring (uuid) | nullno—
instanceSkuCodestring | nullno—
integrationsEnabledbooleanno—
isDedicatedbooleanno—
isPendingClaimbooleanno—
logoUrlstring | nullno—
maxApiRequestsPerHourinteger (int32)no—
maxConnectionsinteger (int32)no—
maxStorageGbinteger (int32)no—
memoryGbinteger (int32)no—
monitoringEnabledbooleanno—
namestring | nullno—
operatorOrganizationIdstring (uuid) | nullno—
organizationDisplayNamestring | nullno—
organizationIdstring (uuid)no—
organizationNamestring | nullno—
parentSovereignInstanceIdstring (uuid)no—
partnerIdstring (uuid) | nullno—
pricingPlanIdstring (uuid) | nullno—
primaryColorstring | nullno—
regionstring | nullno—
requestedModuleIdsstring[] | nullno—
secondaryColorstring | nullno—
serviceEndpointOverridesmap<string, string> | nullno—
slugstring | nullno—
storageGbinteger (int32)no—
tagsstring | nullno—
versionstring | nullno—
whiteLabelEnabledbooleanno—

CreateRegistrationRequestCommand

PropertyTypeRequiredDescription
isDedicatedboolean | nullno—
jurisdictionCodestring | nullno—
justificationstring | nullno—
organizationIdstring (uuid) | nullno—
organizationNamestring | nullno—
regionstring | nullno—
requestTypestring | nullno—
requestedByEmailstring | nullno—
requestedByUserIdstring (uuid)no—
requestingInstanceIdstring (uuid)no—
requestingInstanceNamestring | nullno—
slugstring | nullno—
targetInstanceIdstring (uuid)no—
targetInstanceTypestring | nullno—

CreateSovereignInstanceCommand

PropertyTypeRequiredDescription
allowedStorageRegionsstring | nullno—
allowedTransferJurisdictionsstring | nullno—
autoScalingEnabledbooleanno—
availabilityZonestring | nullno—
backupEnabledbooleanno—
backupRetentionDaysinteger (int32)no—
complianceCertificationsstring | nullno—
countryCodestring | nullno—
dataCenterstring | nullno—
edgeCachingEnabledbooleanno—
endpointUrlstring | nullno—
globalInstanceIdstring (uuid)no—
highAvailabilityEnabledbooleanno—
jurisdictionCodestring | nullno—
jurisdictionNamestring | nullno—
maxApiRequestsPerHourinteger (int32)no—
maxConnectionsinteger (int32)no—
maxStorageGbinteger (int32)no—
monitoringEnabledbooleanno—
namestring | nullno—
primaryRegionstring | nullno—
regionstring | nullno—
regulatoryFrameworkstring | nullno—
requireStandardContractualClausesbooleanno—
tagsstring | nullno—
versionstring | nullno—

CreateUserRequest

Request model for creating a user.

PropertyTypeRequiredDescription
emailstring | nullnoGets or sets the user's email address.
fullNamestring | nullnoGets or sets the user's full name.
rolestring | nullnoGets or sets the role to assign to the user.

CreateVaultCommand

PropertyTypeRequiredDescription
authenticationTagstring | nullno—
autoDeleteDaysinteger (int32) | nullno—
autoDeleteEnabledbooleanno—
descriptionstring | nullno—
initializationVectorstring | nullno—
instanceIdstring (uuid)no—
keyIdstring | nullno—
maxDocumentsinteger (int32) | nullno—
maxSizeBytesinteger (int64) | nullno—
namestring | nullno—
ownerIdstring (uuid)no—
saltstring | nullno—

CredentialLockdownResponse

Response body for a presented-credential lockdown.

PropertyTypeRequiredDescription
recordIdstring (uuid)noThe compromise-record id (stable across idempotent retries).

CrossBorderApprovalDto

PropertyTypeRequiredDescription
adequacyOutcomestring | nullyes—
dataClassificationstring | nullno—
decidedAtstring (date-time) | nullno—
decidedBystring | nullno—
decisionReasonstring | nullno—
decisionScopestring | nullno—
expiresAtstring (date-time) | nullno—
idstring (uuid)yes—
mechanismstring | nullno—
originstring | nullno—
purposestring | nullyes—
recipientstring | nullyes—
requestedAtstring (date-time)yes—
requestedBystring | nullyes—
sourceJurisdictionstring | nullyes—
statusstring | nullyes—
targetJurisdictionstring | nullyes—
territoriesstring[] | nullno—

CrossBorderApprovalDtoCursorResult

PropertyTypeRequiredDescription
hasMorebooleanno—
itemsCrossBorderApprovalDto[] | nullno—
nextCursorstring | nullno—
pageSizeinteger (int32)no—
previousCursorstring | nullno—

CrossBorderVerdictDto

PropertyTypeRequiredDescription
adequacyOutcomestring | nullyes—
approvalIdstring (uuid) | nullno—
approvalStatusstring | nullno—
approvingAuthoritystring | nullno—
bindingbooleanno—
decidedAtstring (date-time) | nullno—
evaluatedAtstring (date-time)yes—
expiresAtstring (date-time) | nullno—
legalBasisstring | nullyes—
recipientstring | nullno—
sourceJurisdictionstring | nullyes—
targetJurisdictionstring | nullyes—
verdictstring | nullyes—

CrossRegionRolloutDto

PropertyTypeRequiredDescription
createdAtstring (date-time)no—
endedAtstring (date-time) | nullno—
fromVersionstring | nullno—
haltReasonstring | nullno—
haltedAutomaticallybooleanno—
idstring (uuid)no—
nextRegionstring | nullno—
orderedRegionsstring[] | nullno—
rolledRegionsstring[] | nullno—
startedAtstring (date-time) | nullno—
statestring | nullno—
toVersionstring | nullno—
updatedAtstring (date-time) | nullno—

CustomDomainBindingDto

PropertyTypeRequiredDescription
boundAtstring (date-time) | nullno—
customDomainstring | nullno—
enabledbooleanno—
lastVerificationMessagestring | nullno—
organizationInstanceIdstring (uuid)no—
statusstring | nullno—
verificationRecordNamestring | nullno—
verificationRecordValuestring | nullno—
verifiedAtstring (date-time) | nullno—

DeclareInstanceServiceLevelRequest

PropertyTypeRequiredDescription
availabilityTargetBasisPointsinteger (int32)no—
criticalIncidentResponseMinutesinteger (int32)no—
supportCoveragestring | nullno—

DeclineJointVentureRequest

PropertyTypeRequiredDescription
reasonstring | nullno—

DedicatedMaterialisationQueueItem

PropertyTypeRequiredDescription
cpuCoresinteger (int32)no—
instanceIdstring (uuid)no—
memoryGbinteger (int32)no—
organizationNamestring | nullno—
parentSovereignInstanceIdstring (uuid)no—
regionstring | nullno—
requestIdstring (uuid)no—
requestedAtstring (date-time)no—
storageGbinteger (int32)no—

DeveloperIdEntry

Represents a developer ID entry.

PropertyTypeRequiredDescription
createdAtstring (date-time)no—
displayNamestring | nullno—
idstring (uuid)no—
notesstring | nullno—
ownerEmailstring | nullno—
slugstring | nullno—
statusstring | nullno—
suspendedReasonstring | nullno—
updatedAtstring (date-time)no—

DiscoveryResult

PropertyTypeRequiredDescription
discoveredAtstring (date-time)no—
endpointstring | nullno—
errorMessagestring | nullno—
instanceIdstring | nullno—
isHealthybooleanno—
latencystring (date-span)no—
regionstring | nullno—
statusDiscoveryStatusno—

DiscoveryStatus

"Success" | "Unhealthy" | "Unreachable" | "NotFound" | "Timeout" | "Error" | "Maintenance" | "NoAdequateSovereign" with no declared properties.

DnsRecordDto

PropertyTypeRequiredDescription
healthCheckEnabledbooleanno—
healthCheckEndpointstring | nullno—
idstring (uuid)no—
lastVerifiedAtstring (date-time) | nullno—
namestring | nullno—
priorityinteger (int32) | nullno—
statusstring | nullno—
ttlinteger (int32)no—
typestring | nullno—
valuestring | nullno—
weightinteger (int32) | nullno—
zoneIdstring (uuid)no—

DnsZoneDto

PropertyTypeRequiredDescription
createdAtstring (date-time)no—
idstring (uuid)no—
namestring | nullno—
ownerInstanceIdstring (uuid)no—
ownerInstanceTypestring | nullno—
parentZoneIdstring (uuid) | nullno—
providerstring | nullno—
recordsDnsRecordDto[] | nullno—
statusstring | nullno—
updatedAtstring (date-time)no—
zoneTypestring | nullno—

DomainEvent

PropertyTypeRequiredDescription
aggregateIdstring (uuid)no—
aggregateTypestring | nullno—
eventIdstring (uuid)no—
metadatamap<string, string> | nullno—
occurredOnstring (date-time)no—
versioninteger (int32)no—

DrivingCategoryGrantInput

PropertyTypeRequiredDescription
codestring | nullno—
obtainedOnstring (date) | nullno—
validUntilstring (date) | nullno—

EstablishEVisaRequest

Request body for `POST /api/v1/cross-border/immigration-status/evisa`.

PropertyTypeRequiredDescription
credentialIdstring | nullnoOpaque eVisa credential identifier.
validFromstring (date)noStart of the eVisa's validity.
validUntilstring (date) | nullnoEnd of the eVisa's validity; null when open-ended.

FailMaterialisationRequest

PropertyTypeRequiredDescription
reasonstring | nullnoWhy it cannot be built. The organisation is owed an explanation and the next operator is owed the context — a blank is refused.

FlagPresentedCredentialCompromisedCommand

PropertyTypeRequiredDescription
consentRecordRefstring | nullyes—
credentialIdstring | nullyes—
flaggedByUserIdstring (uuid)yes—
issuerstring | nullyes—
relyingPartyRefstring | nullno—
statusListIndexinteger (int64) | nullno—
statusListUrlstring | nullno—
vaultRefstring (uuid)yes—

ForeignCredentialCaptureRequest

One submitted foreign credential reference (ZK metadata only — never a payload).

PropertyTypeRequiredDescription
issuerJurisdictionstring | nullnoIssuer jurisdiction code (ISO 3166 alpha-2 or a recognised grouping code).
kindstring | nullnoThe credential kind (`foreign-passport` | `residence-permit` | …).
labelstring | nullnoPlain-language, non-identifying label, e.g. "UAE Emirates ID".
originLoAstring | nullnoThe asserted origin assurance level (`low` | `substantial` | `high`).
originSchemestring | nullnoThe origin trust-scheme id, e.g. `UAEPass`.

ForeignCredentialRefDto

PropertyTypeRequiredDescription
idstring (uuid)no—
identifierMaskstring | nullno—
issuerJurisdictionstring | nullno—
kindstring | nullno—
labelstring | nullno—
originLoAstring | nullno—
originSchemestring | nullno—
rejectionReasonstring | nullno—
statusstring | nullno—

GlobalInstance

PropertyTypeRequiredDescription
activatedAtstring (date-time) | nullno—
configurationInstanceConfigurationno—
connectedOrganizationInstances(string (uuid))[] | nullno—
connectedSovereignInstances(string (uuid))[] | nullno—
createdAtstring (date-time)no—
createdBystring | nullno—
deletedAtstring (date-time) | nullno—
deletedBystring | nullno—
domainEventsDomainEvent[] | nullno—
endpointUrlstring | nullno—
hasDomainEventsbooleanno—
healthCheckStatusstring | nullno—
idstring (uuid)no—
isDeletedbooleanno—
isHealthybooleanno—
lastHealthCheckstring (date-time) | nullno—
metadataInstanceMetadatano—
namestring | nullno—
provisionedAtstring (date-time) | nullno—
rowVersionstring (byte) | nullno—
statusInstanceStatusno—
suspensionReasonstring | nullno—
terminatedAtstring (date-time) | nullno—
terminationReasonstring | nullno—
typeInstanceTypeno—
updatedAtstring (date-time) | nullno—
updatedBystring | nullno—

HealthStatus

PropertyTypeRequiredDescription
checkedAtstring (date-time)no—
httpStatusCodeinteger (int32) | nullno—
isHealthybooleanno—
reasonstring | nullno—
responseTimestring (date-span)no—

HomeRealmDiscoveryRequest

PropertyTypeRequiredDescription
domainstring | nullno—

HomeRealmDiscoveryResponse

PropertyTypeRequiredDescription
authorizeUrlstring | nullno—
isDefaultRealmbooleanno—
realmTokenstring | nullno—
regionstring | nullno—

ImmigrationShareCodeDto

PropertyTypeRequiredDescription
claimTypestring | nullno—
codeMaskstring | nullno—
expiresAtstring (date-time)no—
issuedAtstring (date-time)no—
lastRedeemedAtstring (date-time) | nullno—
recipientLabelstring | nullno—
redemptionCountinteger (int32)no—
revokedAtstring (date-time) | nullno—
shareCodeIdstring (uuid)no—
statestring | nullno—

ImmigrationStatusDto

PropertyTypeRequiredDescription
brpMaskstring | nullno—
brpRetiredAtstring (date-time) | nullno—
brpValidUntilstring (date)no—
canPerformCutoverbooleanno—
canonicalAtstring (date-time) | nullno—
eVisaCredentialIdstring | nullno—
eVisaValidFromstring (date) | nullno—
eVisaValidUntilstring (date) | nullno—
shareCodesImmigrationShareCodeDto[] | nullno—
stagestring | nullno—
statusVersioninteger (int32)no—
supersessionReceiptRefstring | nullno—
transitionIdstring (uuid)no—
verificationsImmigrationVerificationDto[] | nullno—

ImmigrationVerificationConsoleDto

PropertyTypeRequiredDescription
policyImmigrationVerificationPolicyDtono—
requestsImmigrationVerificationRequestDto[] | nullno—
verificationsImmigrationVerificationDto[] | nullno—

ImmigrationVerificationDto

PropertyTypeRequiredDescription
basisstring | nullno—
checkedAtstring (date-time)no—
claimTypestring | nullno—
credentialIdstring | nullno—
entitlementValidUntilstring (date) | nullno—
maxStalenessDaysinteger (int32)no—
outcomestring | nullno—
requiresRecheckbooleanno—
shareCodeIdstring (uuid)no—
statusVersioninteger (int32)no—
subjectStagestring | nullno—
verificationIdstring (uuid)no—
verifierOrgRefstring | nullno—

ImmigrationVerificationPolicyDto

PropertyTypeRequiredDescription
acceptedClaimTypesstring[] | nullno—
acceptedJurisdictionsstring[] | nullno—
maxStalenessDaysinteger (int32)no—
organizationRefstring | nullno—
requireCanonicalEVisabooleanno—

ImmigrationVerificationRequestDto

PropertyTypeRequiredDescription
claimTypestring | nullno—
dueOnstring (date)no—
fulfilledAtstring (date-time) | nullno—
fulfilledByVerificationIdstring (uuid) | nullno—
requestIdstring (uuid)no—
requestedAtstring (date-time)no—
statusstring | nullno—
subjectRefstring | nullno—

InboundResidencyDecisionDto

PropertyTypeRequiredDescription
adequacystring | nullno—
destinationInstancestring | nullno—
destinationJurisdictionstring | nullno—
lawfulBasisRefstring | nullno—
originJurisdictionstring | nullno—
sourceInstancestring | nullno—
translatedOnlybooleanno—

IncidentActionRequest

Body of a console incident action.

PropertyTypeRequiredDescription
rootCausestring | nullnoRequired by the owner to resolve. The console never collected it, which is half of why this endpoint could not drive the lifecycle.

InstanceActivationStatus

"Unknown" | "Active" with no declared properties.

InstanceConfiguration

PropertyTypeRequiredDescription
autoScalingEnabledbooleanno—
backupEnabledbooleanno—
backupRetentionDaysinteger (int32)no—
highAvailabilityEnabledbooleanno—
maxApiRequestsPerHourinteger (int32)no—
maxConnectionsinteger (int32)no—
maxStorageGbinteger (int64)no—
monitoringEnabledbooleanno—

InstanceConfigurationDto

PropertyTypeRequiredDescription
autoScalingEnabledbooleanno—
backupEnabledbooleanno—
backupRetentionDaysinteger (int32)no—
highAvailabilityEnabledbooleanno—
maxApiRequestsPerHourinteger (int32)no—
maxConnectionsinteger (int32)no—
maxStorageGbinteger (int64)no—
monitoringEnabledbooleanno—

InstanceDeploymentModel

"Unspecified" | "CloudAzure" | "CloudAWS" | "CloudGCP" | "OnPremise" | "Hybrid" | "AirGapped" | "PartnerSovereignCloud" | "CloudOracle" | "CustomerCloud" | "ServiceProviderOperated" with no declared properties.

InstanceDiscoveryDocument

Public, anonymous-readable instance discovery document served at `GET /api/v{version}/discovery/.well-known/instance`. Contains only metadata — no PII, no tenant data — so it is safe to expose without authentication per RFC 8615.

PropertyTypeRequiredDescription
apiVersionsstring[] | nullnoAPI versions this instance currently advertises.
discoveryEndpointstring | nullnoUser-discovery endpoint URL template.
generatedAtstring (date-time)noUTC timestamp when the document was generated.
healthEndpointstring | nullnoLiveness endpoint URL fragment.
instanceIdstring | nullnoStable identifier of this instance.
metricsEndpointstring | nullnoPrometheus metrics endpoint URL fragment.
readyEndpointstring | nullnoReadiness endpoint URL fragment.
serviceNamestring | nullnoLogical service name (matches the OBS-001 service name).

InstanceListDto

PropertyTypeRequiredDescription
createdAtstring (date-time)no—
endpointUrlstring | nullno—
idstring (uuid)no—
isHealthybooleanno—
jurisdictionstring | nullno—
lastHealthCheckstring (date-time) | nullno—
namestring | nullno—
regionstring | nullno—
statusInstanceStatusno—
typeInstanceTypeno—

InstanceListDtoCursorResult

PropertyTypeRequiredDescription
hasMorebooleanno—
itemsInstanceListDto[] | nullno—
nextCursorstring | nullno—
pageSizeinteger (int32)no—
previousCursorstring | nullno—

InstanceMember

PropertyTypeRequiredDescription
createdAtstring (date-time)no—
createdBystring | nullno—
deletedAtstring (date-time) | nullno—
deletedBystring | nullno—
domainEventsDomainEvent[] | nullno—
emailstring | nullno—
emailVerifiedbooleanno—
firstNamestring | nullno—
hasDomainEventsbooleanno—
idstring (uuid)no—
instanceIdstring (uuid)no—
isActivebooleanno—
isDeletedbooleanno—
lastNamestring | nullno—
rolesstring[] | nullno—
rowVersionstring (byte) | nullno—
updatedAtstring (date-time) | nullno—
updatedBystring | nullno—

InstanceMetadata

PropertyTypeRequiredDescription
availabilityZonestring | nullno—
complianceCertificationsstring[] | nullno—
dataCenterstring | nullno—
jurisdictionstring | nullno—
regionstring | nullno—
tagsmap<string, string> | nullno—
versionstring | nullno—

InstanceMetadataDto

PropertyTypeRequiredDescription
complianceCertificationsstring[] | nullno—
jurisdictionstring | nullno—
regionstring | nullno—
tagsmap<string, string> | nullno—
versionstring | nullno—

InstanceRegistry

PropertyTypeRequiredDescription
createdAtstring (date-time)no—
createdBystring | nullno—
deletedAtstring (date-time) | nullno—
deletedBystring | nullno—
descriptionstring | nullno—
domainEventsDomainEvent[] | nullno—
entriesmap<string, InstanceRegistryEntry> | nullno—
hasDomainEventsbooleanno—
idstring (uuid)no—
isDeletedbooleanno—
lastUpdatedAtstring (date-time)no—
namestring | nullno—
rowVersionstring (byte) | nullno—
totalInstancesinteger (int32)no—
updatedAtstring (date-time) | nullno—
updatedBystring | nullno—

InstanceRegistryEntry

PropertyTypeRequiredDescription
activationStatusInstanceActivationStatusno—
activationUpdatedAtstring (date-time) | nullno—
endpointUrlstring | nullno—
instanceIdstring (uuid)no—
instanceNamestring | nullno—
instanceTypeInstanceTypeno—
regionstring | nullno—
registeredAtstring (date-time)no—
registryIdstring (uuid)no—
subscriptionTierstring | nullno—

InstanceServiceLevelDto

PropertyTypeRequiredDescription
availabilityTargetBasisPointsinteger (int32)no—
availabilityTargetPercentnumber (double)no—
criticalIncidentResponseMinutesinteger (int32)no—
declaredAtstring (date-time)no—
supportCoveragestring | nullno—

InstanceStatus

"Provisioning" | "Active" | "Suspended" | "Maintenance" | "Degraded" | "Failed" | "Terminating" | "Terminated" with no declared properties.

InstanceType

"Global" | "Sovereign" | "Organization" | "Edge" | "Development" with no declared properties.

IssueCertificateRequest

Request model for issuing a certificate.

PropertyTypeRequiredDescription
certificateTypeCertificateTypeyes—
instanceIdstring (uuid) | nullnoOptional instance ID to associate with the certificate.
signingCertificateThumbprintstring | nullnoThumbprint of the signing certificate (required for leaf certificates).
subjectNamestring | nullyesSubject name (Distinguished Name) for the certificate. Example: "CN=Essence Intermediate CA, O=Essence Platform, C=US"
validityDaysinteger (int32)yesNumber of days the certificate should be valid.

IssueCertificateResponse

Response model for certificate issuance.

PropertyTypeRequiredDescription
issuedAtstring (date-time)yesUTC timestamp when the certificate was issued.
thumbprintstring | nullyesThumbprint of the issued certificate.

IssuedShareCodeDto

PropertyTypeRequiredDescription
claimTypestring | nullno—
codestring | nullno—
expiresAtstring (date-time)no—
shareCodeIdstring (uuid)no—
statusImmigrationStatusDtono—

IssueShareCodeRequest

Request body for `POST /api/v1/cross-border/immigration-status/share-codes`.

PropertyTypeRequiredDescription
claimTypestring | nullnoThe entitlement to prove (`right_to_work` | `right_to_rent`).
recipientLabelstring | nullnoWho the code is for; optional.
validityDaysinteger (int32)noRequested validity in days; 0 for the default.

JointVentureDto

PropertyTypeRequiredDescription
approvalQuorummap<string, integer (int32)> | nullno—
custodyModelstring | nullno—
declineReasonstring | nullno—
dualControlScopestring | nullno—
idstring (uuid)no—
namestring | nullno—
proposedAtstring (date-time)no—
respondedAtstring (date-time) | nullno—
sponsorsJointVentureSponsorDto[] | nullno—
statusstring | nullno—
windDownCopyToBothParentsbooleanno—
windDownDestructionRequiresBothParentsbooleanno—

JointVentureSponsorDto

PropertyTypeRequiredDescription
billingSharePercentnumber (double)no—
organizationIdstring (uuid)no—
organizationNamestring | nullno—

KeySovereigntyAttestation

PropertyTypeRequiredDescription
algorithmstring | nullno—
backupIdstring (uuid)yes—
contentHashstring | nullyes—
encryptionKeyIdstring | nullyes—
foreignRegionstring | nullyes—
keyNeverLeftSovereignKmsbooleanno—
signaturestring | nullyes—
signedAtstring (date-time)yes—
sovereignKmsRegionstring | nullyes—
statementstring | nullyes—

LatencyMeasurementResult

Result model for latency measurements.

PropertyTypeRequiredDescription
endpointstring | nullnoGets or sets the endpoint URL that was measured.
isReachablebooleannoGets or sets a value indicating whether the endpoint was reachable.
latencystring (date-span)noGets or sets the measured round-trip latency. Returns TimeSpan.MaxValue if the endpoint is unreachable.
measuredAtstring (date-time)noGets or sets the timestamp when the measurement was performed.

LinkImmigrationStatusRequest

Request body for `POST /api/v1/cross-border/immigration-status/link`. There is deliberately no field for the BRP card number or the holder's date of birth. The entry screen asks for both so the person knows which document they are linking; the device keeps them and sends only the trailing mask.

PropertyTypeRequiredDescription
brpMaskstring | nullnoTrailing characters of the BRP card number (1–8).
brpValidUntilstring (date)noThe expiry printed on the BRP card.

MessageStatusResponse

Response model for message delivery status.

PropertyTypeRequiredDescription
lastUpdatedAtstring (date-time)noGets or sets the timestamp of the last status update.
maxRetriesinteger (int32)noGets or sets the maximum number of retry attempts.
messageIdstring | nullnoGets or sets the unique identifier of the message.
queueDepthinteger (int64)noGets or sets the current queue depth for pending messages.
retryCountinteger (int32)noGets or sets the current retry attempt number.
statusstring | nullnoGets or sets the current delivery status (Pending, Processing, Delivered, Failed, Queued).

MessagingHealthResponse

Response model for messaging subsystem health check.

PropertyTypeRequiredDescription
averageDeliveryLatencystring (date-span)noGets or sets the average message delivery latency.
checkedAtstring (date-time)noGets or sets the timestamp when the health check was performed.
circuitBreakerOpenbooleannoGets or sets a value indicating whether any circuit breaker is open.
isHealthybooleannoGets or sets a value indicating whether the messaging subsystem is healthy.
queueDepthinteger (int64)noGets or sets the current queue depth for pending messages.
totalMessagesDeliveredinteger (int64)noGets or sets the total number of messages delivered successfully.
totalMessagesFailedinteger (int64)noGets or sets the total number of messages that failed permanently.
totalMessagesSentinteger (int64)noGets or sets the total number of messages sent.

MessagingStatistics

PropertyTypeRequiredDescription
averageDeliveryLatencystring (date-span)no—
circuitBreakerOpenbooleanno—
instanceIdstring | nullno—
p95DeliveryLatencystring (date-span)no—
p99DeliveryLatencystring (date-span)no—
retryRatenumber (double)no—
successRatenumber (double)no—
throughputMessagesPerSecondnumber (double)no—
totalMessagesDeliveredinteger (int64)no—
totalMessagesFailedinteger (int64)no—
totalMessagesQueuedinteger (int64)no—
totalMessagesSentinteger (int64)no—
windowEndstring (date-time)no—
windowStartstring (date-time)no—

ModuleEntry

Represents an installed module entry surfaced by the organization module endpoints.

PropertyTypeRequiredDescription
categorystring | nullno—
descriptionstring | nullno—
enabledbooleanno—
installedAtstring (date-time)no—
moduleIdstring | nullno—
namestring | nullno—
updatedAtstring (date-time)no—
versionstring | nullno—

OpenRenunciationTeardownRequest

The irreversible confirm's payload.

PropertyTypeRequiredDescription
credentialRefsstring[] | nullnoOpaque references to the nationality-derived credentials the teardown will revoke. Carried to EPIC 6 so it can attribute EPIC 9's later credential-revoked events to this renunciation.
jurisdictionstring | nullnoNon-PII code of the nationality being renounced.

OpenReturningNationalIntakeRequest

Request body for `POST /api/v1/cross-border/returning-national/intake`. Carries the corridor and the ZK foreign-credential references only; the returning national is taken from the caller's JWT subject and never from this body.

PropertyTypeRequiredDescription
credentialsForeignCredentialCaptureRequest[] | nullnoThe foreign credential references the person is arriving with (at least one).
destinationJurisdictionstring | nullnoThe destination (home) jurisdiction code.
originJurisdictionstring | nullnoThe origin (departure) jurisdiction code.

OptimalInstanceRequest

Request model for `POST /api/v1/discovery/optimal` — the upstream GeoIP2 lookup outcome used to resolve the optimal instance for a client (FR-03.024b).

PropertyTypeRequiredDescription
confidenceinteger (int32) | nullnoGets or sets the GeoIP country-confidence (0–100). Defaults to 0 when absent.
countryCodestring | nullnoGets or sets the ISO 3166-1 alpha-2 client country from the GeoIP2 lookup. Omitted or empty models a GeoIP-unresolvable lookup.

OrganizationCreatorType

"Unspecified" | "SelfServe" | "Partner" | "EssenceOperator" | "Sponsor" with no declared properties.

OrganizationInstanceDto

PropertyTypeRequiredDescription
configurationInstanceConfigurationDtono—
createdAtstring (date-time)no—
customDomainstring | nullno—
customDomainEnabledbooleanno—
endpointUrlstring | nullno—
globalInstanceIdstring (uuid)no—
idstring (uuid)no—
isDedicatedbooleanno—
isHealthybooleanno—
lastHealthCheckstring (date-time) | nullno—
metadataInstanceMetadataDtono—
namestring | nullno—
organizationIdstring (uuid)no—
organizationNamestring | nullno—
statusInstanceStatusno—
typeInstanceTypeno—
updatedAtstring (date-time)no—

OrgHostOrganizationResponse

PropertyTypeRequiredDescription
organizationIdstring (uuid) | nullno—

OrgRealmDiscoveryRequest

PropertyTypeRequiredDescription
hoststring | nullno—

OrgResidencyEvidencePackageDto

PropertyTypeRequiredDescription
generatedAtstring (date-time)yes—
noticesOrgResidencyRelocationNoticeDto[] | nullyes—
statusOrgResidencyStatusDtoyes—

OrgResidencyRelocationNoticeDto

PropertyTypeRequiredDescription
destinationRegionstring | nullyes—
effectiveAtstring (date-time)yes—
idstring (uuid)yes—
legalBasisstring | nullyes—
operationReferencestring | nullno—
organizationIdstring (uuid)yes—
plainLanguageImpactstring | nullyes—
raisedAtstring (date-time)yes—
raisedBystring | nullyes—
respondedAtstring (date-time) | nullno—
respondedBystring | nullno—
responsestring | nullno—
responseCommentstring | nullno—
sourceRegionstring | nullyes—
statusstring | nullyes—

OrgResidencyStatusDto

PropertyTypeRequiredDescription
currentRegionstring | nullyes—
effectiveAtstring (date-time)yes—
evidencePackageUrlstring | nullyes—
legalBasisstring | nullyes—
noticeCountinteger (int32)yes—
organizationIdstring (uuid)yes—
pendingRelocationOrgResidencyRelocationNoticeDtono—

OrgSettings

Represents organization-level settings.

PropertyTypeRequiredDescription
billingEmailstring | nullno—
countrystring | nullno—
createdAtstring (date-time)no—
domainstring | nullno—
employeeCountstring | nullno—
industrystring | nullno—
localestring | nullno—
logoUrlstring | nullno—
namestring | nullno—
organizationIdstring (uuid)no—
primaryContactEmailstring | nullno—
primaryContactNamestring | nullno—
slugstring | nullno—
timezonestring | nullno—
updatedAtstring (date-time)no—

PasswordPolicySettings

Represents password policy configuration.

PropertyTypeRequiredDescription
maxAgeDaysinteger (int32)no—
minLengthinteger (int32)no—
preventReuseinteger (int32)no—
requireDigitbooleanno—
requireLowercasebooleanno—
requireSpecialCharbooleanno—
requireUppercasebooleanno—

PerformCutoverRequest

Request body for `POST /api/v1/cross-border/immigration-status/cutover`.

PropertyTypeRequiredDescription
actorstring | nullnoWho is performing the cutover (`holder` | `platform`).

ProblemDetails

PropertyTypeRequiredDescription
detailstring | nullno—
instancestring | nullno—
statusinteger (int32) | nullno—
titlestring | nullno—
typestring | nullno—

ProposeJointVentureRequest

PropertyTypeRequiredDescription
counterpartBillingSharePercentnumber (double)no—
counterpartOrganizationIdstring (uuid)no—
counterpartOrganizationNamestring | nullno—
custodyModelstring | nullno—
namestring | nullno—
proposingBillingSharePercentnumber (double)no—
proposingOrganizationNamestring | nullno—
requireBothParentsbooleanno—

ProvisioningStatusDto

PropertyTypeRequiredDescription
completedAtstring (date-time) | nullno—
createdAtstring (date-time)no—
currentStepinteger (int32)no—
errorCategorystring | nullno—
idstring (uuid)no—
instanceIdstring (uuid)no—
instanceUrlstring | nullno—
isRetryablebooleanno—
jurisdictionstring | nullno—
percentCompleteinteger (int32)no—
rollbackSuccessfulboolean | nullno—
startedAtstring (date-time) | nullno—
statusstring | nullno—
totalStepsinteger (int32)no—

ProvisionSupervisedInstanceCommand

PropertyTypeRequiredDescription
ageAssuranceLevelAgeAssuranceLevelno—
ageAssuranceMethodstring | nullno—
controlTemplateRefstring | nullno—
graduationScheduleRefstring | nullno—
guardianIdstring (uuid)no—
supervisedInstanceIdstring (uuid)no—
supervisionEndsOnstring (date-time) | nullno—

PublicInstanceListResponse

PropertyTypeRequiredDescription
instancesPublicInstanceOptionDto[] | nullno—
regionsPublicRegionDto[] | nullno—

PublicInstanceOptionDto

PropertyTypeRequiredDescription
displayNamestring | nullno—
idstring | nullno—
jurisdictionstring | nullno—

PublicRegionDto

PropertyTypeRequiredDescription
codestring | nullno—
displayNamestring | nullno—
instancesPublicRegionInstanceDto[] | nullno—
regulatoryFrameworkstring | nullno—

PublicRegionInstanceDto

PropertyTypeRequiredDescription
displayNamestring | nullno—
instanceIdstring (uuid)no—

RaiseRelocationNoticeBody

Request body to raise a pre-cutover residency relocation notice for one organisation.

PropertyTypeRequiredDescription
destinationRegionstring | nullnoRegion the organisation's data will reside in after cutover.
effectiveAtstring (date-time)noWhen the relocation takes effect (UTC); must be in the future.
legalBasisstring | nullnoLegal basis for holding the data in the destination region.
operationReferencestring | nullnoOriginating EPIC 88 residency-migration lifecycle operation, when tracked.
organizationIdstring (uuid)noOrganisation being re-homed.
plainLanguageImpactstring | nullnoPlain-language description of what changes for the organisation.
sourceRegionstring | nullnoRegion the organisation's data resides in today.

RaiseVerificationRequestsRequest

Request body for `POST /api/v1/cross-border/immigration-status/verification-requests`.

PropertyTypeRequiredDescription
claimTypestring | nullnoThe entitlement claim being asked for.
dueOnstring (date)noDate a response is needed by.
subjectRefsstring[] | nullnoThe organisation's own references for the people being asked.

ReassignRegistryRequest

Request body for M:Essence.Core.Instance.Api.Controllers.RegistryController.Reassign(Essence.Core.Instance.Api.Controllers.ReassignRegistryRequest,System.Threading.CancellationToken).

PropertyTypeRequiredDescription
regionstring | nullno—
userIdstring (uuid)no—

ReceiveMessageRequest

Request model for receiving a cross-instance message.

PropertyTypeRequiredDescription
maxRetriesinteger (int32) | nullnoGets or sets the maximum number of retry attempts (default: 3).
messageIdstring | nullnoGets or sets the unique identifier of the message.
payloadstring | nullnoGets or sets the encrypted message payload (up to 1 MB per NFR-03.022).
sourceInstanceIdstring | nullnoGets or sets the source instance ID sending the message.
targetInstanceIdstring | nullnoGets or sets the target instance ID receiving the message.

ReceiveMessageResponse

Response model for message acceptance confirmation.

PropertyTypeRequiredDescription
correlationIdstring | nullnoGets or sets the correlation ID for distributed tracing.
messageIdstring | nullnoGets or sets the unique identifier of the received message.
receivedAtstring (date-time)noGets or sets the timestamp when the message was received.
statusstring | nullnoGets or sets the current status of the message.

RecordSovereignInstanceOperatorRequest

PropertyTypeRequiredDescription
operatorLegalJurisdictionstring | nullno—
operatorOrganizationIdstring (uuid)no—
reasonstring | nullno—

RegisterDrivingEntitlementRequest

Request body for `POST /api/v1/cross-border/driving-entitlement`. Carries ZK held-entitlement metadata only; the owner is taken from the caller's JWT subject and never from this body.

PropertyTypeRequiredDescription
categoriesDrivingCategoryGrantInput[] | nullnoHeld categories with optional per-category validity windows.
holderRefstring | nullnoOpaque holder reference (ZK — never a name or licence number).
issuingJurisdictionstring | nullnoIssuing jurisdiction (ISO 3166 alpha-2).
licenceExpirystring (date)noLicence (whole-document) expiry (ISO date).
restrictionCodesstring[] | nullnoHarmonised (EU Annex I) restriction codes; empty when unrestricted.

RegisterInstanceCommand

PropertyTypeRequiredDescription
endpointUrlstring | nullno—
instanceIdstring (uuid)no—
instanceNamestring | nullno—
instanceTypeInstanceTypeno—
regionstring | nullno—

RegistrationRequestDto

PropertyTypeRequiredDescription
approvalConditionsstring | nullno—
approvalTokenConsumedbooleanno—
createdAtstring (date-time)no—
expiresAtstring (date-time)no—
idstring (uuid)no—
isDedicatedboolean | nullno—
jurisdictionCodestring | nullno—
justificationstring | nullno—
organizationIdstring (uuid) | nullno—
organizationNamestring | nullno—
regionstring | nullno—
rejectionReasonstring | nullno—
requestTypestring | nullno—
requestedByEmailstring | nullno—
requestedByUserIdstring (uuid)no—
requestingInstanceIdstring (uuid)no—
requestingInstanceNamestring | nullno—
reviewedAtstring (date-time) | nullno—
reviewedByUserIdstring (uuid) | nullno—
slugstring | nullno—
statusstring | nullno—
targetInstanceIdstring (uuid)no—
targetInstanceTypestring | nullno—

RejectRegistrationRequestBody

Request body for rejecting a registration request.

PropertyTypeRequiredDescription
reasonstring | nullnoGets or sets the reason for rejection.

RenunciationTeardownCaseDto

PropertyTypeRequiredDescription
caseIdstring (uuid)no—
completedAtstring (date-time) | nullno—
jurisdictionstring | nullno—
openedAtstring (date-time)no—
readyForReceiptbooleanno—
receiptDigeststring | nullno—
statusstring | nullno—
stepsRenunciationTeardownStepDto[] | nullno—
templateIdstring | nullno—
validityCeilingDaysinteger (int32)no—

RenunciationTeardownStepDto

PropertyTypeRequiredDescription
blockedReasonstring | nullno—
detailstring | nullno—
evidenceRefstring | nullno—
keystring | nullno—
labelstring | nullno—
obligationCodestring | nullno—
occurredAtstring (date-time) | nullno—
sequenceinteger (int32)no—
statusstring | nullno—
timelineDaysinteger (int32)no—

RenunciationTeardownTemplateDto

PropertyTypeRequiredDescription
jurisdictionstring | nullno—
notifyListstring[] | nullno—
stepsRenunciationTeardownStepDto[] | nullno—
templateIdstring | nullno—
validityCeilingDaysinteger (int32)no—

RequestCrossBorderApprovalBody

Request body to raise a new cross-border approval request (S-03.02 write).

PropertyTypeRequiredDescription
dataClassificationstring | nullnoHighest data classification involved.
purposestring | nullnoHuman-readable purpose / legal context of the requested transfer.
recipientstring | nullnoRecipient (receiving instance / organisation) of the requested transfer.
sourceJurisdictionstring | nullnoSource jurisdiction the data originates from.
targetJurisdictionstring | nullnoTarget jurisdiction the transfer would target.
territoriesstring[] | nullnoTerritories covered; empty = whole target jurisdiction.

RetryFailedMessagesResponse

Response model for retry failed messages operation.

PropertyTypeRequiredDescription
processedAtstring (date-time)noGets or sets the timestamp when the retry operation was processed.
successCountinteger (int32)noGets or sets the number of messages successfully retried and delivered.

RetryProvisioningRequest

Optional body of `POST /api/v1/instances/organization/{id}/retry-provisioning`. An empty body is the original call and behaves exactly as before.

PropertyTypeRequiredDescription
adminDisplayNamestring | nullnoThe founding administrator's display name, with Essence.Core.Instance.Api.Controllers.RetryProvisioningRequest.AdminEmail.
adminEmailstring | nullnoThe founding administrator's email (#22453). Read from the onboarding provisioner only (Essence.Core.Instance.Api.Authorization.OrgProvisionerRetryableAttribute.Scope); ignored from anyone else.
forcebooleannoPlatform-operator override (#22452): retry a cleanly rolled-back workflow whatever its failure category. Honoured for a cross-instance platform operator only (403 otherwise) and only with a Essence.Core.Instance.Api.Controllers.RetryProvisioningRequest.Reason; recorded on the workflow.
reasonstring | nullnoWhy the override is safe now — e.g. the deploy that fixed the cause. Required with Essence.Core.Instance.Api.Controllers.RetryProvisioningRequest.Force.

ReturningNationalIntakeDto

PropertyTypeRequiredDescription
credentialsForeignCredentialRefDto[] | nullno—
creditPreviewAssuranceCreditPreviewDtono—
destinationJurisdictionstring | nullno—
intakeIdstring (uuid)no—
originJurisdictionstring | nullno—
residencyInboundResidencyDecisionDtono—

ReturningNationalIntakeFacts

PropertyTypeRequiredDescription
basisIssuerJurisdictionstring | nullno—
basisOriginLoAstring | nullno—
basisOriginSchemestring | nullno—
corridorOriginJurisdictionstring | nullno—
intakeIdstring (uuid)no—

RevokeCertificateRequest

Request model for revoking a certificate.

PropertyTypeRequiredDescription
reasonCertificateRevocationReasonyes—

RevokeCorridorAdequacyBody

Request body for a matrix-maintenance corridor flip-to-inadequate (FR-03.029a).

PropertyTypeRequiredDescription
reasonstring | nullnoOperator-supplied reason for the matrix change (required).
sourceJurisdictionstring | nullnoSource jurisdiction of the corridor losing adequacy.
targetJurisdictionstring | nullnoTarget jurisdiction of the corridor losing adequacy.

RevokeRegistrationRequestBody

Request body for revoking a registration.

PropertyTypeRequiredDescription
reasonstring | nullnoGets or sets the reason for revocation.

RolloutReasonRequest

Body of the halt / abandon actions.

PropertyTypeRequiredDescription
reasonstring | nullnoWhy the operator is acting.

RolloutRegionOutcomeRequest

Body of `POST …/rollouts/{id}/regions/{region}/outcome`.

PropertyTypeRequiredDescription
detailstring | nullnoWhat the gate observed; required when unhealthy.
healthybooleannoWhether the region passed its post-roll health gate.

RoutingDecision

PropertyTypeRequiredDescription
confidenceScorenumber (double)no—
decidedAtstring (date-time)no—
estimatedLatencystring (date-span)no—
intermediateHopsstring[] | nullno—
isDirectbooleanno—
isHighConfidencebooleanno—
isMultiHopbooleanno—
metadatamap<string, string> | nullno—
strategyRoutingStrategyno—
targetEndpointstring | nullno—
targetInstanceIdstring | nullno—
totalHopsinteger (int32)no—

RoutingHealthDto

PropertyTypeRequiredDescription
checkedAtstring (date-time)no—
routableInstanceCountinteger (int32)no—
routableRegionCountinteger (int32)no—
statusstring | nullno—

RoutingStrategy

"LowestLatency" | "GeographicProximity" | "LoadBalanced" | "RegionAffinity" | "RoundRobin" | "Weighted" | "HomeInstance" | "MultiHop" | "Custom" with no declared properties.

SecuritySettings

Represents security configuration settings.

PropertyTypeRequiredDescription
auditLogRetentionDaysinteger (int32)no—
dataResidencyRegionstring | nullno—
ipAllowListstring[] | nullno—
ipAllowListEnabledbooleanno—
maxSessionsPerUserinteger (int32)no—
mfaMethodsstring[] | nullno—
mfaRequiredbooleanno—
passwordPolicyPasswordPolicySettingsno—
sessionTimeoutMinutesinteger (int32)no—
ssoEnabledbooleanno—
ssoEntityIdstring | nullno—
ssoProviderstring | nullno—
updatedAtstring (date-time)no—

SelfHostedBootstrapPackage

PropertyTypeRequiredDescription
blockersstring[] | nullno—
composeEnvironmentmap<string, string> | nullno—
deploymentModelInstanceDeploymentModelno—
prerequisitesstring[] | nullno—
runbookstring[] | nullno—

SendMessageCommand

PropertyTypeRequiredDescription
encryptedBodystring | nullno—
encryptedMetadatastring | nullno—
encryptedSubjectstring | nullno—
encryptionKeyIdstring | nullno—
expirationDaysinteger (int32)no—
recipientIdstring (uuid)no—
recipientInstanceIdstring (uuid)no—
senderIdstring (uuid)no—
senderInstanceIdstring (uuid)no—

SendMessageRequest

Request model for sending a cross-instance message. Implements Essence.Core.Instance.Api.Filters.ICrossInstanceResidencyAddressed so the server-declared `[EnforceDataResidency]` filter can resolve the send's target jurisdiction.

PropertyTypeRequiredDescription
maxRetriesinteger (int32) | nullnoGets or sets the maximum number of retry attempts (default: 3).
payloadstring | nullnoGets or sets the encrypted message payload (up to 1 MB per NFR-03.022).
sourceInstanceIdstring | nullnoGets or sets the source instance ID sending the message.
targetInstanceIdstring | nullnoGets or sets the target instance ID receiving the message.

SendMessageResponse

Response model for send message operation.

PropertyTypeRequiredDescription
errorMessagestring | nullnoGets or sets the error message if delivery failed.
isFailedbooleannoGets or sets a value indicating whether the message delivery failed permanently.
isQueuedbooleannoGets or sets a value indicating whether the message was queued for later delivery.
isSuccessbooleannoGets or sets a value indicating whether the message was delivered successfully.
messageIdstring | nullnoGets or sets the unique identifier of the sent message.
statusstring | nullnoGets or sets the current delivery status.

SovereignInstanceDto

PropertyTypeRequiredDescription
allowedTransferJurisdictionsstring[] | nullno—
complianceStatusComplianceStatusno—
configurationInstanceConfigurationDtono—
countryCodestring | nullno—
createdAtstring (date-time)no—
dataResidencyEnforcedbooleanno—
edgeCachingEnabledbooleanno—
endpointUrlstring | nullno—
globalInstanceIdstring (uuid)no—
idstring (uuid)no—
isHealthybooleanno—
jurisdictionCodestring | nullno—
jurisdictionNamestring | nullno—
lastHealthCheckstring (date-time) | nullno—
metadataInstanceMetadataDtono—
namestring | nullno—
regulatoryFrameworkstring | nullno—
requireStandardContractualClausesbooleanno—
statusInstanceStatusno—
typeInstanceTypeno—
updatedAtstring (date-time)no—

SovereignInstanceOperatingTermsDto

PropertyTypeRequiredDescription
operatorSovereignInstanceOperatorDtono—
recordedbooleanno—
serviceLevelInstanceServiceLevelDtono—
sovereignInstanceIdstring (uuid)no—

SovereignInstanceOperatorDto

PropertyTypeRequiredDescription
changeReasonstring | nullno—
jurisdictionBasisstring | nullno—
legalJurisdictionstring | nullno—
organizationIdstring (uuid)no—
recordedAtstring (date-time)no—

SovereignRouteResult

Result model for an FR-03.024b sovereign route resolution (the success/route case; a rejection is surfaced as `HTTP 422` ProblemDetails instead).

PropertyTypeRequiredDescription
outcomestring | nullnoThe fallback outcome (`RouteToResolved` or `RouteToDefault`).
reasonstring | nullnoHuman-readable explanation of the resolution.
reasonCodestring | nullnoMachine-readable reason code for the resolution.
sovereignIdstring | nullnoThe resolved sovereign instance id to route to.

SponsoredResolutionRequest

PropertyTypeRequiredDescription
fundingBankOrganizationIdstring (uuid)no—
modestring | nullno—
supplierIdentityKeystring | nullno—

SponsoredResolutionResponse

AC-19-neutral. No organisation id, no provisioned/linked flag — see the controller remarks. If either is ever added here, the sponsored path leaks by default.

PropertyTypeRequiredDescription
displayStatestring | nullno—
resolutionRefstring | nullno—

StartCrossRegionRolloutRequest

Body of `POST …/rollouts`.

PropertyTypeRequiredDescription
fromVersionstring | nullnoEnvelope version deployed now, `major.minor`.
regionsstring[] | nullnoRegions to roll, in order.
toVersionstring | nullnoTarget envelope version, `major.minor`.

StartVaultRehomeDocument

One document in a Essence.Core.Instance.Api.Controllers.StartVaultRehomeRequest.

PropertyTypeRequiredDescription
documentIdstring | nullyesOpaque document identifier.
labelstring | nullyesUser-facing label shown in the per-document progress breakdown.

StartVaultRehomeRequest

Request body for `POST /api/v1/instances/vault-rehome`. Deliberately has <b>no</b> user id: the job's owner is taken from the caller's subject claim, so the body cannot be used to open a re-home against someone else's documents.

PropertyTypeRequiredDescription
clientCorrelationIdstring | nullnoThe initiator's opaque correlation handle, echoed on the relay completion event so the initiator can advance its own record off the real completion. Must not carry PII.
crossesSovereignInstancebooleannoWhether the destination vault lives on a different sovereign instance.
destinationInstanceIdstring | nullnoThe destination sovereign instance's <b>registered identifier</b> (not its display name) — the key the cross-sovereign relay resolves its trusted sync endpoint from. Required when Essence.Core.Instance.Api.Controllers.StartVaultRehomeRequest.CrossesSovereignInstance is true: without it the job could be started but never executed (debt-2026-08-13-049).
destinationInstanceNamestring | nullnoDestination instance display name; required when Essence.Core.Instance.Api.Controllers.StartVaultRehomeRequest.CrossesSovereignInstance is true.
destinationVaultNamestring | nullyesDisplay name of the caller's own destination vault.
documentsStartVaultRehomeDocument[] | nullnoThe documents to move. Must be non-empty with unique ids.
sourceVaultNamestring | nullyesDisplay name of the shared vault the documents are leaving.

SubjectApprovalRequestBody

Request body for a subject-originated cross-border approval request.

PropertyTypeRequiredDescription
dataClassificationstring | nullnoHighest data classification involved.
purposestring | nullnoThe subject's stated reason for the transfer.
recipientstring | nullnoRecipient (receiving instance / organisation) of the requested transfer.
sourceJurisdictionstring | nullnoJurisdiction the subject's data resides in today.
targetJurisdictionstring | nullnoJurisdiction the subject is asking to transfer to.
territoriesstring[] | nullnoTerritories covered; empty = whole target jurisdiction.

SupervisedInstanceDto

PropertyTypeRequiredDescription
ageAssuranceAttributeIdstring (uuid)no—
ageAssuranceLevelAgeAssuranceLevelno—
ageAssuranceMethodstring | nullno—
batchIdstring (uuid)no—
controlTemplateRefstring | nullno—
graduationScheduleRefstring | nullno—
guardianIdstring (uuid)no—
majorityApproachingbooleanno—
provisionedAtstring (date-time)no—
recordIdstring (uuid)no—
statusSupervisionStatusno—
supervisedInstanceIdstring (uuid)no—
supervisionEndsOnstring (date-time) | nullno—

SupervisedInstanceRosterEntry

PropertyTypeRequiredDescription
ageAssuranceLevelAgeAssuranceLevelno—
ageAssuranceMethodstring | nullno—
supervisedInstanceIdstring (uuid)no—
supervisionEndsOnstring (date-time) | nullno—

SupervisionStatus

"Supervised" | "MajorityApproaching" | "Transitioning" | "Graduated" with no declared properties.

SupplierIdentityKeyResponse

The organisation's supplier identity, or absence. Carries the identity and nothing else: adding lifecycle state or a sponsor here would turn a token-mint lookup into the sponsorship-probing surface M:Essence.Core.Instance.Api.Controllers.SponsoredResolutionsController.Resolve(Essence.Core.Instance.Api.Controllers.SponsoredResolutionRequest,System.Threading.CancellationToken) is careful not to be.

PropertyTypeRequiredDescription
supplierIdentityKeystring | nullno—

SuspendDeveloperIdRequest

Request payload for suspending a developer ID.

PropertyTypeRequiredDescription
reasonstring | nullno—

SuspendInstanceRequest

Request model for suspending an instance.

PropertyTypeRequiredDescription
reasonstring | nullnoGets or sets the reason for suspension.

TerminateInstanceRequest

Request model for terminating an instance.

PropertyTypeRequiredDescription
drainboolean | nullnoGets or sets whether live organisation instances beneath this one are decommissioned with it. Omitted or `false`: a parent with live children is refused with 409 (FR-03.007a).
reasonstring | nullnoGets or sets why this instance is being decommissioned.

TraefikDynamicConfiguration

PropertyTypeRequiredDescription
httpTraefikHttpConfigurationno—

TraefikHttpConfiguration

PropertyTypeRequiredDescription
routersmap<string, TraefikRouter> | nullno—

TraefikRouter

PropertyTypeRequiredDescription
entryPointsstring[] | nullno—
middlewaresstring[] | nullno—
rulestring | nullno—
servicestring | nullno—
tlsTraefikRouterTlsno—

TraefikRouterTls

PropertyTypeRequiredDescription
certResolverstring | nullno—

UpdateConfigurationCommand

PropertyTypeRequiredDescription
autoScalingEnabledbooleanno—
backupEnabledbooleanno—
backupRetentionDaysinteger (int32)no—
highAvailabilityEnabledbooleanno—
instanceIdstring (uuid)no—
maxApiRequestsPerHourinteger (int32)no—
maxConnectionsinteger (int32)no—
maxStorageGbinteger (int64)no—
monitoringEnabledbooleanno—

UpdateDnsRecordCommand

PropertyTypeRequiredDescription
newValuestring | nullno—
recordIdstring (uuid)no—
zoneIdstring (uuid)no—

UpdateDocumentCommand

PropertyTypeRequiredDescription
documentIdstring (uuid)no—
encryptedMetadatastring | nullno—
namestring | nullno—
ownerIdstring (uuid)no—

UpdateHealthCheckCommand

PropertyTypeRequiredDescription
instanceIdstring (uuid)no—
isHealthybooleanno—
statusMessagestring | nullno—

UpdateInstanceEndpointCommand

PropertyTypeRequiredDescription
instanceIdstring (uuid)no—
newEndpointUrlstring | nullno—

UpdateInstanceHealthCommand

PropertyTypeRequiredDescription
healthCheckStatusstring | nullno—
instanceIdstring (uuid)no—
isHealthybooleanno—
timestampstring (date-time)no—

UpdateMetadataCommand

PropertyTypeRequiredDescription
availabilityZonestring | nullno—
complianceCertificationsstring | nullno—
dataCenterstring | nullno—
instanceIdstring (uuid)no—
jurisdictionstring | nullno—
regionstring | nullno—
tagsstring | nullno—
versionstring | nullno—

UpdateModuleRequest

Request model for updating a module's enabled state.

PropertyTypeRequiredDescription
enabledbooleanno—

UpdatePricingPlanRequest

PropertyTypeRequiredDescription
basePricenumber (double) | nullno—
currencystring | nullno—
descriptionstring | nullno—
featuresmap<string, unspecified> | nullno—
metadatamap<string, string> | nullno—
namestring | nullno—
trialDaysinteger (int32) | nullno—

UpdateSovereignInstanceRegionCommand

PropertyTypeRequiredDescription
allowedStorageRegionsstring | nullno—
allowedTransferJurisdictionsstring | nullno—
edgeCachingEnabledbooleanno—
instanceIdstring (uuid)no—
primaryRegionstring | nullno—
requireStandardContractualClausesbooleanno—

UpdateVaultCommand

PropertyTypeRequiredDescription
descriptionstring | nullno—
namestring | nullno—
ownerIdstring (uuid)no—
vaultIdstring (uuid)no—

UpdateVaultLimitsCommand

PropertyTypeRequiredDescription
maxDocumentsinteger (int32) | nullno—
maxSizeBytesinteger (int64) | nullno—
ownerIdstring (uuid)no—
vaultIdstring (uuid)no—

UpdateVerificationPolicyRequest

Request body for `PUT /api/v1/cross-border/immigration-status/org-policy`.

PropertyTypeRequiredDescription
acceptedClaimTypesstring[] | nullnoAccepted entitlement claims; empty or absent for all.
acceptedJurisdictionsstring[] | nullnoAccepted issuing jurisdictions; empty or absent for all.
maxStalenessDaysinteger (int32)noHow long a recorded result may be relied on, in days (1–365).
requireCanonicalEVisabooleannoWhen true, a result resolved against a physical BRP is refused.

UploadDocumentCommand

PropertyTypeRequiredDescription
checksumstring | nullno—
contentTypestring | nullno—
encryptedMetadatastring | nullno—
encryptionKeyIdstring | nullno—
namestring | nullno—
ownerIdstring (uuid)no—
sizeBytesinteger (int64)no—
storageReferencestring | nullno—
vaultIdstring (uuid)no—

UserMessage

PropertyTypeRequiredDescription
createdAtstring (date-time)no—
createdBystring | nullno—
deletedAtstring (date-time) | nullno—
deletedBystring | nullno—
deliveryConfirmedbooleanno—
deliveryConfirmedAtstring (date-time) | nullno—
domainEventsDomainEvent[] | nullno—
encryptedBodystring | nullno—
encryptedMetadatastring | nullno—
encryptedSubjectstring | nullno—
encryptionKeyIdstring | nullno—
expiresAtstring (date-time) | nullno—
hasDomainEventsbooleanno—
idstring (uuid)no—
isDeletedbooleanno—
isReadbooleanno—
readAtstring (date-time) | nullno—
recipientInstanceMemberno—
recipientIdstring (uuid)no—
recipientInstanceIdstring (uuid)no—
rowVersionstring (byte) | nullno—
senderInstanceMemberno—
senderIdstring (uuid)no—
senderInstanceIdstring (uuid)no—
sentAtstring (date-time)no—
updatedAtstring (date-time) | nullno—
updatedBystring | nullno—

UserSummaryResponse

Safe, outward-facing projection of an Essence.Core.Instance.Domain.Entities.InstanceMember for user discovery (profile lookup and search). Deliberately excludes the credential secret (`PasswordHash`) and login-tracking fields (`LastLoginAt`, `PasswordChangedAt`, `FailedLoginAttempts`, `LockoutEndAt`) so those can never cross an API boundary (debt-2026-06-28-527). Mirrors the safe shape already used by the `ListUsers` endpoint.

PropertyTypeRequiredDescription
createdAtstring (date-time)noWhen the account was created.
emailstring | nullnoThe member's email address.
emailVerifiedbooleannoWhether the member's email is verified.
firstNamestring | nullnoThe member's first name, if set.
fullNamestring | nullnoThe member's display name (first + last, trimmed).
idstring (uuid)noThe member's unique identifier.
isActivebooleannoWhether the account is active.
lastNamestring | nullnoThe member's last name, if set.
rolesstring[] | nullnoThe roles assigned to the member.

ValidationProblemDetails

PropertyTypeRequiredDescription
detailstring | nullno—
errorsmap<string, string[]> | nullno—
instancestring | nullno—
statusinteger (int32) | nullno—
titlestring | nullno—
typestring | nullno—

ValidatorRegistrationRetryResult

PropertyTypeRequiredDescription
alreadyRegisteredbooleanno—
centralValidatorIdstring (uuid) | nullno—
errorCodestring | nullno—
errorMessagestring | nullno—
registrationTxHashstring | nullno—
skippedbooleanno—
successbooleanno—

VaultDocumentRef

PropertyTypeRequiredDescription
checksumstring | nullno—
contentTypestring | nullno—
createdAtstring (date-time)no—
createdBystring | nullno—
deletedAtstring (date-time) | nullno—
deletedBystring | nullno—
encryptedMetadatastring | nullno—
encryptionKeyIdstring | nullno—
idstring (uuid)no—
isDeletedbooleanno—
lastAccessedAtstring (date-time) | nullno—
namestring | nullno—
rowVersionstring (byte) | nullno—
sizeBytesinteger (int64)no—
storageReferencestring | nullno—
updatedAtstring (date-time) | nullno—
updatedBystring | nullno—
vaultIdstring (uuid)no—

VaultDocumentRefCursorResult

PropertyTypeRequiredDescription
hasMorebooleanno—
itemsVaultDocumentRef[] | nullno—
nextCursorstring | nullno—
pageSizeinteger (int32)no—
previousCursorstring | nullno—

VaultProvisioningRecord

PropertyTypeRequiredDescription
archivedAtstring (date-time) | nullno—
createdAtstring (date-time)no—
createdBystring | nullno—
deletedAtstring (date-time) | nullno—
deletedBystring | nullno—
descriptionstring | nullno—
documentCountinteger (int32)no—
domainEventsDomainEvent[] | nullno—
hasDomainEventsbooleanno—
idstring (uuid)no—
instanceIdstring (uuid)no—
isActivebooleanno—
isDeletedbooleanno—
lastAccessedAtstring (date-time) | nullno—
maxDocumentsinteger (int32)no—
maxSizeBytesinteger (int64)no—
metadatastring | nullno—
namestring | nullno—
ownerIdstring (uuid)no—
rowVersionstring (byte) | nullno—
totalSizeBytesinteger (int64)no—
updatedAtstring (date-time) | nullno—
updatedBystring | nullno—

VaultProvisioningRecordCursorResult

PropertyTypeRequiredDescription
hasMorebooleanno—
itemsVaultProvisioningRecord[] | nullno—
nextCursorstring | nullno—
pageSizeinteger (int32)no—
previousCursorstring | nullno—

VaultRehomeDocumentDto

PropertyTypeRequiredDescription
documentIdstring | nullno—
errorCategorystring | nullno—
labelstring | nullno—
statestring | nullno—

VaultRehomeStatusDto

PropertyTypeRequiredDescription
clientCorrelationIdstring | nullno—
completedAtstring (date-time) | nullno—
completionEmailstring | nullno—
completionResultHashstring | nullno—
createdAtstring (date-time)no—
crossesSovereignInstancebooleanno—
destinationInstanceNamestring | nullno—
destinationVaultNamestring | nullno—
documentsVaultRehomeDocumentDto[] | nullno—
documentsMovedinteger (int32)no—
documentsTotalinteger (int32)no—
errorCategorystring | nullno—
percentCompleteinteger (int32)no—
rehomeIdstring (uuid)no—
sourceVaultNamestring | nullno—
startedAtstring (date-time) | nullno—
statestring | nullno—

VerifyShareCodeRequest

Request body for `POST /api/v1/cross-border/immigration-status/verify`.

PropertyTypeRequiredDescription
codestring | nullnoThe share code as the verifier typed it.

Built with ❤️ for developers · Service status