{"uid":"cap_Xlu1SmzksxDCw3-S_NNDy","slug":"brdata-batch-cpf-cnpj-validation-b2e88ef2","name":"brdata Batch CPF/CNPJ Validation","description":"Batch-validate Brazilian identifiers: CPF, CNPJ (incl. new alphanumeric format), PIS, license plates, Pix keys. Up to 100 per call.","url":"https://brdata.thomenz.me/validate/batch","method":"POST","headers":{},"bodySchema":null,"responseSchema":{"type":"json","example":{"results":[{"type":"cpf","valid":true,"details":{},"value_normalized":"52998224725"},{"type":"cnpj","valid":true,"details":{"format":"alphanumeric","formatted":"12.ABC.345/01DE-35"},"value_normalized":"12ABC34501DE35"}],"summary":{"total":2,"valid":2,"invalid":0}}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.001","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.001/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.001","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.001","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_yCQWMmPHJx8RNf5TWbOKG","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.001","costPer":"request","priority":0,"asset":null,"unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Validates one or more Brazilian CPF (individual) or CNPJ (company) tax identifiers in a single batch call, returning validity status and normalized formats","exampleAgentPrompt":"Can you validate these Brazilian tax IDs for me — I have a mix of CPFs and CNPJs: 529.982.247-25 and 12.ABC.345/01DE-35 — tell me which ones are valid and give me their normalized values.","exampleUseCases":[{"title":"KYB onboarding CNPJ check","prompt":"We're onboarding a new Brazilian supplier and need to verify their CNPJ is valid and properly formatted before we create their account — the number they gave us is 12.ABC.345/01DE-35, can you confirm it's legitimate?"},{"title":"Bulk customer CPF validation","prompt":"I have a list of 50 CPF numbers collected from a form and I need to know which ones are valid before importing them into our CRM — can you run them all through validation and give me a summary of how many passed?"},{"title":"Pre-flight identifier normalization","prompt":"Before we submit this batch of Brazilian company registrations to our compliance system, can you validate and normalize all the CNPJ numbers so they're in the correct format? Here's the list: 12ABC34501DE35 and 11222333000181."}],"resultDescription":"A JSON object with a 'results' array (one entry per input) containing: the identifier type (cpf or cnpj), a boolean 'valid' field, a 'value_normalized' string with the canonical form, and optional 'details' (e.g. format type, formatted string for CNPJ). A 'summary' object reports total, valid, and invalid counts across the batch.","failureModes":["Malformed input array returns validation errors","Unrecognized identifier format may return valid:false rather than an error","Payment failure (x402) blocks the request entirely","Empty batch body returns an error or empty results","Very large batches may time out or require chunking"],"whenToPreferThis":"Use this endpoint when you need to validate Brazilian CPF or CNPJ identifiers in bulk before KYB onboarding, data import, or compliance screening. It handles both classic numeric and the newer alphanumeric CNPJ formats and normalizes output — ideal when you have raw user-submitted strings of uncertain format. Prefer this over a single-record lookup endpoint when processing lists.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-15T06:30:31.154Z","isFirstParty":false}