> ## Documentation Index
> Fetch the complete documentation index at: https://oblodai.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# POST /v1/payment/history

Список платежей мерчанта — новые сверху, с limit/offset‑пагинацией.

**URL:** `https://api.oblodai.com/v1/payment/history` · **Аутентификация:** обязательна.

<Note>
  Примеры используют хелпер `call()` и переменные `$SECRET`/`$PUBLIC_ID` — их определение см. в
  [Как подписать запрос](/guides/signing-requests). Проще не писать подпись руками, а взять
  [SDK](/sdk/overview).
</Note>

***

## Параметры запроса

Все поля опциональны.

<ParamField body="limit" type="int64" default={25}>
  Размер страницы. По умолчанию 25, диапазон 1–100.
</ParamField>

<ParamField body="offset" type="int64">
  Смещение от начала.
</ParamField>

<ParamField body="status" type="string">
  Фильтр по статусу ([`payment_status`](/reference/payment-object#статусы-payment_status)). Пусто = все.
</ParamField>

***

## Пример запроса

<CodeGroup>
  ```bash cURL theme={null}
  BODY='{"limit":25,"offset":0,"status":"paid"}'
  TS=$(date +%s)
  SIG=$(printf '%s\n%s\n%s\n%s' "$TS" 'POST' '/v1/payment/history' "$BODY" \
    | openssl dgst -sha256 -hmac "$SECRET" -hex | sed 's/^.* //')
  curl -s https://api.oblodai.com/v1/payment/history \
    -X POST -H 'Content-Type: application/json' \
    -H "X-Public-Id: $PUBLIC_ID" -H "X-Timestamp: $TS" -H "X-Signature: $SIG" \
    -d "$BODY"
  ```

  ```python Python theme={null}
  call("/v1/payment/history", {"limit": 25, "offset": 0, "status": "paid"})
  ```

  ```js Node.js theme={null}
  await call("/v1/payment/history", { limit: 25, offset: 0, status: "paid" });
  ```
</CodeGroup>

***

## Пример ответа

```json theme={null}
{
  "state": 0,
  "result": {
    "items": [
      { "uuid": "8b1d7d2e-…", "order_id": "order-1", "amount": "10.00",
        "payment_status": "paid", "is_final": true, "…": "полный объект платежа" }
    ],
    "paginate": { "count": 137, "per_page": 25, "offset": 0 }
  }
}
```

<ResponseField name="items" type="array">
  Список объектов платежа — те же поля, что в [объекте платежа](/reference/payment-object), но без `refunds[]` и `refund_status` — они приходят только в [`/info`](/reference/payment-info) (в примере показаны не все).
</ResponseField>

<ResponseField name="paginate.count" type="int64">
  **Общее** число записей, не размер страницы.
</ResponseField>

<ResponseField name="paginate.per_page" type="int64">
  Размер страницы.
</ResponseField>

<ResponseField name="paginate.offset" type="int64">
  Текущее смещение.
</ResponseField>

***

## Нюансы

* `count` — общее число записей по фильтру. Для постраничного обхода увеличивайте `offset` на `limit`,
  пока не переберёте `count`.
* Каждый элемент — объект платежа с теми же полями, что в [объекте платежа](/reference/payment-object), но без
  `refunds[]` и `refund_status` — они приходят только в [`POST /v1/payment/info`](/reference/payment-info);
  в примере выше поля сокращены для краткости.

***

## Связанные страницы

<CardGroup cols={2}>
  <Card title="Объект платежа" href="/reference/payment-object" icon="arrow-right" horizontal />

  <Card title="POST /v1/payment/info" href="/reference/payment-info" icon="arrow-right" horizontal />
</CardGroup>
