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

# Журнал запросов и цены для аккаунта

>  - Списание за один вызов по ID запроса или ID задачи - Постраничная синхронизация всех записей о списаниях и ошибках за период - Фактическая цена модели для текущего аккаунта 

С помощью API Key узнайте, сколько списано за каждый вызов, и какую цену ваш аккаунт фактически платит за модель. Ни один из трёх эндпоинтов не проверяет баланс — они работают даже при нулевом балансе.

```bash Одна запись theme={null}
curl 'https://api.apimart.ai/v1/logs/requests/task_01M6ZDAXTC8QXYCDM5PXPM413R' \
  --header 'Authorization: Bearer <token>'
```

```bash Синхронизация theme={null}
curl --get 'https://api.apimart.ai/v1/logs/requests' \
  --header 'Authorization: Bearer <token>' \
  --data-urlencode 'start_timestamp=1762732800' \
  --data-urlencode 'end_timestamp=1762736400' \
  --data-urlencode 'limit=1000'
```

```bash Цена для аккаунта theme={null}
curl --get 'https://api.apimart.ai/v1/pricing/model' \
  --header 'Authorization: Bearer <token>' \
  --data-urlencode 'model=doubao-seedance-2.0' \
  --data-urlencode 'resolution=720P' \
  --data-urlencode 'duration=5'
```

```json Одна запись theme={null}
{
  "object": "list",
  "request_id": "task_01M6ZDAXTC8QXYCDM5PXPM413R",
  "data": [
    {
      "id": "task_01M6ZDAXTC8QXYCDM5PXPM413R",
      "type": "consume",
      "status": "succeeded",
      "created_at": 1762740123,
      "model_name": "doubao-seedance-2.0",
      "token_name": "prod-server",
      "task_id": "task_01M6ZDAXTC8QXYCDM5PXPM413R",
      "prompt_tokens": 0,
      "completion_tokens": 0,
      "cache_tokens": 0,
      "cache_creation_tokens": 0,
      "cost_usd": 0.6,
      "cost_credits": 6
    }
  ]
}
```

```json Синхронизация theme={null}
{
  "object": "list",
  "data": [
    {
      "id": "<ID запроса>",
      "type": "consume",
      "status": "succeeded",
      "created_at": 1762732805,
      "model_name": "gpt-5.5",
      "token_name": "prod-server",
      "prompt_tokens": 1200,
      "completion_tokens": 350,
      "cache_tokens": 0,
      "cache_creation_tokens": 0,
      "latency_ms": 2310,
      "first_token_ms": 420,
      "cost_usd": 0.004125,
      "cost_credits": 0.04125
    }
  ],
  "has_more": true,
  "next_cursor": "AQAAAABpEoXlAjIwMjYxMTEw...",
  "watermark": 1762739700
}
```

```json Цена для аккаунта theme={null}
{
  "model": "doubao-seedance-2.0",
  "canonical_model": "doubao-seedance-2.0",
  "currency": "USD",
  "group": "vip",
  "billing_type": "per_second",
  "unit": "per_second",
  "spec": { "resolution": "720P", "duration": 5 },
  "spec_source": "request",
  "estimated": false,
  "unit_price_usd": 0.12,
  "quantity": 5,
  "total_usd": 0.6,
  "credits": { "unit_price": 1.2, "total": 6 },
  "price_source": "membership",
  "price_factors": ["membership"],
  "membership_tier": "gold"
}
```

## Аутентификация

**Authorization** `string` *required*

