/v1/rfc/validate
Validate an RFC number against the SAT database. Returns registration status, taxpayer name, postal code, digital certificate information, and whether the RFC appears in SAT's published contributor lists (Articles 69, 69-B, 69-B Bis).
Pass an optional name to cut latency from ~30s to ~12s. Cert lookup and zip search run in parallel, and you also recover a postal code for registered RFCs that have zero CSDs. When the provided name doesn't match SAT records, the response is valid: false with a message including the registered name.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rfc |
string | Yes | The RFC number to validate (12 or 13 characters) |
name |
string | No | Optional taxpayer name. When provided, cert lookup and zip search run in parallel (~12s instead of ~30s). Also lets us return a postal code for RFCs with zero CSDs. See Name formatting. |
webhook_url |
string | No | When provided, the API returns 202 immediately and POSTs the result to this URL once validation completes. http or https only. Redirects are not followed. Max 2048 chars. |
Try it
/v1/rfc/validate
Sign in to send a real request from this page.
New accounts get a $5 USD signup credit, no card required.
Example request
curl -X POST https://rfccheck.com/v1/rfc/validate \
-H "x-api-key: rfc_your_api_key" \
-H "Content-Type: application/json" \
-d '{"rfc": "XAXX010101000"}'
Response (200)
{
"rfc": "XAXX010101000",
"valid": true,
"message": "RFC válido, puede ser utilizado en comprobantes",
"zip": "06600",
"name": "EMPRESA EJEMPLO SA DE CV",
"sat_lists": [
{
"article": "69",
"sub_list": "cancelados",
"situation": "CANCELADOS POR INSOLVENCIA",
"name": "EMPRESA EJEMPLO SA DE CV",
"person_type": "M",
"state": "CIUDAD DE MEXICO"
}
],
"email": "[email protected]",
"legal_representative_rfc": "UIOJ750110R13",
"legal_representative_curp": "UIOJ750110HDFRRN09",
"certs": [
{
"serial": "00001000000500000001",
"status": "Activo",
"type": "FIEL",
"valid_from_utc": "2020-01-15T00:00:00Z",
"valid_to_utc": "2024-01-15T00:00:00Z",
"email": "[email protected]",
"legal_representative_rfc": "UIOJ750110R13",
"legal_representative_curp": "UIOJ750110HDFRRN09",
"cer_base64": "MIIF..."
}
]
}
Response fields
| Field | Type | Description |
|---|---|---|
rfc |
string | The RFC number that was validated. |
valid |
boolean | null | Whether the RFC is registered and valid with SAT. null means SAT could not be reached: the result is unknown, retry later. |
message |
string | Status message from SAT (in Spanish). |
name |
string | Registered taxpayer name from SAT. |
zip |
string | Postal code associated with the RFC. |
sat_lists |
array | SAT-published contributor lists the RFC appears in. Empty array if not listed. |
email |
string | Contact email SAT has on file for the taxpayer. Omitted when not available. |
curp |
string | CURP of the taxpayer. Only present for persona física; omitted otherwise. |
legal_representative_rfc |
string | RFC of the legal representative. Only present for persona moral; omitted otherwise. |
legal_representative_curp |
string | CURP of the legal representative. Only present for persona moral; omitted otherwise. |
certs |
array | Digital certificates associated with the RFC. The same identity fields appear on each cert. See below. |
Fields inside each cert
| Field | Type | Description |
|---|---|---|
serial |
string | 20-digit SAT certificate serial number. |
status |
string | Activo, Caduco, or Revocado. |
type |
string | FIEL (e.firma) or SELLO (CSD). |
valid_from_utc |
string | ISO 8601 timestamp when the certificate became valid. |
valid_to_utc |
string | ISO 8601 timestamp when the certificate expires. |
email |
string | null | Email address embedded in the cert subject, if any. |
legal_representative_rfc |
string | null | Only present on persona moral (company) certs. |
legal_representative_curp |
string | null | Only present on persona moral (company) certs. |
curp |
string | null | Only present on persona física (individual) certs. |
cer_base64 |
string | null | Base64-encoded DER binary of the .cer file. Null when SAT's public CDN did not serve the certificate (typically for old pre-2010 serials). |
Async via webhook
Provide webhook_url and the API returns 202 immediately, then POSTs the full result to your URL when SAT replies. See Webhooks for delivery semantics.
curl -X POST https://rfccheck.com/v1/rfc/validate \
-H "x-api-key: rfc_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"rfc": "XAXX010101000",
"webhook_url": "https://example.com/webhooks/rfc-validation"
}'
{
"status": "processing",
"message": "RFC validation in progress"
}