curl --request GET \
--url https://api.usenexio.com/api/v1/records/families/{plane}/{family} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenexio.com/api/v1/records/families/{plane}/{family}"
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/families/{plane}/{family}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"plane": "<string>",
"family": "<string>",
"grain": "policy",
"columns": [
"<string>"
],
"data": [
[
"<unknown>"
]
],
"page": {
"limit": 123,
"next_cursor": "<string>",
"offset": 123,
"page_size": 123
},
"serving": {
"overlay_rev": 1,
"as_of": "2023-11-07T05:31:56Z",
"batch_set_id": "<string>",
"binding_id": "<string>",
"read_pin": "2023-11-07T05:31:56Z",
"source": {
"mode": "<string>",
"fetched_at": "2023-11-07T05:31:56Z",
"current": true,
"freshness": "current",
"stale_since": "2023-11-07T05:31:56Z"
},
"lens": {
"target": "<string>",
"display_name": "<string>",
"scope_kind": "<string>"
}
},
"family_serving": {
"family": "<string>",
"plane": "<string>",
"presence": "present",
"batch_set_id": "<string>",
"published_at": "2023-11-07T05:31:56Z",
"gap": "<string>",
"notice": {
"code": "<string>",
"message": "<string>"
}
},
"scope": {
"kind": "Self",
"selection": "own",
"selection_source": "request"
}
}{
"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": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}Read a family
Read any source dataset on the connection by plane and family name, as columns and rows.
curl --request GET \
--url https://api.usenexio.com/api/v1/records/families/{plane}/{family} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenexio.com/api/v1/records/families/{plane}/{family}"
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/families/{plane}/{family}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"plane": "<string>",
"family": "<string>",
"grain": "policy",
"columns": [
"<string>"
],
"data": [
[
"<unknown>"
]
],
"page": {
"limit": 123,
"next_cursor": "<string>",
"offset": 123,
"page_size": 123
},
"serving": {
"overlay_rev": 1,
"as_of": "2023-11-07T05:31:56Z",
"batch_set_id": "<string>",
"binding_id": "<string>",
"read_pin": "2023-11-07T05:31:56Z",
"source": {
"mode": "<string>",
"fetched_at": "2023-11-07T05:31:56Z",
"current": true,
"freshness": "current",
"stale_since": "2023-11-07T05:31:56Z"
},
"lens": {
"target": "<string>",
"display_name": "<string>",
"scope_kind": "<string>"
}
},
"family_serving": {
"family": "<string>",
"plane": "<string>",
"presence": "present",
"batch_set_id": "<string>",
"published_at": "2023-11-07T05:31:56Z",
"gap": "<string>",
"notice": {
"code": "<string>",
"message": "<string>"
}
},
"scope": {
"kind": "Self",
"selection": "own",
"selection_source": "request"
}
}{
"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": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}{
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}Behavior
policy_key applies only to policy-grain families and client_key only to client-grain families. An org-grain family read by a person-scoped caller answers 200 with no rows and the notice org_scoped_only. 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 Families and the generic 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.
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.
Path Parameters
Plane name, for example book or rawams_claims.
Family name, for example policies or claim.
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).
One policy key. Policy-grain families only; on any other family, or when the key does not decode, the answer is 400 invalid_request.
One client key (the system of record's top-level record key; starts with bk1_). Client-grain families only; on any other family, or when the key does not decode, the answer is 400 invalid_request.
Rows per page, a positive integer. Defaults to 50; values above 10,000 are clamped to 10,000.
x >= 1The page.next_cursor from the previous page. It carries the filters: a cursor sent with policy_key or client_key answers 400 cursor_filter_mismatch, and a cursor that does not decode answers 400 invalid_cursor.
Response
One page of rows.
policy, client, table, org Column names, sorted.
One array per row, aligned with columns. Numbers are exact decimal text.
Hide child attributes
Hide child attributes
The number of rows on this page (not the requested limit).
Continuation cursor; null on the last page.
The applied offset. Present only when the request sent offset.
The applied page size. Present only when the request sent offset.
Hide child attributes
Hide child attributes
Always 0 today.
x >= 0The request's read time. Every Records read is a current read, queried live at request time and not held to a fixed warehouse instant. An empty page may carry either the request time or the zero time 0001-01-01T00:00:00Z. The action, note, task, workflow-state and edit-intent routes carry the zero time, even when their account or policy scope check queries the warehouse.
Not sent on current reads; present only on reads served from a stored copy.
The connection the read was served from.
Not sent on Records reads, because no read is held to a fixed warehouse instant.
Hide child attributes
Hide child attributes
query_first: read live from the warehouse at request time.
The request's read time, the same instant as as_of.
true: the read queried the current data at request time. Source changes can show between separate statements in one response and between pages.
Not sent on Records reads.
current, pinned Not sent on Records reads.
Hide child attributes
Hide child attributes
present: the family exists on the connection. absent: it was never supplied (render absence, not "no records"). unknown: it could not be determined on this read.
present, absent, unknown A named reason the family is incomplete, when one applies.
Appended to Records read envelopes, except GET /records/actions, the /records/analyses routes and GET /records/status, which carries its own scope block. States the scope the rows were served at.
Hide child attributes
Hide child attributes
The resolved row scope.
Self, Office, All, Platform The selection the rows were served under.
own, client_manager, code, boundary, whole, account, office Who chose the selection.
request, rls, none