| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Intro
This API is meant to check whether an RFC appears in any of the 14 lists of published taxpayers that the SAT releases under article 69 of the Federal Fiscal Code — firm and enforceable tax debts, cancelled and forgiven debts, non-located taxpayers, court sentences, digital seal certificates rendered ineffective, and others.
In the answer you will get one entry for every list where the RFC appears, each one with the data that list publishes.
kiban cloud rebuilds its copy of the lists every day at 3:00 a.m. (Mexico City time) from the SAT open-data files, so the query is resolved in seconds and does not depend on the SAT portal being available.
Important Points
Mandatory Fields
kiban cloud performs validations on the information sent to detect special characters or incorrect formats.
| field | type | required | length | Description |
|---|---|---|---|---|
| rfc | Alphanumeric | Yes | 12-13 | RFC to look up. 13 positions for a Persona Física, 12 for a Persona Moral. |
| externalId | Alphanumeric | No | N/A | Your own identifier. It is not used in the query: it is stored in searchableBy so you can find the execution later. |
The response is a plain array, not a wrapped object
Unlike articulo_69_b, this service does not return a status / results wrapper. The response field is directly the array of matches, and it arrives empty ([]) when the RFC is not published in any list. In both cases the execution ends with status: SUCCESS: an RFC with no matches is a valid result, not an error.
One entry per list
The same RFC can appear in several lists at once — for example in firmes and in cancelados — and you get one entry for each. The listado field tells you which list the entry comes from:
| listado | SAT list |
|---|---|
| firmes | Firm tax debts |
| exigibles | Enforceable tax debts |
| cancelados | Debts cancelled for being uncollectible or due to insolvency (art. 146-A) |
| cancelados_146a_2007_2015 | Debts cancelled under art. 146-A, 2007-2015 |
| condonados_2007_2015 | Debts forgiven 2007-2015 |
| condonados_por_decreto | Debts forgiven by decree |
| condonados_concurso_mercantil_art146b | Debts forgiven due to bankruptcy proceedings (art. 146-B) |
| reduccion_multas_art74 | Fine reductions under art. 74 |
| reduccion_recargos_art21 | Surcharge reductions under art. 21 |
| retorno_inversiones | Return of investments |
| no_localizados | Non-located taxpayers |
| sentencias | Taxpayers with a court sentence for a tax crime |
| csd_sin_efectos | Taxpayers whose digital seal certificate was rendered ineffective |
| entes_publicos_gobierno_omisos | Non-compliant public and government entities |
The keys of each entry change with the list
Every SAT list publishes its own columns, so only the keys that list includes travel in each entry. Dates are delivered normalized to yyyy-mm-dd and amounts as text, exactly as the SAT publishes them. If the SAT adds a column to a list, it shows up in the response even though it is not documented here.
Test the service (test cases)
We have included a query parameter in Sandbox to enable you to query the test cases that we created for running tests. To get a response, fill the testCaseId parameter with any of the following cases:
| Num | Id | Name | Description |
|---|---|---|---|
| 1 | 6a0ea1f3c2d4b5e6f7a8ca01 | Respuesta exitosa - RFC en varias listas | Indicates one successful response with two matches |
| 2 | 6a0ea1f3c2d4b5e6f7a8ca02 | RFC no encontrado en ninguna lista | Indicates one successful response with no matches ([]) |
Test your own test caseIn case you want to test your own test case created in link, you can send in the testCaseId parameter the identifier of the test case you want to use.
For more information visit our knowledge center to know more about test cases
Successful response
Inside the response array each entry may contain the next fields.
| subfield | Description |
|---|---|
| listado | List the entry comes from. The only field always present. |
| rfc | RFC of the published taxpayer. |
| razonSocial | Company name of the taxpayer. |
| nombreDenominacionORazonSocial | Taxpayer's name, as that list names the column. |
| nombreORazonSocial | Taxpayer's name, as that list names the column. |
| contribuyente | Taxpayer's name, as that list names the column. |
| tipoPersona / tipoDePersona | Whether it is a Persona Física or a Persona Moral. |
| supuesto | Ground on which the taxpayer was published. |
| supuestoDeCancelacionCsd | Ground on which the digital seal certificate was rendered ineffective. |
| motivo | Reason for the publication. |
| motivoDeCondonacion | Reason the debt was forgiven. |
| administracionGeneralResponsableDeLaCancelacion | SAT office that resolved the cancellation. |
| monto | Amount of the debt. |
| importe | Amount of the debt. |
| importeCondonado | Amount that was forgiven. |
| entidadFederativa | Taxpayer's state. |
| ano / ejercicio / periodo | Year or period the entry belongs to. |
| fechaDeCancelacion | Date the debt was cancelled. |
| fechaDeCancelacionCsd | Date the digital seal certificate was rendered ineffective. |
| fechaDeAutorizacion | Authorization date. |
| fechaDePublicacion | Date the SAT published the entry. |
| fechaDePrimeraPublicacion | Date of the first publication of the entry. |
| fechasDePrimeraPublicacion | Plural variant of the field above, in the lists that name it that way. |
| fechaDePublicacionConMontoDeAcuerdoALaLeyDeTransparencia | Date the amount was published under the Transparency Law. |
{
"id": "69f211423ab2df39a76bb6c8",
"createdAt": "2026-04-29T14:10:10.839Z",
"finishedAt": "2026-04-29T14:10:11.948Z",
"duration": 1108,
"status": "SUCCESS",
"searchableBy": {
"rfc": "AAA010101AA1"
},
"request": {
"rfc": "AAA010101AA1"
},
"response": [
{
"listado": "firmes",
"rfc": "AAA010101AA1",
"razonSocial": "EMPRESA EJEMPLO SA DE CV",
"tipoPersona": "M",
"supuesto": "FIRMES",
"fechaDePrimeraPublicacion": "2014-01-01",
"entidadFederativa": "CIUDAD DE MEXICO"
},
{
"listado": "cancelados",
"rfc": "AAA010101AA1",
"razonSocial": "EMPRESA EJEMPLO SA DE CV",
"tipoPersona": "M",
"supuesto": "CANCELADOS POR INSOLVENCIA",
"fechaDeCancelacion": "2019-05-28",
"monto": "1,390,273",
"fechaDePublicacion": "2019-08-20",
"entidadFederativa": "MORELOS"
}
],
"cost": 0
}{
"id": "69f211423ab2df39a76bb6c9",
"createdAt": "2026-04-29T14:12:02.114Z",
"finishedAt": "2026-04-29T14:12:02.402Z",
"duration": 288,
"status": "SUCCESS",
"searchableBy": {
"rfc": "BBB020202BB2"
},
"request": {
"rfc": "BBB020202BB2"
},
"response": [],
"cost": 0
}Listing the possible not success responses
Required fields
You will get a 400 bad request error when the required field is not provided.
[
{
"code": "REQUIRED_FIELD_ERROR",
"message": "EMPTY_ERROR; can't be empty",
"field": "rfc"
}
]Invalid Format
The RFC contains illegal characters or does not comply with the expected format, the service will return a 400 bad request.
[
{
"code": "FORMAT_ERROR",
"message": "must match ^([A-Z&]{3,4})(\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01]))([A-Z\\d]{3})?$",
"field": "rfc"
}
]
Use v2 to get the error detailThe bodies above are the ones returned by
v2. Onv1the same validation errors arrive as an object keyed by field name:{ "rfc": "FORMAT_ERROR; must match ^([A-Z&]{3,4})(\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01]))([A-Z\\d]{3})?$" }
Unauthorized
It means that the provided API is incorrect and that you are not authorized to access it. You will not receive a body, only a 401 HTTP code.


