LiaMga developer

Reference ng server

Ang API app ang iyong sariling server calls gamit ang kanyang secret key. I-verify ang mga sesyon, listahan ang mga produkto, kumpirmahin, ipakita at refund ang mga gastos, bayaran ang mga reward mula sa iyong pool, ipadala ang mga notification, tingnan ang ads at listahan ang mga pampublikong talahanayan.

#Mga pangunahian

Base addresshttps://api.lialabs.org/api/apps/v1
PagsusuriAuthorization: Bearer <your key>, ang iyong test key (lia_test_…) o live key (lia_live_…)
Mga katawanJSON, kasama Content-Type: application/json
Mga halagaSa $LIA, bilang mga numero, para sa 6 decimal places
Mga orasMili segundo mula 1970 (UTC)

Tawagan ito lamang mula sa iyong server. Ang iyong key ay isang lihim: huwag ilagay ito sa iyong pahina.

curl https://api.lialabs.org/api/apps/v1/pool \
  -H "Authorization: Bearer $LIA_KEY"

Isang maliit na tulong na ginagamit sa mga halimbawa sa ibaba:

lia.js
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;
}

#Mga key at mga mode

Isang key lamang ay nakikita ang kanyang sariling app, at lamang ang kanyang sariling mode: ang test key nakikita ang test sessions, charges, players at ads; ang live key nakikita ang live ones. Ang isang bagay mula sa ibang mode ay not_found (o valid: false. Tingnan Pagsusulit at live.

#Mga error

Ang mga error ay sumasagot sa isang 4xx status at isang body na may isang error kodigo, minsan kasama pa ang higit pang mga field:

{ "error": "pool_empty", "pool": 3.5 }
KatayuanCodeKailan
401bad_keyWala pang key, isang key sa maling anyo, isang di kilalang key, isang live key habang ang iyong app ay hindi'hindi maaabot, o anumang key habang ito'ang pay sheet

Bawat endpoint ay nagsasabi sa kanyang sarili. Ang bawat code ay nasa Mga code ng error.

#Mga session

#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"
}'
Buksan sa playground

Nagsusuri ng isang session token mula Lia.init() o Lia.session(), at ipapahayag sa iyo kung sino ito.

POST /api/apps/v1/session/verify
Authorization: Bearer lia_live_…
Content-Type: application/json

{ "session": "lias_eyJhcHAiOi…" }
KampoUri
sessionstringAng token mula sa pahina.

Mga sagot 200 sa anumang paraan:

{ "valid": true, "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "mode": "live", "exp": 1761998400000 }
{ "valid": false }

Ang isang token ay valid kapag Lia ay nagsiguro nito, ito'para sa iyong app at iyong key's mode, at wala itong'hindi natapos (15 minuto pagkatapos ito ay ginawa).

#Mga Produkto

#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"
Buksan sa playground

Ano ang inaabot ng iyong app, sa mga presyo sa Lia's records. Lamang ang aktibong mga produkto, pinaka-mura unang.

{
  "products": [
    { "id": "extra-lives", "name": "3 extra lives", "price": 5, "active": true },
    { "id": "gold-pack", "name": "Gold pack", "price": 25, "active": true }
  ]
}

#Mga singil

Isang charge ay isang pagbabayad sa Lia's pay sheet. Tingnan Payments.

Ang object ng bayad:

KampoUri
idstringLike ch_9b1f….
playerIdstringSino ang nagbayad.
productIdstringAno ang kanilang binayaran.
amountbilangAno ang kanilang binayaran, sa $LIA.
statusstringpaid, delivered o refunded.
modestringtest o live.
createdAtbilangKailan ito binayaran.
deliveredAtbilang o nullKailan mo ito inilipat.
refundedAtbilang o nullKailan ito ibinalik.

#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"
Buksan sa playground

Ito ba ay totoong charge, na bayad, at saan? Suriin ang lugar na ito bago magpadala: huwag kailanman kumuha ng pahina'naka-bukas o isang webhook'ang salitang para dito.

{
  "charge": {
    "id": "ch_9b1f4c2e7a0d5b8f3e6a1c4d",
    "playerId": "p_3f9c0a6d1b2e4f5a6b7c",
    "productId": "extra-lives",
    "amount": 5,
    "status": "paid",
    "mode": "live",
    "createdAt": 1761998400000,
    "deliveredAt": null,
    "refundedAt": null
  }
}
KatayuanCodeKailan
404not_foundWala pang ganitong bayad para sa iyong app sa iyong key's mode.

#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'
Buksan sa playground

Nakatanggap ng pagbabayad, isang beses na ikaw'nakatanggap ng bagay na binili ng tao. Maaaring iulit: ang pagpapadala ng isang napadala na singil ay walang pagbabago at sumasagot nang pareho. Walang katawan.

{ "charge": { "id": "ch_9b1f…", "status": "delivered", "deliveredAt": 1761998405000, "…": "…" } }
KatayuanCodeKailan
404not_foundWala pang ganitong bayad sa iyong key's mode.
409refundedIto ay binawi, kaya hindi'hindi ipadala ito. Ang body ay may charge din.

#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'
Buksan sa playground

Ibinabalik ang $LIA sa tao, kapag maaari mo'hindi ipadala ito pa rin. Gumagana sa isang bayad o isang napadala na singil. Maaaring iulit: pagbabawiin ang isang nabawi na singil ay sumagot nito at walang ibang pagbabayad. Walang body.

{ "charge": { "id": "ch_9b1f…", "status": "refunded", "refundedAt": 1761998410000, "…": "…" } }

Ang buong presyo ay bumabalik sa tao'na balance, sa live mode, mula sa Lia'ang napatigil. charge.refunded ang webhook ay ipinadala.

KatayuanCodeKailan
404not_foundWala pang ganitong bayad sa iyong key's mode.

#Punsiyon

Tingnan Punsiyon pools.

#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"
}'
Buksan sa playground

