Skip to main content
Consent is your record that you have permission to query a specific consumer or business. Querying personal and business data carries a legal obligation to have a permissible purpose — consent is how the network captures, and can later prove, that you had one. A consent record is two things at once:
  • A key. You create it once per subject per network, receive a consent_id, and pass that consent_id on every product query for the subject. Without a valid consent_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.
That dual nature drives the API’s design, including its strictest rule: the identity on a consent record can never be edited.

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 the consent_id is reusable on queries until the consent expires, and you can read it back or adjust its mutable attributes at any time. All three consumer endpoints return the same shape: POST /v1/consent/consumer records consent server-to-server. You supply the subject’s identity and attest that you gathered their permission beforehand.
A 200 OK returns the full record, including a default field access grant created alongside the consent:
did_gather_consent_from_consumer_prior: true is an attestation that you obtained the consumer’s permission before making this call. Sending false is rejected with 400 VALIDATION_ERROR — the network will not create a consent record that asserts no consent was gathered.

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 successful GET /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.
Either way, the identity details you submitted are stamped onto the consent record itself as the audit trail of who consented. Pass the consent_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.
See Querying your first product for the end-to-end walkthrough. 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:
The response is the same shape as create. If the 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.
PUT /v1/consent/consumer/{consent_id} changes the mutable attributes of a consent record: its scope, its expiry, and the description of consented fields.
The response is the post-update record:
Omitting all three updatable fields is a 400:

Identity is immutable — by design

The update endpoint deliberately accepts only scope, expires_at, and consented_fields. The subject’s name, date of birth, email, phone, and SSN on a consent record can never change.
A consent record is an audit artifact of who consented and when. If the identity could be edited after the fact, the record could no longer prove which person’s permission authorized your past queries. To consent with different identity data — a legal name change, a corrected SSN — create a new consent record and use its consent_id going forward.

Field access grants

Each consent record carries one or more field access grants in field_access_grants. A grant is a concrete statement of which fields, from which furnisher, over which time window this consent unlocks. When you create a consent, a default grant is attached automatically with 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

Error responses follow the standard envelope — see Errors:
POST /v1/consent/business records consent to query a business, mirroring the consumer flow:
The response contains 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.
Consent and entitlement are complementary gates, and a query needs both: Consent without entitlement yields a permitted query with little or no data; entitlement without consent yields no query at all.

Common questions

In the dashboard

Consumer — consent tab

Consumer — consent tab

Find or create consumer dialog

Find or create consumer dialog

Find or create consumer — ready to submit

Find or create consumer — ready to submit

Find or create business dialog

Find or create business dialog

Find or create business — ready to submit

Find or create business — ready to submit

Business — consent tab

Business — consent tab

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.