Используйте тот же API Key, что и для вызова моделей, с аутентификацией Bearer Token. Получить ключ можно на [странице управления API Key](https://apimart.ai/keys).

```
Authorization: Bearer YOUR_API_KEY
```

## Эндпоинты

```text theme={null}
GET /v1/logs/requests/{id}    Одна запись по ID запроса
GET /v1/logs/requests         Синхронизация журнала за период
GET /v1/pricing/model         Цена для аккаунта
```

Суммы указаны в USD; `cost_credits` и `credits` — в кредитах, равных USD × 10.

***

## Одна запись по ID запроса

```text theme={null}
GET /v1/logs/requests/{id}
```

**id** `string` *required*

* Синхронные вызовы: значение заголовка ответа `X-Oneapi-Request-Id`
* Асинхронные задачи: ID задачи, полученный при отправке

> [!NOTE]
>
> Журнал записывается асинхронно: обычно запись появляется через несколько секунд после завершения запроса. При ответе `404 log_not_found` повторите попытку позже. Асинхронные задачи ищутся по ID задачи, и запись появляется только после её завершения или ошибки.

Поиск охватывает весь аккаунт, которому принадлежит API Key. `data` — массив: у одного ID могут быть и запись о списании, и запись об ошибке. Основные поля:

| Поле | Описание |
| - | - |
| `id` | ID запроса или ID задачи |
| `type` | `consume` (списание) или `error` (ошибка) |
| `created_at` | Время записи, Unix-секунды; для асинхронных задач — время окончательного расчёта |
| `model_name` | Название модели |
| `token_name` | Название API Key, с которого сделан вызов (на момент записи; названия могут повторяться). Чтобы точно различать ключи, фильтруйте по `token_id` в эндпоинте синхронизации |
| `prompt_tokens` / `completion_tokens` | Входные / выходные токены |
| `cost_usd` | Сумма списания по записи (USD) |
| `cost_credits` | Списанные кредиты |

`cost_usd` — окончательная сумма после расчёта: у записей об ошибках всегда `0`, возврат при ошибке выполняется до записи. Сумма записей с `type` = `consume` — это всё, что списано за вызовы.

***

## Синхронизация журнала запросов

```text theme={null}
GET /v1/logs/requests
```

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

**start\_timestamp** `integer` *required*

Начало периода, Unix-время в секундах.

**end\_timestamp** `integer`

Конец периода, Unix-время в секундах. По умолчанию — текущее время. Обе границы включаются, период не более 31 дня.

**type** `string` (default: all)

Тип записей: `all`, `consume` или `error`.

**model** `string`

Фильтр по названию модели.

**token\_id** `integer`

Возвращать только записи указанного API Key. ID можно скопировать в консоли в списке «API-ключи» (отображается под названием ключа); после ротации ключа ID не меняется.

**limit** `integer` (default: 100)

Размер страницы, `1`–`1000`.

**cursor** `string`

Курсор пагинации. Передавайте `next_cursor` предыдущей страницы без изменений и не меняйте остальные параметры при пагинации.

В ответе `has_more` показывает, есть ли следующая страница, `next_cursor` — курсор следующей страницы, `watermark` — время сервера минус 300 секунд.

> [!TIP]
>
> **Рекомендуемая схема синхронизации**: `end_timestamp` каждого запуска — не позже `watermark`; следующий запуск начинайте на 10 минут раньше конца предыдущего и удаляйте дубликаты по `(id, type)`; в пределах одного окна листайте страницы, пока `has_more` не станет `false`.

***

## Цена для аккаунта

```text theme={null}
GET /v1/pricing/model
```

Узнайте фактическую цену модели для аккаунта, которому принадлежит текущий API Key. Учитываются индивидуальная цена, цена программы лояльности, коэффициент группы и скидки — так же, как при списании во время вызова. На странице тарифов показаны публичные цены; для оценки стоимости по вашему аккаунту используйте этот эндпоинт.

**model** `string` *required*

Название модели; поддерживаются псевдонимы.

**resolution** `string`

Разрешение или уровень; должен поддерживаться моделью.

**size** `string`

Размер изображения.

**quality** `string`

Уровень качества.

**duration** `integer`

Длительность в секундах, `1`–`3600`, для моделей с посекундной оплатой.

**n** `integer`

Количество результатов, `1`–`100`.

Без параметров спецификации цена рассчитывается по спецификации модели по умолчанию. Для моделей с посекундной оплатой без `duration` возвращается только цена за секунду.

Основные поля ответа:

| Поле | Описание |
| - | - |
| `unit` | Единица цены: `per_image`, `per_call`, `per_second`, `per_million_tokens` |
| `unit_price_usd` | Цена за единицу (USD) |
| `total_usd` | Итоговая цена для этой спецификации (USD) |
| `unit_prices` | Для моделей с оплатой за токены: цена за миллион токенов, например `input`, `output` |
| `estimated` | `true` означает, что итоговое списание зависит от фактического использования (например, оплата за токены); цена ориентировочная |
| `price_source` | Источник цены: `membership` (цена программы лояльности), `user_override` (индивидуальная цена), `group` (цена группы), `default` (стандартная цена) |

Не более `60` запросов в минуту на API Key.

***

## Обработка ошибок

| HTTP-статус | `error.code` | Описание |
| - | - | - |
| 400 | `invalid_request_id` / `invalid_request` и др. | Неверный параметр, подробности в `message` |
| 400 | `time_range_too_large` | Период журнала превышает 31 день |
| 401 / 402 / 403 | — | API Key недействителен, истёк или отключён |
| 404 | `log_not_found` | Запись журнала не найдена; возможно, ещё не записана |
| 404 | `model_not_found` / `no_valid_pricing` | Модель не существует или для неё нет цены |
| 429 | — | Слишком много запросов |
| 500 / 503 | — | Сервис временно недоступен, повторите попытку позже |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.