Справочник сервера
Сервер API
Копировать страницу
The API вашего приложения обращается к собственному серверу с помощью его секретного ключа. Проверьте сессии, перечислите продукты, подтвердите, доставьте и верните платежи, оплатите вознаграждения из вашего пула, отправьте уведомления, проверьте объявления и перечислите общедоступные таблицы.
#Основы
| Базовый адрес | https://api.lialabs.org/api/apps/v1 |
| Аутентификация | Authorization: Bearer <your key>, ваш тестовый ключ (lia_test_…) или живой ключ (lia_live_…) |
| Тела | JSON, с Content-Type: application/json |
| Суммы | В $LIA, как числа, до 6 десятичных знаков |
| Время | Миллисекунды с 1970 (UTC) |
Вызывайте его только с вашего сервера. Ваш ключ — это секрет: никогда не помещайте его на страницу.
curl https://api.lialabs.org/api/apps/v1/pool \
-H "Authorization: Bearer $LIA_KEY"Маленький помощник, используемый в примерах ниже:
const LIA = "https://api.lialabs.org/api/apps/v1";
export async function lia(method, path, body) {
const res = await fetch(LIA + path, {
method,
headers: { Authorization: `Bearer ${process.env.LIA_KEY}`, "Content-Type": "application/json" },
body: body === undefined ? undefined : JSON.stringify(body),
});
const data = await res.json();
if (!res.ok) throw Object.assign(new Error(data.error), { status: res.status, data });
return data;
}#Ключи и режимы
Ключ видит только свое приложение и только свой режим: тестовый ключ видит тестовые сессии, платежи, игроков и рекламу; живой ключ видит живые. Что-то из другого режима — not_found (или valid: false. См. Тест и живой.
#Ошибки
Ошибки отвечают кодом 4xx статуса и телом с error код, иногда с большем количеством полей:
{ "error": "pool_empty", "pool": 3.5 }| Статус | Код | Когда |
|---|---|---|
| 401 | bad_key | Нет ключа, ключ в неправильной форме, неизвестный ключ, живой ключ, пока ваше приложение не'не живет, или любую клавишу, пока оно'приостановлено. |
Каждый конечный пункт имеет свой. Каждый код находится в Коды ошибок.
#Сессии
#POST/session/verify
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/session/verify' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"session": "lias_example_session"
}'Проверяет сеансовый токен от Lia.init() или Lia.session(), и говорит вам, чьим оно является.
POST /api/apps/v1/session/verify
Authorization: Bearer lia_live_…
Content-Type: application/json
{ "session": "lias_eyJhcHAiOi…" }| Поле | Тип | |
|---|---|---|
session | строка | Токен с страницы. |
Ответы 200 по любому пути:
{ "valid": true, "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "mode": "live", "exp": 1761998400000 }{ "valid": false }Токен действителен, когда Lia его подписал, он'для вашего приложения и вашего ключа'режим, и у него не'не завершено (15 минут после его создания).
#Продукты
#GET/products
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/products' \
--header "Authorization: Bearer $LIA_KEY"Что ваше приложение продает, по ценам в Lia'ваша запись. Только активные продукты, самые дешевые первыми.
{
"products": [
{ "id": "extra-lives", "name": "3 extra lives", "price": 5, "active": true },
{ "id": "gold-pack", "name": "Gold pack", "price": 25, "active": true }
]
}#Начисления
Платеж — это один платеж на Lia'ваша зарплата. См. Платежи.
Объект сбора средств:
| Поле | Тип | |
|---|---|---|
id | строка | Нравится ch_9b1f…. |
playerId | строка | Кто заплатил. |
productId | строка | Что они заплатили. |
amount | число | Что они заплатили, в $LIA. |
status | строка | paid, delivered или refunded. |
mode | строка | test или live. |
createdAt | число | Когда это было оплачено. |
deliveredAt | число или null | Когда вы его доставили. |
refundedAt | число или null | Когда это было возвращено. |
#GET/charges/:id
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/charges/id_example' \
--header "Authorization: Bearer $LIA_KEY"Это реальный платеж, оплаченный и чей? Всегда проверяйте здесь перед доставкой: никогда не принимайте страницу'или вебхук'слово для этого.
{
"charge": {
"id": "ch_9b1f4c2e7a0d5b8f3e6a1c4d",
"playerId": "p_3f9c0a6d1b2e4f5a6b7c",
"productId": "extra-lives",
"amount": 5,
"status": "paid",
"mode": "live",
"createdAt": 1761998400000,
"deliveredAt": null,
"refundedAt": null
}
}| Статус | Код | Когда |
|---|---|---|
| 404 | not_found | Нет такой оплаты для вашего приложения в вашем ключе'режим. |
#POST/charges/:id/deliver
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/charges/id_example/deliver' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Idempotency-Key: example-request-1'Отмечает доставку платежа, один раз, когда вы'вы дали человеку то, что он купил. Безопасно повторять: доставка доставленной оплаты ничего не меняет и отвечает тем же. Нет тела.
{ "charge": { "id": "ch_9b1f…", "status": "delivered", "deliveredAt": 1761998405000, "…": "…" } }| Статус | Код | Когда |
|---|---|---|
| 404 | not_found | Нет такой оплаты в вашем ключе'режим. |
| 409 | refunded | Оно было возвращено, поэтому не'не доставлять его. Тело имеет charge также. |
#POST/charges/:id/refund
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/charges/id_example/refund' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Idempotency-Key: example-request-1'Возвращает $LIA человеку, когда вы можете'не доставлять его. Работает с оплаченной или доставленной оплатой. Безопасно повторять: возврат возвращенной оплаты отвечает с ним и ничего не платит дополнительно. Нет тела.
{ "charge": { "id": "ch_9b1f…", "status": "refunded", "refundedAt": 1761998410000, "…": "…" } }Полная цена возвращается человеку'баланс, в режиме реального времени, из Lia'часть и ваша доля. А charge.refunded вебхук отправляется.
| Статус | Код | Когда |
|---|---|---|
| 404 | not_found | Нет такой оплаты в вашем ключе'режим. |
#Награды
Смотреть Пулы наград.
#POST/rewards
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/rewards' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"playerId": "player_example",
"amount": 1,
"key": "reward-example-1",
"reason": "Level completed"
}'Платит игроку из вашего приложения'ваша наградная копилка, один раз на ключ.
POST /api/apps/v1/rewards
Authorization: Bearer lia_live_…
Content-Type: application/json
{
"playerId": "p_3f9c0a6d1b2e4f5a6b7c",
"amount": 25,
"key": "tournament-2026-11-01:p_3f9c0a6d1b2e4f5a6b7c",
"reason": "Weekly tournament, 1st place"
}| Поле | Тип | |
|---|---|---|
playerId | строка | Игрок для оплаты. |
amount | число | В $LIA, больше 0 и не более 10,000, до 6 десятичных знаков. |
key | строка | Ваш, 1 до 128 букв, цифр, _, ., : и -. Ключ платит один раз, навсегда. Без него, Idempotency-Key используется заголовок. |
reason | строка | Необязательно, до 80 символов (длиннее будет обрезано). Отображается у игрока's активность под вашим приложением'имя. |
Оплачено:
{ "status": "paid", "amount": 25, "pool": 975 }Тот же ключ снова ничего не платит и отвечает тем, что платил первый:
{ "status": "duplicate", "amount": 25, "pool": 975 }pool это'осталось в вашем пуле после этого. В тестовом режиме вознаграждение фиктивное: в пуле не осталось'не использован и дневной лимит не't применяется.
| Статус | Код | Когда |
|---|---|---|
| 400 | bad_amount | amount не't число выше 0 и до 10,000. |
| 400 | bad_key_field | key отсутствует или не в правильной форме. |
| 404 | unknown_player | Нет такого игрока в вашем приложении. |
| 409 | pool_empty | Бассейн не'не удерживать amount. Тело имеет pool, что'осталось. |
| 429 | daily_limit | Это выведет игрока за пределы вашего приложения'ежедневный лимит на игрока (в $LIA, на UTC день). Тело имеет dailyCapPerPlayer. |
A reward.paid вебхук отправляется за каждую выплату (не за дубликаты).
#GET/pool
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/pool' \
--header "Authorization: Bearer $LIA_KEY"Что'осталось в вашем пуле вознаграждений, и максимальная сумма, которую один игрок может получить в день.
{ "balance": 975, "dailyCapPerPlayer": 50, "mode": "live" }dailyCapPerPlayer это 0 когда'нет дневного лимита. balance является живым пулом, также когда вы спрашиваете с помощью тестового ключа.
#Уведомления
Смотреть Уведомления.
#POST/notifications
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/notifications' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"playerId": "player_example",
"text": "Ready for another round?",
"startParam": "round_2"
}'Отправляет уведомление игроку, который разрешил их. Оно появляется под вашим приложением'имя и открывает ваше приложение с вашим startParam.
POST /api/apps/v1/notifications
Authorization: Bearer lia_live_…
Content-Type: application/json
{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "It's your move against @amara.", "startParam": "match-8k2d" }| Поле | Тип | |
|---|---|---|
playerId | строка | Кому уведомлять. |
text | строка | 1 до 180 символов. Пробелы и новые строки становятся одними пробелами. Нет ссылок, телефонных номеров или слов, используемых в мошенничестве. |
startParam | строка | Необязательно. 1 до 64 букв, цифр, _ и -. Ваша страница читает его из Lia.startParam. |
Отправлено:
{ "sent": true, "pushed": true }pushed это false когда это достигло Lia'колокольчик, но не телефон (человек имеет Lia'ваше отключение).
| Статус | Код | Когда |
|---|---|---|
| 400 | bad_text | Пусто, слишком длинно или не разрешено. Когда это'что говорит текст, problem это link, phone или scam. |
| 400 | bad_start_param | startParam не'не в правильной форме. |
| 403 | notifications_off | Ваше приложение не может отправлять уведомления (его дневной лимит 0). |
| 403 | not_allowed | Этот игрок не't разрешено ваше приложение'уведомления, или их отключили. |
| 404 | unknown_player | Нет такого игрока, или не один ваш ключ'режим достигает (тестовый ключ достигает только ваших тестировщиков). |
| 429 | rate_limited | Превышен лимит. Для вашего приложения'свои ограничения имеет тело retryAt, когда вы можете попробовать снова. |
#Реклама
Смотреть Реклама.
#POST/ads/verify
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/ads/verify' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"adId": "ad_example"
}'Была ли эта реклама действительно просмотрена, и кем? Проверьте, прежде чем что-либо давать за вознаграждённое видео.
POST /api/apps/v1/ads/verify
Authorization: Bearer lia_live_…
Content-Type: application/json
{ "adId": "ad_8e1c4b0f2a9d47c6b3e15a07" }{ "adId": "ad_8e1c4b0f2a9d47c6b3e15a07", "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "format": "rewarded", "watched": true, "watchedAt": 1761998400000 }| Поле | Тип | |
|---|---|---|
adId | строка | Идентификатор от Lia.showAd(). |
playerId | строка | Игрок, которому показали. Проверьте его'тот, кто задает вопрос. |
format | строка или null | "rewarded", "rewardedInterstitial", "interstitial", "banner" или "native" (null для объявлений, созданных до SDK 1.7). Только "rewarded" и "rewardedInterstitial" стоит вознаграждения. |
watched | логическое значение | Просмотрено до конца (или, для интерстициальной, баннерной или нативной рекламы, показано). |
watchedAt | число или null | Когда. |
Спросите с ключом режима, в котором показывалась реклама: реклама тестового режима (всегда одна из Google'тестовые объявления, никогда не учитываются в доходах) это not_found к живому ключу.
Lia не может'не отметить рекламу как использованную, когда вы ее проверяете, поэтому платите за каждую adId когда вы сами (используйте ad:<adId> как ключ вознаграждения).
| Статус | Код | Когда |
|---|---|---|
| 404 | not_found | Нет такой рекламы для вашего приложения в вашем ключе'режим. |
#Лобби
Публичные таблицы, которые любой на Lia может найти. Lia сохраняет только список: ваш сервер запускает таблицу. См. Публичные таблицы.
Объект таблицы:
| Поле | Тип | |
|---|---|---|
id | строка | Ваша таблица'id. |
game | строка | Ваше приложение'id. |
host | объект | { name }: хост's Lia имя пользователя. |
seats, taken | число | Всего мест, и занятых. |
title | строка или null | Фильтруется как все, что читают люди на Lia. |
stake, pot | число | В LIA, для просмотра. |
createdAt, expiresAt | число |
#POST/lobby/tables
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/lobby/tables' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"tableId": "table_example",
"hostPlayerId": "player_example",
"seats": 2,
"taken": 1,
"title": "A friendly game",
"stake": 1,
"pot": 1,
"expiresIn": 1800
}'Размещает стол, который'ожидает игроков, или обновляет список (он сохраняет свое место в списке). Повторно добавьте его, когда количество мест изменится.
{ "tableId": "t8k2d", "hostPlayerId": "p_3f9c0a6d1b2e4f5a6b7c", "seats": 2, "taken": 1, "title": "Quick game", "stake": 5, "expiresIn": 900 }| Поле | Тип | |
|---|---|---|
tableId | строка | Ваш, 1 до 57 букв, цифр, _ и - (достаточно короткий, чтобы поместиться в startParam lobby-<id>). |
hostPlayerId | строка | Игрок, который его ведет. |
seats | число | Необязательно. 2 до 10, 2 по умолчанию. |
taken | число | Необязательно. Места заполнены, ведущий'включены: 1 к seats, 1 по умолчанию. |
title | строка | Необязательно, до 40 символов. |
stake, pot | число | Необязательно. В LIA, 0 до 10,000, отображается только в списке. Lia не'не удерживать или перемещать их: ставки на оплату с вашим собственным продуктом. |
expiresIn | число | Необязательно. Секунды, в течение которых список действует, 60 до 3600, 1800 по умолчанию. |
{ "listed": true, "tableId": "t8k2d", "seats": 2, "taken": 1, "expiresAt": 1761999300000 }Когда taken достигает seats, таблица удаляется из списка, а ответ { "listed": false }.
| Статус | Код | Когда |
|---|---|---|
| 400 | bad_table_id, bad_seats, bad_taken, bad_title, bad_amount, bad_expires_in | Поле не'не помещается. |
| 404 | unknown_player | Нет такого хоста в вашем приложении. |
| 429 | too_many_tables | У хоста уже есть 3 открытых таблиц в вашем приложении. Тело имеет max. |
#GET/lobby/tables
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request GET 'https://api.lialabs.org/api/apps/v1/lobby/tables' \
--header "Authorization: Bearer $LIA_KEY"Ваше приложение'открытые таблицы в вашем ключе'режим, новый сначала, до 200: каждый хост's, с блоками, отложенными в сторону (что'для каждого игрока'свой вид).
{ "tables": [{ "id": "t8k2d", "game": "your-app", "host": { "name": "amara" }, "seats": 2, "taken": 1, "title": "Quick game", "stake": 5, "pot": 0, "createdAt": 1761998400000, "expiresAt": 1761999300000 }] }#POST/lobby/tables/:id/sit
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request POST 'https://api.lialabs.org/api/apps/v1/lobby/tables/id_example/sit' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example-request-1' \
--data-raw '{
"playerId": "player_example"
}'Сажает игрока за указаный стол, до того как ваш сервер его пустит. Lia отказывает людям, которых заблокировал ведущий, или которые заблокировали ведущего. Когда последнее место занято, стол исчезает из списка.
{ "playerId": "p_8a1e0c4d2b7f9e3a5c6d" }{ "seated": true, "taken": 2, "seats": 2, "full": true }| Статус | Код | Когда |
|---|---|---|
| 404 | unknown_player | Нет такого игрока в вашем приложении. |
| 404 | not_found | Таблица не'не указано, закончено, или модератор и игрок заблокировали друг друга. |
| 409 | full | Каждое место занято. |
| 409 | own_table | Игрок - это ведущий. |
#DELETE/lobby/tables/:id
# Set LIA_KEY on your server. Reuse Idempotency-Key only for the same request.
curl --request DELETE 'https://api.lialabs.org/api/apps/v1/lobby/tables/id_example' \
--header "Authorization: Bearer $LIA_KEY" \
--header 'Idempotency-Key: example-request-1'Извлекает таблицу из списка, когда её игра начинается или закрывается. Безопасно повторять.
{ "removed": true }removed это false когда это не было'не указано.
#Повторная попытка
Отправить Idempotency-Key заголовок с каждым POST, и тот же самый на каждом повторе этого запроса. Повтор никогда не делает ничего дважды, и отвечает так, как первый запрос.
POST /api/apps/v1/notifications
Authorization: Bearer lia_live_…
Content-Type: application/json
Idempotency-Key: 6f1c2a9e-0b7d-4c35-9e1a-2d8f4b7c3a10
{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "It's your move." }- Любой ключ, который вы хотите, 1 до 128 букв, цифр,
_,-,.и:. UUID на операцию это правильно. - Первый запрос запускается. Если успешно (2xx), его ответ сохраняется на 24 часов, и повторный запрос с тем же ключом и тем же телом получает тот же ответ, с заголовком
Idempotent-Replayed: true. - Отказ ничего не сохраняет (от 4xx или 5xx), поэтому вы можете исправить причину и повторить попытку с тем же ключом.
- Тот же ключ с другим телом это
422 idempotency_key_reused. - Тот же ключ, пока первый всё ещё работает это
409 idempotency_key_in_useсRetry-After: 1. Повторите, и вы получите первый's ответ. - Ключи — это ваше приложение'свое, и живые и тестовые ключи держат их отдельно. Один и тот же ключ на другом конце — это другой ключ.
Без заголовка, большинство эндпоинтов всё ещё безопасно повторять: чтение ничего не меняет, доставка и возврат безопасны для повторения, и вознаграждения выплачиваются один раз на key. Уведомления — исключение: без заголовка повторная попытка отправит уведомление снова.
Автоматически переведено. Английский — источник истины. Читать на английском