服务器参考
服务器 API
复制页面
的 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 | 数字或空值 | 当你交付它时。 |
refundedAt | 数字或空值 | 当它被退款时。 |
#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 | 它已被退款,所以不要't 交付它。正文有 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还给那个人't 交付他们购买的东西。适用于付费或已交付的费用。可以重复:退款已退款的费用会以它作为回答,并且不会支付更多。没有正文。
{ "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 }相同的密钥再次支付 nothing 并用第一个支付的内容回答:
{ "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 | 字符串 | ID 来自 Lia.showAd(). |
playerId | 字符串 | 玩家看到它。检查它'是提问的人。 |
format | 字符串或空值 | "rewarded", "rewardedInterstitial", "interstitial", "banner" 或 "native" (在 SDK 1.7 之前的广告为 null)。只有 "rewarded" 和 "rewardedInterstitial" 值得奖励。 |
watched | 布尔值 | 观看至结尾(或对于插页式、横幅或原生广告,显示)。 |
watchedAt | 数字或空值 | 何时 |
使用广告显示时的模式密钥:测试模式广告(总是Google中的一个)'的测试广告(永远不会计入收益)是 not_found 到实时密钥。
Lia不能'不要在你验证广告时将其标记为已使用,因此每次支付 adId 一次你自己(使用 ad:<adId> 作为奖励密钥)。
| 状态 | 代码 | 何时 |
|---|---|---|
| 404 | not_found | 您的密钥中没有此广告'的模式。 |
#大厅
任何在 Lia 上的人都可以找到的公共表格。Lia 仅保留列表:你的服务器运行表格。参见 公共表格.
表格对象:
| 字段 | 类型 | |
|---|---|---|
id | 字符串 | 您的桌子'的id。 |
game | 字符串 | 您的应用程序'的id。 |
host | 对象 | { name }: 主机's Lia 的用户名。 |
seats, taken | 数字 | 总共的座位数,以及已占用的座位。 |
title | 字符串或空值 | 像人们在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:每个主机',带有块被搁置(那'的每个玩家'自己的视图)。
{ "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。通知是例外:没有头信息,重试会再次发送通知。
自动翻译。英语是真实来源。 阅读英文