Skip to main content
The KYC Certificate is a reusable identity-verification certificate bundle for consumer onboarding. It replaces per-bank KYC intake with a network-issued attestation: instead of each institution re-running document capture, biometric checks, and identity corroboration for the same person, a query assembles the verification work already furnished by network participants into a single certificate.
CategoryIdentity Verification
Use caseCustomer Onboarding
SubjectConsumer
OperationsPOST /v1/products/kyc_certificate/query, POST /v1/products/kyc_certificate/furnish

What’s in the certificate

A KYC certificate consolidates up to nine sub-products, each a block in the query response with its own assertions (what was attested, and when) and data (the supporting attributes):
Sub-productResponse keyWhat it attests
Document capturedocument_captureAn identity document was captured, with its type, number, and dates.
Document reviewdocument_reviewThe document’s attributes were reviewed — tamper and machine-readable-data checks.
Biometric capturebiometric_captureA biometric artifact (e.g. a selfie) was captured.
Biometric reviewbiometric_reviewThe biometric was compared against a reference, with quality and outcome.
Liveness captureliveness_captureLiveness evidence was captured.
Liveness reviewliveness_reviewThe liveness evidence was reviewed, with outcome and confidence tier.
Address captureaddress_captureA residential address was captured.
Address verificationaddress_verificationThe address was verified, with methods and per-source match counts.
Identity corroborationidentity_corroborationCIP-style corroboration — SSN, name, and DOB matches across sources.
Every populated sub-product carries the furnishing_entity_id of the participant whose data backed it and the attestation_id of their attestation, so the certificate is auditable down to its sources.

Querying

curl -X POST https://api.solo.one/v1/products/kyc_certificate/query \
  -H "Authorization: Bearer $SOLO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "consent_id": "a3f0b9c7-…",
    "policy_id": "5e7d2a14-…",
    "network_ids": ["9f1c0c2e-…"]
  }'
The request follows the standard query anatomy: identify the subject with consent_id (or consumer_id for direct permissible-purpose lookups), and scope the read with network_ids plus an optional policy_id and furnishing_entity_ids. A 200 OK means a certificate was issued:
{
  "certificate_id": "1c9f4e2a-…",
  "query_event_id": "7b2d9c4e-…",
  "consumer_id": "c2a4e8d0-…",
  "result": {
    "meta": {
      "network_id": "9f1c0c2e-…",
      "policy_id": "5e7d2a14-…"
    },
    "document_capture": {
      "furnishing_entity_id": "e1d2c3b4-…",
      "attestation_id": "f0a1b2c3-…",
      "assertions": {
        "document_capture_assertion": true,
        "document_capture_timestamp": "2026-04-15T00:00:00Z"
      },
      "data": {
        "document_artifact": "passport_scan.pdf",
        "document_type": "passport",
        "document_issuing_state": "government",
        "document_number": "934712385",
        "document_issue_date": "2021-03-02",
        "document_expiration_date": "2031-03-02",
        "document_capture_method": "mobile_scan"
      }
    },
    "document_review": {
      "furnishing_entity_id": "e1d2c3b4-…",
      "attestation_id": "f0a1b2c3-…",
      "assertions": {
        "document_attribute_review_assertion": true,
        "document_attribute_review_timestamp": "2026-04-16T00:00:00Z"
      },
      "data": {
        "document_review_method": "automated_ocr",
        "document_tamper_review_performed": true,
        "document_tamper_indicators_observed": false,
        "is_document_machine_readable_data_validation_performed": true,
        "is_document_machine_readable_data_validation_consistent_with_document_face": true
      }
    },
    "biometric_capture": {
      "furnishing_entity_id": "e1d2c3b4-…",
      "attestation_id": "f0a1b2c3-…",
      "assertions": {
        "biometric_capture_assertion": true,
        "biometric_capture_timestamp": "2026-04-15T00:00:00Z"
      },
      "data": {
        "biometric_artifact": "selfie.jpg",
        "biometric_capture_method": "selfie"
      }
    },
    "identity_corroboration": {
      "furnishing_entity_id": "e1d2c3b4-…",
      "attestation_id": "f0a1b2c3-…",
      "assertions": {
        "is_identity_corroboration_performed": true,
        "identity_corroboration_timestamp": "2026-04-16T09:30:00Z"
      },
      "data": {
        "identity_elements_corroborated": "pass",
        "identity_corroboration_methods": ["database", "documentary"],
        "identity_corroboration_outcomes": ["ssn_match", "name_match", "dob_match"],
        "total_identity_corroboration_sources_consulted": 3,
        "identity_corroboration_source_count_full_match": 3,
        "identity_corroboration_source_count_inconclusive": 0,
        "identity_corroboration_source_count_no_match": 0,
        "identity_corroboration_source_count_partial_match": 0
      }
    },
    "biometric_review": null,
    "liveness_capture": null,
    "liveness_review": null,
    "address_capture": null,
    "address_verification": null
  }
}
  • certificate_id — the issued certificate. The certificate records the date it was issued, its attestation timestamp, and the network + policy pairs it was resolved under.
  • query_event_id — the billable query event id; the same value is returned in the X-Ref-Id response header. Quote it to support and keep it in your audit log.
  • result — the consolidated certificate. Sub-products the policy didn’t require (or that lacked data) are null.

