# Conciliar un depósito

`POST https://api.fiscalisto.com/v1/bank_transactions/{id}/match`

El depósito pagó estas facturas (de un mismo cliente), o sin invoices, las de suggested_match. Sus facturas PUE por cobrar quedan pagadas (invoice.paid). No timbra: para pagar una PPD con este depósito, POST /v1/payments con bank_transaction.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `id` | ruta | sí | El id del objeto. |
| `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 |
| --- | --- | --- | --- |
| `invoices` | arreglo de string |  | Las facturas (inv_… o UUID) que pagó este depósito, de un mismo cliente. Sin ellas, las de suggested_match. (hasta 50) |

Ejemplo:

```json
{
  "invoices": [
    "inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN"
  ]
}
```

## Con el SDK de TypeScript

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

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

const bankTransaction = await fiscalisto.bankTransactions.match("btx_OufpKqnrvx9p9Rt4sLm2XyT5uBcW8sKdLx", {
  invoices: ["inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN"],
}, { idempotencyKey: "pedido-A-1042" });
```

## Con el SDK de Python

```python
from fiscalisto import Fiscalisto

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

bank_transaction = fiscalisto.bank_transactions.match("btx_OufpKqnrvx9p9Rt4sLm2XyT5uBcW8sKdLx", {
    "invoices": ["inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN"],
}, 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();

$bankTransaction = $fiscalisto->bankTransactions->match('btx_OufpKqnrvx9p9Rt4sLm2XyT5uBcW8sKdLx', [
    'invoices' => ['inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN'],
], ['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 bankTransaction = await fiscalisto.BankTransactions.MatchAsync("btx_OufpKqnrvx9p9Rt4sLm2XyT5uBcW8sKdLx", new MatchBankTransactionParams
{
    Invoices = new() { "inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN" },
}, 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()

	bankTransaction, err := client.BankTransactions.Match(ctx, "btx_OufpKqnrvx9p9Rt4sLm2XyT5uBcW8sKdLx", &fiscalisto.MatchBankTransactionParams{
		Invoices: []string{"inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN"},
	}, fiscalisto.WithIdempotencyKey("pedido-A-1042"))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(bankTransaction.ID)
}
```

## Con el SDK de Java

```java
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.RequestOptions;
import com.fiscalisto.model.MatchBankTransactionParams;
import java.util.List;

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

var bankTransaction = fiscalisto.bankTransactions().match("btx_OufpKqnrvx9p9Rt4sLm2XyT5uBcW8sKdLx", new MatchBankTransactionParams()
        .setInvoices(List.of("inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN")), RequestOptions.idempotencyKey("pedido-A-1042"));
System.out.println(bankTransaction.getId());
```

## Respuesta 200

Correcto.

Un objeto `BankTransaction`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `id` | string | sí | Identificador del objeto, con su prefijo (iss_, inv_, ret_, cus_, prd_, emp_, bat_, brn_, whs_, stm_, adj_, evt_, whe_). |
| `livemode` | boolean | sí | true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT. |
| `object` | `"bank_transaction"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `issuer` | string | sí | El emisor. |
| `date` | string | sí | El día del depósito (AAAA-MM-DD). |
| `amount` | number | sí | Lo depositado, en pesos. |
| `description` | string | sí | El concepto del banco. |
| `reference` | string o null | sí | La referencia o clave de rastreo, o null. |
| `account` | string o null | sí | Los últimos 4 dígitos de la cuenta, o null. |
| `payer_tax_id` | string o null | sí | El RFC de quien depositó, si se sabe. |
| `status` | `open`, `matched`, `classified` | sí | open (sin conciliar), matched (pagó facturas) o classified (no es de una factura). |
| `classification` | `venta`, `prestamo`, `traspaso`, `devolucion` o null | sí | classified: venta (aún sin facturar), prestamo, traspaso o devolucion; si no, null. |
| `note` | string o null | sí | Una nota al clasificarlo, o null. |
| `invoices` | arreglo de string | sí | Las facturas (inv_…) que pagó, si está conciliado. |
| `payment` | string o null | sí | El complemento de pago (inv_…) timbrado con él, o null. |
| `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. |
| `suggested_match.invoices` | arreglo de string | sí | Las facturas, como el cuerpo de POST /v1/invoices, con reference opcional. |
| `suggested_match.amounts` | objeto | sí | Lo que el depósito pagaría de cada factura (por inv_…). |
| `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). |
| `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). |
| `suggested_match.reasons` | arreglo de string | sí | Por qué se sugiere, en palabras. |
| `created_at` | string (date-time) o null | sí | Cuándo se mandó. |

```json
{
  "id": "btx_OufpKqnrvx9p9Rt4sLm2XyT5uBcW8sKdLx",
  "object": "bank_transaction",
  "livemode": false,
  "issuer": "iss_OufpKqnrvx9p",
  "date": "2026-10-24",
  "amount": 5800,
  "description": "SPEI RECIBIDO INMOBILIARIA CVA · ICV060329BY0",
  "reference": "F-1024",
  "account": "4821",
  "payer_tax_id": "ICV060329BY0",
  "status": "open",
  "classification": null,
  "note": null,
  "invoices": [],
  "payment": null,
  "suggested_match": {
    "invoices": [
      "inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN"
    ],
    "amounts": {
      "inv_OufpKqnrvx9p6hW1yQbT3mZr8sKdLx0VeN": 5800
    },
    "method": "PUE",
    "confidence": "high",
    "reasons": [
      "Mismo monto",
      "RFC del cliente en el concepto"
    ]
  },
  "created_at": "2026-10-25T09:00:00-06:00"
}
```

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