# История транзакций

Все операции по карте (покупки, возвраты, пополнения) синхронизируются
от эквайера. История доступна через REST.

## Endpoint

```
GET /cards/:id/transactions?limit=50&before=2026-04-23T00:00:00Z
```

## Параметры

| Параметр | Тип | Описание |
|  --- | --- | --- |
| `limit` | integer | 1–200, по умолчанию 50 |
| `before` | ISO datetime | Cursor: вернёт транзакции с `transactionTime < before` |


## Пример

```bash
curl 'https://b2b.lumowallet.io/cards/8c7f1823-.../transactions?limit=100' \
  -H 'X-API-Key: YOUR_API_KEY'
```

## Ответ

```json
[
  {
    "id": "7f2b12a4-...",
    "cardId": "8c7f1823-...",
    "processorBillId": "BILL0010023",
    "processorOrderNo": "ORD55102",
    "type": 1,
    "typeName": "purchase",
    "status": 2,
    "statusName": "succeeded",
    "direction": 1,
    "directionName": "debit",
    "amount": "49.99",
    "fee": "0.50",
    "currency": "USD",
    "merchantName": "GOOGLE PLAY",
    "ditchCode": "5816",
    "reason": null,
    "transactionTime": "2026-04-23T12:05:22Z",
    "syncedAt": "2026-04-23T12:06:00Z"
  }
]
```

Сортировка — по `transactionTime DESC`.

## Поля

| Поле | Описание |
|  --- | --- |
| `processorBillId` | ID транзакции у эквайера — используйте для support-тикетов |
| `typeName` | `purchase` / `refund` / `reversal` / `recharge` |
| `statusName` | `pending` / `succeeded` / `failed` |
| `directionName` | `debit` (списание) / `credit` (приход на карту) |
| `amount` | Сумма операции в `currency` (десятичная строка) |
| `fee` | Комиссия эквайера (может быть `null`) |
| `merchantName` | Название торговой точки, как его прислал acquirer |
| `ditchCode` | MCC (категория торговой точки) |
| `reason` | Причина отклонения (для `failed`) |
| `transactionTime` | Время операции по мнению эквайера |
| `syncedAt` | Когда мы подтянули запись с эквайера |


## Real-time через webhook

Событие `card.transaction.created` приходит как только мы увидели новую
транзакцию в выборке моста (обычно задержка 15–60 секунд от реальной
операции).

```json
{
  "event": "card.transaction.created",
  "data": { /* полный CardTransaction */ }
}
```

## Пагинация

Cursor-стиль: запросили страницу, взяли `transactionTime` последней
записи, передали в `before` следующего запроса. Когда ответ меньше
`limit` — значит конец.