A separate product from the validator

SAT lists API

Check whether an RFC appears on the CFF Annex 69-B (EFOS) list or the Article 69 lists, from your system, with one HTTP call.

Base rate: MX$0.100 per RFC checked + VAT

What it checks

  • CFF Annex 69-B: taxpayers the SAT presumes or defines as issuing simulated invoices (EFOS).
  • CFF Article 69 lists: final tax assessments and other cases published by the SAT.
  • Each response keeps a 69-B finding apart from an Art. 69 finding: they are not the same.

Plans and packs

Each RFC checked counts once, whether or not it is found. A monthly plan gives a quota that renews every month; a prepaid pack is bought once and used after the monthly quota.

Monthly plans

Free with a key

$0 MXN

50 RFCs per month

Basic

MX$99 MXN/mo + VAT

1,500 RFCs per month

MX$0.066 per RFC · 34% less than prepaid

Professional

MX$299 MXN/mo + VAT

6,000 RFCs per month

MX$0.050 per RFC · 50% less than prepaid

Enterprise

MX$899 MXN/mo + VAT

25,000 RFCs per month

MX$0.036 per RFC · 64% less than prepaid

Billed monthly by card, cancel anytime. The quota renews on the 1st of each month and unused RFCs are lost. VAT (16%) is added at checkout.

Prepaid packs

One-time payment, no monthly fee. Used after the monthly quota. The balance lasts until used up, for at most 12 months from purchase.

1,000 RFC

MX$100 + VAT

MX$0.100 per RFC

5,000 RFC

MX$500 + VAT

MX$0.100 per RFC

25,000 RFC

MX$2,500 + VAT

MX$0.100 per RFC

  • Each purchase is a new balance; it does not replace the previous one.
  • If the balance does not cover a whole request, the entire request is rejected: nothing is charged partially.

How it works

  1. Get a free key at the API page (one per email). The free plan includes 50 RFCs per month.
  2. Send up to 100 RFCs per request in a POST with your key in the Authorization header.
  3. If the balance does not cover the whole request, it is rejected (402) and nothing is charged partially.

Up to 100 RFCs per request and 60 requests per minute per key.

Example

These test RFCs are fictitious and reserved: they return fixed responses with any valid key and are not charged.

bash
curl -X POST https://herramientasfiscales.mx/api/v1/efos/check \
  -H "Authorization: Bearer af_tu_llave" \
  -H "Content-Type: application/json" \
  -d '{"rfcs": ["TST010101LIM", "TST010101DEF"]}'
json
{
  "consultadoEn": "2026-10-18T14:05:11-06:00",
  "fuentes": [
    { "lista": "69b", "filas": 14807, "cargadaEn": "2026-10-18T09:00:00-06:00", "corteSat": "2026-09-30" },
    { "lista": "firmes", "filas": 264337, "cargadaEn": "2026-10-18T09:01:00-06:00", "corteSat": null }
  ],
  "listasNoCargadas": [],
  "resultados": [
    { "rfc": "TST010101LIM", "encontrado": false, "prueba": true },
    {
      "rfc": "TST010101DEF", "encontrado": true, "prueba": true,
      "nombre": "EMPRESA DE PRUEBA DEFINITIVA SA DE CV",
      "anexo69b": {
        "situacion": "definitivo",
        "fases": {
          "presuncion": { "oficio": "PRUEBA-500-05-2020-0001", "fechaSat": "2020-02-10", "fechaDof": "2020-03-02" },
          "definitivo": { "oficio": "PRUEBA-500-05-2020-0003", "fechaSat": "2020-11-20", "fechaDof": "2020-12-04" }
        }
      }
    }
  ],
  "errors": [],
  "consumo": { "rfcsCobrados": 0, "saldoMensual": 50, "saldoPrepago": 0, "renueva": "2026-11-01T00:00:00-06:00", "proximoVencimientoPrepago": null }
}

The live response has the same shape. The consumo field says what was charged in that request: with the test RFCs, rfcsCobrados is 0.

Common errors: 401 INVALID_KEY, 402 SALDO_INSUFICIENTE, 429, 503 LISTAS_NO_DISPONIBLES. Full reference in the docs.

Formal contract to generate your client: OpenAPI 3.1 (JSON).

What a response means

The lists are the ones published by the SAT; each response states the cut-off date of the source and when we loaded it. An RFC not appearing means it is not on those lists as of that date; it is not an opinion.

Questions or a quote for more volume: hola@alce-soft.com

The CFDI validator has its own API and balance: docs.

SAT lists API: check RFCs against the 69-B and Art. 69 lists | ALCE Fiscal