Читайте реестр движений денег

Прочитайте журнал денег, которые проект зарезервировал, вернул и потратил, запись за записью.

Реестр — это журнал движений денег проекта. Каждый холд, каждый возврат и каждое списание добавляют запись, и после этого запись никогда не меняется. Операция этой страницы читает журнал, а консоль показывает его на вкладке Реестр экрана Операции.

Что говорит запись

type говорит, что именно сдвинулось. Знак amount считается со стороны бюджета: положительная сумма берётся из бюджета, а отрицательная возвращается в него.

typeКогда записываетсяamount
reservation_holdБерётся холдЗарезервированная сумма
reservation_releaseХолд освобождаетсяВозвращённая сумма, отрицательная
usage_captureВызов списываетсяСколько стоил вызов
overrunВызов стоил больше своего холдаЧасть стоимости сверх холда

Контракт называет ещё три типа: manual_adjustment, budget_credit и refund. Ни одна операция API их не записывает.

reservation_id называет холд, к которому относится запись. metadata несёт то, с чем запись была сделана: модель холда, числа токенов списания.

Не складывайте записи, чтобы получить расходы: и холд, и его списание положительны, а overrun — это часть usage_capture того же вызова, а не деньги сверх неё. Чтобы узнать, сколько потратил проект, используйте отчёт о расходах на странице Аналитика.

Окно и страницы

Список читается внутри окна времени, самые новые записи — в начале.

  • Без from и to окно — это последние семь дней, включая сегодняшний.

  • from и to отправляются вместе, и окно между ними — не больше семи дней.

  • Значение со смещением — это момент, который оно называет. Значение без смещения читается как UTC.

  • Один из двух без другого, to раньше from или более широкое окно отвечают 422 с кодом invalid_date_range.

Внутри окна список делится на страницы: отправьте meta.next_cursor одной страницы как cursor следующего запроса. Чтобы прочитать более длинный период, сдвигайте окно.

Список можно читать и по номеру страницы. Отправьте page вместо cursor, и в meta вместо next_cursor придут page, limit, total и anchor; страницы считаются внутри того же окна. Отправляйте anchor первой страницы со всеми остальными страницами: считаются только записи с ID не больше него, поэтому запись, сделанная за это время, не сдвигает строки со страницы на страницу. На page вместе с cursor и на anchor без page ответ — 422; как считается total, говорит раздел Поиск и нумерованные страницы.

Операции

Описания операций и полей приведены на английском.

Движения денег в реестре

GET /v1/ledger-entries

  • Разрешение: read

Параметры

ПараметрОписание
cursor необязательно

querystring

The meta.next_cursor of the previous page.

limit необязательно

queryinteger

Page size (default 30).

  • Минимум: 1
  • Максимум: 100
page необязательно

queryinteger

The page number, from 1. Turns the list into its numbered form: the answer's meta is a PageMeta (with total) instead of a CursorMeta. Together with cursor it is a 422; without page the answer is the cursor page, unchanged. A page past the last one is an empty data with the same total.

  • Минимум: 1
  • Максимум: 10000
anchor необязательно

querystring

The meta.anchor of the first numbered page: only rows with an id at or below it are counted and paged, so rows written after the first page do not shift pages 2..N. Without it the newest matching row is the anchor, and the answer names it. Only with page (422 otherwise).

  • Шаблон: ^\d{1,20}$
from необязательно

querystring

Window start, ISO-8601 — a value with an offset is the moment it names, one without is read as UTC. The rule of the three lists that take this parameter (/v1/operations, /v1/authorizations, /v1/ledger-entries): from and to are given together or not at all, to must not precede from, and the window must not exceed 7 days. Naming neither end selects the last 7 days rather than the whole table — an unbounded range is the one query shape that cannot use the (project_id, created_at, id) index. Anything else answers 422 invalid_date_range. The analytics read their window by another rule (WindowFrom).

  • Формат: date-time
to необязательно

querystring

Window end, ISO-8601, inclusive. See from for the window rule of the three lists: both ends together, to >= from, at most 7 days, otherwise 422 invalid_date_range.

  • Формат: date-time

Ответы

200

One page of ledger entries — a cursor page, or a numbered one with page

application/json
{
  "data": [
    {
      "entry_id": "74438200973594624",
      "reservation_id": "74438200973594624",
      "type": "reservation_hold",
      "amount": "0.02700000",
      "currency": "USD",
      "metadata": {},
      "created_at": "2026-10-02T09:30:00Z"
    }
  ],
  "meta": {
    "limit": 1,
    "next_cursor": "string"
  }
}

Ошибки

СтатусКодыКогда
401

No credential, or one that is not valid

403

Authenticated, but not allowed: scope (insufficient_scope), policy or tenant (not_a_member); a blocked end customer (customer_blocked); an act only a signed-in person may take (session_required); the role rule on members and invitations (member_forbidden, invite_forbidden); a write to the organization's own rows, or a read of the audit journal, by a caller that does not reach every project (project_access_restricted)

422

Validation failure or a semantically impossible request. Field-level validation from the framework answers {"message", "errors"}; domain refusals answer the standard error envelope. An Idempotency-Key longer than 190 characters is invalid_request in that envelope.

Заголовки

  • X-Request-Id

Тело каждой ошибки — конверт ошибки.

Примеры

Прочитать последние записи

В ответе две записи одного вызова, самая новая — первой: его списание, затем его холд. meta.next_cursor — это cursor следующей страницы.

Terminal
curl "https://api.slen.ai/api/v1/ledger-entries?limit=2" \
  -H "Authorization: Bearer $SLEN_API_KEY"
200 OK
{
  "data": [
    {
      "entry_id": "74442131708452864",
      "reservation_id": "74442097331195904",
      "type": "usage_capture",
      "amount": "0.00014100",
      "currency": "USD",
      "metadata": {
        "input_tokens": 420,
        "output_tokens": 130,
        "is_partial": false,
        "estimated_cost": "0.00018300",
        "reserved_amount": "0.00021960"
      },
      "created_at": "2026-10-02T08:40:15+00:00"
    },
    {
      "entry_id": "74442097335390208",
      "reservation_id": "74442097331195904",
      "type": "reservation_hold",
      "amount": "0.00021960",
      "currency": "USD",
      "metadata": {
        "model_code": "gpt-4o-mini",
        "estimation_strategy": "maximum",
        "safety_multiplier": "1.200"
      },
      "created_at": "2026-10-02T08:40:12+00:00"
    }
  ],
  "meta": {
    "limit": 2,
    "next_cursor": "74442097335390208"
  }
}

Что читать дальше

Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d