Prerequisites
Before you start, you need:
- Network membership with the furnisher role — arranged with your SOLO account manager (see Joining a network).
- A bearer token (SDK token) exported as
SOLO_TOKEN. See Authentication. - Your
network_id, plus the program name you furnish under (many setups use a single default program — ask your account manager if unsure).
Record consent and furnish
Record the consumer's consent
Create a consent record with the consumer’s identity, attesting that you
gathered their permission before contributing their data:All six identity fields are required. If you already know the consumer’s
UUID (for example from an
entity search), pass it as the optional
Response
consumer_id to link the consent to that existing profile.You can re-fetch the consent at any time — the response body is identical
to the create response:Build your records
Each furnish record identifies one consumer by their core identity. All
four fields are required:These identifiers tell the network which consumer the data belongs to —
the certificate data is associated with that identity. The network matches
each record to a consumer (creating one if no match exists) and stores the
data under your organization, attributed to you as the furnisher.
records is a list, so batch as many consumers as you like into one call:Furnish into the network
Call the product’s furnish endpoint with your network scope, program, and
records:Three fields route the furnish — this is program routing:
Response
network_id— the network you’re furnishing into.program_name— the program (partition) within that network that separates your submissions from other furnishers’.application_date— the date the data applies to.
Confirm the consumer is visible
The furnished consumer now appears in network-scoped entity search:A
200 with a matching record confirms the furnish landed. You’ve also
earned entitlement to this consumer’s
data on future queries.Inspect the result
Consent response (step 1):| Field | Meaning |
|---|---|
consent_id | The token you’ll pass on every subsequent query of this consumer. Store it. |
field_access_grants | The access grants attached to the consent. Each grant lists its field_definitions (as table.column strings), the furnishing_entity_id it’s scoped to (null = not furnisher-specific), and its effective_from / effective_to window. |
created_at | When the consent record was created. |
events | The consent’s event log reference (empty for a brand-new consent). |
scope | The consent’s scope label. Starts unset; updatable later via PUT /v1/consent/consumer/{consent_id}. |
expires_at | When the consent lapses. null means no expiry has been set. |
consented_fields | An optional comma-separated restriction of consented fields. null means no field-level restriction. |
| Field | Meaning |
|---|---|
success | true — the records were accepted and a furnish event was recorded. |
submission_id | The UUID of this submission. Reference it when reconciling with your SOLO account manager. |
Why consent comes first
Furnishing contributes data about a person, and the consent record is the audit artifact proving they agreed: who consented, when, and through which identity. Creating it before you furnish keeps your contribution defensible, and the sameconsent_id is what you’ll pass when you later
query this consumer back — one consent
covers both sides of your participation while it remains valid. The full
model, including field access grants and expiry, is covered in
Consent.
Furnishing at scale
A JSON furnish accepts multiplerecords per call, which covers most
integration patterns. For recurring volume:
- SFTP ingestion — drop CSV files on a schedule and let the platform ingest them automatically. Start with SFTP getting started.
- Bulk file workflows — formats, templates, and validation behavior are covered in File upload.
Troubleshooting
401 — token expired or invalid
401 — token expired or invalid
SOLO_TOKEN
with a fresh token from your SOLO account manager. See
Authentication.400 — consent not gathered
400 — consent not gathered
did_gather_consent_from_consumer_prior: false. The platform will
not create a consent record without your attestation that the consumer
agreed first. Gather consent, then retry with true.404 — consent not found in this network
404 — consent not found in this network
GET /v1/consent/consumer/{consent_id} when the network_id
query parameter doesn’t match the network the consent was created in.
Consents are network-scoped — look them up with the same network_id you
created them under.403 — missing the furnisher role
403 — missing the furnisher role
422 — missing or malformed field
422 — missing or malformed field
detail string names
the first failing field as location -> field: message — common culprits
are omitting program_name or application_date, or leaving an identity
field out of consumer_consent_identity.Next steps
Query a product
Reuse the
consent_id and read this consumer’s data back.How furnishing works
Program routing and policy resolution in depth.
SFTP getting started
Automated, recurring bulk ingestion.
Why consent is needed
The permission layer behind every read.