Pays a player mula sa iyong app's reward pool, isang beses bawat key.

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"
}
KampoUri
playerIdstringAng manlalaro para magbayad.
amountbilangSa $LIA, higit sa 0 at sa pinakamalaki 10,000, para sa 6 decimal places.
keystringAng iyong, 1 hanggang 128 ng mga titik, mga numero, _, ., : at -. Ang isang key bayad isang beses, kahit kailan. Walang ito, ang Idempotency-Key ang header ay ginagamit.
reasonstringPangkatawan, hanggang 80 mga karakter (mas mahaba ay tinatanggal). Ipapakita sa player's activity sa ilalim ng iyong app's pangalan.

Bayad:

{ "status": "paid", "amount": 25, "pool": 975 }

Ang pareho na key ay walang anumang pagbabayad at sumasagot sa kung ano ang unang nagbayad:

{ "status": "duplicate", "amount": 25, "pool": 975 }

pool ay ano's natitira sa iyong pool pagkatapos nito. Sa mode ng pagsubok ang reward ay kathang-isip: ang pool ay wala'ginamit at ang araw-araw na limitasyon ay hindi't ipatupad.

KatayuanCodeKailan
400bad_amountamount ay hindi't isang numero na mas mataas sa 0 at hanggang 10,000.
400bad_key_fieldkey ay nawawala o hindi nasa tamang anyo.
404unknown_playerWala pang ganitong player sa iyong app.
409pool_emptyAng pool ay hindi'hindi panatilihin amount. Ang body ay may pool, ano's natitira.
429daily_limitIto ay maglalabas ng manlalaro sa labas ng iyong app'na araw na limitasyon bawat manlalaro (sa $LIA, bawat UTC araw). Ang body ay may dailyCapPerPlayer.

A reward.paid ang webhook ay ipinadala para sa bawat reward na ibinayad (hindi para sa mga duplicate).

#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"
Buksan sa playground

Ano's natitira sa iyong reward pool, at ang pinakamalaking kahon na maaaring makuha ng isang manlalaro sa isang araw.

{ "balance": 975, "dailyCapPerPlayer": 50, "mode": "live" }

dailyCapPerPlayer ay 0 nangyari's wala pang araw-araw na limitasyon. balance ay ang live pool, din kung magpapakita ka gamit ang iyong test key.

#Mga Notification

Tingnan Mga Notification.

#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"
}'
Buksan sa playground

Nagpapadala ng isang notification sa isang manlalaro na nagpahintulot dito. Nakikita ito sa ilalim ng iyong app's pangalan at buksan ang iyong app kasama ang iyong 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" }
KampoUri
playerIdstringSino ang dapat paunawin.
textstring1 hanggang 180 karakter. Ang mga espasyo at mga bagong linya ay magiging isang espasyo. Walang mga link, numero ng telepono o mga salita na ginagamit sa mga scam.
startParamstringPangkatawan. 1 hanggang 64 ng mga letra, digit, _ at -. Ang iyong pahina kumuha nito mula sa Lia.startParam.

