# Conciliación bancaria

> Mande los depósitos de la cuenta del emisor y Fiscalisto le dice qué factura pagó cada uno; al conciliarlos, sus facturas quedan pagadas.

Mande los depósitos de la cuenta bancaria del emisor, de la API de su banco o de un estado de cuenta que ya leyó. Fiscalisto sugiere la factura que pagó cada uno (por monto, RFC, folio en el concepto y fecha), y al conciliarlo la factura queda pagada en [Cuentas por cobrar](https://fiscalisto.com/docs/api/cuentas-por-cobrar) y llega `invoice.paid`.

## Mandar depósitos

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/bank_transactions \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "account": "012180001234567891",
    "transactions": [
      {
        "date": "2026-10-24",
        "amount": 5800,
        "description": "SPEI RECIBIDO INMOBILIARIA CVA",
        "reference": "F-1024",
        "payer_tax_id": "ICV060329BY0"
      }
    ]
  }'
```

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

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

const bankImport = await fiscalisto.bankTransactions.create({
  account: "012180001234567891",
  transactions: [
    {
      date: "2026-10-24",
      amount: 5800,
      description: "SPEI RECIBIDO INMOBILIARIA CVA",
      reference: "F-1024",
      payer_tax_id: "ICV060329BY0",
    },
  ],
});
```

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

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

bank_import = fiscalisto.bank_transactions.create({
    "account": "012180001234567891",
    "transactions": [
        {
            "date": "2026-10-24",
            "amount": 5800,
            "description": "SPEI RECIBIDO INMOBILIARIA CVA",
            "reference": "F-1024",
            "payer_tax_id": "ICV060329BY0",
        },
    ],
})
```

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

use Fiscalisto\Fiscalisto;

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

$bankImport = $fiscalisto->bankTransactions->create([
    'account' => '012180001234567891',
    'transactions' => [
        [
            'date' => '2026-10-24',
            'amount' => 5800,
            'description' => 'SPEI RECIBIDO INMOBILIARIA CVA',
            'reference' => 'F-1024',
            'payer_tax_id' => 'ICV060329BY0',
        ],
    ],
]);
```

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

	bankImport, err := client.BankTransactions.Create(ctx, &fiscalisto.CreateBankTransactionsParams{
		Account: fiscalisto.String("012180001234567891"),
		Transactions: []fiscalisto.CreateBankTransactionsParamsTransaction{
			{
				Date:        "2026-10-24",
				Amount:      5800,
				Description: "SPEI RECIBIDO INMOBILIARIA CVA",
				Reference:   fiscalisto.String("F-1024"),
				PayerTaxID:  fiscalisto.String("ICV060329BY0"),
			},
		},
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *bankImport)
}
```

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

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

var bankImport = fiscalisto.bankTransactions().create(new CreateBankTransactionsParams()
        .setAccount("012180001234567891")
        .setTransactions(List.of(
                new CreateBankTransactionsParamsTransaction()
                        .setDate("2026-10-24")
                        .setAmount(5800)
                        .setDescription("SPEI RECIBIDO INMOBILIARIA CVA")
                        .setReference("F-1024")
                        .setPayerTaxId("ICV060329BY0")
        )));
System.out.println(bankImport);
```

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

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

var bankImport = await fiscalisto.BankTransactions.CreateAsync(new CreateBankTransactionsParams
{
    Account = "012180001234567891",
    Transactions = new()
    {
        new()
        {
            Date = "2026-10-24",
            Amount = 5800,
            Description = "SPEI RECIBIDO INMOBILIARIA CVA",
            Reference = "F-1024",
            PayerTaxId = "ICV060329BY0",
        },
    },
});
```

Hasta 1,000 depósitos por solicitud, solo abonos y en pesos. Uno que ya mandó (el mismo día, monto, referencia y concepto) se omite, así que puede mandar cada día los últimos 7 sin repetir nada: la respuesta dice cuántos se agregaron (`added`) y cuántos ya estaban (`duplicates`), con los nuevos en `data`.

Cada depósito (`btx_…`) abierto trae `suggested_match`: las facturas que parece pagar, cuánto toca a cada una, si son PUE o PPD y qué tan segura es (`confidence`: `high` o `medium`), con sus razones. `payer_tax_id` ayuda mucho: el RFC del ordenante casi nunca viene en el concepto.

## Conciliar

| Si el depósito… | Haga |
| --- | --- |
| Pagó facturas PUE | `POST /v1/bank_transactions/{id}/match`, sin cuerpo para aceptar la sugerencia o con `invoices` (`inv_…` o UUID, de un mismo cliente). |
| Pagó facturas PPD | [POST /v1/payments](https://fiscalisto.com/docs/api/pagos-y-notas-de-credito) con `"bank_transaction": "btx_…"`: timbra el complemento de pago, con la fecha del depósito, y lo concilia. Repetir la solicitud con la misma `Idempotency-Key` contesta el mismo complemento; otro con el mismo depósito se rechaza. |
| No es de una factura | `POST /v1/bank_transactions/{id}/classify` con `classification`: `venta` (aún sin facturar), `prestamo`, `traspaso` o `devolucion`. |

Un depósito sin explicar puede tomarse como ingreso en una revisión del SAT (artículo 59 fracción III del CFF): clasifique los que no vienen de una factura.

`POST /v1/bank_transactions/{id}/reopen` deshace la conciliación o la clasificación, y sus facturas vuelven a deber. Si se pagó con un complemento vigente, cancele antes el complemento (`400 bank_transaction_invalid`).

## Consultar

`GET /v1/bank_transactions` lista los depósitos, los más recientes primero; con `status=open` solo los que faltan. Cada uno conciliado dice qué facturas pagó (`invoices`) y, si se pagó con un complemento, cuál (`payment`).

Una cuenta manda hasta 100,000 depósitos al día en producción y 5,000 en pruebas ([Límites](https://fiscalisto.com/docs/api/limites)).
