Баланс по карте от эквайера — по одной карте, по выбранным картам или по всем сразу. Нужно право cards.read.
GET /cards/:id/balanceДоступно только для карт в статусе assigned, для остальных — 400 CARD_NOT_ACTIVE.
curl 'https://b2b.lumowallet.io/cards/8c7f1823-0d43-4618-86ee-fa0c77643cb2/balance' \
-H 'X-API-Key: YOUR_API_KEY'{
"balance": "42.17",
"currency": "USD",
"fetchedAt": "2026-05-01T12:34:56.000Z"
}| Поле | Тип | Описание |
|---|---|---|
balance | string | Баланс в виде десятичной строки от эквайера |
currency | string | ISO 4217 (обычно USD) |
fetchedAt | datetime | Когда значение получено от эквайера |
Баланс отдаётся из последнего полученного от эквайера значения. Если оно старше ~60 секунд, обновление запрашивается в фоне, а в ответ приходит последнее известное значение — оно может быть старше нескольких минут. Насколько оно свежее, показывает fetchedAt.
| HTTP | errorCode | Описание |
|---|---|---|
| 400 | CARD_NOT_ACTIVE | Карта не в статусе assigned, сообщение CARD_NOT_ACTIVE: card status is <status> |
| 401 | AUTH_REQUIRED / INVALID_API_KEY | Нет ключа или ключ неверный |
| 403 | CARD_NOT_OWNED | Карта принадлежит другой компании |
| 404 | CARD_NOT_FOUND | Карты с таким id нет |
| 422 | CARD_NOT_ACTIVE | Карта ещё не готова к операциям (Card is not yet active) |
| 502 | BAD_GATEWAY | Баланс получить не удалось — повторите позже |
GET /cards/balances?limit=100&after={cardId}Последние известные балансы всех карт компании одним запросом — удобно для списков и сверки, без запроса на каждую карту.
| Параметр | Описание |
|---|---|
limit | 1–100, по умолчанию 100 |
after | Курсор: meta.nextCursor из предыдущей страницы |
curl 'https://b2b.lumowallet.io/cards/balances?limit=100' \
-H 'X-API-Key: YOUR_API_KEY'{
"data": [
{
"cardId": "1b4e28ba-2fa1-41d2-883f-0016d3cca427",
"externalId": "user-42-card-1",
"balance": "42.17",
"currency": "USD",
"fetchedAt": "2026-10-02T09:58:11.000Z"
},
{
"cardId": "8c7f1823-0d43-4618-86ee-fa0c77643cb2",
"externalId": null,
"balance": null,
"currency": null,
"fetchedAt": null
}
],
"meta": {
"limit": 100,
"nextCursor": "8c7f1823-0d43-4618-86ee-fa0c77643cb2"
}
}- В выдаче все карты компании, включая закрытые, отсортированные по
cardId. - Это последние известные значения: их обновляет фоновая синхронизация, к эквайеру за каждой картой запрос не идёт. Свежесть — в
fetchedAt. balance— строка без округления. Если баланс неизвестен — у карты не в статусеassignedили эквайер его ещё не отдал, —balance,currencyиfetchedAtравныnull.null— это «неизвестно», а не ноль.fetchedAt— когда баланс получен от эквайера, а не время ответа API.- Следующая страница: передайте
meta.nextCursorвafter. На последней страницеnextCursorравенnull.
Некорректные limit или after дают 400 VALIDATION_ERROR. Если эквайер не ответил, запрос целиком завершается ошибкой 502 — повторите позже.
POST /cards/balances/queryБалансы конкретных карт по списку ID — без обхода всех карт страницами. Карты можно указать нашими cardId, своими externalId или и теми, и другими в одном запросе.
| Поле тела | Описание |
|---|---|
cardIds | Массив cardId (UUID) |
externalIds | Массив ваших externalId |
Нужен хотя бы один ID, всего — не больше 100 по обоим массивам вместе.
curl -X POST 'https://b2b.lumowallet.io/cards/balances/query' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"cardIds": ["1b4e28ba-2fa1-41d2-883f-0016d3cca427"],
"externalIds": ["user-42-card-2", "user-77-card-1"]
}'{
"data": [
{
"cardId": "1b4e28ba-2fa1-41d2-883f-0016d3cca427",
"externalId": "user-42-card-1",
"balance": "42.17",
"currency": "USD",
"fetchedAt": "2026-10-02T09:58:11.000Z"
},
{
"cardId": "8c7f1823-0d43-4618-86ee-fa0c77643cb2",
"externalId": "user-42-card-2",
"balance": "0.00",
"currency": "USD",
"fetchedAt": "2026-10-02T09:58:11.000Z"
}
],
"notFound": {
"cardIds": [],
"externalIds": ["user-77-card-1"]
}
}- Элементы
data— в том же формате, что вGET /cards/balances, и с теми же правилами: последние известные значения, свежесть вfetchedAt,null— «неизвестно», а не ноль. - Порядок — как в запросе: сначала карты из
cardIds, затем изexternalIds. Карта, указанная и поcardId, и поexternalId, в ответе один раз. - ID, которых нет среди карт вашей компании, — в
notFound. Карты других компаний не возвращаются никогда.
Пустой запрос, больше 100 ID, cardId не в формате UUID или пустой externalId дают 400 VALIDATION_ERROR. Если эквайер не ответил, запрос целиком завершается ошибкой 502 — повторите позже.
Если у компании включен cardsTestMode, все три эндпоинта возвращают синтетический баланс 123.45 USD (для GET /cards/balances и POST /cards/balances/query — у карт в статусе assigned).