Nakapadala:

{ "sent": true, "pushed": true }

pushed ay false kapag ito ay nakaabot sa Lia'na bell ngunit hindi ang telepono (ang tao ay may Lia's pushes off).

KatayuanCodeKailan
400bad_textEmpty, sobra na, o hindi pinapayagan. Kapag ito'kung ano ang sinasabi ng teksto, problem ay link, phone o scam.
400bad_start_paramstartParam ay hindi'hindi nasa tamang anyo.
403notifications_offAng iyong app ay maaaring hindi magpadala ng mga notification (ang iyong araw-araw na bilang ay 0).
403not_allowedAng manlalaro ay wala't pinahintulutan ang iyong app'mga notification, o pinigil nila.
404unknown_playerWala pang ganitong player, o hindi isang key na iyong's mode ay nakarating (isang test key lamang nakarating sa iyong testers).
429rate_limitedNakarating ang isang limitasyon. Para sa iyong app'naka-own limits ang body ay may retryAt, kung kailan maaari mong subukan muli.

#Mga ad

Tingnan Mga ad.

#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"
}'
Buksan sa playground

Nakapanood ba talaga ang ad, at sino ang napanood nito? Suriin bago magbigay ng anumang bagay para sa isang rewarded video.

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 }
KampoUri
adIdstringAng id mula Lia.showAd().
playerIdstringAng manlalaro kung saan ito ipinakita. Suriin ito'ang nagsasabi.
formatstring o null"rewarded", "rewardedInterstitial", "interstitial", "banner" o "native" (null para sa ads mula pa noong SDK 1.7). Lamang "rewarded" at "rewardedInterstitial" ay karapat-dapat sa isang reward.
watchedbooleanNapanood hanggang sa dulo (o, para sa isang interstitial, banner o native ad, ipinakita).
watchedAtbilang o nullKailan.

Magtanong gamit ang key ng mode kung saan ang ad ay ipinakita: isang test mode ad (palaging isa sa Google'mga test ads, di kailanman kabilang sa kita) ay not_found sa live key.

Lia ay di kaya'hindi maaabot, o i-mark ang isang ad bilang ginamit kapag iyong kinumpirma ito, kaya magbayad bawat adId isang beses ang iyong sarili (gamit ad:<adId> bilang ang key na parangal).

KatayuanCodeKailan
404not_foundWala pang ganitong ad para sa iyong app sa iyong key's mode.

#Lobby

Pangkabahayan na mga mesa na maaaring mahanap ng sinuman sa Lia. Lia ang nagsisiguro lamang ng pag-lista: ang iyong server ang gumaganap sa mesa. Tingnan Pangkabahayan na mga mesa.

Ang talahanayan object:

KampoUri
idstringAng iyong talahanayan'ng in
gamestringAng iyong app'ng in
hostobject{ name }: ang host's Lia username.
seats, takenbilangKabuuang upuan, at kinuha.
titlestring o nullNakakatulad sa lahat ng mga bagay na binabasa ng mga tao sa Lia.
stake, potbilangSa LIA, para sa ipakita.
createdAt, expiresAtbilang

#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
}'
Buksan sa playground

Nag-list ng isang table na'naghihintay para sa mga manlalaro, o i-update ang listing nito (nagtatagpo ito ng kaniyang lugar sa listahan). I-list ang muli kung ang mga upuan ay nagbago.

{ "tableId": "t8k2d", "hostPlayerId": "p_3f9c0a6d1b2e4f5a6b7c", "seats": 2, "taken": 1, "title": "Quick game", "stake": 5, "expiresIn": 900 }
KampoUri
tableIdstringAng iyong, 1 hanggang 57 ng mga titik, mga numero, _ at - (sapat na maikli para makasunod sa startParam lobby-<id>).
hostPlayerIdstringAng manlalaro na nagmamay-ari nito.
seatsbilangPangkatawan. 2 hanggang 10, 2 nang default.
takenbilangOpisyal. Ang mga upuan ay puno, ang host's kasama: 1 sa seats, 1 nang default.
titlestringPangkatawan, hanggang 40 mga karakter.
stake, potbilangOpisyal. Sa LIA, 0 hanggang 10,000, na nakalista lamang. Lia hindi'hindi panatilihin o ilipat: mag-stake ng singil gamit ang iyong sariling produkto.
expiresInbilangOpisyal. Ang bilang ng segundo na nagmamay-ari ang listing, 60 hanggang 3600, 1800 nang default.
{ "listed": true, "tableId": "t8k2d", "seats": 2, "taken": 1, "expiresAt": 1761999300000 }

