/v1/rfc/validate
Validate an RFC number against SAT. The response includes registration status, taxpayer name, postal code, digital certificates, the legal representative's verified identity in legal_representative for a persona moral, and SAT-list presence (Articles 69, 69-B, 69-B Bis).
For a persona física, the response also includes the taxpayer's verified identity in person when a CURP is available. Because this depends on available source data, not every individual response includes person.
Identity details are verified through RENAPO. If the government identity lookup is unavailable, validation still completes without the corresponding identity object.
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",
"legal_representative": {
"curp": "UIOJ750110HDFRRN09",
"renapo_valid": true,
"names": "JUAN CARLOS",
"paternal_surname": "URIBE",
"mothers_maiden_name": "OJEDA",
"sex": "HOMBRE",
"birthdate": "10/01/1975",
"nationality": "MEXICO",
"entity_birth": "DF",
"status_curp": "RCN",
"probation_document": "ACTA DE NACIMIENTO",
"probation_document_data": {},
"homonimo": false
},
"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..."
}
]
}
{
"name": "JUAN PEREZ LOPEZ",
"curp": "PELJ900101HDFRPN09",
"person": {
"curp": "PELJ900101HDFRPN09",
"renapo_valid": true,
"names": "JUAN",
"paternal_surname": "PEREZ",
"mothers_maiden_name": "LOPEZ",
"sex": "HOMBRE",
"birthdate": "01/01/1990",
"nationality": "MEXICO",
"entity_birth": "DF",
"status_curp": "RCN",
"probation_document": "ACTA DE NACIMIENTO",
"probation_document_data": {},
"homonimo": false
}
}
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. |
legal_representative |
object | Verified identity of a persona moral's legal representative, including name, surnames, birthdate, and CURP status. Omitted only when the government identity lookup is unavailable. |
person |
object | Verified identity of a persona física taxpayer. Present only when a CURP is available and the government identity lookup succeeds; not every individual response includes it. |
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"
}