CSF validation (RFC + idCIF)

Every Constancia de Situación Fiscal carries a QR code that points to a public SAT validator. Given the taxpayer's RFC and the idCIF printed on the constancia, this endpoint reads that validator and returns the record the SAT holds today: name, status, fiscal address, and regimes.

No CIEC and no CAPTCHA are involved, the lookup is synchronous, and nothing is stored. Use it to check that a constancia a customer uploaded is genuine and current. To download the constancia PDF itself, use a CSF extraction.

Validate

POST /v1/csf/validate

{ "tax_id": "DIM8701081LA", "id_cif": "1904014102123" }
  • tax_id — the RFC (12 characters for a company, 13 for a person). Case-insensitive.
  • id_cif — the idCIF from the constancia, digits only.

Response (200 OK) for a company:

{
  "tax_id": "DIM8701081LA",
  "id_cif": "1904014102123",
  "person_type": "moral",
  "legal_name": "Mi razón social",
  "capital_regime": "SA DE CV",
  "incorporated_on": "2019-02-21",
  "given_names": null,
  "first_surname": null,
  "second_surname": null,
  "curp": null,
  "birth_date": null,
  "operations_started_on": "2019-02-21",
  "status": "ACTIVO",
  "status_changed_on": "2019-02-21",
  "address": {
    "state": "CIUDAD DE MEXICO",
    "municipality": "CUAUHTEMOC",
    "neighborhood": "CUAUHTEMOC",
    "locality": null,
    "street_type": "Tipo vialidad",
    "street": "PASEO DE LA REFORMA",
    "exterior_number": "143",
    "interior_number": "Piso 69",
    "zip_code": "72055"
  },
  "regimes": [
    { "name": "Régimen General de Ley Personas Morales", "registered_on": "2019-02-21" }
  ]
}

Fields

Field Company (moral) Person (fisica)
legal_name Denominación o Razón Social, as the SAT prints it null
capital_regime Régimen de capital (e.g. SA DE CV) null
incorporated_on Fecha de constitución null
given_names, first_surname, second_surname, curp, birth_date null From the SAT record
status The SAT's own word (e.g. ACTIVO), unchanged same

Dates are YYYY-MM-DD. Any field the SAT leaves empty is null. person_type follows the RFC length.

Responses

Status reason What happened What you should do
200 — Record retrieved Use the fields above
404 not_found The SAT has no cédula for that RFC and idCIF Check both values against the constancia
503 unavailable The SAT validator could not be reached or answered something unrecognised Retry later
422 — (Laravel errors) Invalid tax_id or a non-numeric id_cif Fix the request body