Kailan taken nababawas seats, ang table ay tinanggal mula sa listahan kaysa dito, at ang sagot ay { "listed": false }.

KatayuanCodeKailan
400bad_table_id, bad_seats, bad_taken, bad_title, bad_amount, bad_expires_inIsang field ay hindi'hindi magkasya.
404unknown_playerWala pang ganitong host sa iyong app.
429too_many_tablesAng host ay may 3 bukas na mga table sa iyong app. Ang body ay may 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"
Buksan sa playground

Ang iyong app'naka-bukas ang mga table sa iyong key's mode, pinakabago muna, hanggang 200: bawat host's, na may mga bloke na inilagay sa gilid (na)'para sa bawat manlalaro'ang sariling wallet.

{ "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"
}'
Buksan sa playground

Nakatayo ang isang manlalaro sa isang listahang mesa, bago ang iyong server ay pumayag sa kanila. Ang Lia ay tumanggi sa mga taong pinagbawal ng host o ang host ay pinagbawal. Kapag ang huling upuan ay kinuha, ang mesa ay lumabas sa listahan.

{ "playerId": "p_8a1e0c4d2b7f9e3a5c6d" }
{ "seated": true, "taken": 2, "seats": 2, "full": true }
KatayuanCodeKailan
404unknown_playerWala pang ganitong player sa iyong app.
404not_foundAng talahanayan ay hindi'hindi naka-lista, natapos, o ang host at ang manlalaro ay nagsalang sa isa't isa.
409fullBawat upuan ay nakuha.
409own_tableAng manlalaro ay ang host.

#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'
Buksan sa playground

Kumukuha ng isang talahanayan mula sa listahan, kapag ang kanyang laro ay nagsisimula o natatapos. Maaaring i-retry.

{ "removed": true }

removed ay false kapag ito ay hindi'hindi naka-lista.

#Nag-uulit

Ipadala ang isang Idempotency-Key ang header kasama ang bawat POST, at ang parehong isa naman sa bawat pagsubok ng kahilingan na ito. Ang isang pagsubok ay kailanman ay gagawin ang pareho nang dalawang beses, at magbibigay ng parehong sagot tulad ng unang kahilingan.

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." }
  • Anumang key na gusto mo, 1 sa 128 ng mga letra, numero, _, -, . at :. Isang UUID bawat operasyon ay tama.
  • Ang unang kahilingan ay tumatakbo. Kung nakakamit ang pagkakataon (2xx), ang kanyang sagot ay naiimbak para sa 24 oras, at ang isang retry na may parehong key at parehong body ay makakakuha nito ulit, kasama ang header Idempotent-Replayed: true.
  • Ang isang pagtanggi ay walang naiiwan (4xx o 5xx), kaya mo ito ay ayusin at subukan muli gamit ang parehong key.
  • Ang pareho na key na may iba't ibang body ay 422 idempotency_key_reused.
  • Ang pareho na key habang ang unang isa ay pa rin tumatakbo ay 409 idempotency_key_in_use kasama Retry-After: 1. Retry, at makakatanggap ka ng unang isa's sagot.
  • Ang mga key ay ang iyong app'naka-own, at live at test ay naghihiwalay sa kanilang sarili. Ang parehong key sa iba pang endpoint ay isang iba pang key.

Wala ang header, ang mga endpoint ay patuloy na ligtas na muling ipakita: ang mga pagbasa ay walang pagbabago, ang paghahatid at pagbabalik ay ligtas na muling gawin, at ang mga parangal ay binabayaran nang isang beses bawat key. Ang mga notification ay ang exception: walang header, ang isang retry ay magpapadala nito muli.

Awtomatikong isinalin. Ang English ay ang source of truth. Basahin sa Ingles

Pindutin para maghanap sa lahat ng pahina, paraan at endpoint.