# Listar hallazgos en los CFDI

`GET https://api.fiscalisto.com/v1/sat_findings`

Lo que Fiscalisto encontró en los CFDI del emisor (los suyos y los descargados del SAT) y nadie ha revisado, por tipo y del más grave al más leve: proveedores en la lista 69-B, CFDI cancelados, pagos en efectivo de más de $2,000, errores de CFDI 4.0. Todos en una página. No usa timbres.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `issuer` | consulta |  | El emisor (iss_…). Puede omitirse si la llave o la cuenta tienen uno solo. |
| `direction` | consulta |  | issued (emitidos) o received (recibidos); sin él, los dos. |
| `date_gte` | consulta |  | CFDI desde este día (AAAA-MM-DD). |
| `date_lte` | consulta |  | CFDI hasta este día (AAAA-MM-DD, completo). |

## Con el SDK de TypeScript

```ts
import { Fiscalisto } from "fiscalisto";

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

const { data } = await fiscalisto.satFindings.list();
```

## Con el SDK de Python

```python
from fiscalisto import Fiscalisto

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

data = fiscalisto.sat_findings.list()["data"]
```

## Con el SDK de PHP

```php
<?php

use Fiscalisto\Fiscalisto;

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

$data = $fiscalisto->satFindings->list()['data'];
```

## Con el SDK de .NET

```csharp
using Fiscalisto;

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

var satFindingList = await fiscalisto.SatFindings.ListAsync();
```

## Con el SDK de Go

```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()

	satFindingList, err := client.SatFindings.List(ctx, nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *satFindingList)
}
```

## Con el SDK de Java

```java
import com.fiscalisto.FiscalistoClient;

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

var satFindingList = fiscalisto.satFindings().list();
System.out.println(satFindingList);
```

## Respuesta 200

Correcto.

Un objeto `SatFindingList`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `object` | `"list"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `data` | arreglo de objeto | sí | Los objetos de esta página. |
| `data[].id` | string | sí | El código del hallazgo (el mismo que code). |
| `data[].livemode` | boolean | sí | true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT. |
| `data[].object` | `"sat_finding"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `data[].issuer` | string | sí | El emisor. |
| `data[].code` | string | sí | El código del hallazgo, estable (por ejemplo efos_definitivo). |
| `data[].severity` | `critical`, `warning`, `info` | sí | critical (grave), warning (revisar) o info. |
| `data[].title` | string | sí | Qué es, en palabras. |
| `data[].explanation` | string o null | sí | Por qué importa y qué hacer, o null. |
| `data[].invoices` | integer | sí | Cuántos CFDI lo tienen, sin revisar. (de -9007199254740991 a 9007199254740991) |
| `data[].amount` | number | sí | La suma de sus totales. |
| `has_more` | boolean | sí | true si hay más: pida la siguiente con starting_after igual al id del último. |
| `url` | string | sí | La ruta de esta lista. |

```json
{
  "object": "list",
  "data": [
    {
      "id": "efos_definitivo",
      "object": "sat_finding",
      "livemode": false,
      "issuer": "iss_OufpKqnrvx9p",
      "code": "efos_definitivo",
      "severity": "critical",
      "title": "Proveedor en la lista 69-B",
      "explanation": "El SAT presume que sus operaciones son simuladas: sus CFDI no se deducen.",
      "invoices": 3,
      "amount": 48720
    }
  ],
  "has_more": false,
  "url": "/v1/sat_findings"
}
```

## Errores

Puede responder 400, 401, 403, 404, 429, 500 con el cuerpo de error de siempre; cada código está en https://fiscalisto.com/docs/api/errores.md.
