> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Database Validation Overview

> Cheapest, fastest pay-per-call government-registry verification API. From $0.05/check, 60+ live countries, biometric face-match where registry holds photo.

export const AgentPromptAccordion = ({prompt, title = "AI Agent Integration Prompt"}) => {
  const [copied, setCopied] = React.useState(false);
  const handleCopy = e => {
    e.stopPropagation();
    if (!prompt) return;
    navigator.clipboard.writeText(prompt.trim()).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
  const agents = ["Claude Code", "Codex", "Cursor", "Devin", "Windsurf", "GitHub Copilot"];
  return <div className="didit-agent-card">
      {}
      <div className="didit-agent-titlebar">
        <div className="didit-agent-dots" aria-hidden="true">
          <span className="didit-agent-dot didit-agent-dot-red"></span>
          <span className="didit-agent-dot didit-agent-dot-yellow"></span>
          <span className="didit-agent-dot didit-agent-dot-green"></span>
        </div>
        <span className="didit-agent-filename">{title}</span>
        <button type="button" className={`didit-agent-copy ${copied ? "didit-agent-copy-copied" : ""}`} onClick={handleCopy} title="Copy prompt to clipboard" aria-label={copied ? "Copied!" : "Copy prompt to clipboard"}>
          {copied ? <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <path d="M3 8.5l3.5 3.5L13 4" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
              </svg>
              <span>Copied</span>
            </> : <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <rect x="5" y="5" width="9" height="9" rx="1.5" stroke="currentColor" strokeWidth="1.5" />
                <path d="M11 5V3.5A1.5 1.5 0 0 0 9.5 2h-6A1.5 1.5 0 0 0 2 3.5v6A1.5 1.5 0 0 0 3.5 11H5" stroke="currentColor" strokeWidth="1.5" />
              </svg>
              <span>Copy</span>
            </>}
        </button>
      </div>

      {}
      <pre className="didit-agent-body"><code>{prompt.trim()}</code></pre>

      {}
      <div className="didit-agent-footer">
        <span className="didit-agent-footer-label">Paste into</span>
        <div className="didit-agent-chips">
          {agents.map(name => <span key={name} className="didit-agent-chip">{name}</span>)}
        </div>
      </div>
    </div>;
};

export const VideoEmbed = ({src, title = "Video", type = "iframe"}) => <div className={type === "iframe" ? "didit-video-embed" : "didit-video-embed didit-video-native"}>
    {type === "iframe" ? <iframe src={src} title={title} style={{
  width: "100%",
  height: "100%",
  border: 0,
  borderRadius: "12px"
}} allow="accelerometer; autoplay; clipboard-write; compute-pressure; encrypted-media; gyroscope; picture-in-picture" allowFullScreen /> : <video controls autoPlay muted loop playsInline src={src} title={title} style={{
  width: "100%",
  height: "auto",
  display: "block",
  borderRadius: "12px"
}} />}
  </div>;

export const DatabaseValidationServicesTable = () => {
  const ROWS = [{
    "_isHeader": true,
    "label": "Latin America"
  }, {
    "_isHeader": false,
    "flag": "🇦🇷",
    "country_iso3": "ARG",
    "country_name": "Argentina",
    "country_path": "/api-reference/database-validation/argentina/citizens",
    "service_id": "arg_citizens",
    "service_name": "Argentina Citizens (AFIP)",
    "description": "Verifies input data to the AFIP (Administracion Federal de Ingresos Publicos).",
    "category": "Citizenship",
    "default_price_usd": 1.9
  }, {
    "_isHeader": false,
    "flag": "🇦🇷",
    "country_iso3": "ARG",
    "country_name": "Argentina",
    "country_path": "/api-reference/database-validation/argentina/citizens",
    "service_id": "arg_credit_bureau",
    "service_name": "Argentina Credit Bureau",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in Argentina.",
    "category": "CreditBureau",
    "default_price_usd": 2.15
  }, {
    "_isHeader": false,
    "flag": "🇦🇷",
    "country_iso3": "ARG",
    "country_name": "Argentina",
    "country_path": "/api-reference/database-validation/argentina/citizens",
    "service_id": "arg_renaper",
    "service_name": "Argentina - DNI verification (RENAPER)",
    "description": "Verifies Argentine DNI against the official RENAPER civil registry, with biometric face-match against the photo on file. 100% population coverage.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇦🇷",
    "country_iso3": "ARG",
    "country_name": "Argentina",
    "country_path": "/api-reference/database-validation/argentina/citizens",
    "service_id": "arg_renaper_data",
    "service_name": "Argentina - DNI data verification (RENAPER, no selfie)",
    "description": "Verifies an Argentine DNI and gender against the official RENAPER civil registry without a selfie, and returns the registered name, date of birth and tax id for comparison with the submitted data. No biometric: the person is confirmed by data alone. 100% population coverage.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇧🇴",
    "country_iso3": "BOL",
    "country_name": "Bolivia",
    "country_path": "/api-reference/database-validation/bolivia/cedula",
    "service_id": "bol_cedula",
    "service_name": "Bolivia - CI verification",
    "description": "Verifies Bolivian Carnet de Identidad data against SEGIP government records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_antecedentes_criminais_pf",
    "service_name": "Brazil - Federal Criminal Record (Polícia Federal)",
    "description": "Requests the Federal Police's criminal record certificate for a CPF and reports whether it was issued with nothing on file, comparing the holder's name and date of birth on the certificate with the submitted ones. When the certificate cannot be issued online the result goes to review.",
    "category": "NationalCriminal",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_cnh_facial_qrcode",
    "service_name": "Brazil - CNH QR code + face match (Datavalid)",
    "description": "SERPRO Datavalid v4 pf-facial-qrcode — decodes the QR code printed on Brazilian CNH driver licences (physical or digital, issued since May 2017), validates CPF + name + date of birth against Receita Federal, and matches the live selfie against the CNH portrait stored at Senatran.",
    "category": "DriverLicence",
    "default_price_usd": 0.5
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_company_directors",
    "service_name": "Brazil - Company Partners and Directors (QSA)",
    "description": "Returns the current partners and directors (QSA) of a Brazilian company from the Receita Federal register, with each one's role and start date. Individuals' CPFs are masked as the Receita Federal publishes them.",
    "category": "CompanyRegister",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_company_registry",
    "service_name": "Brazil - Company Registry Lookup (CNPJ)",
    "description": "Looks up a Brazilian company by CNPJ in the Receita Federal register: legal and trade name, registration status, founding date, legal nature, main activity and head-office state.",
    "category": "CompanyRegister",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_cpf",
    "service_name": "Brazil - CPF status check",
    "description": "Returns CPF status (regular, suspended, cancelled), name, social name and registration date from Receita Federal via SERPRO. The lookup is keyed by CPF and date of birth.",
    "category": "TaxRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_cpf_facial",
    "service_name": "Brazil - CPF + face match (Datavalid)",
    "description": "SERPRO Datavalid v4 pf-facial — validates CPF (mandatory) against Receita Federal and matches the live selfie (mandatory) against the CNH portrait stored at Senatran. Optionally screens name and date of birth.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_death_check",
    "service_name": "Brazil - Death Check (CPF)",
    "description": "Checks whether the holder of a CPF is recorded as deceased, and compares the holder's name and date of birth with the Receita Federal record.",
    "category": "DeathRecord",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_residential",
    "service_name": "Brazil Residential",
    "description": "Verifies against a combined database of electoral registrations.",
    "category": "Residential",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_tax_registration",
    "service_name": "Brazil Tax Registration (CPF/CNPJ)",
    "description": "Verifies against the CPF/CNPJ database.",
    "category": "TaxRegistry",
    "default_price_usd": 0.15
  }, {
    "_isHeader": false,
    "flag": "🇧🇷",
    "country_iso3": "BRA",
    "country_name": "Brazil",
    "country_path": "/api-reference/database-validation/brazil/antecedentes-criminais-pf",
    "service_id": "bra_unico_idcloud",
    "service_name": "BRA - Unico IDCloud (CPF + selfie)",
    "description": "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.",
    "category": "BiometricRiskScore",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇨🇱",
    "country_iso3": "CHL",
    "country_name": "Chile",
    "country_path": "/api-reference/database-validation/chile/rut",
    "service_id": "chl_rut",
    "service_name": "Chile - RUT verification",
    "description": "Verifies Chilean RUT against the Servicio de Registro Civil records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇨🇴",
    "country_iso3": "COL",
    "country_name": "Colombia",
    "country_path": "/api-reference/database-validation/colombia/cedula",
    "service_id": "col_cedula",
    "service_name": "Colombia - Cédula verification",
    "description": "Verifies Colombian citizen identity data against Registraduría General de la Nación / ANI government records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇨🇴",
    "country_iso3": "COL",
    "country_name": "Colombia",
    "country_path": "/api-reference/database-validation/colombia/cedula",
    "service_id": "col_migracion",
    "service_name": "Colombia - Migración Colombia foreigner status",
    "description": "Verifies a foreigner's migratory status and identity against Migración Colombia government records (cédula de extranjería).",
    "category": "ResidencePermit",
    "default_price_usd": 1.2
  }, {
    "_isHeader": false,
    "flag": "🇨🇷",
    "country_iso3": "CRI",
    "country_name": "Costa Rica",
    "country_path": "/api-reference/database-validation/costa-rica/cedula",
    "service_id": "cri_cedula",
    "service_name": "Costa Rica - Cédula verification",
    "description": "Verifies Costa Rican national identity card data against Tribunal Supremo de Elecciones government records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇩🇴",
    "country_iso3": "DOM",
    "country_name": "Dominican Republic",
    "country_path": "/api-reference/database-validation/dominican-republic/cedula",
    "service_id": "dom_cedula",
    "service_name": "Dominican Republic - Cédula verification",
    "description": "Verifies Dominican Cédula directly against the Junta Central Electoral civil registry.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.05
  }, {
    "_isHeader": false,
    "flag": "🇪🇨",
    "country_iso3": "ECU",
    "country_name": "Ecuador",
    "country_path": "/api-reference/database-validation/ecuador/cedula",
    "service_id": "ecu_cedula",
    "service_name": "Ecuador - Cédula verification",
    "description": "Verifies Ecuadorian Cédula against the Registro Civil records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇸🇻",
    "country_iso3": "SLV",
    "country_name": "El Salvador",
    "country_path": "/api-reference/database-validation/el-salvador/dui",
    "service_id": "slv_dui",
    "service_name": "El Salvador - DUI verification",
    "description": "Verifies Salvadoran DUI data against RNPN government records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇬🇹",
    "country_iso3": "GTM",
    "country_name": "Guatemala",
    "country_path": "/api-reference/database-validation/guatemala/dpi-facial",
    "service_id": "gtm_dpi",
    "service_name": "Guatemala - DPI verification",
    "description": "Verifies Guatemalan unique identification code data against SAT government records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇬🇹",
    "country_iso3": "GTM",
    "country_name": "Guatemala",
    "country_path": "/api-reference/database-validation/guatemala/dpi-facial",
    "service_id": "gtm_dpi_facial",
    "service_name": "Guatemala - DPI + face match (RENAP)",
    "description": "Verifies a Guatemalan CUI against the national register (RENAP) and matches the applicant's selfie against the official RENAP photo, comparing the holder's names and date of birth with the register's record.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🇭🇳",
    "country_iso3": "HND",
    "country_name": "Honduras",
    "country_path": "/api-reference/database-validation/honduras/dni",
    "service_id": "hnd_dni",
    "service_name": "Honduras - DNI verification",
    "description": "Verifies Honduran DNI data against CNE electoral registry records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇲🇽",
    "country_iso3": "MEX",
    "country_name": "Mexico",
    "country_path": "/api-reference/database-validation/mexico/curp",
    "service_id": "mex_curp",
    "service_name": "Mexico - CURP verification",
    "description": "Verifies Mexican CURP against the RENAPO national identifier registry.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇲🇽",
    "country_iso3": "MEX",
    "country_name": "Mexico",
    "country_path": "/api-reference/database-validation/mexico/curp",
    "service_id": "mex_ine_vigencia",
    "service_name": "Mexico - INE credential validity verification",
    "description": "Verifies a Mexican INE / IFE voter ID credential against the INE registry (modelo, vigencia, válida-como-identificación, derecho-a-votar).",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇵🇦",
    "country_iso3": "PAN",
    "country_name": "Panama",
    "country_path": "/api-reference/database-validation/panama/sib-plus",
    "service_id": "pan_cedula_sib",
    "service_name": "Panama - Cédula with biometric face-match (SIB)",
    "description": "Verifies Panamanian Cédula with biometric face-match against the Tribunal Electoral SIB biometric service. Standard tier.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.75
  }, {
    "_isHeader": false,
    "flag": "🇵🇦",
    "country_iso3": "PAN",
    "country_name": "Panama",
    "country_path": "/api-reference/database-validation/panama/sib-plus",
    "service_id": "pan_cedula_sib_plus",
    "service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
    "description": "Verifies Panamanian Cédula with biometric face-match — elevated-tier SIB Plus. Same data source as the standard SIB tier with stronger biometric thresholds and richer match metadata.",
    "category": "NationalIDRegistry",
    "default_price_usd": 1.5
  }, {
    "_isHeader": false,
    "flag": "🇵🇾",
    "country_iso3": "PRY",
    "country_name": "Paraguay",
    "country_path": "/api-reference/database-validation/paraguay/cedula",
    "service_id": "pry_cedula",
    "service_name": "Paraguay - CI verification",
    "description": "Verifies Paraguayan Cédula data against Registro del Estado Civil government records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇵🇪",
    "country_iso3": "PER",
    "country_name": "Peru",
    "country_path": "/api-reference/database-validation/peru/dni",
    "service_id": "per_dni",
    "service_name": "Peru - DNI verification",
    "description": "Verifies Peruvian DNI against the RENIEC civil registry.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇵🇪",
    "country_iso3": "PER",
    "country_name": "Peru",
    "country_path": "/api-reference/database-validation/peru/dni",
    "service_id": "per_tax_registration",
    "service_name": "Peru Tax Registration (SUNAT)",
    "description": "Verifies input data against SUNAT.",
    "category": "TaxRegistry",
    "default_price_usd": 1.75
  }, {
    "_isHeader": false,
    "flag": "🇺🇾",
    "country_iso3": "URY",
    "country_name": "Uruguay",
    "country_path": "/api-reference/database-validation/uruguay/cedula",
    "service_id": "ury_cedula",
    "service_name": "Uruguay - CI verification",
    "description": "Verifies Uruguayan Cédula data against Dirección Nacional del Registro de Estado Civil government records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇻🇪",
    "country_iso3": "VEN",
    "country_name": "Venezuela",
    "country_path": "/api-reference/database-validation/venezuela/cedula",
    "service_id": "ven_cedula",
    "service_name": "Venezuela - Cédula verification",
    "description": "Verifies Venezuelan Cédula data against CNE electoral registry records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇻🇪",
    "country_iso3": "VEN",
    "country_name": "Venezuela",
    "country_path": "/api-reference/database-validation/venezuela/cedula",
    "service_id": "ven_cedula",
    "service_name": "Venezuela - Cédula verification",
    "description": "Verifies Venezuelan Cédula data against CNE electoral registry records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": true,
    "label": "North America"
  }, {
    "_isHeader": false,
    "flag": "🇨🇦",
    "country_iso3": "CAN",
    "country_name": "Canada",
    "country_path": "/api-reference/database-validation/canada/credit-bureau-2-non-fintrac",
    "service_id": "can_credit_bureau_2_non_fintrac",
    "service_name": "Canada Credit Bureau 2 (Non-FINTRAC)",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in Canada. This service does not provide FINTRAC required data but can provide additional fraud detection flags. An agency application is required.",
    "category": "CreditBureau",
    "default_price_usd": 1.05
  }, {
    "_isHeader": false,
    "flag": "🇨🇦",
    "country_iso3": "CAN",
    "country_name": "Canada",
    "country_path": "/api-reference/database-validation/canada/credit-bureau-2-non-fintrac",
    "service_id": "can_credit_bureau_fintrac",
    "service_name": "Canada Credit Bureau (FINTRAC)",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in Canada and responds with data sufficient to meet FINTRAC requirements. An agency application is required. This service cannot currently be included in a Sequence Package.",
    "category": "CreditBureau",
    "default_price_usd": 2.9
  }, {
    "_isHeader": false,
    "flag": "🇨🇦",
    "country_iso3": "CAN",
    "country_name": "Canada",
    "country_path": "/api-reference/database-validation/canada/credit-bureau-2-non-fintrac",
    "service_id": "can_residential",
    "service_name": "Canada Residential",
    "description": "Verifies input data to mobile network operators phone data. An agency application is required.",
    "category": "Residential",
    "default_price_usd": 0.25
  }, {
    "_isHeader": false,
    "flag": "🇺🇸",
    "country_iso3": "USA",
    "country_name": "United States",
    "country_path": "/api-reference/database-validation/united-states/credit-bureau",
    "service_id": "usa_states_credit_bureau",
    "service_name": "United States of America - United States Credit Bureau",
    "description": "Aggregated service of credit header data and other services.",
    "category": "CreditBureau",
    "default_price_usd": 0.15
  }, {
    "_isHeader": false,
    "flag": "🇺🇸",
    "country_iso3": "USA",
    "country_name": "United States",
    "country_path": "/api-reference/database-validation/united-states/credit-bureau",
    "service_id": "usa_states_death_check",
    "service_name": "United States of America - United States Death Check (SSDMF)",
    "description": "The official Social Security Death Master File.",
    "category": "DeathRecord",
    "default_price_usd": 0.06
  }, {
    "_isHeader": false,
    "flag": "🇺🇸",
    "country_iso3": "USA",
    "country_name": "United States",
    "country_path": "/api-reference/database-validation/united-states/credit-bureau",
    "service_id": "usa_states_financial_services",
    "service_name": "United States of America - United States Financial Services",
    "description": "Aggregated service of government and public records, background records, and other services.",
    "category": "FinancialServices",
    "default_price_usd": 0.12
  }, {
    "_isHeader": false,
    "flag": "🇺🇸",
    "country_iso3": "USA",
    "country_name": "United States",
    "country_path": "/api-reference/database-validation/united-states/credit-bureau",
    "service_id": "usa_states_phone_2",
    "service_name": "United States of America - United States Phone 2",
    "description": "Verifies input data to mobile network operators phone data.",
    "category": "Telecom",
    "default_price_usd": 0.15
  }, {
    "_isHeader": false,
    "flag": "🇺🇸",
    "country_iso3": "USA",
    "country_name": "United States",
    "country_path": "/api-reference/database-validation/united-states/credit-bureau",
    "service_id": "usa_states_residential",
    "service_name": "United States of America - United States Residential",
    "description": "Aggregated service of government and public records, background records, and public professional profiles.",
    "category": "Residential",
    "default_price_usd": 0.6
  }, {
    "_isHeader": true,
    "label": "Europe"
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "AUT",
    "country_name": "Austria",
    "country_path": "/api-reference/database-validation/austria/credit-bureau",
    "service_id": "aut_credit_bureau",
    "service_name": "Austria Credit Bureau",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in Austria.",
    "category": "CreditBureau",
    "default_price_usd": 1.6
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "DNK",
    "country_name": "Denmark",
    "country_path": "/api-reference/database-validation/denmark/consumer-2",
    "service_id": "dnk_consumer_2",
    "service_name": "Denmark Consumer 2",
    "description": "Input is verified against a source comprising multiple datasets from consumer, telephone and utility records.",
    "category": "Residential",
    "default_price_usd": 0.97
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "DNK",
    "country_name": "Denmark",
    "country_path": "/api-reference/database-validation/denmark/consumer-2",
    "service_id": "dnk_national_id",
    "service_name": "Denmark National ID",
    "description": "Verifies input data against the Civil Registration service.",
    "category": "NationalIDRegistry",
    "default_price_usd": 1.39
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "FIN",
    "country_name": "Finland",
    "country_path": "/api-reference/database-validation/finland/consumer-2",
    "service_id": "fin_consumer_2",
    "service_name": "Finland Consumer 2",
    "description": "Verifies Finland Consumer 2.",
    "category": "Residential",
    "default_price_usd": 0.97
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "FIN",
    "country_name": "Finland",
    "country_path": "/api-reference/database-validation/finland/consumer-2",
    "service_id": "fin_national_id",
    "service_name": "Finland National ID",
    "description": "Verifies input data against the official issuing agency of the Finnish Identity Card.",
    "category": "NationalIDRegistry",
    "default_price_usd": 2.1
  }, {
    "_isHeader": false,
    "flag": "🇫🇷",
    "country_iso3": "FRA",
    "country_name": "France",
    "country_path": "/api-reference/database-validation/france/phone",
    "service_id": "fra_phone",
    "service_name": "France Phone",
    "description": "Verifies input data to mobile network operators phone data.",
    "category": "Telecom",
    "default_price_usd": 0.67
  }, {
    "_isHeader": false,
    "flag": "🇫🇷",
    "country_iso3": "FRA",
    "country_name": "France",
    "country_path": "/api-reference/database-validation/france/phone",
    "service_id": "fra_residential",
    "service_name": "France Residential",
    "description": "Verifies data against government agency sourced census data.",
    "category": "Residential",
    "default_price_usd": 0.89
  }, {
    "_isHeader": false,
    "flag": "🇫🇷",
    "country_iso3": "FRA",
    "country_name": "France",
    "country_path": "/api-reference/database-validation/france/phone",
    "service_id": "fra_utility",
    "service_name": "France Utility",
    "description": "Aggregated service of public records, background records, and public professional profiles.",
    "category": "Utility",
    "default_price_usd": 0.65
  }, {
    "_isHeader": false,
    "flag": "🇩🇪",
    "country_iso3": "DEU",
    "country_name": "Germany",
    "country_path": "/api-reference/database-validation/germany/credit-bureau",
    "service_id": "deu_credit_bureau",
    "service_name": "Germany Credit Bureau",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in Germany.",
    "category": "CreditBureau",
    "default_price_usd": 0.84
  }, {
    "_isHeader": false,
    "flag": "🇩🇪",
    "country_iso3": "DEU",
    "country_name": "Germany",
    "country_path": "/api-reference/database-validation/germany/credit-bureau",
    "service_id": "deu_phone_2",
    "service_name": "Germany Phone 2",
    "description": "Verifies input data to mobile network operators phone data.",
    "category": "Telecom",
    "default_price_usd": 0.59
  }, {
    "_isHeader": false,
    "flag": "🇮🇹",
    "country_iso3": "ITA",
    "country_name": "Italy",
    "country_path": "/api-reference/database-validation/italy/credit-bureau",
    "service_id": "ita_credit_bureau",
    "service_name": "Italy Credit Bureau",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in Italy.",
    "category": "CreditBureau",
    "default_price_usd": 1.95
  }, {
    "_isHeader": false,
    "flag": "🇮🇹",
    "country_iso3": "ITA",
    "country_name": "Italy",
    "country_path": "/api-reference/database-validation/italy/credit-bureau",
    "service_id": "ita_residential",
    "service_name": "Italy Residential",
    "description": "Input is verified against a source comprising multiple datasets from consumer, telephone and postal records.",
    "category": "Residential",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "NLD",
    "country_name": "Netherlands",
    "country_path": "/api-reference/database-validation/netherlands/residential",
    "service_id": "nld_residential",
    "service_name": "Netherlands Residential",
    "description": "Verifies input data to a data source containing Government records, postal, and public records.",
    "category": "Residential",
    "default_price_usd": 0.9
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "NOR",
    "country_name": "Norway",
    "country_path": "/api-reference/database-validation/norway/residential",
    "service_id": "nor_residential",
    "service_name": "Norway Residential",
    "description": "Verifies input data against the Norwegian Register service.",
    "category": "Residential",
    "default_price_usd": 2.42
  }, {
    "_isHeader": false,
    "flag": "🇪🇸",
    "country_iso3": "ESP",
    "country_name": "Spain",
    "country_path": "/api-reference/database-validation/spain/dni",
    "service_id": "esp_dni",
    "service_name": "Spain - DNI/NIE verification",
    "description": "Verifies a Spanish DNI / NIE holder's name, date of birth and address against national identity records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 1.26
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "SWE",
    "country_name": "Sweden",
    "country_path": "/api-reference/database-validation/sweden/national-id",
    "service_id": "swe_national_id",
    "service_name": "Sweden National ID",
    "description": "Verifies input data against the Swedish Police Authority service.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "SWE",
    "country_name": "Sweden",
    "country_path": "/api-reference/database-validation/sweden/national-id",
    "service_id": "swe_phone",
    "service_name": "Sweden Phone",
    "description": "Verifies input data to mobile network operators phone data.",
    "category": "Telecom",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "CHE",
    "country_name": "Switzerland",
    "country_path": "/api-reference/database-validation/switzerland/credit-bureau",
    "service_id": "che_credit_bureau",
    "service_name": "Switzerland Credit Bureau",
    "description": "Credit Header data obtained from the Credit Bureau in Switzerland.",
    "category": "CreditBureau",
    "default_price_usd": 2.0
  }, {
    "_isHeader": false,
    "flag": "🇬🇧",
    "country_iso3": "GBR",
    "country_name": "United Kingdom",
    "country_path": "/api-reference/database-validation/united-kingdom/credit-bureau",
    "service_id": "gbr_kingdom_credit_bureau",
    "service_name": "United Kingdom Credit Bureau",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in the United Kingdom.",
    "category": "CreditBureau",
    "default_price_usd": 0.9
  }, {
    "_isHeader": false,
    "flag": "🇬🇧",
    "country_iso3": "GBR",
    "country_name": "United Kingdom",
    "country_path": "/api-reference/database-validation/united-kingdom/credit-bureau",
    "service_id": "gbr_kingdom_financial_services",
    "service_name": "United Kingdom Financial Services",
    "description": "Aggregated service of government and public records, background records, and other services.",
    "category": "FinancialServices",
    "default_price_usd": 0.95
  }, {
    "_isHeader": false,
    "flag": "🇬🇧",
    "country_iso3": "GBR",
    "country_name": "United Kingdom",
    "country_path": "/api-reference/database-validation/united-kingdom/credit-bureau",
    "service_id": "gbr_kingdom_phone_2",
    "service_name": "United Kingdom Phone 2",
    "description": "Verifies input data to mobile network operators phone data.",
    "category": "Telecom",
    "default_price_usd": 0.96
  }, {
    "_isHeader": false,
    "flag": "🇬🇧",
    "country_iso3": "GBR",
    "country_name": "United Kingdom",
    "country_path": "/api-reference/database-validation/united-kingdom/credit-bureau",
    "service_id": "gbr_kingdom_residential",
    "service_name": "United Kingdom Residential",
    "description": "Aggregated service of government and public records, background records, and public professional profiles.",
    "category": "Residential",
    "default_price_usd": 0.25
  }, {
    "_isHeader": true,
    "label": "Asia Pacific"
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_australia_driver_licence",
    "service_name": "DVS - Australia Driver Licence",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "DriverLicence",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_australia_medicare_card",
    "service_name": "DVS - Australia Medicare Card",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "Healthcare",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_australia_passport",
    "service_name": "DVS - Australia Passport",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "Passport",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_australia_visa",
    "service_name": "DVS - Australia Visa",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "Visa",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_birth_certificate",
    "service_name": "Australia - DVS - Birth Certificate",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "BirthRecord",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_centrelink_card",
    "service_name": "Australia - DVS - Centrelink Card",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "Government",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_change_of_name_certificate",
    "service_name": "Australia - DVS – Change of Name Certificate",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "CivilRegistry",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_citizenship_certificate",
    "service_name": "Australia - DVS – Citizenship Certificate",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "Citizenship",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_credit_bureau",
    "service_name": "Australia Credit Bureau",
    "description": "Verifies input data against Credit Header data obtained from the largest Credit Bureau in Australia.",
    "category": "CreditBureau",
    "default_price_usd": 0.7
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_death_check",
    "service_name": "Australia Death Check (BDM)",
    "description": "The official Australian Birth, Deaths, Marriages Register.",
    "category": "DeathRecord",
    "default_price_usd": 0.05
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_electoral_roll",
    "service_name": "Australia Electoral Roll",
    "description": "The official Government Electoral Roll service.",
    "category": "ElectoralRoll",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_immicard",
    "service_name": "Australia - DVS - ImmiCard",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "Visa",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_marriage_certificate",
    "service_name": "Australia - DVS – Marriage Certificate",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "CivilRegistry",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_superannuation_payroll",
    "service_name": "Australia Superannuation & Payroll",
    "description": "Verifies input data to an authorised Superannuation and Payroll administrator and services provider.",
    "category": "Superannuation",
    "default_price_usd": 0.67
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_travel_document",
    "service_name": "Australia - DVS - Travel Document",
    "description": "Verifies input data against the Document Verification Service (DVS).",
    "category": "Passport",
    "default_price_usd": 0.45
  }, {
    "_isHeader": false,
    "flag": "🇦🇺",
    "country_iso3": "AUS",
    "country_name": "Australia",
    "country_path": "/api-reference/database-validation/australia/birth-certificate",
    "service_id": "aus_vevo",
    "service_name": "Australia VEVO",
    "description": "Verifies input data against the Department of Home Affairs Visa database.",
    "category": "Visa",
    "default_price_usd": 0.32
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "KHM",
    "country_name": "Cambodia",
    "country_path": "/api-reference/database-validation/cambodia/national-id",
    "service_id": "khm_national_id",
    "service_name": "Cambodia National ID",
    "description": "Verifies input data against a Government agency database consisting of national identity data of citizens.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "CHN",
    "country_name": "China",
    "country_path": "/api-reference/database-validation/china/bank-card",
    "service_id": "chn_bank_card",
    "service_name": "China Bank Card",
    "description": "Verifies input data against the official data service in China.",
    "category": "Banking",
    "default_price_usd": 0.4
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "CHN",
    "country_name": "China",
    "country_path": "/api-reference/database-validation/china/bank-card",
    "service_id": "chn_national_id",
    "service_name": "China National ID",
    "description": "Verifies input data against the official data service in China.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.3
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "CHN",
    "country_name": "China",
    "country_path": "/api-reference/database-validation/china/bank-card",
    "service_id": "chn_passport_verification",
    "service_name": "China Passport Verification",
    "description": "Verifies input data against the official data service in China.",
    "category": "Passport",
    "default_price_usd": 1.0
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "CHN",
    "country_name": "China",
    "country_path": "/api-reference/database-validation/china/bank-card",
    "service_id": "chn_phone",
    "service_name": "China Phone",
    "description": "Verifies input data against the official data service in China.",
    "category": "Telecom",
    "default_price_usd": 0.3
  }, {
    "_isHeader": false,
    "flag": "🇮🇳",
    "country_iso3": "IND",
    "country_name": "India",
    "country_path": "/api-reference/database-validation/india/aadhaar",
    "service_id": "ind_aadhaar",
    "service_name": "India Aadhaar (UIDAI)",
    "description": "Verifies the input Aadhaar number against UIDAI identity records.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.25
  }, {
    "_isHeader": false,
    "flag": "🇮🇳",
    "country_iso3": "IND",
    "country_name": "India",
    "country_path": "/api-reference/database-validation/india/aadhaar",
    "service_id": "ind_drivers_licence",
    "service_name": "India Drivers Licence (RTO)",
    "description": "Verifies input data against the databases of the Road Transport Offices of the States of India.",
    "category": "DriverLicence",
    "default_price_usd": 0.15
  }, {
    "_isHeader": false,
    "flag": "🇮🇳",
    "country_iso3": "IND",
    "country_name": "India",
    "country_path": "/api-reference/database-validation/india/aadhaar",
    "service_id": "ind_epic_voter_s_registration",
    "service_name": "India EPIC (Voter's Registration) (ECI)",
    "description": "Verifies input data against the Election Commission of India database.",
    "category": "ElectoralRoll",
    "default_price_usd": 0.15
  }, {
    "_isHeader": false,
    "flag": "🇮🇳",
    "country_iso3": "IND",
    "country_name": "India",
    "country_path": "/api-reference/database-validation/india/aadhaar",
    "service_id": "ind_pan_permanent_account_number",
    "service_name": "India PAN (Permanent Account Number) (ITD)",
    "description": "Verifies input data against the database of the Income Tax Department of India.",
    "category": "TaxRegistry",
    "default_price_usd": 0.25
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "IDN",
    "country_name": "Indonesia",
    "country_path": "/api-reference/database-validation/indonesia/residential-identity-card",
    "service_id": "idn_residential_identity_card",
    "service_name": "Indonesia Residential Identity Card",
    "description": "Verifies input data against a Government agency.",
    "category": "Residential",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🇲🇾",
    "country_iso3": "MYS",
    "country_name": "Malaysia",
    "country_path": "/api-reference/database-validation/malaysia/national-id",
    "service_id": "mys_national_id",
    "service_name": "Malaysia National ID",
    "description": "Verifies input data against a Government agency database consisting of Malaysian citizens data.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "NZL",
    "country_name": "New Zealand",
    "country_path": "/api-reference/database-validation/new-zealand/births",
    "service_id": "nzl_new_zealand_births",
    "service_name": "DIA - New Zealand Births",
    "description": "DIA Birth Certificate verification service.",
    "category": "BirthRecord",
    "default_price_usd": 1.0
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "NZL",
    "country_name": "New Zealand",
    "country_path": "/api-reference/database-validation/new-zealand/births",
    "service_id": "nzl_new_zealand_citizenship",
    "service_name": "DIA - New Zealand Citizenship",
    "description": "DIA Citizenship verification service.",
    "category": "Citizenship",
    "default_price_usd": 1.0
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "NZL",
    "country_name": "New Zealand",
    "country_path": "/api-reference/database-validation/new-zealand/births",
    "service_id": "nzl_new_zealand_passport",
    "service_name": "DIA - New Zealand Passport",
    "description": "DIA Passport verification service.",
    "category": "Passport",
    "default_price_usd": 1.0
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "NZL",
    "country_name": "New Zealand",
    "country_path": "/api-reference/database-validation/new-zealand/births",
    "service_id": "nzl_zealand_death_check",
    "service_name": "New Zealand Death Check (BDM)",
    "description": "The official New Zealand Birth, Deaths, Marriages Register.",
    "category": "DeathRecord",
    "default_price_usd": 0.16
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "NZL",
    "country_name": "New Zealand",
    "country_path": "/api-reference/database-validation/new-zealand/births",
    "service_id": "nzl_zealand_drivers_licence",
    "service_name": "New Zealand Drivers Licence (NZTA)",
    "description": "Verifies input data to the NZTA verification service.",
    "category": "DriverLicence",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "PHL",
    "country_name": "Philippines",
    "country_path": "/api-reference/database-validation/philippines/residential",
    "service_id": "phl_residential",
    "service_name": "Philippines Residential",
    "description": "Verifies input data against a Government agency database consisting of Filipino citizens data.",
    "category": "Residential",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🇸🇬",
    "country_iso3": "SGP",
    "country_name": "Singapore",
    "country_path": "/api-reference/database-validation/singapore/credit-bureau",
    "service_id": "sgp_credit_bureau",
    "service_name": "Singapore Credit Bureau",
    "description": "Verifies input data against Credit Header data obtained from a Credit Bureau in Singapore.",
    "category": "CreditBureau",
    "default_price_usd": 2.61
  }, {
    "_isHeader": false,
    "flag": "🇸🇬",
    "country_iso3": "SGP",
    "country_name": "Singapore",
    "country_path": "/api-reference/database-validation/singapore/credit-bureau",
    "service_id": "sgp_utility",
    "service_name": "Singapore Utility",
    "description": "Verifies input data to telco billing records and phone data.",
    "category": "Utility",
    "default_price_usd": 1.69
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "THA",
    "country_name": "Thailand",
    "country_path": "/api-reference/database-validation/thailand/national-id",
    "service_id": "tha_national_id",
    "service_name": "Thailand National ID",
    "description": "Verifies input data against government agency sourced National ID.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.35
  }, {
    "_isHeader": true,
    "label": "Africa"
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "KEN",
    "country_name": "Kenya",
    "country_path": "/api-reference/database-validation/kenya/national-id",
    "service_id": "ken_national_id",
    "service_name": "Kenya National ID",
    "description": "Verifies a Kenyan national ID number against the National Registration Bureau and compares the holder's names, date of birth and sex with the register's record.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.65
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "KEN",
    "country_name": "Kenya",
    "country_path": "/api-reference/database-validation/kenya/national-id",
    "service_id": "ken_national_id",
    "service_name": "Kenya National ID",
    "description": "Verifies a Kenyan national ID number against the National Registration Bureau and compares the holder's names, date of birth and sex with the register's record.",
    "category": "NationalIDRegistry",
    "default_price_usd": 3.15
  }, {
    "_isHeader": false,
    "flag": "🇳🇬",
    "country_iso3": "NGA",
    "country_name": "Nigeria",
    "country_path": "/api-reference/database-validation/nigeria/bank-verification-number",
    "service_id": "nga_bank_verification_number",
    "service_name": "Nigeria Bank Verification Number (BVN)",
    "description": "Verifies input data against the Nigerian Banking Industry database. Requires a selfie: the enrolment portrait held against the BVN is face-matched with it, and the record is only returned when the two are the same person.",
    "category": "Banking",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🇳🇬",
    "country_iso3": "NGA",
    "country_name": "Nigeria",
    "country_path": "/api-reference/database-validation/nigeria/bank-verification-number",
    "service_id": "nga_drivers_license",
    "service_name": "Nigeria Driver's Licence (FRSC)",
    "description": "Verifies a Nigerian driver's licence against the Federal Road Safety Corps licence register. The register only answers when the licence number, names and date of birth belong together.",
    "category": "DriverLicence",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇳🇬",
    "country_iso3": "NGA",
    "country_name": "Nigeria",
    "country_path": "/api-reference/database-validation/nigeria/bank-verification-number",
    "service_id": "nga_national_id",
    "service_name": "Nigeria National ID (NIMC)",
    "description": "Verifies data against the National Identity database.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇳🇬",
    "country_iso3": "NGA",
    "country_name": "Nigeria",
    "country_path": "/api-reference/database-validation/nigeria/bank-verification-number",
    "service_id": "nga_national_id_facial",
    "service_name": "Nigeria National ID + Selfie (NIMC)",
    "description": "Verifies a Nigerian National Identification Number (NIN) against the National Identity Management Commission register. Requires a selfie: the enrolment portrait held against the NIN is face-matched with it, and the record is only returned when the two are the same person.",
    "category": "NationalIDRegistry",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🇳🇬",
    "country_iso3": "NGA",
    "country_name": "Nigeria",
    "country_path": "/api-reference/database-validation/nigeria/bank-verification-number",
    "service_id": "nga_passport",
    "service_name": "Nigeria International Passport (NIS)",
    "description": "Verifies a Nigerian international passport against the Nigeria Immigration Service register. The register only answers when the passport number, surname and date of birth belong together.",
    "category": "Passport",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_africa_national_id",
    "service_name": "South Africa National ID (DHA)",
    "description": "Verifies input data against the Department of Home Affairs (DHA) registry in South Africa.",
    "category": "NationalIDRegistry",
    "default_price_usd": 1.1
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_africa_national_id",
    "service_name": "South Africa National ID (DHA)",
    "description": "Verifies input data against the Department of Home Affairs (DHA) registry in South Africa.",
    "category": "NationalIDRegistry",
    "default_price_usd": 2.95
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_bank_account_holder",
    "service_name": "South Africa - Bank Account Holder Verification",
    "description": "Confirms a South African bank account belongs to the named holder via the inter-bank Account Holder Verification service.",
    "category": "Banking",
    "default_price_usd": 0.4
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_company_directors",
    "service_name": "South Africa - Company Directors Lookup",
    "description": "Returns the current directors of a South African company from the CIPC commercial register.",
    "category": "CompanyRegister",
    "default_price_usd": 0.65
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_company_registry",
    "service_name": "South Africa - Company Registry Lookup",
    "description": "Looks up a South African company by registration number against the CIPC commercial register.",
    "category": "CompanyRegister",
    "default_price_usd": 0.65
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_contactability",
    "service_name": "South Africa - Contactability Lookup",
    "description": "Returns known phone numbers, emails, and addresses tied to a South African individual.",
    "category": "Telecom",
    "default_price_usd": 0.35
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_criminal_face_screening",
    "service_name": "South Africa - Criminal Screening by Face",
    "description": "Screens a facial image against published criminal-record datasets to surface potential matches.",
    "category": "Criminal",
    "default_price_usd": 7.0
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_dha_fingerprint_match",
    "service_name": "South Africa - DHA Fingerprint Match",
    "description": "Verifies provided fingerprint images against the Department of Home Affairs fingerprint register.",
    "category": "Government",
    "default_price_usd": 1.1
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_dha_photo",
    "service_name": "South Africa - DHA Photo Retrieval",
    "description": "Retrieves the registered Department of Home Affairs photograph for a South African ID number.",
    "category": "Government",
    "default_price_usd": 1.1
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_drivers_license",
    "service_name": "South Africa - Driving License Verification",
    "description": "Verifies a South African driving license against the NATIS / Department of Transport register.",
    "category": "DriverLicence",
    "default_price_usd": 0.7
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_fraud_prevention",
    "service_name": "South Africa - Fraud Prevention Screening",
    "description": "Screens an individual against the South African Fraud Prevention Service (SAFPS) watch-list.",
    "category": "Background",
    "default_price_usd": 0.3
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_person_directorships",
    "service_name": "South Africa - Person Directorships Lookup",
    "description": "Returns all CIPC-registered directorships held by a South African individual.",
    "category": "CompanyRegister",
    "default_price_usd": 1.2
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_refugee",
    "service_name": "South Africa - Refugee File Verification",
    "description": "Verifies a refugee file number against the South African Department of Home Affairs refugee register.",
    "category": "Government",
    "default_price_usd": 1.1
  }, {
    "_isHeader": false,
    "flag": "🇿🇦",
    "country_iso3": "ZAF",
    "country_name": "South Africa",
    "country_path": "/api-reference/database-validation/south-africa/bank-account-holder",
    "service_id": "zaf_vehicle_ownership",
    "service_name": "South Africa - Vehicle Ownership Verification",
    "description": "Confirms that a South African individual is the registered owner of a given vehicle via the NATIS vehicle register.",
    "category": "Other",
    "default_price_usd": 2.8
  }, {
    "_isHeader": false,
    "flag": "🏳️",
    "country_iso3": "ZMB",
    "country_name": "Zambia",
    "country_path": "/api-reference/database-validation/zambia/national-id",
    "service_id": "zmb_national_id",
    "service_name": "Zambia NRC (tax register)",
    "description": "Verifies that a Zambian National Registration Card (NRC) number belongs to the named taxpayer in the Zambia Revenue Authority register. The register holds the taxpayer's full name only, so the name is the one field compared.",
    "category": "TaxRegistry",
    "default_price_usd": 0.2
  }, {
    "_isHeader": true,
    "label": "Global"
  }, {
    "_isHeader": false,
    "flag": "🌐",
    "country_iso3": "GLB",
    "country_name": "Global",
    "country_path": "/api-reference/database-validation/global/identity-enrichment",
    "service_id": "glb_identity_enrichment",
    "service_name": "Global - Identity Enrichment",
    "description": "Resolves persons (names, DOB, addresses, phones, emails, national IDs) and a name-match score from an email and/or phone number via a global risk-insights network. Charged per request.",
    "category": "IdentityEnrichment",
    "default_price_usd": 0.2
  }, {
    "_isHeader": false,
    "flag": "🌐",
    "country_iso3": "GLB",
    "country_name": "Global",
    "country_path": "/api-reference/database-validation/global/identity-enrichment",
    "service_id": "glb_intelligence_service",
    "service_name": "Global - Core Intelligence Service",
    "description": "Performs a series of checks across multiple data partners and returns risks associated with each data point.",
    "category": "Telecom",
    "default_price_usd": 0.41
  }, {
    "_isHeader": false,
    "flag": "🌐",
    "country_iso3": "GLB",
    "country_name": "Global",
    "country_path": "/api-reference/database-validation/global/identity-enrichment",
    "service_id": "glb_swap",
    "service_name": "Global - Sim Swap",
    "description": "Returns data points associated with any Sim Swap activity on the input phone number.",
    "category": "Telecom",
    "default_price_usd": 0.18
  }];
  return <div className="not-prose w-full overflow-x-auto">
      <table className="w-full text-sm border-collapse">
        <thead>
          <tr className="text-left border-b border-gray-200 dark:border-gray-700">
            <th className="px-3 py-2 font-medium whitespace-nowrap">Country</th>
            <th className="px-3 py-2 font-medium whitespace-nowrap">ISO3</th>
            <th className="px-3 py-2 font-medium whitespace-nowrap">Service</th>
            <th className="px-3 py-2 font-medium">Description</th>
            <th className="px-3 py-2 font-medium whitespace-nowrap text-right">Price (USD)</th>
          </tr>
        </thead>
        <tbody>
          {ROWS.map((row, i) => row._isHeader ? <tr key={`h-${i}`} className="bg-gray-50 dark:bg-gray-900/40">
              <td colSpan={5} className="px-3 py-2 font-semibold uppercase text-xs tracking-wider text-gray-600 dark:text-gray-300">
                {row.label}
              </td>
            </tr> : <tr key={row.service_id} className="border-b border-gray-100 dark:border-gray-800 align-top">
              <td className="px-3 py-2 whitespace-nowrap">
                <span className="mr-2 text-lg" aria-hidden="true">{row.flag}</span>
                <a href={row.country_path} className="hover:underline">
                  {row.country_name}
                </a>
              </td>
              <td className="px-3 py-2 whitespace-nowrap font-mono text-xs text-gray-500">
                {row.country_iso3}
              </td>
              <td className="px-3 py-2 whitespace-nowrap">
                <div className="font-medium">{row.service_name}</div>
                <code className="text-xs text-gray-500">{row.service_id}</code>
              </td>
              <td className="px-3 py-2 whitespace-normal max-w-md">
                <span className="text-gray-700 dark:text-gray-300">{row.description}</span>
              </td>
              <td className="px-3 py-2 whitespace-nowrap text-right font-mono text-xs">
                ${row.default_price_usd.toFixed(2)}
              </td>
            </tr>)}
        </tbody>
      </table>
    </div>;
};

export const CoverageWorldMap = () => {
  const {useEffect, useRef, useState} = React;
  const coverage = {
    "ARE": {
      "iso3": "ARE",
      "iso2": "AE",
      "name": "United Arab Emirates",
      "live": false,
      "services": []
    },
    "ARG": {
      "iso3": "ARG",
      "iso2": "AR",
      "name": "Argentina",
      "live": true,
      "services": [{
        "service_id": "arg_citizens",
        "service_name": "Argentina Citizens (AFIP)",
        "category": "Citizenship",
        "data_domain": "Identity",
        "price": 1.9,
        "live": true
      }, {
        "service_id": "arg_credit_bureau",
        "service_name": "Argentina Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 2.15,
        "live": true
      }, {
        "service_id": "arg_renaper",
        "service_name": "Argentina - DNI verification (RENAPER)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "arg_renaper_data",
        "service_name": "Argentina - DNI data verification (RENAPER, no selfie)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "AUS": {
      "iso3": "AUS",
      "iso2": "AU",
      "name": "Australia",
      "live": true,
      "services": [{
        "service_id": "aus_australia_driver_licence",
        "service_name": "DVS - Australia Driver Licence",
        "category": "DriverLicence",
        "data_domain": "Document",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_australia_medicare_card",
        "service_name": "DVS - Australia Medicare Card",
        "category": "Healthcare",
        "data_domain": "Health",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_australia_passport",
        "service_name": "DVS - Australia Passport",
        "category": "Passport",
        "data_domain": "Document",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_australia_visa",
        "service_name": "DVS - Australia Visa",
        "category": "Visa",
        "data_domain": "Document",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_birth_certificate",
        "service_name": "Australia - DVS - Birth Certificate",
        "category": "BirthRecord",
        "data_domain": "Identity",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_centrelink_card",
        "service_name": "Australia - DVS - Centrelink Card",
        "category": "Government",
        "data_domain": "Government",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_change_of_name_certificate",
        "service_name": "Australia - DVS – Change of Name Certificate",
        "category": "CivilRegistry",
        "data_domain": "Identity",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_citizenship_certificate",
        "service_name": "Australia - DVS – Citizenship Certificate",
        "category": "Citizenship",
        "data_domain": "Identity",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_credit_bureau",
        "service_name": "Australia Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 0.7,
        "live": false
      }, {
        "service_id": "aus_death_check",
        "service_name": "Australia Death Check (BDM)",
        "category": "DeathRecord",
        "data_domain": "Other",
        "price": 0.05,
        "live": true
      }, {
        "service_id": "aus_electoral_roll",
        "service_name": "Australia Electoral Roll",
        "category": "ElectoralRoll",
        "data_domain": "Government",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_immicard",
        "service_name": "Australia - DVS - ImmiCard",
        "category": "Visa",
        "data_domain": "Document",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_marriage_certificate",
        "service_name": "Australia - DVS – Marriage Certificate",
        "category": "CivilRegistry",
        "data_domain": "Identity",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_superannuation_payroll",
        "service_name": "Australia Superannuation & Payroll",
        "category": "Superannuation",
        "data_domain": "Financial",
        "price": 0.67,
        "live": false
      }, {
        "service_id": "aus_travel_document",
        "service_name": "Australia - DVS - Travel Document",
        "category": "Passport",
        "data_domain": "Document",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "aus_vevo",
        "service_name": "Australia VEVO",
        "category": "Visa",
        "data_domain": "Document",
        "price": 0.32,
        "live": true
      }]
    },
    "AUT": {
      "iso3": "AUT",
      "iso2": "AT",
      "name": "Austria",
      "live": true,
      "services": [{
        "service_id": "aut_credit_bureau",
        "service_name": "Austria Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 1.6,
        "live": true
      }]
    },
    "BEL": {
      "iso3": "BEL",
      "iso2": "BE",
      "name": "Belgium",
      "live": false,
      "services": []
    },
    "BGD": {
      "iso3": "BGD",
      "iso2": "BD",
      "name": "Bangladesh",
      "live": false,
      "services": []
    },
    "BOL": {
      "iso3": "BOL",
      "iso2": "BO",
      "name": "Bolivia",
      "live": true,
      "services": [{
        "service_id": "bol_cedula",
        "service_name": "Bolivia - CI verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "BRA": {
      "iso3": "BRA",
      "iso2": "BR",
      "name": "Brazil",
      "live": true,
      "services": [{
        "service_id": "bra_antecedentes_criminais_pf",
        "service_name": "Brazil - Federal Criminal Record (Polícia Federal)",
        "category": "NationalCriminal",
        "data_domain": "Criminal",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "bra_cnh_facial_qrcode",
        "service_name": "Brazil - CNH QR code + face match (Datavalid)",
        "category": "DriverLicence",
        "data_domain": "Biometric",
        "price": 0.5,
        "live": true
      }, {
        "service_id": "bra_company_directors",
        "service_name": "Brazil - Company Partners and Directors (QSA)",
        "category": "CompanyRegister",
        "data_domain": "Government",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "bra_company_registry",
        "service_name": "Brazil - Company Registry Lookup (CNPJ)",
        "category": "CompanyRegister",
        "data_domain": "Government",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "bra_cpf",
        "service_name": "Brazil - CPF status check",
        "category": "TaxRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "bra_cpf_facial",
        "service_name": "Brazil - CPF + face match (Datavalid)",
        "category": "NationalIDRegistry",
        "data_domain": "Biometric",
        "price": 0.45,
        "live": true
      }, {
        "service_id": "bra_death_check",
        "service_name": "Brazil - Death Check (CPF)",
        "category": "DeathRecord",
        "data_domain": "Other",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "bra_residential",
        "service_name": "Brazil Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.35,
        "live": true
      }, {
        "service_id": "bra_tax_registration",
        "service_name": "Brazil Tax Registration (CPF/CNPJ)",
        "category": "TaxRegistry",
        "data_domain": "Financial",
        "price": 0.15,
        "live": true
      }, {
        "service_id": "bra_unico_idcloud",
        "service_name": "BRA - Unico IDCloud (CPF + selfie)",
        "category": "BiometricRiskScore",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "CAN": {
      "iso3": "CAN",
      "iso2": "CA",
      "name": "Canada",
      "live": true,
      "services": [{
        "service_id": "can_credit_bureau_2_non_fintrac",
        "service_name": "Canada Credit Bureau 2 (Non-FINTRAC)",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 1.05,
        "live": true
      }, {
        "service_id": "can_credit_bureau_fintrac",
        "service_name": "Canada Credit Bureau (FINTRAC)",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 2.9,
        "live": true
      }, {
        "service_id": "can_residential",
        "service_name": "Canada Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.25,
        "live": true
      }]
    },
    "CHE": {
      "iso3": "CHE",
      "iso2": "CH",
      "name": "Switzerland",
      "live": true,
      "services": [{
        "service_id": "che_credit_bureau",
        "service_name": "Switzerland Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 2.0,
        "live": true
      }]
    },
    "CHL": {
      "iso3": "CHL",
      "iso2": "CL",
      "name": "Chile",
      "live": true,
      "services": [{
        "service_id": "chl_rut",
        "service_name": "Chile - RUT verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "CHN": {
      "iso3": "CHN",
      "iso2": "CN",
      "name": "China",
      "live": true,
      "services": [{
        "service_id": "chn_bank_card",
        "service_name": "China Bank Card",
        "category": "Banking",
        "data_domain": "Financial",
        "price": 0.4,
        "live": true
      }, {
        "service_id": "chn_national_id",
        "service_name": "China National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.3,
        "live": true
      }, {
        "service_id": "chn_passport_verification",
        "service_name": "China Passport Verification",
        "category": "Passport",
        "data_domain": "Document",
        "price": 1.0,
        "live": true
      }, {
        "service_id": "chn_phone",
        "service_name": "China Phone",
        "category": "Telecom",
        "data_domain": "Telecom",
        "price": 0.3,
        "live": true
      }]
    },
    "CIV": {
      "iso3": "CIV",
      "iso2": "CI",
      "name": "Côte d'Ivoire",
      "live": false,
      "services": []
    },
    "COL": {
      "iso3": "COL",
      "iso2": "CO",
      "name": "Colombia",
      "live": true,
      "services": [{
        "service_id": "col_cedula",
        "service_name": "Colombia - Cédula verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "col_migracion",
        "service_name": "Colombia - Migración Colombia foreigner status",
        "category": "ResidencePermit",
        "data_domain": "Identity",
        "price": 1.2,
        "live": true
      }]
    },
    "CRI": {
      "iso3": "CRI",
      "iso2": "CR",
      "name": "Costa Rica",
      "live": true,
      "services": [{
        "service_id": "cri_cedula",
        "service_name": "Costa Rica - Cédula verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "CZE": {
      "iso3": "CZE",
      "iso2": "CZ",
      "name": "Czech Republic",
      "live": false,
      "services": []
    },
    "DEU": {
      "iso3": "DEU",
      "iso2": "DE",
      "name": "Germany",
      "live": true,
      "services": [{
        "service_id": "deu_credit_bureau",
        "service_name": "Germany Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 0.84,
        "live": true
      }, {
        "service_id": "deu_phone_2",
        "service_name": "Germany Phone 2",
        "category": "Telecom",
        "data_domain": "Telecom",
        "price": 0.59,
        "live": true
      }]
    },
    "DNK": {
      "iso3": "DNK",
      "iso2": "DK",
      "name": "Denmark",
      "live": true,
      "services": [{
        "service_id": "dnk_consumer_2",
        "service_name": "Denmark Consumer 2",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.97,
        "live": false
      }, {
        "service_id": "dnk_national_id",
        "service_name": "Denmark National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 1.39,
        "live": true
      }]
    },
    "DOM": {
      "iso3": "DOM",
      "iso2": "DO",
      "name": "Dominican Republic",
      "live": true,
      "services": [{
        "service_id": "dom_cedula",
        "service_name": "Dominican Republic - Cédula verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.05,
        "live": true
      }]
    },
    "ECU": {
      "iso3": "ECU",
      "iso2": "EC",
      "name": "Ecuador",
      "live": true,
      "services": [{
        "service_id": "ecu_cedula",
        "service_name": "Ecuador - Cédula verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "ESP": {
      "iso3": "ESP",
      "iso2": "ES",
      "name": "Spain",
      "live": true,
      "services": [{
        "service_id": "esp_dni",
        "service_name": "Spain - DNI/NIE verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 1.26,
        "live": true
      }]
    },
    "FIN": {
      "iso3": "FIN",
      "iso2": "FI",
      "name": "Finland",
      "live": true,
      "services": [{
        "service_id": "fin_consumer_2",
        "service_name": "Finland Consumer 2",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.97,
        "live": false
      }, {
        "service_id": "fin_national_id",
        "service_name": "Finland National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 2.1,
        "live": true
      }]
    },
    "FRA": {
      "iso3": "FRA",
      "iso2": "FR",
      "name": "France",
      "live": true,
      "services": [{
        "service_id": "fra_phone",
        "service_name": "France Phone",
        "category": "Telecom",
        "data_domain": "Telecom",
        "price": 0.67,
        "live": true
      }, {
        "service_id": "fra_residential",
        "service_name": "France Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.89,
        "live": true
      }, {
        "service_id": "fra_utility",
        "service_name": "France Utility",
        "category": "Utility",
        "data_domain": "Address",
        "price": 0.65,
        "live": true
      }]
    },
    "GBR": {
      "iso3": "GBR",
      "iso2": "GB",
      "name": "United Kingdom",
      "live": true,
      "services": [{
        "service_id": "gbr_kingdom_credit_bureau",
        "service_name": "United Kingdom Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 0.9,
        "live": true
      }, {
        "service_id": "gbr_kingdom_financial_services",
        "service_name": "United Kingdom Financial Services",
        "category": "FinancialServices",
        "data_domain": "Financial",
        "price": 0.95,
        "live": true
      }, {
        "service_id": "gbr_kingdom_phone_2",
        "service_name": "United Kingdom Phone 2",
        "category": "Telecom",
        "data_domain": "Telecom",
        "price": 0.96,
        "live": true
      }, {
        "service_id": "gbr_kingdom_residential",
        "service_name": "United Kingdom Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.25,
        "live": true
      }]
    },
    "GHA": {
      "iso3": "GHA",
      "iso2": "GH",
      "name": "Ghana",
      "live": false,
      "services": []
    },
    "GRC": {
      "iso3": "GRC",
      "iso2": "GR",
      "name": "Greece",
      "live": false,
      "services": []
    },
    "GTM": {
      "iso3": "GTM",
      "iso2": "GT",
      "name": "Guatemala",
      "live": true,
      "services": [{
        "service_id": "gtm_dpi",
        "service_name": "Guatemala - DPI verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "gtm_dpi_facial",
        "service_name": "Guatemala - DPI + face match (RENAP)",
        "category": "NationalIDRegistry",
        "data_domain": "Biometric",
        "price": 0.35,
        "live": true
      }]
    },
    "HKG": {
      "iso3": "HKG",
      "iso2": "HK",
      "name": "Hong Kong",
      "live": false,
      "services": []
    },
    "HND": {
      "iso3": "HND",
      "iso2": "HN",
      "name": "Honduras",
      "live": true,
      "services": [{
        "service_id": "hnd_dni",
        "service_name": "Honduras - DNI verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "HUN": {
      "iso3": "HUN",
      "iso2": "HU",
      "name": "Hungary",
      "live": false,
      "services": []
    },
    "IDN": {
      "iso3": "IDN",
      "iso2": "ID",
      "name": "Indonesia",
      "live": true,
      "services": [{
        "service_id": "idn_residential_identity_card",
        "service_name": "Indonesia Residential Identity Card",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.35,
        "live": true
      }]
    },
    "IND": {
      "iso3": "IND",
      "iso2": "IN",
      "name": "India",
      "live": true,
      "services": [{
        "service_id": "ind_aadhaar",
        "service_name": "India Aadhaar (UIDAI)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.25,
        "live": true
      }, {
        "service_id": "ind_drivers_licence",
        "service_name": "India Drivers Licence (RTO)",
        "category": "DriverLicence",
        "data_domain": "Document",
        "price": 0.15,
        "live": true
      }, {
        "service_id": "ind_epic_voter_s_registration",
        "service_name": "India EPIC (Voter's Registration) (ECI)",
        "category": "ElectoralRoll",
        "data_domain": "Government",
        "price": 0.15,
        "live": true
      }, {
        "service_id": "ind_pan_permanent_account_number",
        "service_name": "India PAN (Permanent Account Number) (ITD)",
        "category": "TaxRegistry",
        "data_domain": "Financial",
        "price": 0.25,
        "live": true
      }]
    },
    "IRL": {
      "iso3": "IRL",
      "iso2": "IE",
      "name": "Ireland",
      "live": false,
      "services": []
    },
    "ITA": {
      "iso3": "ITA",
      "iso2": "IT",
      "name": "Italy",
      "live": true,
      "services": [{
        "service_id": "ita_credit_bureau",
        "service_name": "Italy Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 1.95,
        "live": true
      }, {
        "service_id": "ita_residential",
        "service_name": "Italy Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.45,
        "live": true
      }]
    },
    "KEN": {
      "iso3": "KEN",
      "iso2": "KE",
      "name": "Kenya",
      "live": true,
      "services": [{
        "service_id": "ken_national_id",
        "service_name": "Kenya National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.65,
        "live": true
      }]
    },
    "KHM": {
      "iso3": "KHM",
      "iso2": "KH",
      "name": "Cambodia",
      "live": true,
      "services": [{
        "service_id": "khm_national_id",
        "service_name": "Cambodia National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.35,
        "live": true
      }]
    },
    "MAR": {
      "iso3": "MAR",
      "iso2": "MA",
      "name": "Morocco",
      "live": false,
      "services": []
    },
    "MEX": {
      "iso3": "MEX",
      "iso2": "MX",
      "name": "Mexico",
      "live": true,
      "services": [{
        "service_id": "mex_curp",
        "service_name": "Mexico - CURP verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "mex_ine_vigencia",
        "service_name": "Mexico - INE credential validity verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "MYS": {
      "iso3": "MYS",
      "iso2": "MY",
      "name": "Malaysia",
      "live": true,
      "services": [{
        "service_id": "mys_national_id",
        "service_name": "Malaysia National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.35,
        "live": true
      }]
    },
    "NGA": {
      "iso3": "NGA",
      "iso2": "NG",
      "name": "Nigeria",
      "live": true,
      "services": [{
        "service_id": "nga_bank_verification_number",
        "service_name": "Nigeria Bank Verification Number (BVN)",
        "category": "Banking",
        "data_domain": "Financial",
        "price": 0.35,
        "live": true
      }, {
        "service_id": "nga_drivers_license",
        "service_name": "Nigeria Driver's Licence (FRSC)",
        "category": "DriverLicence",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "nga_national_id",
        "service_name": "Nigeria National ID (NIMC)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "nga_national_id_facial",
        "service_name": "Nigeria National ID + Selfie (NIMC)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.35,
        "live": true
      }, {
        "service_id": "nga_passport",
        "service_name": "Nigeria International Passport (NIS)",
        "category": "Passport",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "NLD": {
      "iso3": "NLD",
      "iso2": "NL",
      "name": "Netherlands",
      "live": true,
      "services": [{
        "service_id": "nld_residential",
        "service_name": "Netherlands Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.9,
        "live": true
      }]
    },
    "NOR": {
      "iso3": "NOR",
      "iso2": "NO",
      "name": "Norway",
      "live": true,
      "services": [{
        "service_id": "nor_residential",
        "service_name": "Norway Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 2.42,
        "live": true
      }]
    },
    "NZL": {
      "iso3": "NZL",
      "iso2": "NZ",
      "name": "New Zealand",
      "live": true,
      "services": [{
        "service_id": "nzl_new_zealand_births",
        "service_name": "DIA - New Zealand Births",
        "category": "BirthRecord",
        "data_domain": "Identity",
        "price": 1.0,
        "live": true
      }, {
        "service_id": "nzl_new_zealand_citizenship",
        "service_name": "DIA - New Zealand Citizenship",
        "category": "Citizenship",
        "data_domain": "Identity",
        "price": 1.0,
        "live": false
      }, {
        "service_id": "nzl_new_zealand_passport",
        "service_name": "DIA - New Zealand Passport",
        "category": "Passport",
        "data_domain": "Document",
        "price": 1.0,
        "live": true
      }, {
        "service_id": "nzl_zealand_death_check",
        "service_name": "New Zealand Death Check (BDM)",
        "category": "DeathRecord",
        "data_domain": "Other",
        "price": 0.16,
        "live": true
      }, {
        "service_id": "nzl_zealand_drivers_licence",
        "service_name": "New Zealand Drivers Licence (NZTA)",
        "category": "DriverLicence",
        "data_domain": "Document",
        "price": 0.35,
        "live": true
      }]
    },
    "OMN": {
      "iso3": "OMN",
      "iso2": "OM",
      "name": "Oman",
      "live": false,
      "services": []
    },
    "PAN": {
      "iso3": "PAN",
      "iso2": "PA",
      "name": "Panama",
      "live": true,
      "services": [{
        "service_id": "pan_cedula_sib",
        "service_name": "Panama - Cédula with biometric face-match (SIB)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.75,
        "live": true
      }, {
        "service_id": "pan_cedula_sib_plus",
        "service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 1.5,
        "live": true
      }]
    },
    "PER": {
      "iso3": "PER",
      "iso2": "PE",
      "name": "Peru",
      "live": true,
      "services": [{
        "service_id": "per_dni",
        "service_name": "Peru - DNI verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }, {
        "service_id": "per_tax_registration",
        "service_name": "Peru Tax Registration (SUNAT)",
        "category": "TaxRegistry",
        "data_domain": "Financial",
        "price": 1.75,
        "live": true
      }]
    },
    "PHL": {
      "iso3": "PHL",
      "iso2": "PH",
      "name": "Philippines",
      "live": true,
      "services": [{
        "service_id": "phl_residential",
        "service_name": "Philippines Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.35,
        "live": true
      }]
    },
    "POL": {
      "iso3": "POL",
      "iso2": "PL",
      "name": "Poland",
      "live": false,
      "services": []
    },
    "PRT": {
      "iso3": "PRT",
      "iso2": "PT",
      "name": "Portugal",
      "live": false,
      "services": []
    },
    "PRY": {
      "iso3": "PRY",
      "iso2": "PY",
      "name": "Paraguay",
      "live": true,
      "services": [{
        "service_id": "pry_cedula",
        "service_name": "Paraguay - CI verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "QAT": {
      "iso3": "QAT",
      "iso2": "QA",
      "name": "Qatar",
      "live": false,
      "services": []
    },
    "ROU": {
      "iso3": "ROU",
      "iso2": "RO",
      "name": "Romania",
      "live": false,
      "services": []
    },
    "SGP": {
      "iso3": "SGP",
      "iso2": "SG",
      "name": "Singapore",
      "live": true,
      "services": [{
        "service_id": "sgp_credit_bureau",
        "service_name": "Singapore Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 2.61,
        "live": true
      }, {
        "service_id": "sgp_utility",
        "service_name": "Singapore Utility",
        "category": "Utility",
        "data_domain": "Address",
        "price": 1.69,
        "live": true
      }]
    },
    "SLV": {
      "iso3": "SLV",
      "iso2": "SV",
      "name": "El Salvador",
      "live": true,
      "services": [{
        "service_id": "slv_dui",
        "service_name": "El Salvador - DUI verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "SVK": {
      "iso3": "SVK",
      "iso2": "SK",
      "name": "Slovakia",
      "live": false,
      "services": []
    },
    "SWE": {
      "iso3": "SWE",
      "iso2": "SE",
      "name": "Sweden",
      "live": true,
      "services": [{
        "service_id": "swe_national_id",
        "service_name": "Sweden National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.35,
        "live": true
      }, {
        "service_id": "swe_phone",
        "service_name": "Sweden Phone",
        "category": "Telecom",
        "data_domain": "Telecom",
        "price": 0.35,
        "live": true
      }]
    },
    "THA": {
      "iso3": "THA",
      "iso2": "TH",
      "name": "Thailand",
      "live": true,
      "services": [{
        "service_id": "tha_national_id",
        "service_name": "Thailand National ID",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.35,
        "live": true
      }]
    },
    "UGA": {
      "iso3": "UGA",
      "iso2": "UG",
      "name": "Uganda",
      "live": false,
      "services": []
    },
    "URY": {
      "iso3": "URY",
      "iso2": "UY",
      "name": "Uruguay",
      "live": true,
      "services": [{
        "service_id": "ury_cedula",
        "service_name": "Uruguay - CI verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "USA": {
      "iso3": "USA",
      "iso2": "US",
      "name": "United States",
      "live": true,
      "services": [{
        "service_id": "usa_states_credit_bureau",
        "service_name": "United States of America - United States Credit Bureau",
        "category": "CreditBureau",
        "data_domain": "Financial",
        "price": 0.15,
        "live": true
      }, {
        "service_id": "usa_states_death_check",
        "service_name": "United States of America - United States Death Check (SSDMF)",
        "category": "DeathRecord",
        "data_domain": "Other",
        "price": 0.06,
        "live": true
      }, {
        "service_id": "usa_states_financial_services",
        "service_name": "United States of America - United States Financial Services",
        "category": "FinancialServices",
        "data_domain": "Financial",
        "price": 0.12,
        "live": true
      }, {
        "service_id": "usa_states_phone_2",
        "service_name": "United States of America - United States Phone 2",
        "category": "Telecom",
        "data_domain": "Telecom",
        "price": 0.15,
        "live": true
      }, {
        "service_id": "usa_states_residential",
        "service_name": "United States of America - United States Residential",
        "category": "Residential",
        "data_domain": "Address",
        "price": 0.6,
        "live": true
      }]
    },
    "VEN": {
      "iso3": "VEN",
      "iso2": "VE",
      "name": "Venezuela",
      "live": true,
      "services": [{
        "service_id": "ven_cedula",
        "service_name": "Venezuela - Cédula verification",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "ZAF": {
      "iso3": "ZAF",
      "iso2": "ZA",
      "name": "South Africa",
      "live": true,
      "services": [{
        "service_id": "zaf_africa_national_id",
        "service_name": "South Africa National ID (DHA)",
        "category": "NationalIDRegistry",
        "data_domain": "Identity",
        "price": 1.1,
        "live": true
      }, {
        "service_id": "zaf_bank_account_holder",
        "service_name": "South Africa - Bank Account Holder Verification",
        "category": "Banking",
        "data_domain": "Financial",
        "price": 0.4,
        "live": true
      }, {
        "service_id": "zaf_company_directors",
        "service_name": "South Africa - Company Directors Lookup",
        "category": "CompanyRegister",
        "data_domain": "Government",
        "price": 0.65,
        "live": true
      }, {
        "service_id": "zaf_company_registry",
        "service_name": "South Africa - Company Registry Lookup",
        "category": "CompanyRegister",
        "data_domain": "Government",
        "price": 0.65,
        "live": true
      }, {
        "service_id": "zaf_contactability",
        "service_name": "South Africa - Contactability Lookup",
        "category": "Telecom",
        "data_domain": "Telecom",
        "price": 0.35,
        "live": true
      }, {
        "service_id": "zaf_criminal_face_screening",
        "service_name": "South Africa - Criminal Screening by Face",
        "category": "Criminal",
        "data_domain": "Criminal",
        "price": 7.0,
        "live": true
      }, {
        "service_id": "zaf_dha_fingerprint_match",
        "service_name": "South Africa - DHA Fingerprint Match",
        "category": "Government",
        "data_domain": "Biometric",
        "price": 1.1,
        "live": true
      }, {
        "service_id": "zaf_dha_photo",
        "service_name": "South Africa - DHA Photo Retrieval",
        "category": "Government",
        "data_domain": "Biometric",
        "price": 1.1,
        "live": true
      }, {
        "service_id": "zaf_drivers_license",
        "service_name": "South Africa - Driving License Verification",
        "category": "DriverLicence",
        "data_domain": "Identity",
        "price": 0.7,
        "live": true
      }, {
        "service_id": "zaf_fraud_prevention",
        "service_name": "South Africa - Fraud Prevention Screening",
        "category": "Background",
        "data_domain": "Background",
        "price": 0.3,
        "live": true
      }, {
        "service_id": "zaf_person_directorships",
        "service_name": "South Africa - Person Directorships Lookup",
        "category": "CompanyRegister",
        "data_domain": "Government",
        "price": 1.2,
        "live": true
      }, {
        "service_id": "zaf_refugee",
        "service_name": "South Africa - Refugee File Verification",
        "category": "Government",
        "data_domain": "Identity",
        "price": 1.1,
        "live": true
      }, {
        "service_id": "zaf_vehicle_ownership",
        "service_name": "South Africa - Vehicle Ownership Verification",
        "category": "Other",
        "data_domain": "Government",
        "price": 2.8,
        "live": true
      }]
    },
    "ZMB": {
      "iso3": "ZMB",
      "iso2": "ZM",
      "name": "Zambia",
      "live": true,
      "services": [{
        "service_id": "zmb_national_id",
        "service_name": "Zambia NRC (tax register)",
        "category": "TaxRegistry",
        "data_domain": "Identity",
        "price": 0.2,
        "live": true
      }]
    },
    "ZWE": {
      "iso3": "ZWE",
      "iso2": "ZW",
      "name": "Zimbabwe",
      "live": false,
      "services": []
    }
  };
  const flagEmoji = iso2 => {
    if (!iso2 || iso2.length !== 2) return "🌐";
    const base = 0x1f1e6;
    const a = iso2.toUpperCase().charCodeAt(0) - 0x41 + base;
    const b = iso2.toUpperCase().charCodeAt(1) - 0x41 + base;
    return String.fromCodePoint(a, b);
  };
  const formatPrice = p => {
    if (p == null) return null;
    const n = Number(p);
    return Number.isNaN(n) ? null : "$" + n.toFixed(2);
  };
  const liveCountries = Object.values(coverage).filter(country => country.live).sort((a, b) => a.name.localeCompare(b.name));
  const onDemandCountries = Object.values(coverage).filter(country => !country.live).sort((a, b) => a.name.localeCompare(b.name));
  const liveServices = liveCountries.reduce((total, country) => total + country.services.filter(service => service.live).length, 0);
  const totalServices = Object.values(coverage).reduce((total, country) => total + country.services.length, 0);
  const cheapestLivePrice = services => {
    const live = (services || []).filter(service => service.live && service.price != null);
    if (!live.length) return null;
    return Math.min(...live.map(service => Number(service.price)));
  };
  return <div className="not-prose" style={{
    margin: "1.5rem 0",
    padding: "1.25rem",
    borderRadius: "12px",
    border: "1px solid rgba(148,163,184,0.25)",
    background: "linear-gradient(180deg, rgba(37,103,255,0.06) 0%, rgba(37,103,255,0) 70%)"
  }}>
      <div style={{
    display: "grid",
    gridTemplateColumns: "repeat(auto-fit, minmax(160px, 1fr))",
    gap: "12px",
    marginBottom: "1rem"
  }}>
        {[[liveCountries.length, "live countries"], [liveServices, "live services"], [Object.keys(coverage).length, "catalog countries"], [totalServices, "catalog services"]].map(([value, label]) => <div key={label} style={{
    borderRadius: "10px",
    border: "1px solid rgba(148,163,184,0.20)",
    background: "#fff",
    padding: "12px"
  }}>
            <div style={{
    fontSize: "28px",
    lineHeight: 1,
    fontWeight: 700,
    color: "#2567ff"
  }}>
              {value}
            </div>
            <div style={{
    marginTop: "4px",
    fontSize: "11px",
    textTransform: "uppercase",
    letterSpacing: "0.05em",
    color: "var(--mintlify-text-muted, #6b7280)"
  }}>
              {label}
            </div>
          </div>)}
      </div>

      <div style={{
    borderRadius: "10px",
    border: "1px solid rgba(148,163,184,0.20)",
    background: "#fff",
    overflow: "hidden"
  }}>
        <div style={{
    padding: "12px 14px",
    borderBottom: "1px solid rgba(148,163,184,0.20)",
    display: "flex",
    justifyContent: "space-between",
    gap: "12px",
    alignItems: "center"
  }}>
          <div>
            <div style={{
    fontSize: "14px",
    fontWeight: 700
  }}>Live Database Validation coverage</div>
            <div style={{
    fontSize: "12px",
    color: "var(--mintlify-text-muted, #6b7280)"
  }}>
              Production-ready countries and the cheapest live service available in each.
            </div>
          </div>
          <span style={{
    background: "#2567ff",
    color: "#fff",
    padding: "3px 9px",
    borderRadius: "9999px",
    fontSize: "10px",
    fontWeight: 700,
    letterSpacing: "0.04em"
  }}>
            LIVE
          </span>
        </div>

        <div style={{
    display: "grid",
    gridTemplateColumns: "repeat(auto-fill, minmax(220px, 1fr))",
    gap: "1px",
    background: "rgba(148,163,184,0.20)"
  }}>
          {liveCountries.map(country => {
    const live = country.services.filter(service => service.live);
    const cheapest = cheapestLivePrice(country.services);
    return <a key={country.iso3} href={`/api-reference/database-validation/${country.name.toLowerCase().replace(/[^a-z]+/g, "-").replace(/^-|-$/g, "")}`} style={{
      display: "block",
      background: "#fff",
      padding: "12px",
      textDecoration: "none",
      color: "inherit"
    }}>
                <div style={{
      display: "flex",
      alignItems: "center",
      gap: "8px"
    }}>
                  <span style={{
      fontSize: "20px"
    }}>{flagEmoji(country.iso2)}</span>
                  <span style={{
      fontWeight: 700,
      fontSize: "13px"
    }}>{country.name}</span>
                  {cheapest != null && <span style={{
      marginLeft: "auto",
      fontSize: "11px",
      color: "#2567ff",
      fontWeight: 700
    }}>
                      from {formatPrice(cheapest)}
                    </span>}
                </div>
                <div style={{
      marginTop: "6px",
      fontSize: "11px",
      color: "var(--mintlify-text-muted, #6b7280)"
    }}>
                  {live.length} {live.length === 1 ? "service" : "services"}
                </div>
              </a>;
  })}
        </div>
      </div>

      <details style={{
    marginTop: "0.75rem"
  }}>
        <summary style={{
    cursor: "pointer",
    fontSize: "12px",
    color: "var(--mintlify-text-muted, #6b7280)"
  }}>
          Show on-demand catalog countries ({onDemandCountries.length})
        </summary>
        <div style={{
    display: "flex",
    flexWrap: "wrap",
    gap: "6px",
    marginTop: "0.75rem"
  }}>
          {onDemandCountries.map(country => <span key={country.iso3} style={{
    display: "inline-flex",
    alignItems: "center",
    gap: "4px",
    border: "1px solid rgba(148,163,184,0.30)",
    borderRadius: "9999px",
    padding: "4px 8px",
    fontSize: "11px",
    color: "var(--mintlify-text-muted, #6b7280)",
    background: "#fff"
  }}>
              <span>{flagEmoji(country.iso2)}</span>
              {country.name}
            </span>)}
        </div>
      </details>
    </div>;
  {
    const CDN_SCRIPTS = ["https://cdn.amcharts.com/lib/5/index.js", "https://cdn.amcharts.com/lib/5/map.js", "https://cdn.amcharts.com/lib/5/geodata/worldLow.js", "https://cdn.amcharts.com/lib/5/themes/Animated.js"];
    const loadScripts = () => CDN_SCRIPTS.reduce((chain, src) => chain.then(() => new Promise((resolve, reject) => {
      const existing = document.querySelector('script[data-am5="' + src + '"]');
      if (existing) {
        if (existing.dataset.am5Loaded === "1") return resolve();
        existing.addEventListener("load", () => resolve(), {
          once: true
        });
        existing.addEventListener("error", () => reject(new Error("Failed to load " + src)), {
          once: true
        });
        return;
      }
      const s = document.createElement("script");
      s.src = src;
      s.async = false;
      s.defer = false;
      s.dataset.am5 = src;
      s.onload = () => {
        s.dataset.am5Loaded = "1";
        resolve();
      };
      s.onerror = () => reject(new Error("Failed to load " + src));
      document.head.appendChild(s);
    })), Promise.resolve());
    const flagEmoji = iso2 => {
      if (!iso2 || iso2.length !== 2) return "🌐";
      const base = 0x1f1e6;
      const a = iso2.toUpperCase().charCodeAt(0) - 0x41 + base;
      const b = iso2.toUpperCase().charCodeAt(1) - 0x41 + base;
      return String.fromCodePoint(a, b);
    };
    const formatPrice = p => {
      if (p == null) return null;
      const n = Number(p);
      return Number.isNaN(n) ? null : "$" + n.toFixed(2);
    };
    const cheapestLivePrice = services => {
      const live = (services || []).filter(s => s.live && s.price != null);
      if (!live.length) return null;
      return Math.min(...live.map(s => Number(s.price)));
    };
    const COLOR_LIVE = 0x2567ff;
    const COLOR_ROADMAP = 0x93b8ff;
    const COLOR_NONE = 0xeef2f6;
    const COLOR_HOVER = 0x1a4ccc;
    const COLOR_STROKE = 0xffffff;
    const containerRef = useRef(null);
    const rootRef = useRef(null);
    const [status, setStatus] = useState("loading");
    const [active, setActive] = useState(null);
    useEffect(() => {
      let cancelled = false;
      loadScripts().then(() => {
        if (cancelled) return;
        const am5 = window.am5;
        const am5map = window.am5map;
        const am5themes_Animated = window.am5themes_Animated;
        const worldLow = window.am5geodata_worldLow;
        if (!am5 || !am5map || !worldLow || !containerRef.current) {
          setStatus("error");
          return;
        }
        const root = am5.Root.new(containerRef.current);
        rootRef.current = root;
        const themeCtor = am5themes_Animated.default || am5themes_Animated;
        root.setThemes([themeCtor.new(root)]);
        const chart = root.container.children.push(am5map.MapChart.new(root, {
          panX: "translateX",
          panY: "translateY",
          projection: am5map.geoMercator(),
          wheelY: "zoom",
          paddingBottom: 8,
          paddingTop: 8
        }));
        const polygonSeries = chart.series.push(am5map.MapPolygonSeries.new(root, {
          geoJSON: worldLow,
          exclude: ["AQ"]
        }));
        polygonSeries.mapPolygons.template.setAll({
          tooltipHTML: "",
          interactive: false,
          fill: am5.color(COLOR_NONE),
          stroke: am5.color(COLOR_STROKE),
          strokeWidth: 0.5,
          templateField: "polygonSettings"
        });
        polygonSeries.mapPolygons.template.states.create("hover", {
          fill: am5.color(COLOR_HOVER),
          stroke: am5.color(COLOR_STROKE)
        });
        polygonSeries.set("tooltip", am5.Tooltip.new(root, {
          getFillFromSprite: false,
          getStrokeFromSprite: false,
          labelHTML: "",
          autoTextColor: false
        }));
        polygonSeries.get("tooltip").get("background").setAll({
          fill: am5.color(0xffffff),
          stroke: am5.color(0xe5e7eb),
          fillOpacity: 1,
          strokeOpacity: 1,
          shadowColor: am5.color(0x000000),
          shadowBlur: 14,
          shadowOpacity: 0.12,
          shadowOffsetX: 0,
          shadowOffsetY: 4,
          cornerRadiusTL: 10,
          cornerRadiusTR: 10,
          cornerRadiusBL: 10,
          cornerRadiusBR: 10
        });
        const liveCountries = Object.values(coverage).filter(c => c.live);
        const buildTooltipHTML = c => {
          const flag = flagEmoji(c.iso2);
          const liveSvc = c.services.filter(s => s.live);
          const rows = liveSvc.map(s => {
            const price = s.price != null ? '<span style="color:#2567ff;font-weight:700;margin-left:8px;">' + formatPrice(s.price) + "</span>" : "";
            return '<div style="display:flex;align-items:center;justify-content:space-between;gap:10px;padding:4px 0;border-top:1px solid #f3f4f6;">' + '<span style="color:#1f2937;font-size:12px;line-height:1.4;">' + s.service_name + "</span>" + price + "</div>";
          }).join("");
          return '<div style="font-family:inherit;color:#1f2937;min-width:240px;max-width:340px;padding:4px 2px;">' + '<div style="display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px;margin-bottom:6px;">' + '<span style="font-size:18px;">' + flag + "</span>" + '<span style="color:#0f172a;">' + c.name + "</span>" + '<span style="margin-left:auto;font-size:9px;font-weight:700;background:#2567ff;color:#fff;padding:2px 7px;border-radius:9999px;letter-spacing:0.04em;">LIVE</span>' + "</div>" + '<div style="font-size:11px;color:#6b7280;margin-bottom:4px;">' + liveSvc.length + " " + (liveSvc.length === 1 ? "service" : "services") + "</div>" + rows + "</div>";
        };
        const data = liveCountries.map(c => ({
          id: (c.iso2 || "").toUpperCase(),
          polygonSettings: {
            fill: am5.color(COLOR_LIVE),
            interactive: true,
            tooltipHTML: buildTooltipHTML(c),
            cursorOverStyle: "pointer"
          }
        }));
        polygonSeries.data.setAll(data);
        chart.appear(800, 100);
        setStatus("ready");
      }).catch(err => {
        console.error("[CoverageWorldMap] failed to load amCharts:", err);
        setStatus("error");
      });
      return () => {
        cancelled = true;
        if (rootRef.current) {
          rootRef.current.dispose();
          rootRef.current = null;
        }
      };
    }, []);
    const totalCountries = Object.keys(coverage).length;
    const liveCountries = Object.values(coverage).filter(c => c.live).length;
    const liveServices = Object.values(coverage).reduce((n, c) => n + c.services.filter(s => s.live).length, 0);
    const totalServices = Object.values(coverage).reduce((n, c) => n + c.services.length, 0);
    const Stat = ({value, label}) => <div style={{
      display: "flex",
      flexDirection: "column",
      lineHeight: 1.1
    }}>
      <span style={{
      fontSize: "28px",
      fontWeight: 700
    }}>{value}</span>
      <span style={{
      fontSize: "11px",
      textTransform: "uppercase",
      letterSpacing: "0.05em",
      color: "var(--mintlify-text-muted, #6b7280)"
    }}>
        {label}
      </span>
    </div>;
    const Legend = ({color, label}) => <span style={{
      display: "inline-flex",
      alignItems: "center",
      gap: "4px"
    }}>
      <span style={{
      width: 10,
      height: 10,
      borderRadius: 2,
      background: color,
      display: "inline-block"
    }} />
      {label}
    </span>;
    return <div style={{
      margin: "1.5rem 0",
      padding: "1.25rem",
      borderRadius: "12px",
      border: "1px solid rgba(148,163,184,0.25)",
      background: "linear-gradient(180deg, rgba(37,103,255,0.04) 0%, rgba(37,103,255,0) 60%)"
    }}>
      <div style={{
      display: "flex",
      alignItems: "center",
      justifyContent: "flex-end",
      gap: "0.75rem",
      fontSize: "12px",
      color: "var(--mintlify-text-muted, #6b7280)",
      marginBottom: "0.75rem"
    }}>
        <Legend color="#2567ff" label="Live country" />
        <Legend color="#eef2f6" label="No coverage yet" />
      </div>

      <div style={{
      position: "relative",
      width: "100%",
      height: "520px",
      borderRadius: "8px",
      background: "#fff",
      overflow: "hidden"
    }}>
        {}
        <div ref={containerRef} style={{
      width: "100%",
      height: "100%"
    }} />
        {status === "loading" && <div style={{
      position: "absolute",
      inset: 0,
      display: "flex",
      alignItems: "center",
      justifyContent: "center",
      fontSize: "13px",
      color: "var(--mintlify-text-muted, #6b7280)",
      pointerEvents: "none"
    }}>
            Loading interactive coverage map…
          </div>}
        {status === "error" && <div style={{
      position: "absolute",
      inset: 0,
      display: "flex",
      alignItems: "center",
      justifyContent: "center",
      padding: "1rem",
      fontSize: "13px",
      textAlign: "center",
      color: "var(--mintlify-text-muted, #6b7280)"
    }}>
            Couldn't load the interactive map. Coverage is fully listed in the
            services table further down the page.
          </div>}
      </div>

      <p style={{
      fontSize: "12px",
      color: "var(--mintlify-text-muted, #6b7280)",
      margin: "0.5rem 0 0 0"
    }}>
        Hover any highlighted country to see its services and per-call pricing.
      </p>

      {false && active && <div style={{
      marginTop: "1rem",
      padding: "1rem",
      borderRadius: "10px",
      background: "rgba(37,103,255,0.06)",
      border: "1px solid rgba(37,103,255,0.18)"
    }}>
          <div style={{
      display: "flex",
      alignItems: "center",
      gap: "8px",
      marginBottom: "0.5rem"
    }}>
            <span style={{
      fontSize: "20px"
    }}>{flagEmoji(active.iso2)}</span>
            <span style={{
      fontWeight: 700,
      fontSize: "15px"
    }}>
              {active.name}
            </span>
            <span style={{
      fontSize: "10px",
      fontWeight: 700,
      background: active.live ? "#2567ff" : "#93b8ff",
      color: "#fff",
      padding: "2px 8px",
      borderRadius: "9999px",
      letterSpacing: "0.04em"
    }}>
              {active.live ? "LIVE" : "ON DEMAND"}
            </span>
            <span style={{
      marginLeft: "auto",
      fontSize: "12px",
      color: "var(--mintlify-text-muted, #6b7280)"
    }}>
              {active.services.length}{" "}
              {active.services.length === 1 ? "service" : "services"}
            </span>
            <button type="button" onClick={() => setActive(null)} style={{
      marginLeft: "8px",
      fontSize: "11px",
      padding: "2px 8px",
      borderRadius: "9999px",
      background: "transparent",
      border: "1px solid rgba(148,163,184,0.4)",
      cursor: "pointer"
    }}>
              Close
            </button>
          </div>

          <ul style={{
      listStyle: "none",
      margin: 0,
      padding: 0,
      display: "grid",
      gridTemplateColumns: "repeat(auto-fill, minmax(280px, 1fr))",
      gap: "8px"
    }}>
            {active.services.map(s => <li key={s.service_id} style={{
      padding: "8px 10px",
      borderRadius: "6px",
      background: "rgba(148,163,184,0.10)",
      fontSize: "12px"
    }}>
                <div style={{
      display: "flex",
      alignItems: "center",
      gap: "6px",
      marginBottom: "2px"
    }}>
                  <span style={{
      fontWeight: 600
    }}>{s.service_name}</span>
                  {s.live && <span style={{
      fontSize: "9px",
      fontWeight: 700,
      background: "#2567ff",
      color: "#fff",
      padding: "1px 5px",
      borderRadius: "9999px",
      letterSpacing: "0.04em"
    }}>
                      LIVE
                    </span>}
                </div>
                <div style={{
      display: "flex",
      gap: "8px",
      color: "var(--mintlify-text-muted, #6b7280)",
      fontSize: "11px"
    }}>
                  <code style={{
      fontSize: "10px"
    }}>{s.service_id}</code>
                  {s.price != null && <span>· {formatPrice(s.price)}</span>}
                </div>
              </li>)}
          </ul>
        </div>}
    </div>;
  }
};

Didit's **Database Validation** verifies a person's identity data against the authoritative source for that country — the national civil registry, tax authority, electoral roll, credit bureau or biometric registry that issued the document in the first place. Each check returns a per-field match (`identification_number`, `first_name`, `last_name`, `date_of_birth`, and address fields when the service uses them) plus an aggregated outcome and the underlying record details when available.

It is the strongest defence against synthetic-identity fraud: a stolen real DNI or CPF will fail the registry lookup, and a fabricated number won't be in the official database at all. Database Validation pairs with our biometric face-match in countries where the registry holds an official photo (Argentina via RENAPER, Panama via Tribunal Electoral SIB / SIB Plus) so you can confirm not just that a number is real, but that the **person standing in front of the camera owns it**.

<AgentPromptAccordion
  title="Database Validation Integration Prompt"
  prompt={`# Goal
Integrate Didit Database Validation (verify identity data against authoritative national registries) into your app. Pick ONE mode.

# Mode A — Session-based
Use this when Database Validation runs as a step in a hosted Didit flow. Fields are auto-fed into the registry lookup from the steps in front of it — ID Verification, NFC, Liveness, Phone/Email Verification, Proof of Address, Document AI or a Questionnaire. An ID Verification step is not required.

1. Add the DATABASE_VALIDATION feature to the workflow (Business Console or POST /v3/workflows/). Optionally pin specific services per country.
2. Create a session — POST /v3/session/ with { workflow_id, vendor_data, callback }. See /sessions-api/create-session.
3. Open session.url for the user (or mount the Web/Mobile SDK).
4. Fetch the decision — GET /v3/session/{sessionId}/decision/ or subscribe to session.status.updated.

Decision surface: \`database_validations[]\` array on the decision payload.

# Mode B — Standalone API (server-to-server)
Use when you already have the identity data and want a one-shot registry check.

POST https://verification.didit.me/v3/database-validation/
multipart/form-data — x-api-key: YOUR_API_KEY

curl example (Brazil CPF):
\`\`\`bash
curl -X POST 'https://verification.didit.me/v3/database-validation/' \\
-H "x-api-key: $DIDIT_API_KEY" \\
-F "issuing_state=BRA" \\
-F "identification_number=00000000191" \\
-F "first_name=Jane" \\
-F "last_name=Doe" \\
-F "date_of_birth=1990-01-15" \\
-F "vendor_data=user-1234"
\`\`\`
Returns: { request_id, database_validation: { match_type: "full_match"|"partial_match"|"no_match", validation_type, services_used, match_score, validations: [{ service, status, matched_fields, record_details }], warnings: [...] } }.

# Important behaviour
- Use \`identification_number\` (universal field) — Didit maps it to CPF/RUT/CURP/DNI/etc. by issuing_state.
- Omit \`services\` to run the country's default service only. Pass \`services=["bra_cpf"]\` (etc.) to choose which services run — list several to run more than one.
- Argentina (\`arg_renaper\`) and Panama (\`pan_sib\`) take an extra \`selfie\` (JPG/PNG/WebP up to 2 MB) and \`gender\` for biometric face-match against the registry photo.
- Services flagged \`requires_consent=true\` in the catalog require \`consent=true\` (HTTP 400 otherwise).
- Billing is **per successful service hit** — multi-service requests can produce multiple usage events.

# Status / match_type
status: "Approved" | "In Review" | "Declined" (per the partial-match / no-match actions configured on the workflow)
match_type: "full_match" | "partial_match" | "no_match"

# Warnings (LogWarningChoices.DATABASE_VALIDATION)
warnings[] risk codes include:
DATABASE_VALIDATION_NO_MATCH, DATABASE_VALIDATION_PARTIAL_MATCH, COULD_NOT_PERFORM_DATABASE_VALIDATION (biometric outcomes surface via per-service outcome_code, e.g. BIOMETRIC_NO_MATCH).
Full catalogue: /core-technology/database-validation/database-validation-warnings.

# Failure modes to handle
- HTTP 400 — service id not eligible for issuing_state, missing required field, missing consent for PAYGO services.
- HTTP 502 with validation_errors[] — every selected upstream service failed; request is **not billed** and a COULD_NOT_PERFORM_DATABASE_VALIDATION log is written. Retry later or fall back to OCR-only.
- match_type="no_match" — record not in registry; treat as synthetic identity per policy.
- match_type="partial_match" — some fields match, others don't (e.g. DOB matches, name doesn't); route to review.

# See also
- Canonical schema: /reference/data-models#database-validation
- Per-feature report: /core-technology/database-validation/database-validation-report
- Risk catalogue: /core-technology/database-validation/database-validation-warnings
- Outcome codes: /core-technology/database-validation/database-validation-outcome-codes
- Full integration playbook: /integration/integration-prompt`}
/>

## Why Didit

* **Cheapest pay-per-call pricing.** From **\$0.05** per check (Dominican Republic) up to **\$7.00** for the most expensive specialist sources. The price is set per service, not per country — a registry that charges a high wholesale rate is priced accordingly (Finland National ID is **\$2.10**). Always read the rate for the exact service you plan to call from the [per-service pricing table](/getting-started/database-validation-pricing). No monthly minimums, no platform fees, no per-seat billing — only successful queries are charged.
* **Fastest to integrate.** [Sign up](https://business.didit.me/), grab an API key from the console, and you can call `POST /v3/database-validation/` within minutes. No sales call, no procurement cycle, no proof-of-concept paperwork — Didit is fully self-service.
* **Direct hits to the authoritative source.** RENAPER, Receita Federal (SERPRO), Tribunal Electoral, RENAPO, RENAP, RNP, RNPN, Junta Central Electoral, Registraduría Nacional, SEGIP, Servicio de Registro Civil, Tribunal Supremo de Elecciones, Dirección General de la Policía — not aggregator scrapes.
* **Biometric face-match where the registry has an official photo on file.** Higher-than-OCR confidence with no extra integration work.
* **Production-ready latency.** p95 typically under 1.5 s end-to-end, 99.9% quarterly availability.

The Academy lesson on reading a verification result reaches database validation at 11:05 and shows full, partial, and no-match outcomes.

<VideoEmbed src="https://www.youtube.com/embed/7htTWCWsl60?start=665&rel=0&playsinline=1" title="Database validation: full, partial and no match — Didit Academy" />

## Global coverage

Hover any highlighted country to see every Database Validation service we run there, the data domain (Identity, Financial, Biometric, Address, Telecom, …) and the per-call price. Live countries are production-ready today; the rest are wired in on demand once a customer asks.

<CoverageWorldMap />

<Tip>
  **Don't see your country?** Reach out — our catalog tracks 60+ countries with hundreds of services that we activate on demand once a customer needs them. New integrations typically go live in 2–3 weeks.
</Tip>

## How a Database Validation runs

A Database Validation never fires speculatively. It only runs when **all** of the following are true:

1. The session resolved a country to query — from the `issuing_state` of an [ID Verification](/core-technology/id-verification/overview), or, when the workflow has no ID Verification step, from the single country the Database Validation step is configured for.
2. That country has at least one Database Validation service enabled in the workflow.
3. The steps in front of the Database Validation step supplied **every required field** the chosen service needs.

If a service is enabled but the required fields never arrived (e.g. CPF wasn't extractable from a smudged Brazilian RG), the service is skipped, **you are not charged**, and a warning is raised on the session: `DATABASE_VALIDATION_NOT_APPLICABLE` when the document simply does not carry the identifier that service queries by, `COULD_NOT_PERFORM_DATABASE_VALIDATION` when it should have been available and was not. Both are listed in the [warnings catalogue](/core-technology/database-validation/database-validation-warnings).

Someone on your team with review access to the session can then fill the missing field by hand from the session detail page in the Console, and saving it re-triggers the check automatically. That is a reviewer action, not something the end user can do — to let the **user** supply a field their document does not carry, ask for it in a Questionnaire (or a Document AI extraction, or a value you send when you create the session) and map it on the Database Validation step, as described below.

### Database Validation does not require ID Verification

A Database Validation step used to imply an ID Verification step in front of it, because an ID document's OCR was the only wired way to obtain the end user's data. That is no longer the case: **each required field declares which steps can supply it**, and a service becomes available as soon as your workflow contains a step that supplies every field it needs.

| Input source | Supplies |
| - | - |
| ID Verification | Names, date of birth, address, document/personal number, and the country-specific identifiers printed on an ID (tax number, national ID, passport number, driving licence number, …) |
| NFC | The chip-read subset of the above, at higher trust |
| Liveness | The live selfie, for facial-biometric registry services |
| Phone Verification | The verified phone number |
| Email Verification | The verified email address |
| Proof of Address | The verified residential address and its components |
| Document AI | Any field you map to one of your extraction field keys |
| Questionnaire | Any field you map to one of your questions |
| API input | Anything, on the standalone API — the caller supplies the values directly |

This means a **facial-biometric service can run from a Liveness step alone**, with no ID document anywhere in the workflow, and a service keyed on a tax number, phone number or email can be satisfied from a questionnaire answer, a Phone/Email Verification step, or a Document AI extraction.

Two rules keep this safe:

* **A workflow with no ID Verification must configure exactly one country** on the Database Validation step. Without an `issuing_state` from a document, that is the only unambiguous signal for which national registry to query, so a multi-country configuration with no ID Verification runs nothing rather than guessing.
* **The required-field check is unchanged.** A service whose fields are not all present at run time is skipped before any provider is queried, so you are never billed for a database that was never asked.

#### Mapping Document AI and questionnaire fields

Document AI extraction fields and questionnaire questions use *your* key names, not Didit's. A key that exactly matches a Database Validation input name (`tax_number`, `date_of_birth`, `phone`, …) is mapped automatically and needs no configuration. For anything else, the workflow editor shows a picker on the Database Validation step for the fields that are still unfilled, where you point each one at the Document AI field key or questionnaire answer that supplies it.

In the Console, a service your workflow cannot yet run is shown disabled with the reason — which fields are missing and which step would provide them — and the editor offers to add that step for you. Adding it lights up every service it unblocks immediately.

<Tip>
  **Worked example — an identifier the document does not carry.** Nigeria's National ID service queries by the 11-digit NIN, which is frequently not printed on the documents people upload, so relying on the ID document alone leaves the check skipped as not applicable for a large share of users. Put a **Questionnaire** step in front of the Database Validation step asking for the NIN, then map `national_id` to that question on the Database Validation step. The same mapping is what makes an identifier that is never on a document at all — a bank verification number, a company registration number — usable inside a workflow.
</Tip>

For address-based services, Didit splits the ID document's single `address` into structured address elements automatically:

| Didit field | Meaning |
| - | - |
| `address_element_1` | Street address, including number and street type |
| `address_element_2` | Optional unit, building, floor, or extra address line |
| `address_element_3` | Suburb, district, locality, or neighborhood |
| `address_element_4` | City, town, state, province, or region |
| `address_element_5` | Postcode or postal code |

When calling the standalone API, you can send either a single `address` or these structured fields directly. Structured fields win when both are present. Services that require address search need `address_element_1` plus at least one other address element; if Didit cannot derive those from the ID document or Proof of Address in the workflow, the service is skipped and not billed.

If the resolved country is not enabled at all, the step is skipped silently with no warning and no charge.

<Frame>
  <img src="https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/database-validation-how-it-works.png?fit=max&auto=format&n=z6T2GHM4Zh-iSj-K&q=85&s=3d5bb0df058265af0d8728cd60a78416" alt="Didit database validation flow checking user data against government identity registries" width="2276" height="983" data-path="images/database-validation-how-it-works.png" />
</Frame>

## The match outcome

Each enabled service returns a per-field validation:

| Field | Outcomes |
| - | - |
| `identification_number` | `full_match` · `partial_match` · `no_match` |
| `first_name` | `full_match` · `partial_match` · `no_match` |
| `last_name` | `full_match` · `partial_match` · `no_match` |
| `date_of_birth` | `full_match` · `no_match` |
| `address` | `full_match` · `partial_match` · `no_match` |

The aggregated `match_type` rolls up to:

* **`full_match`** — every requested field agrees with at least one source.
* **`partial_match`** — some agreement; route to a review queue per your workflow rules.
* **`no_match`** — no source confirmed the data; usually decline.

## How matching is derived (1×1 / 2×2)

We do not ask you to pre-pick "1×1" or "2×2" anymore — those are derived from how many distinct services full-matched the input data:

* **1×1 outcome** — one service returned a full match (a single authoritative source confirmed the data).
* **2×2 outcome** — two or more services returned a full match (independent corroboration; the highest confidence we can express).

A workflow can enable any number of services per country; you are billed per service that actually returned a result. Services whose required fields couldn't be extracted are skipped with no charge.

➡️ See **[Matching Methods](./database-validation-matching-methods)** for the full decision logic and how it interacts with `partialMatchAction` / `noMatchAction`.

## Biometric Database Validation

Some countries' civil registries publish a biometric template (a portrait or a fingerprint). When that's available, we pair the registry lookup with a **biometric face-match** against the user's selfie:

* **Argentina (`arg_renaper`)** — biometric face-match against the official RENAPER photo on file. 100% population coverage; every Argentine citizen with a DNI is in the database.
* **Panama (`pan_cedula_sib`, `pan_cedula_sib_plus`)** — biometric face-match against the Tribunal Electoral SIB service. SIB Plus is the elevated-tier variant with stronger biometric thresholds and richer match metadata.

For these services the `selfie` field is **required**. Inside a session flow we re-use the liveness selfie (highest quality) and fall back to the document portrait. Outside a session, when calling the standalone API (`POST /v3/database-validation/`, Mode B above), you supply the JPEG/PNG yourself.

## Global identity enrichment

`glb_identity_enrichment` is a **global, standalone-only** Database Validation service. From an email and/or phone number it resolves associated persons (names, dates of birth, addresses, phones, emails and national IDs) and returns a name-match score, mapped to the standard [outcome codes](/core-technology/database-validation/database-validation-outcome-codes) `MATCH` / `PARTIAL_MATCH` / `NO_MATCH` / `DOCUMENT_NOT_FOUND` (with the corresponding `match_type` of `full_match` / `partial_match` / `no_match`).

Because it is a global (`GLB`) service keyed on email/phone rather than a document's issuing country, it is **not available in the workflow builder**. Call it directly through the standalone API with `issuing_state` set to `GLB`:

```json theme={null}
POST /v3/database-validation/
{
  "issuing_state": "GLB",
  "services": ["glb_identity_enrichment"],
  "email": "john.doe@example.com",
  "phone": "+14155552671"
}
```

It is billed at **\$0.20 per request** (charged only when the provider returns a result).

## Configuration

Database Validation is configured per-workflow from the Console. For each country you select the specific services you want to run; required and optional input fields are derived from the union of those services. The action taken on `partial_match` and `no_match` outcomes is configured separately and can be `approve`, `review`, or `decline`.

<Frame>
  <img src="https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/database-validation-console.png?fit=max&auto=format&n=z6T2GHM4Zh-iSj-K&q=85&s=2e1ac27f07fa9ca9c54108c6fd19a6b3" alt="Didit database validation console settings selecting per-country registry services and outcome rules" width="1509" height="981" data-path="images/database-validation-console.png" />
</Frame>

## Availability notifications

Government registries and other sources go down from time to time. While a database is unreachable, checks against it return no answer and are not billed. Inside a workflow the service resolves to [`REGISTRY_UNAVAILABLE`](/core-technology/database-validation/database-validation-outcome-codes). On the standalone API the same outage arrives in one of three shapes, so read the per-service outcomes **and** `database_validation.errors[]`, never the HTTP status on its own:

* `200` with `outcome_code: "REGISTRY_UNAVAILABLE"` on that service in `validations`, when Didit kept a result to report for it.
* `200` with that service in `database_validation.errors[]` as `code: "empty_provider_response"`, `retryable: true`, when it produced no usable answer at all and another selected service did. The failed service is then absent from `validations` and from `services_used`, so `errors[]` is the only place it appears.
* `502` with `validation_errors[].code: "empty_provider_response"` and `retryable: true`, when no selected service returned a usable result (see [rejected input and unavailable results](/standalone-apis/database-validation#rejected-input-and-unavailable-results)).

The overall `status` follows the services that did answer, so it is not a reliable outage signal on its own. A request left with nothing to compare goes to `In Review`, but a request that selected several services can come back `Approved` on another service's match while one of its sources was unavailable. Retry the failed service from `errors[]` rather than the whole request.

None of these shapes says anything about the person being verified.

Didit watches the live results of real checks, database by database, and emails your organization when an interruption is sustained rather than a single failed request:

| Email | When it is sent | What it tells you |
| - | - | - |
| **Database interruption** | A database has been failing for at least ten minutes, with almost every check in that period left unanswered. A short burst or a single failure never triggers it. | The database and country affected and when the failures were first observed. Checks may return no result until access is restored; this does not mean the submitted identities are invalid. |
| **Database access restored** | Real checks have been answering again for at least five minutes with no failures. Quiet periods never count as recovery, so a low-traffic database takes longer to confirm both states. | When recovery was confirmed. Verifications that could not complete during the interruption are **not** reprocessed automatically: review them and retry. |

The notices go to the members and billing contacts of every organization that ran a check against that exact database in the previous 48 hours. Nothing needs to be configured and there is no opt-in. Sandbox traffic never triggers them, and neither do failures caused by the data you sent (rejected or malformed input) or by services that run on credentials your own organization connects. A check that was answered through a fallback source counts as available, and so does a conclusive no-match.

## Pricing — pay only for what you use

Database Validation is billed **per successful query, per service**, at the rate published for that service. Rates run from **\$0.05** per check (Dominican Republic via Junta Central Electoral) up to **\$7.00** for the most expensive specialist sources. Many government registry lookups sit in the **USD 0.20 to USD 0.30** band, but a good number cost considerably more because the source itself charges more — Finland National ID (`fin_national_id`) is **\$2.10** per successful query. Price a country from its own row in the [pricing table](/getting-started/database-validation-pricing), never from a range. There are no monthly minimums, commitments, or platform fees.

You only pay when a service returns a result. Services that skip because of missing input data are not billed, and neither is a service whose source call itself fails - a registry error or an unreachable registry (`REGISTRY_ERROR` / `REGISTRY_UNAVAILABLE`) means the query was never answered, so it's not a chargeable result.

<Warning>
  The **500 free checks per month** described on the [pricing page](/getting-started/pricing) apply to ID Verification, Passive Liveness, Face Match 1:1 and Device & IP Analysis only. Database Validation is **not** part of that free tier: every successful registry query is charged from the first one, whether it runs inside a workflow or through the standalone `POST /v3/database-validation/` API.
</Warning>

➡️ [Database Validation Pricing](/getting-started/database-validation-pricing) · [Sign up and get an API key](https://business.didit.me/)

## All services

<DatabaseValidationServicesTable />

## Continue reading

* [Matching Methods](./database-validation-matching-methods) — how 1×1 / 2×2 outcomes are derived and how to react to them.
* [Outcome Codes](./database-validation-outcome-codes) — the full list of provider response codes (deceased, minor, document not found, biometric mismatch, …) and how they map to session decisions.
* [Warnings](./database-validation-warnings) — what we surface when a service can't run due to missing data.
* [Reports](./database-validation-report) — monthly per-service billing exports with country, service ID, usage, unit price and total cost.
* [Supported Countries](./database-validation-supported-countries) — a static table view of every country we cover today.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.