# Listas negras del SAT

> Revise si un RFC está en la lista 69-B (operaciones simuladas), 69-B Bis o en las del artículo 69, uno por uno o hasta 1,000 a la vez.

El SAT publica quién simula operaciones (artículo 69-B del CFF), quién transmitió pérdidas fiscales indebidamente (69-B Bis) y quién no está localizado, tiene créditos firmes o exigibles, o tiene su sello cancelado (artículo 69). Fiscalisto descarga esas listas cada día y usted las consulta con su llave, de pruebas o de producción. En producción, cada 10 RFC revisados usan un timbre; en pruebas no cuesta.

## Un RFC

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/sat_lists/AAA080808HL8 \
  -H "Authorization: Bearer $FISCALISTO_API_KEY"
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const satListCheck = await fiscalisto.satLists.get("AAA080808HL8");
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

sat_list_check = fiscalisto.sat_lists.get("AAA080808HL8")
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$satListCheck = $fiscalisto->satLists->get('AAA080808HL8');
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	satListCheck, err := client.SatLists.Get(ctx, "AAA080808HL8")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *satListCheck)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var satListCheck = fiscalisto.satLists().get("AAA080808HL8");
System.out.println(satListCheck);
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var satListCheck = await fiscalisto.SatLists.GetAsync("AAA080808HL8");
```

```json
{
  "object": "sat_list_check",
  "tax_id": "AAA080808HL8",
  "name": "EMPRESA SIMULADORA SA DE CV",
  "listed": true,
  "risk": "high",
  "lists": [
    {
      "list": "69b",
      "source": "69b",
      "source_name": "69-B (operaciones simuladas)",
      "situation": "Definitivo",
      "published_on": null,
      "details": {
        "Publicación página SAT definitivos": "15/03/2024",
        "Número y fecha de oficio global de definitivos": "500-05-2024-1234 de fecha 01/03/2024"
      }
    }
  ],
  "lists_updated_at": "2026-10-24T00:12:40-06:00"
}
```

`details` trae las columnas que el SAT publica para ese RFC, con los nombres del SAT. En la 69-B las fechas y oficios vienen ahí; en las del artículo 69, `published_on` es la fecha del archivo (primera publicación, cancelación o «sin efectos desde»).

Si el RFC no aparece en ninguna, `listed` es `false`, `risk` es `none` y `lists` viene vacía.

## Varios a la vez

Mande hasta 1,000 RFC en una solicitud; la respuesta trae uno por RFC, en el orden en que los mandó (los repetidos, una vez):

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/sat_lists/check \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "tax_ids": ["AAA080808HL8", "ICV060329BY0"] }'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const { data } = await fiscalisto.satLists.check({ tax_ids: ["AAA080808HL8", "ICV060329BY0"] });
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

data = fiscalisto.sat_lists.check({"tax_ids": ["AAA080808HL8", "ICV060329BY0"]})["data"]
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$data = $fiscalisto->satLists->check(['tax_ids' => ['AAA080808HL8', 'ICV060329BY0']])['data'];
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	satListCheckList, err := client.SatLists.Check(ctx, &fiscalisto.CheckSatListsParams{
		TaxIDs: []string{"AAA080808HL8", "ICV060329BY0"},
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *satListCheckList)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.model.CheckSatListsParams;
import java.util.List;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var satListCheckList = fiscalisto.satLists().check(new CheckSatListsParams()
        .setTaxIds(List.of("AAA080808HL8", "ICV060329BY0")));
System.out.println(satListCheckList);
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var satListCheckList = await fiscalisto.SatLists.CheckAsync(new CheckSatListsParams
{
    TaxIds = new() { "AAA080808HL8", "ICV060329BY0" },
});
```

Úselo para revisar su catálogo de proveedores o clientes de una vez, por ejemplo cada mes. Un RFC mal escrito contesta `400` con `param` igual a `tax_ids.N`, su posición.

## Qué significa risk

| `risk` | Cuándo | Qué hacer |
| --- | --- | --- |
| `high` | 69-B o 69-B Bis como **Presunto** o **Definitivo**. | Las facturas de un definitivo no se pueden deducir. No le compre; si ya le compró, revise con su contador. |
| `medium` | Alguna lista del artículo 69: no localizado, créditos firmes o exigibles, cancelados, sentencias o CSD sin efectos. | Puede seguir facturándole, pero confirme sus datos y su situación. |
| `none` | No aparece, o ya **desvirtuó** o tiene **sentencia favorable**. | Nada. |

`listed` es `true` siempre que aparezca, aunque ya haya desvirtuado: así sabe que tuvo antecedentes.

## Al facturar

Cuando timbra una factura a un cliente que aparece en una lista, la factura se timbra igual (facturarle no está prohibido) y su respuesta trae un aviso en `warnings`, como «EMPRESA SIMULADORA SA DE CV está en la lista 69-B del SAT como «Definitivo»…». Muéstrelo a quien factura o regístrelo, según su sistema.

Las listas se actualizan cada día a la medianoche de la Ciudad de México; `lists_updated_at` dice cuándo fue la última vez. Las mismas listas se consultan en la app, en **Listas del SAT**.

## Cuánto cuesta

En producción, cada 10 RFC revisados usan un timbre de su cuenta; el aviso al facturar no cuenta. En pruebas no cuesta. Vea [Límites](https://fiscalisto.com/docs/api/limites#lo-que-usa-timbres-sin-timbrar).
