API Reference

Validate an RFC

Run the full pipeline: registration check, taxpayer name, zip, digital certificates, legal representative identity for companies, and SAT-list presence. Individual identity is also included when available.

POST /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

POST /v1/rfc/validate
Try it

Sign in to send a real request from this page.

New accounts get a $5 USD signup credit, no card required.

Example request

curl bash
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)

200 OK json
{
  "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..."
    }
  ]
}
Persona física — identity when available json
{
  "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 (async) bash
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"
  }'
202 Accepted json
{
  "status": "processing",
  "message": "RFC validation in progress"
}