Сервис (02) · Учёт потребления

Объём приходит,
сумма — нет

Ваш сервис шлёт только объём: сколько токенов, запросов или минут. Genesis принимает события пачками, не пишет повторы и списывает период без двойных списаний.

События · usage поток

повтор transaction_id не запишется дважды

Списание периода

период целиком412,30881204 ₽ уже списано−398,17402116 ₽ к списанию14,13479088 ₽
1000событий в одном запросе
0денежных полей в событии
1запись на transaction_id
Что умеет

Возможности

(01)

Пачки до тысячи

POST /internal/usage/events принимает до 1000 событий за раз. Одинаковые transaction_id в пачке схлопываются ещё до вставки.

(02)

Идемпотентно в базе

Уникальность держит unique(app_id, transaction_id) и insertOrIgnore — две параллельные доставки не запишут событие дважды.

(03)

Без денег в событии

Запрос с полем amount, cost, price или currency отклоняется. Второй счетовод — расхождение, которое никто не сведёт.

(04)

Агрегат за период

GET /internal/usage/summary отдаёт объём по метрикам, а с plan_key — сразу расчёт по тарифу.

(05)

Списание разницей

Период считается целиком, с кошелька снимается разница с уже списанным. Новые события не списывают старое второй раз.

(06)

Исход после таймаута

Строка прогона пишется до вызова кошелька. Неизвестный исход повторяется тем же ключом идемпотентности.

Как подключить

Четыре шага

01

Отправьте событие

transaction_id, метрика и объём. Без сумм.

02

Genesis запишет его один раз

Повтор той же доставки молча пропускается.

03

Посмотрите агрегат

Объём и расчёт за период по нужному тарифу.

04

Спишите

POST /internal/usage/charge снимает с кошелька только разницу.

API

Маршруты

POST/internal/usage/eventsприём событий, до 1000 за раз
GET/internal/usage/summaryагрегат; с plan_key — расчёт
POST/internal/usage/chargeсписание посчитанного с кошелька
POST /internal/usage/events
X-Internal-Secret: ••••••

{ "events": [
  { "transaction_id": "req_77f2",
    "metric": "offer-acme-gpt-tokens-128-input",
    "value": 1820 },
  { "transaction_id": "req_77f2-o",
    "metric": "offer-acme-gpt-tokens-128-output",
    "value": 480 }
] }
Вопросы

Коротко о главном

Что, если событие придёт дважды?

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

Что, если кошелёк не ответил?

Строка прогона уже записана без transaction_key. Следующий прогон сначала повторяет её тем же ключом — второго списания не будет.

Как выбирается тариф?

Тот, кто считает, передаёт plan_key на каждом вызове. Выбор потребителя лежит в customers.meta_data.plan_key.

Платформа

Другие сервисы

(01)Тарифы и расчёт(03)Кошельки(04)Платежи(05)Промо и партнёрка(06)Инвойсинг(07)payswitch
Связаться

Посчитаем
ваш продукт

Панель
app.gnzs.pro ↗

Расскажите о проекте

Где каждая копейка посчитана. Выбирайте Genesis.