curl --request GET \
--url https://api.usenexio.com/api/v1/records/status \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenexio.com/api/v1/records/status"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usenexio.com/api/v1/records/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"has_published": true,
"status": null,
"serving": {
"binding_id": "<string>",
"overlay_rev": 123,
"as_of": "2023-11-07T05:31:56Z",
"read_pin": "2023-11-07T05:31:56Z",
"source": {
"mode": "<string>",
"fetched_at": "2023-11-07T05:31:56Z",
"current": true,
"freshness": "<string>",
"stale_since": "2023-11-07T05:31:56Z"
},
"lens": {
"target": "<string>",
"display_name": "<string>",
"scope_kind": "<string>"
}
},
"duration_ms": 123,
"read_modes": {},
"scope": {
"kind": "<string>",
"home_market": "<string>",
"home_office": "<string>",
"home_office_label": "<string>",
"home_status": "ok",
"principal": "<string>",
"refused": "identity_unmapped",
"producer_code_count": 123,
"selection": "<string>",
"selection_source": "<string>"
},
"reads": {
"account_register": {
"state": "<string>",
"code": "<string>"
},
"producer_licensure": {
"state": "<string>",
"code": "<string>"
}
},
"ams360_base_url": "<string>",
"entitlement": {},
"derived": {
"risk_profile": {
"found": true,
"behind_head": true,
"batch_set_id": "<string>",
"pin_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"note": "<string>"
},
"org_evidence": {
"found": true,
"behind_head": true,
"batch_set_id": "<string>",
"pin_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"note": "<string>"
},
"org_retention": {
"found": true,
"behind_head": true,
"batch_set_id": "<string>",
"pin_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"note": "<string>"
}
}
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "unauthorized",
"message": "Missing or invalid API key"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "rate_limited",
"message": "Rate limit exceeded"
}{
"code": "client_closed_request",
"message": "The client closed the request before the book read finished"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}Get status
Check whether a connection is available and how a person resolves, before the first read.
curl --request GET \
--url https://api.usenexio.com/api/v1/records/status \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenexio.com/api/v1/records/status"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usenexio.com/api/v1/records/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"has_published": true,
"status": null,
"serving": {
"binding_id": "<string>",
"overlay_rev": 123,
"as_of": "2023-11-07T05:31:56Z",
"read_pin": "2023-11-07T05:31:56Z",
"source": {
"mode": "<string>",
"fetched_at": "2023-11-07T05:31:56Z",
"current": true,
"freshness": "<string>",
"stale_since": "2023-11-07T05:31:56Z"
},
"lens": {
"target": "<string>",
"display_name": "<string>",
"scope_kind": "<string>"
}
},
"duration_ms": 123,
"read_modes": {},
"scope": {
"kind": "<string>",
"home_market": "<string>",
"home_office": "<string>",
"home_office_label": "<string>",
"home_status": "ok",
"principal": "<string>",
"refused": "identity_unmapped",
"producer_code_count": 123,
"selection": "<string>",
"selection_source": "<string>"
},
"reads": {
"account_register": {
"state": "<string>",
"code": "<string>"
},
"producer_licensure": {
"state": "<string>",
"code": "<string>"
}
},
"ams360_base_url": "<string>",
"entitlement": {},
"derived": {
"risk_profile": {
"found": true,
"behind_head": true,
"batch_set_id": "<string>",
"pin_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"note": "<string>"
},
"org_evidence": {
"found": true,
"behind_head": true,
"batch_set_id": "<string>",
"pin_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"note": "<string>"
},
"org_retention": {
"found": true,
"behind_head": true,
"batch_set_id": "<string>",
"pin_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"note": "<string>"
}
}
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "unauthorized",
"message": "Missing or invalid API key"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "rate_limited",
"message": "Rate limit exceeded"
}{
"code": "client_closed_request",
"message": "The client closed the request before the book read finished"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}Behavior
When a qualifying connection exists, this read answers an identity or scope refusal as data: a person who cannot be served gets 200 withscope.refused set to identity_unmapped, identity_needs_review, identity_suspended, identity_stale or scope_unavailable instead of a 403. Assertion, service identity and lens refusals still answer with their HTTP status. has_published: false means no qualifying connection exists. Send the person the request is for in X-Nexio-Acting-Principal and X-Nexio-Acting-Email, and the signed X-Nexio-Records-Assertion when your organization enforces it. See Authority and scope. See Preflight with the status read.Authorizations
Send the key as Authorization: Bearer <key>. Two kinds of key exist.
Organization keys are issued in the portal (Settings, then API keys),
each bound to one environment, shaped nx_<environment slug>_<64 hex>. They carry
no capabilities and pass every capability check, with one exception:
routes under /api/v1/records, /api/v1/engines/{id}/opportunities,
/api/v1/graph and /api/v1/catalog/documents accept an
organization key only when its environment is live, and refuse any
other with 403 scoped_key_required. Revocation takes effect within 60
seconds.
Scoped keys are issued by Nexio on request, shaped
nxsk_v1_<24 hex key id>_<43 character secret>. Each is bound to one
org, one environment, a set of engines and a set of capabilities. A
malformed, unknown or revoked nxsk_ key fails with 401 and is never
retried as an organization key. Revocation takes effect on the next
request. A scoped key without a route's capability gets 403
insufficient_capability; a scoped key not bound to the engine gets 403
engine_binding_forbidden.
Key-grantable capabilities: engines:read, runs:write, runs:read,
runs:defensibility:read, runs:test, catalog:read,
catalog:documents:read, webhooks:manage, conversations:use,
conversations:export, records:read, records:opportunities:run,
actions:write, actions:read, graph:read, records:analyze.
Routes that accept organization keys only (every scoped key gets 403
insufficient_capability): environment management, engine create,
update, configuration and publish, and conversation instance
authoring. Each operation description names the capability a scoped
key needs.
Headers
The person the request is for, as your identity provider's stable user id. Narrows what the key reaches; never widens it. Send it on every request; under the shadow and lit postures a read without it answers 403 identity_unmapped, or 200 with scope.refused when a qualifying connection exists.
The acting person's verified sign-in email. The seat is derived from it.
Signed assertion v1.<unix seconds>.<hex HMAC-SHA256> over acting_principal|acting_email|reserved|timestamp (each part trimmed, the email lowercased). The third field is reserved: send an empty string. The timestamp must be within 5 minutes of the server clock, either way. Checked once Nexio enables assertion verification for your organization, when it provisions the signing secret; a missing or wrong assertion then answers 403 assertion_invalid and one outside the window 403 assertion_stale.
principal:<id>: a read-only view of another person's data, honored only for a caller whose own scope is All or Platform and ignored for anyone else. For such a caller, a value that is not principal:<id>, or names nobody, answers 400 lens_target_unknown.
Optional client application name, for diagnostics.
Optional client build, for diagnostics.
Optional access vocabulary hash the client was built against, for diagnostics.
A registered service identity, for a machine caller. When sent, it is used instead of X-Nexio-Acting-Principal. A value that names no active service identity answers 403 service_identity_unknown.
Query Parameters
The system-of-record connection to read. Optional when the organization has exactly one qualifying connection; required when it has several (otherwise 400 book_connection_ambiguous).
Add the person's team to entitlement. May cost one extra warehouse read. Accepts true, false, 1 or 0; any other value is 400 invalid_request. Defaults to false.
Include entitlement.related_books: counts of the person's own records and of each other owner's records the person services or shares. Accepts true, false, 1 or 0; any other value, including an empty one, is 400 invalid_request. Defaults to true.
Response
Connection and authority status.
False when no qualifying connection exists; every other read would answer 409 book_unavailable.
Always null today.
The serving block. Null when no qualifying connection exists (has_published is false).
Hide child attributes
Hide child attributes
Always null on this route.
Hide child attributes
Hide child attributes
How the connection is served: query_first, which means data reads go live to the warehouse at request time. On GET /api/v1/records/status this is a receipt made at request time: current is true, fetched_at is the request time, and freshness is absent.
Not sent on this route.
Hide child attributes
Hide child attributes
Self, Office, All or Platform; empty when refused.
ok, none, unavailable Set when the person cannot be served. The status read still answers 200.
identity_unmapped, identity_needs_review, identity_suspended, identity_stale, scope_unavailable The selection the request's own mine, book, producer, client_manager or account parameters would serve on a read across the whole scope (a label preview; no rows are narrowed). Omitted when the scope is refused or those parameters are malformed.
Who chose selection (request, rls or none). Omitted with selection.
Hide child attributes
Hide child attributes
State available, scope_unsupported or scope_unavailable. Advisory. The account register route does not check it and serves every resolved scope, so its code is not a refusal the register returns today.
Base URL for links into the source system, when configured. Omitted when not set.
The caller's access-plane entitlement. Present when the organization's posture is shadow or lit for this person; with no qualifying connection, also for a registered service identity. It carries posture, roles, surfaces, datasets, workflows, denied fields, documents, grants and record scope, plus related_books, team, policy_source and vocabulary_hash. Lists and maps are always sent, as empty values when there is nothing in them.
Hide child attributes
Hide child attributes