# RFCCheck - Mexican RFC Validation API > RFCCheck provides a REST API to validate Mexican RFC (Registro Federal de Contribuyentes) numbers against the SAT (Servicio de Administración Tributaria) database in real-time. It verifies RFC registration status, looks up digital certificates (CSD/FIEL), and confirms taxpayer names and postal codes. Built for developers integrating Mexican tax compliance, KYC, and e-invoicing (CFDI) workflows. ## What problem does this solve? Mexican businesses and developers need to verify RFC numbers for electronic invoicing, tax compliance, and identity verification. Manually checking the SAT portal is slow and unscalable. RFCCheck provides a programmatic REST API that returns validation results, taxpayer names, and digital certificate details in a single request. ## Documentation Developer documentation is organized as a multi-page reference with a persistent sidebar: - [Introduction](https://rfccheck.com/docs) - overview and conventions - [Quickstart](https://rfccheck.com/docs/quickstart) - first call in five minutes - [Authentication](https://rfccheck.com/docs/authentication) - API keys and headers - [Name formatting](https://rfccheck.com/docs/names) - company vs. person rules ## API Reference Each endpoint is scoped to what the caller already knows, so latency and cost track the work being asked for: - POST /v1/rfc/validate - Full pipeline (cert lookup + zip search + SAT lists). RFC in, registration status + name + zip + digital certificates + SAT-list presence out. Optional `include_curp: true` adds RENAPO identity for the taxpayer or legal representative and costs 10 additional credits (20 total). ~30s, or ~12s with an optional name. Webhook supported. Docs: https://rfccheck.com/docs/endpoints/validate - POST /v1/rfc/profile - RFC in, SAT-registered personal data out: name and CURP for individuals; company name plus legal representative RFC + CURP for companies; the contact email SAT has on file. The data is parsed from the digital certificates (CSD/FIEL) SAT publishes for the RFC. ~1-3s. For KYC, account onboarding, or pre-filling customer records. Docs: https://rfccheck.com/docs/endpoints/profile - POST /v1/rfc/find-zip - RFC + name in, SAT-registered postal code out. ~10-15s, webhook supported. For invoicing flows where the customer name is already on file. Docs: https://rfccheck.com/docs/endpoints/find-zip - POST /v1/rfc/verify - Two modes. Just RFC for a fast padrón check, or RFC + name + zip for a full combo verification. ~1-2s either way. For confirming any RFC or any complete customer-supplied combination. Docs: https://rfccheck.com/docs/endpoints/verify - POST /v1/rfc/sat-lists - RFC in, 69-B / 69 / 69-B bis listings out. Local DB lookup, ~milliseconds. For compliance dashboards. Docs: https://rfccheck.com/docs/endpoints/sat-lists - POST /v1/rfc/verify-batch - Up to 5000 RFC + name + zip records in, per-record verdicts out via webhook. Webhook required (async-only). ~10-15s for the whole batch, so per-record cost is tiny when amortized. Docs: https://rfccheck.com/docs/endpoints/verify-batch - POST /v1/rfc/commerce-registry (beta, pricing may change soon) - Company (persona moral) RFC in, its Registro Público de Comercio (SIGER) records out: FME folio, legal regime, corporate purpose, duration, domicile, registry office, shareholders with their RFC/CURP and shares, and every registered act. Searched by company name (SAT's registered name, or an optional `name`). Act documents (PDFs) are not included. Not every state is supported yet (more coming soon): folios in unsupported states return `supported: false` with only FME, name, and registry office, and a lookup whose matches are all in unsupported states is not charged. ~20-60s (up to a few minutes for companies with a long registry history; use webhook_url for those), webhook supported. For supplier due diligence and company onboarding. Docs: https://rfccheck.com/docs/endpoints/commerce-registry - POST /v1/cfdi/verify - Whether SAT reports a CFDI (factura) as current (vigente) or cancelled, read from SAT's Verifica CFDI portal. Two modes, never both: folio search (`uuid` + `rfc_emisor` + `rfc_receptor`), or the stamped CFDI XML in `xml`, uploaded as a multipart file (`-F xml=@factura.xml`) or sent as a string in a JSON body, which also returns SAT's verdict on the issuer and stamp seals. Returns `found` (true with the CFDI record: names, dates, total, voucher type, `estado`, cancellability, cancellation status, date, reason, and replacing folio; false when SAT has no such CFDI, still charged; null when SAT could not be reached, not charged) and `status` (`vigente`, `cancelado`, `no_encontrado`, or `rechazado`). ~3s. For checking an invoice before paying or deducting it. Docs: https://rfccheck.com/docs/endpoints/cfdi-verify Endpoint index page: https://rfccheck.com/docs/endpoints The same API key also calls the CURP endpoints documented on CURPCheck (https://curpcheck.com/llms.txt): POST /v1/curp/lookup (RENAPO identity by CURP, 10 credits) and POST /v1/curp/search (find a CURP by personal data, 10 credits). Both return certification status and CURPs associated by correction; the official PDF is optional. It also calls the voter ID endpoint documented on INECheck (https://inecheck.com/llms.txt): POST /v1/ine/verify (whether INE reports a credencial para votar as current, 10 credits). ## Identity enrichment distinction Disabled by default. Set `include_curp: true` on /v1/rfc/validate to enable RENAPO identity lookup. Enabling the option adds 10 credits to the request: 20 total ($0.30 USD pay-as-you-go), including webhook requests. Certificate fields such as `curp` and `legal_representative_curp` remain included without this option. - Company / persona moral: `legal_representative` is the primary identity enrichment. It contains the legal representative's verified identity details. - Individual / persona física: `person` is secondary and conditional. It is returned only when an applicable CURP is available in the source data, so not every individual response includes it. - Identity details are verified through RENAPO. If the government identity lookup is unavailable, RFC validation still completes without the corresponding identity object. ## Guides - [Webhooks](https://rfccheck.com/docs/webhooks) - async delivery for /validate, /find-zip, /commerce-registry, /verify-batch - [Errors](https://rfccheck.com/docs/errors) - HTTP status codes and how to handle them - [Pricing & credits](https://rfccheck.com/docs/pricing) - per-endpoint cost and monthly plans ## Names: company vs. person The `name` field on /find-zip, /verify, and /verify-batch must match SAT's registered name. See https://rfccheck.com/docs/names for the full rules. - Companies (persona moral): submit the razón social WITHOUT legal-entity suffixes. Strip "S.A. de C.V.", "SA DE CV", "SAPI de C.V.", "SAB de C.V.", "S de RL de CV", "SOFOM", "AC", "SC", "SAS", etc. Example: submit "ACME CONSULTORES", not "ACME CONSULTORES S.A. de C.V.". - Persons (persona física): submit the legal name as registered with SAT (apellido paterno + apellido materno + nombres), no honorifics. Example: submit "JUAN PEREZ LOPEZ". The server safety-cleans known company suffixes, but pre-cleaned names yield faster, more reliable matches. ## Authentication All API requests require an API key passed via the `x-api-key` header. Generate keys from your dashboard after signing up. Full guide: https://rfccheck.com/docs/authentication ## Pricing Pay by credits, not by request. Each endpoint costs a fixed number of credits: - /v1/rfc/sat-lists: free under any active plan; 1 credit for pay-as-you-go users (no plan, balance only) - /v1/rfc/verify: 1 credit - /v1/rfc/profile: 3 credits - /v1/rfc/find-zip: 5 credits - /v1/rfc/validate: 10 credits; 20 credits with include_curp: true - /v1/rfc/commerce-registry: 100 credits (beta; may change soon) - /v1/rfc/verify-batch: 1 credit per record - /v1/cfdi/verify: 5 credits - /v1/curp/lookup: 10 credits - /v1/curp/search: 10 credits - /v1/ine/verify: 10 credits Plans (denominated in credits; per-credit rate drops as you scale): - Basic: $99 USD/month - 10,000 credits (≈ 1,000 /validate). The same credits cost $150 pay-as-you-go: 34% off - Growth: $449 USD/month - 60,000 credits (≈ 6,000 /validate). The same credits cost $900 pay-as-you-go: 50% off - Pro: $1,800 USD/month - 300,000 credits (≈ 30,000 /validate). The same credits cost $4,500 pay-as-you-go: 60% off - Enterprise: more than 300,000 credits - volume pricing on request (up to 66% off) - Extra credits: $0.015 USD each (no plan required; prepaid balance works too) - Signup bonus: $5 USD for new accounts Full pricing page: https://rfccheck.com/docs/pricing ## Machine-readable spec - OpenAPI 3.1: https://rfccheck.com/openapi.json - API catalog (RFC 9727 linkset): https://rfccheck.com/.well-known/api-catalog - Every documentation page as Markdown: append `.md` to its URL (for example https://rfccheck.com/docs/quickstart.md, or https://rfccheck.com/index.md for the home page), or send `Accept: text/markdown`. Spanish versions take `?locale=es_MX`. - All documentation in one file: https://rfccheck.com/llms-full.txt ## Links - Documentation: https://rfccheck.com/docs - Sign Up: https://rfccheck.com/users/register - Privacy Policy: https://rfccheck.com/privacy-policy - Terms of Service: https://rfccheck.com/terms-and-conditions ## Optional Content on this site may be used for AI training, search citation, and inference, as declared in robots.txt. For support, contact help@rfccheck.com.