How querying works
Each piece plays a distinct role:| Concept | Role in the query |
|---|---|
| Product | What you’re reading (e.g. a KYC certificate). Determines the endpoint and schema. See the product catalog. |
| Network | Where you’re reading from. You must be a querier of every network you include. |
| Policy | Which rules apply — the field-level querying policy governing what the query may read and how fresh it must be. |
| Consumer / Business | Who the query is about — resolved from your consent record. |
Anatomy of a query
Every product query is aPOST to the product’s /query endpoint. The request
body has two halves: who the query is about, and where + under which rules
to read.
| Field | Type | Required | Purpose |
|---|---|---|---|
consent_id | string | one of¹ | Consent token identifying the subject and your permission to query them. See Consent. |
consumer_id / business_id | UUID | one of¹ | Direct profile reference for permissible-purpose queries, as an alternative to consent_id. |
network_ids | UUID[] | yes | One or more networks to read across. You must hold the querier role in each. |
policy_id | UUID | no | The querying policy applied across every network in network_ids. If omitted, each network’s default policy is used. |
furnishing_entity_ids | UUID[] | no | Optional furnisher scope. When omitted, data from all furnishers is considered. |
consent_id or a direct profile id — not both.
Why both halves matter:
- The subject half (
consent_id) carries the legal basis. Querying personal or business data requires a permissible purpose and the subject’s permission, and the consent record is the proof. It also resolves the subject’s identity so you never repeat their personal details on each call. - The scope half (
network_ids+policy_id) tells the network where to read and which field-level rules to apply. The same product behaves differently under different policies, so the pair determines both what data is considered and how fresh and complete it must be.
Each issued certificate records the exact network + policy pairs it was
resolved under, so the scope you pass is permanently part of the audit trail.
Full example
200 OK with the consolidated result and an
X-Ref-Id response header:
result is product-specific — see the per-product pages for the
KYC certificate,
KYB certificate, and
screening lists.
200 vs 204 — “here is data” vs “nothing usable”
Product query endpoints distinguish two successful outcomes:| Status | Meaning | Body |
|---|---|---|
200 OK | The query resolved and produced a usable result (e.g. a certificate was issued). | The product’s response schema. |
204 No Content | The query resolved, but the available data did not satisfy the policy’s requirements — no certificate could be created, no usable result exists. | Empty. |
204 is not an error. It means the network looked, applied your policy, and
found that the furnished data falls short of what the policy demands — for
example, a required sub-product was never furnished, or the data is older than
the policy’s freshness window allows. Clients should treat 204 as “queried,
nothing to show” without inspecting product-specific fields.
A
204 response still carries the X-Ref-Id header, because the query
itself was resolved and recorded. To avoid paying for predictable 204s, run
a non-billable coverage check first.The X-Ref-Id header
Every product query response — 200 and 204 alike — includes an X-Ref-Id
response header. Its value is the query event id: the durable identifier of
this query in the network’s audit trail. On 200 responses the same value also
appears in the body as query_event_id.
- Quote it to support. If a query produced an unexpected result, the
X-Ref-Idlets SOLO trace the exact request, the policy applied, and the data considered. - Store it in your own audit log. It ties your internal decision record to the network’s record of the same event.
- Reconcile billing. Each billable query corresponds to one query event id.
What you get back — entitlement
The fields included in a200 result are the intersection of:
- what the network’s querying policy allows, and
- what you’re entitled to read for that entity.
Billing
Product query requests are billable events. Conservatively:- Each call to a product’s
/queryendpoint that resolves — whether it returns200or204— is recorded as a query event and may be billed. - The coverage check (
POST /v1/products/check) is not billable. It exists precisely so you can pre-flight a query without incurring a billable event. - Pricing is defined by your network agreement; this documentation does not state prices.
Multi-network queries
network_ids accepts more than one network, letting a single call read across
every network you participate in:
- The single
policy_idis applied uniformly across every network listed. If omitted, each network’s default policy is used. - Data is gathered from all listed networks; for each sub-product the network selects the oldest matching event from any allowed network.
- The result’s
meta.network_idis anchored to the first network innetwork_ids— list your primary network first. - You must hold the querier role in every network listed; a network you cannot query fails the request rather than being silently skipped.
How consent ties in — and why it’s needed
You cannot query a consumer or business without a validconsent_id (or a
direct profile id under an established permissible purpose).
Gather permission and record consent
Create a consent record for the subject and receive a
consent_id. See
Consent.Reference the consent on each query
Pass the
consent_id in the query body. The network resolves it to the
subject and applies the right field access.Consent vs direct profile queries
Product query endpoints accept two identity-resolution paths:consent_id— the standard path. The consent token both identifies the subject and proves your permission to query them. Use this for any flow where the subject interacts with you (onboarding, re-verification).consumer_id/business_id— a direct reference to a profile you can already see, for permissible-purpose queries where consent was established through another channel. The subject must resolve within your scope or the query returns404.
consent_id.
Query failure modes
Failures use the standard error envelope —{"detail": "…", "error_code": "…"} — described in
Errors.
| Status | error_code | Typical cause |
|---|---|---|
400 Bad Request | VALIDATION_ERROR | The request is structurally valid but semantically wrong — e.g. a consent that doesn’t resolve to a subject. |
401 Unauthorized | AUTHENTICATION_REQUIRED | Missing, malformed, or expired bearer token. See Authentication. |
403 Forbidden | PERMISSION_DENIED | You’re not a querier of a listed network, or your token lacks the required scope. |
404 Not Found | RESOURCE_NOT_FOUND | The consumer, business, consent, or product could not be resolved. |
422 Unprocessable Entity | — | Request body failed schema validation (e.g. network_ids empty or missing); detail names the field. |
500 Internal Server Error | INTERNAL_ERROR / OPERATION_FAILED | Unexpected server error. Quote the X-Ref-Id or request_id to support. |
204 No Content is not in this table — it’s a success status
meaning the policy’s requirements were not met by the available data.
Integration checklist
A robust querying integration usually looks like this:- Record consent once, reuse it. One consent record covers repeated queries of the same subject while it remains valid.
- Pre-flight with the coverage check when a
204would hurt your UX or your budget — it’s free and uses the same scope fields as the query. - Handle
204as a first-class outcome, not an error: branch your product flow on “no usable result” rather than retrying. - Persist
query_event_id/X-Ref-Idalongside your own decision records for audit, support, and billing reconciliation. - Treat missing fields as an entitlement question first — check what you’ve furnished and what the policy exposes before raising a data issue.
Related concepts
Products
The catalog of what you can query.
Coverage check
Pre-flight a query without a billable event.
Furnishing
The other half of the network — contributing data.
Query a product
A hands-on walkthrough.