How the certificate resolves per network

The query gathers furnished events across every network in network_ids and applies the querying policy’s filters uniformly. For each sub-product it selects the oldest matching event from any allowed network, and the result’s meta.network_id is anchored to the first network in your request — list your primary network first. Which furnishers’ data is considered, and which fields you see, is further shaped by your entitlement.

When you get a 204

The endpoint declares a 204 No Content response: no certificate could be created — the available data did not satisfy the policy requirements. Concretely, a 204 is returned when:
  • a sub-product the policy requires was never furnished for this consumer in the queried networks, or
  • furnished data exists but fails the policy’s filters (e.g. outside the freshness window the policy selected), or
  • the policy selected specific data fields that the resolved certificate could not populate.
The body is empty. The response still carries the X-Ref-Id header, and the query event is still recorded. To anticipate 204s before spending a billable query, run a coverage check first.

Furnishing

Participants contribute the underlying KYC data with POST /v1/products/kyc_certificate/furnish:
{
  "network_id": "9f1c0c2e-…",
  "program_name": "default",
  "application_date": "2026-05-28",
  "records": [
    {
      "first_name": "Jane",
      "last_name": "Doe",
      "date_of_birth": "1990-01-15",
      "social_security_number": "123-45-6789"
    }
  ]
}
The response is {"success": true, "submission_id": "…"}. Bulk contribution is also available via file upload and SFTP; see Furnishing for the full model.

Field reference

The KYC certificate’s data dictionary, model by model. Field is the display name, API name is the field_name used in policies and coverage checks, and Source model is the underlying table the value is drawn from.

Consumer

FieldAPI nameTypeSource model
First Namefirst_nameStringconsumer
Last Namelast_nameStringconsumer

DocumentCaptureEvent

FieldAPI nameTypeSource model
Attestation IDattestation_idUUIDdocument_capture_event
Furnishing Entity IDfurnishing_entity_idUUIDattestation
Is Document Capturedis_document_capturedBooleandocument_capture_event
Document Capture Timestampdocument_capture_timestampDatedocument_capture_event
Is Document Attribute Reviewedis_document_attribute_reviewedBooleandocument_capture_event
Document Attribute Review Timestampdocument_attribute_review_timestampDatedocument_capture_event

IdentityDocument

FieldAPI nameTypeSource model
Identity Document TypetypeStringidentity_document
Document Issue Dateissue_dateDateidentity_document
Document Expiration Dateexpiration_dateDateidentity_document
Issuing Authorityissuing_authorityStringidentity_document
Is Tampering Detectedis_tampering_detectedBooleanidentity_document
Are Security Features Verifiedare_security_features_verifiedBooleanidentity_document
Document NumbernumberIntegeridentity_document
Document UploaduploadStringidentity_document

BiometricCaptureEvent

