Skip to main content
POST
/
v3
/
database-validation
/
curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=BRA" \
  -F "services=bra_unico_idcloud" \
  -F "vendor_data=user-1234" \
  -F "consent=true" \
  -F "tax_number=11111111111" \
  -F "selfie=@./selfie.jpg"
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "BRA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "bra_unico_idcloud",
      "service_name": "BRA - Unico IDCloud (CPF + selfie)",
      "source_data": {
        "unico_face_match": "yes"
      },
      "validation": {
        "identification_number": "full_match"
      }
    }
  ]
}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "BRA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "BIOMETRIC_NO_MATCH",
      "service_id": "bra_unico_idcloud",
      "service_name": "BRA - Unico IDCloud (CPF + selfie)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "BRA",
  "match_type": null,
  "validations": [
    {
      "outcome_code": "INCONCLUSIVE",
      "service_id": "bra_unico_idcloud",
      "service_name": "BRA - Unico IDCloud (CPF + selfie)",
      "source_data": {},
      "validation": {}
    }
  ]
}
Unico IDCloud biometric validation: matches the user’s selfie against the face on record for their CPF and returns whether it is the same person, not the same person, or inconclusive. Didit exposes this service through POST /v3/database-validation/ so you can verify the submitted data against the authoritative source and receive normalized match results.

Coverage

  • Coverage:
  • Country: Brazil
  • Service ID: bra_unico_idcloud
  • Data domain: Identity
  • Category: BiometricRiskScore

Inputs

FieldRequiredExample
tax_numberYes11111111111
selfieYes@./selfie.jpg
first_nameNoJohn
last_nameNoDoe
full_nameNoJohn Doe
date_of_birthNo1990-01-01
vendor_dataNouser-1234
  • Required inputs: tax_number, selfie
  • Optional inputs: first_name, last_name, full_name, date_of_birth, vendor_data
  • Consent: Required
  • Workflow availability: Available in workflow
  • Coverage:
  • Price: $0.20 per successful query

Body parameters

issuing_state
string
default:"BRA"
required
ISO 3166-1 alpha-3 country code for this database service.Example: BRA
services
string
default:"bra_unico_idcloud"
required
Array containing this service ID. Pinning the service keeps the request scoped to this exact database.Example: bra_unico_idcloud
Explicit end-user consent for this service.Example: true
tax_number
string
default:"11111111111"
required
Tax or fiscal identification number.Example: 11111111111
selfie
file
required
Selfie image file to upload for biometric database validation. Accepted formats: JPEG, PNG, or WebP.Example: @./selfie.jpg
first_name
string
default:"John"
Given name to validate.Example: John
last_name
string
default:"Doe"
Family name to validate.Example: Doe
full_name
string
default:"John Doe"
Full legal name to validate.Example: John Doe
date_of_birth
string
default:"1990-01-01"
Date of birth in YYYY-MM-DD format.Example: 1990-01-01
vendor_data
string
default:"user-1234"
Your stable user reference for this person, such as your internal user ID. Didit uses it to link standalone checks to the same end user and reduce duplicate-detection noise.Example: user-1234

Input rules & validation notes

  • Brazilian CPF (exactly 11 digits)
  • tax_number must contain digits only; remove spaces, hyphens, and punctuation before sending the request.
  • tax_number must be exactly 11 characters long.

How to call it

curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=BRA" \
  -F "services=bra_unico_idcloud" \
  -F "vendor_data=user-1234" \
  -F "consent=true" \
  -F "tax_number=11111111111" \
  -F "selfie=@./selfie.jpg"
Every successful call returns HTTP 200. The outcome_code field tells you what actually happened — distinguishing, for example, a real biometric mismatch (BIOMETRIC_NO_MATCH) from a selfie that could not be read (BIOMETRIC_IMAGE_UNUSABLE). The status shown is the default feature status; your configured Partial Match / No Match actions can override it.
MATCH — The registry confirmed the identity and every checked field matched.
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "BRA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "bra_unico_idcloud",
      "service_name": "BRA - Unico IDCloud (CPF + selfie)",
      "source_data": {
        "unico_face_match": "yes"
      },
      "validation": {
        "identification_number": "full_match"
      }
    }
  ]
}
BIOMETRIC_NO_MATCH — The face-match score was below the acceptance threshold - the selfie is not the same person as the registry photo.
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "BRA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "BIOMETRIC_NO_MATCH",
      "service_id": "bra_unico_idcloud",
      "service_name": "BRA - Unico IDCloud (CPF + selfie)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
INCONCLUSIVE — The registry could not determine whether the person matches - the result is genuinely uncertain (they may or may not be in the registry). This is NOT a no-match and NOT a technical image problem; no field is asserted, so match_type is null and the check is sent to review.
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "BRA",
  "match_type": null,
  "validations": [
    {
      "outcome_code": "INCONCLUSIVE",
      "service_id": "bra_unico_idcloud",
      "service_name": "BRA - Unico IDCloud (CPF + selfie)",
      "source_data": {},
      "validation": {}
    }
  ]
}

Returned data

The exact fields surfaced in source_data depend on what the registry returns. The generated example for bra_unico_idcloud currently documents this normalized shape:
  • unico_face_match

Pricing & SLAs

BRA - Unico IDCloud (CPF + selfie) queries are billed only when Didit receives a conclusive result from the validation source.
  • Per-call price: $0.20 USD.
  • Billing: per successful query. You are not charged when the registry is unreachable, when required fields are missing, or when the request is rejected before reaching the source.
  • Latency: typical p95 < 2 s.
  • Availability: 99.9% per quarter on Didit’s side; downstream source availability varies by country and dataset.

Continue reading