# Mandar depósitos

`POST https://api.fiscalisto.com/v1/bank_transactions`

Los depósitos de la cuenta del emisor (de la API de su banco o de un estado de cuenta), hasta 1,000 por solicitud. Uno que ya mandó (mismo día, monto, referencia y concepto) se omite, así que puede mandar periodos que se enciman. Cada uno trae suggested_match: las facturas que parece pagar.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `Idempotency-Key` | encabezado |  | Opcional (los SDK la mandan solos). Si la respuesta se pierde, repita la solicitud con el mismo valor durante 24 horas: contesta lo mismo, con idempotent-replayed: true, y no lo hace dos veces (ni crea, ni manda correos, ni cobra). |

## Cuerpo

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `issuer` | string |  | Emisor (iss_…). Si la llave tiene un solo emisor o la cuenta tiene uno solo, puede omitirse. |
| `account` | string |  | La cuenta (CLABE o número; se guardan sus últimos 4 dígitos). (hasta 40 caracteres) |
| `transactions` | arreglo de objeto | sí | Los depósitos, hasta 1,000 por solicitud. (hasta 1000) |
| `transactions[].date` | string | sí | El día del depósito (AAAA-MM-DD). |
| `transactions[].amount` | number | sí | Lo depositado, en pesos. Los retiros no se mandan. (de -∞ a 1000000000000) |
| `transactions[].description` | string | sí | El concepto del banco, como viene (SPEI, nombre del ordenante…). (hasta 500 caracteres) |
| `transactions[].reference` | string |  | La referencia o clave de rastreo. (hasta 100 caracteres) |
| `transactions[].payer_tax_id` | string |  | El RFC de quien depositó, si lo sabe (ayuda a sugerir la factura). |

Ejemplo:

```json
{
  "account": "012180001234567891",
  "transactions": [
    {
      "date": "2026-10-24",
      "amount": 5800,
      "description": "SPEI RECIBIDO INMOBILIARIA CVA",
      "reference": "F-1024",
      "payer_tax_id": "ICV060329BY0"
    }
  ]
}
```

## Con el SDK de TypeScript

```ts
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",
    },
  ],
}, { idempotencyKey: "pedido-A-1042" });
```

## Con el SDK de Python

```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",
        },
    ],
}, idempotency_key="pedido-A-1042")
```

## Con el SDK de PHP

```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',
        ],
    ],
], ['idempotency_key' => 'pedido-A-1042']);
```

## Con el SDK de .NET

```csharp
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",
        },
    },
}, new RequestOptions { IdempotencyKey = "pedido-A-1042" });
```

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

	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"),
			},
		},
	}, fiscalisto.WithIdempotencyKey("pedido-A-1042"))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *bankImport)
}
```

## Con el SDK de Java

```java
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.RequestOptions;
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")
        )), RequestOptions.idempotencyKey("pedido-A-1042"));
System.out.println(bankImport);
```

## Respuesta 201

Correcto.

Un objeto `BankImport`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `object` | `"bank_import"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `livemode` | boolean | sí | true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT. |
| `issuer` | string | sí | El emisor. |
| `added` | integer | sí | Cuántos depósitos se agregaron. (de -9007199254740991 a 9007199254740991) |
| `duplicates` | integer | sí | Cuántos ya estaban (se omitieron). (de -9007199254740991 a 9007199254740991) |
| `data` | arreglo de objeto | sí | Los depósitos agregados. |
| `data[].id` | string | sí | Identificador del objeto, con su prefijo (iss_, inv_, ret_, cus_, prd_, emp_, bat_, brn_, whs_, stm_, adj_, evt_, whe_). |
| `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` | `"bank_transaction"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `data[].issuer` | string | sí | El emisor. |
| `data[].date` | string | sí | El día del depósito (AAAA-MM-DD). |
| `data[].amount` | number | sí | Lo depositado, en pesos. |
| `data[].description` | string | sí | El concepto del banco. |
| `data[].reference` | string o null | sí | La referencia o clave de rastreo, o null. |
| `data[].account` | string o null | sí | Los últimos 4 dígitos de la cuenta, o null. |
| `data[].payer_tax_id` | string o null | sí | El RFC de quien depositó, si se sabe. |
| `data[].status` | `open`, `matched`, `classified` | sí | open (sin conciliar), matched (pagó facturas) o classified (no es de una factura). |
| `data[].classification` | `venta`, `prestamo`, `traspaso`, `devolucion` o null | sí | classified: venta (aún sin facturar), prestamo, traspaso o devolucion; si no, null. |
| `data[].note` | string o null | sí | Una nota al clasificarlo, o null. |
| `data[].invoices` | arreglo de string | sí | Las facturas (inv_…) que pagó, si está conciliado. |
| `data[].payment` | string o null | sí | El complemento de pago (inv_…) timbrado con él, o null. |
| `data[].suggested_match` | objeto o null | sí | Si está abierto, las facturas que parece pagar (por monto, RFC, folio en el concepto y fecha): invoices, lo que toca a cada una (amounts), method, confidence (high o medium) y por qué (reasons). null si ninguna encaja. |
| `data[].suggested_match.invoices` | arreglo de string | sí | Las facturas, como el cuerpo de POST /v1/invoices, con reference opcional. |
| `data[].suggested_match.amounts` | objeto | sí | Lo que el depósito pagaría de cada factura (por inv_…). |
| `data[].suggested_match.method` | `PPD`, `PUE` | sí | egreso (la factura completa y después una nota de crédito por el anticipo, opción A) o remanente (la factura solo por lo que falta, opción B). |
| `data[].suggested_match.confidence` | `high`, `medium` | sí | high (el monto y además el RFC, el nombre o el folio coinciden) o medium (revíselo antes). |
| `data[].suggested_match.reasons` | arreglo de string | sí | Por qué se sugiere, en palabras. |
| `data[].created_at` | string (date-time) o null | sí | Cuándo se mandó. |

## 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.