FieldAPI nameTypeSource model
Attestation IDattestation_idUUIDbiometric_capture_event
Furnishing Entity IDfurnishing_entity_idUUIDattestation
Is Biometric Capturedis_biometric_capturedBooleanbiometric_capture_event
Biometric Capture Timestampbiometric_capture_timestampDatebiometric_capture_event
Is Biometric Attribute Reviewedis_biometric_attribute_reviewedBooleanbiometric_capture_event
Biometric Attribute Review Timestampbiometric_attribute_review_timestampDatebiometric_capture_event
Biometric Artifact Typebiometric_artifact_typeStringbiometric_capture_event
Biometric Artifact Image Qualitybiometric_artifact_image_qualityStringbiometric_capture_event
Biometric Artifact Subject Presentbiometric_artifact_subject_presentBooleanbiometric_capture_event
Biometric Artifact Uploadbiometric_artifact_uploadStringbiometric_capture_event

LivenessCheckEvent

FieldAPI nameTypeSource model
Attestation IDattestation_idUUIDliveness_check_event
Furnishing Entity IDfurnishing_entity_idUUIDattestation
Is Liveness Capturedis_liveness_capturedBooleanliveness_check_event
Capture Timestampcapture_timestampDateliveness_check_event
Is Liveness Evidence Reviewedis_liveness_evidence_reviewedBooleanliveness_check_event
Evidence Review Timestampevidence_review_timestampDateliveness_check_event
Capture Method Typecapture_method_typeStringliveness_check_event
Check Resultcheck_resultStringliveness_check_event
Evidence Clarityevidence_clarityStringliveness_check_event

AddressCaptureEvent

FieldAPI nameTypeSource model
Attestation IDattestation_idUUIDaddress_capture_event
Furnishing Entity IDfurnishing_entity_idUUIDattestation
Is Address Capturedis_address_capturedBooleanaddress_capture_event
Address Capture Timestampaddress_capture_timestampDateaddress_capture_event
Is Address Verifiedis_address_verifiedBooleanaddress_capture_event
Address Verification Timestampaddress_verification_timestampDateaddress_capture_event
Address Verification Method Typeaddress_verification_method_typeStringaddress_capture_event
Is Matchis_matchBooleanaddress_capture_event

IdentityVerificationEvent

FieldAPI nameTypeSource model
Attestation IDattestation_idUUIDidentity_verification_event
Furnishing Entity IDfurnishing_entity_idUUIDattestation
Is KYC CIPis_kyccipBooleanidentity_verification_event
KYC Decisionkyc_decisionStringidentity_verification_event
Is SSN Matchis_ssn_matchBooleanidentity_verification_event
Is Name Matchis_name_matchBooleanidentity_verification_event
Name Verifiedname_verifiedBooleanidentity_verification_event
Is DOB Matchis_dob_matchBooleanidentity_verification_event
SSN Verifiedssn_verifiedBooleanidentity_verification_event
DeliverabledeliverableBooleanidentity_verification_event
Identity Corroboration Timestampcreated_atDatetimeidentity_verification_event

KycCertificate (policy configuration only)

These certificate-level fields are used when configuring a querying policy — e.g. requiring a certificate no older than 30 days. They are filters over issued certificates, not data projected into the query response.
FieldAPI nameTypeSource model
Certificate As Of Datecertificate_as_of_dateDatekyc_certificate
Certificate Attestation Timestampcertificate_attestation_timestampDatetimekyc_certificate
Days Since Certificate As Of Datedays_since_certificate_as_of_dateIntegerkyc_certificate
Is Address Capturedis_address_capturedBooleankyc_certificate
Is Address Verification Performedis_address_verification_performedBooleankyc_certificate
Is Biometric Capturedis_biometric_capturedBooleankyc_certificate
Is Biometric Reviewedis_biometric_reviewedBooleankyc_certificate
Is Document Capturedis_document_capturedBooleankyc_certificate
Is Document Reviewedis_document_reviewedBooleankyc_certificate
Is Identity Corroboration Performedis_identity_corroboration_performedBooleankyc_certificate
Is Liveness Capturedis_liveness_capturedBooleankyc_certificate
Is Liveness Reviewedis_liveness_reviewedBooleankyc_certificate

Querying

Request anatomy, 200 vs 204, billing, and the X-Ref-Id header.

Coverage check

Check field coverage before running a billable query.