API Reference

Validate an RFC

Run the full pipeline: registration check, taxpayer name, zip, digital certificates, and SAT-list presence.

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

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",
  "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 (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"
}