- A key. You create it once per subject per network, receive a
consent_id, and pass thatconsent_idon every product query for the subject. Without a validconsent_id, consumer and business queries are rejected. - An audit artifact. The record permanently captures who consented, as identified by which details, when, and with what scope — so that every query you ever ran can be traced back to a lawful basis.
Lifecycle
A consumer consent record moves through a simple lifecycle, with one endpoint for each transition you control: You gather the subject’s permission outside the API — in your onboarding flow, your terms, your call script — then record it. From there theconsent_id is reusable on queries until the consent expires, and you can read
it back or adjust its mutable attributes at any time.
What a consent record contains
All three consumer endpoints return the same shape:| Field | Type | Notes |
|---|---|---|
consent_id | string | The token you pass on product queries |
field_access_grants | array | Grants attached to this consent — see below |
created_at | string | When the record was created |
scope | string | Free-form scope label; empty until you set one |
expires_at | string | null | When the consent lapses; null means no expiry recorded |
consented_fields | string | null | Free-form description of the fields the subject consented to |
events | string | Event history for the record |
Creating consent
POST /v1/consent/consumer records consent server-to-server. You supply the
subject’s identity and attest that you gathered their permission beforehand.
| Body field | Required | Notes |
|---|---|---|
network_id | Yes | The network this consent belongs to |
did_gather_consent_from_consumer_prior | Yes | Must be true — see warning below |
consumer_consent_identity | Yes | first_name, last_name, date_of_birth, personal_email, phone_number, social_security_number |
consumer_id | No | Link to an existing consumer profile found via entity search |
200 OK returns the full record, including a default field access grant
created alongside the consent:
Linking identity: consumer_id vs. the identity payload
How the consent attaches to an entity depends on whether
you pass consumer_id:
- With
consumer_id— the consent links to that existing consumer profile. Use this after a successfulGET /v1/entities/consumer/search, so the subject’s history stays consolidated on one profile. - Without
consumer_id— a new consumer profile is created from the identity payload and linked to the consent.
Using a consent ID
Pass theconsent_id in the body of a product query. The network resolves the
consent to the subject’s identity and applies the appropriate field access — you
don’t repeat the subject’s identifying details on every call.
Reading consent back
GET /v1/consent/consumer/{consent_id} returns the current state of a consent
record. The network_id query parameter is required — the lookup is scoped
to that network:
consent_id doesn’t exist
or exists in a different network, you get a 404:
A consent record belongs to one network. The same subject needs a separate
consent in each network you query them through, and a
consent_id minted in
one network is invisible — 404, not 403 — from another.Updating consent
PUT /v1/consent/consumer/{consent_id} changes the mutable attributes of a
consent record: its scope, its expiry, and the description of consented fields.
| Body field | Required | Notes |
|---|---|---|
network_id | Yes | Network scope — same rule as read |
scope | At least one of these three | New scope label |
expires_at | New expiry timestamp (ISO 8601) | |
consented_fields | New consented-fields description |
400:
Identity is immutable — by design
The update endpoint deliberately accepts onlyscope, expires_at, and
consented_fields. The subject’s name, date of birth, email, phone, and SSN on
a consent record can never change.
Field access grants
Each consent record carries one or more field access grants infield_access_grants. A grant is a concrete statement of which fields, from
which furnisher, over which time window this consent unlocks.
| Grant field | Type | Meaning |
|---|---|---|
furnishing_entity_id | string | null | The furnisher whose contributed data this grant covers. null means the grant is not pinned to a specific furnisher. |
field_definitions | array of strings | The fields covered, as source_table.source_column strings — e.g. fraud_verification_event.fraud_event_date. |
effective_from | string | null | Date the grant becomes active. |
effective_to | string | null | Date the grant lapses; null means open-ended. |
effective_from set to the creation date and a baseline set of field
definitions. Grants outside their effective window no longer apply.
Grants describe what this consent covers. They sit alongside — not in
place of — entitlement: a field appears in a query
result only if the consent covers asking, the network’s
querying policy exposes the field, and you have
earned entitlement to it.
Failure modes
| Status | error_code | When | Example detail |
|---|---|---|---|
400 | VALIDATION_ERROR | did_gather_consent_from_consumer_prior is false on create | Consent cannot be created without prior consumer consent gathering |
400 | VALIDATION_ERROR | Update with none of scope, expires_at, consented_fields | At least one of scope, expires_at, or consented_fields must be provided |
404 | RESOURCE_NOT_FOUND | Unknown consent_id, or a consent from a different network | Consent record not found |
422 | — | Request shape errors: missing required fields, wrong types | body -> consumer_consent_identity -> date_of_birth: value is not a valid datetime |
Business consent
POST /v1/consent/business records consent to query a business, mirroring the
consumer flow:
consent_id, consented_fields, created_at, events,
and scope. Use the consent_id on business product queries exactly as you
would a consumer one.
Business consent currently supports create only. There is no
GET or PUT /v1/consent/business/{consent_id} today — read-back and
updates are consumer-only. If you need to change a business consent’s
attributes, create a new record and switch to its consent_id.How consent relates to entitlement
Consent and entitlement are complementary gates, and a query needs both:| Consent | Entitlement | |
|---|---|---|
| Question it answers | May I query this subject at all? | Which fields come back? |
| How you get it | Record permission, get a consent_id | Earn it by furnishing or querying the subject |
| Scope | One subject, in one network | Per field, per entity |
| Carried on the query | consent_id in the request body | Applied automatically by the network |
| Can it change? | Mutable scope/expiry; immutable identity | Accrues with each furnish and query |
Common questions
Should I reuse a consent_id across queries?
Should I reuse a consent_id across queries?
Yes. Create one consent per subject per network and reuse its
consent_id
on every product query for that subject while the consent is valid. You do
not need a new consent record for each query.Why does GET return 404 for a consent I just created?
Why does GET return 404 for a consent I just created?
The read is scoped by the
network_id query parameter. The most common
cause is passing a different network_id than the one the consent was
created under — the record exists, but it isn’t visible from that network,
so the API reports 404 RESOURCE_NOT_FOUND rather than confirming it
exists elsewhere.When do I update versus create a new consent?
When do I update versus create a new consent?
Update when the subject’s permission itself changed shape — a broader
or narrower scope, a new expiry date, a revised description of consented
fields. Create new when anything about the subject’s identity needs to
differ: identity fields are immutable, so a corrected SSN, a legal name
change, or a new email all require a fresh record and a switch to its
consent_id.Does furnishing require consent?
Does furnishing require consent?
The
consent_id requirement documented here applies to queries —
reading data back out of the network. See
Furnishing for the obligations that apply when
contributing data.Related concepts
Entities
The subjects consent records are about, and how to find them.
Querying
How consent plugs into a product query.
Entitlement
What determines which fields a query returns.
Errors
The error envelope and status codes used across the API.