LiaPengembang

Referensi server

The API aplikasi Anda menghubungi server sendiri dengan kunci rahasia. Verifikasi sesi, daftar produk, konfirmasi, pengiriman, dan pengembalian biaya, bayar hadiah dari pool Anda, kirim notifikasi, periksa iklan, dan daftar tabel publik.

#Dasar-dasar

Alamat dasarhttps://api.lialabs.org/api/apps/v1
OtentikasiAuthorization: Bearer <your key>, kunci uji Anda (lia_test_…) atau kunci live (lia_live_…)
TubuhJSON, dengan Content-Type: application/json
JumlahDi $LIA, sebagai angka, hingga 6 tempat desimal
WaktuMilidetik sejak 1970 (UTC)

Panggil dari server Anda saja. Kunci Anda adalah rahasia: jangan pernah masukkan ke halaman Anda.

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

Sebuah helper kecil yang digunakan dalam contoh di bawah ini:

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;
}

#Kunci dan mode

Kunci hanya pernah melihat aplikasi sendiri, dan hanya mode sendiri: kunci uji melihat sesi uji, pembayaran, pemain, dan iklan; kunci live melihat yang live. Sesuatu dari mode lain adalah not_found (atau valid: false). Lihat Uji dan live.

#Kesalahan

Kesalahan menjawab dengan status 4xx dan tubuh dengan error kode, kadang-kadang dengan lebih banyak bidang:

{ "error": "pool_empty", "pool": 3.5 }
StatusKodeKapan
401bad_keyTidak ada kunci, kunci dalam bentuk yang salah, kunci yang tidak dikenal, kunci yang aktif sementara aplikasi Anda tidak'tidak hidup, atau kunci apa pun saat itu'dijeda.

Setiap endpoint menampilkan yang sendiri. Setiap kode ada di Kode kesalahan.

#Sesi

#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"
}'
Buka di playground

Memeriksa token sesi dari Lia.init() atau Lia.session(), dan memberi tahu Anda siapa pemiliknya.

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

{ "session": "lias_eyJhcHAiOi…" }
BidangJenis
sessionstringToken dari halaman.

Jawaban 200 dengan cara apa pun:

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

Sebuah token sah ketika Lia menandatangani, itu'untuk aplikasi Anda dan kunci Anda'mode, dan itu tidak'telah berakhir (15 menit setelah dibuat).

#Produk

#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"
Buka di playground

Apa yang aplikasi Anda jual, dengan harga dalam Lia'catatan. Hanya produk yang aktif, termurah terlebih dahulu.

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

#Biaya

Sebuah pembayaran pada Lia'lembar gaji. Lihat Pembayaran.

Objek biaya:

BidangJenis
idstringSuka ch_9b1f….
playerIdstringSiapa yang membayar.
productIdstringApa yang mereka bayar.
amountnomorApa yang mereka bayar, dalam $LIA.
statusstringpaid, delivered atau refunded.
modestringtest atau live.
createdAtnomorKetika dibayar.
deliveredAtnomor atau nullKetika Anda mengirimkannya.
refundedAtnomor atau nullKetika dikembalikan.

#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"
Buka di playground

Apakah biaya ini nyata, dibayar, dan milik siapa? Selalu periksa di sini sebelum mengirimkan: jangan pernah mengambil halaman'atau webhook'kata untuk itu.

{
  "charge": {
    "id": "ch_9b1f4c2e7a0d5b8f3e6a1c4d",
    "playerId": "p_3f9c0a6d1b2e4f5a6b7c",
    "productId": "extra-lives",
    "amount": 5,
    "status": "paid",
    "mode": "live",
    "createdAt": 1761998400000,
    "deliveredAt": null,
    "refundedAt": null
  }
}
StatusKodeKapan
404not_foundTidak ada biaya untuk aplikasi Anda dalam kunci Anda'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'
Buka di playground

Menandai pembayaran yang telah dikirim, sekali Anda'telah memberikan orang tersebut apa yang mereka beli. Aman untuk diulang: mengirimkan tagihan yang sudah dikirim tidak mengubah apa pun dan menjawab yang sama. Tidak ada tubuh.

{ "charge": { "id": "ch_9b1f…", "status": "delivered", "deliveredAt": 1761998405000, "…": "…" } }
StatusKodeKapan
404not_foundTidak ada biaya dalam kunci Anda'mode.
409refundedIni telah dikembalikan, jadi tidak'tidak mengirimkannya. Tubuh memiliki charge juga.

#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'
Buka di playground

Memberikan $LIA kembali kepada orang tersebut, ketika Anda bisa'tidak mengirimkannya. Bekerja pada biaya berbayar atau biaya yang telah dikirimkan. Aman untuk diulang: mengembalikan biaya yang sudah dikembalikan akan menjawab dengan itu dan membayar tidak lebih. Tidak ada tubuh.

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

Harga penuh kembali ke orang tersebut'saldo mereka, dalam mode live, dari Lia'bagian dan bagi Anda. Sebuah charge.refunded webhook dikirim.

StatusKodeKapan
404not_foundTidak ada biaya dalam kunci Anda'mode.

#Hadiah

Lihat Pola hadiah.

#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"
}'
Buka di playground

Membayar pemain dari aplikasi Anda'kumpulan hadiah, sekali per kunci.

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"
}
BidangJenis
playerIdstringPemain yang membayar.
amountnomorDi $LIA, lebih dari 0 dan paling banyak 10,000, hingga 6 tempat desimal.
keystringMilik Anda, 1 hingga 128 huruf, angka, _, ., : dan -. Sebuah kunci membayar sekali, selamanya. Tanpa itu, Idempotency-Key header digunakan.
reasonstringOpsional, hingga 80 karakter (lebih panjang akan dipotong). Ditampilkan di pemain's aktivitas di bawah aplikasi Anda'nama.

Dibayar:

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

Kunci yang sama lagi membayar tidak apa-apa dan menjawab dengan apa yang dibayarkan yang pertama:

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

pool adalah'sisa dalam pool Anda setelah itu. Dalam mode uji, hadiahnya palsu: pool tidak'telah digunakan dan batas harian tidak't berlaku.

StatusKodeKapan
400bad_amountamount bukan't sebuah angka di atas 0 dan hingga 10,000.
400bad_key_fieldkey tidak ada atau tidak dalam bentuk yang benar.
404unknown_playerTidak ada pemain dalam aplikasi Anda.
409pool_emptyKumpulan tidak'tidak menahan amount. Tubuh memiliki pool, apa'sisa.
429daily_limitIni akan membawa pemain melewati aplikasi Anda'batas harian per pemain (dalam $LIA, per UTC hari). Tubuh memiliki dailyCapPerPlayer.

A reward.paid webhook dikirim untuk setiap hadiah yang dibayarkan (bukan untuk duplikat).

#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"
Buka di playground

Apa'sisa dalam pool hadiah Anda, dan jumlah maksimum yang bisa diperoleh satu pemain dalam sehari.

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

dailyCapPerPlayer adalah 0 ketika ada'tidak ada batas harian. balance adalah pool live, juga ketika Anda meminta dengan kunci uji Anda.

#Notifikasi

Lihat Notifikasi.

#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"
}'
Buka di playground

Mengirim notifikasi ke pemain yang mengizinkannya. Tampil di bawah aplikasi Anda'nama dan membuka aplikasi Anda dengan 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" }
BidangJenis
playerIdstringSiapa yang harus diberitahu.
textstring1 hingga 180 karakter. Spasi dan baris baru menjadi satu spasi. Tidak ada tautan, nomor telepon atau kata-kata yang digunakan dalam penipuan.
startParamstringOpsional. 1 hingga 64 huruf, angka, _ dan -. Halaman Anda membaca dari Lia.startParam.

Dikirim:

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

pushed adalah false ketika mencapai Lia'bel berbunyi tetapi bukan ponsel (orang tersebut memiliki Lia'mengirimkan (pushes off).

StatusKodeKapan
400bad_textKosong, terlalu panjang, atau tidak diizinkan. Ketika itu'apa yang dikatakan teks tersebut, problem adalah link, phone atau scam.
400bad_start_paramstartParam bukan'tidak dalam bentuk yang benar.
403notifications_offAplikasi Anda mungkin tidak dapat mengirim notifikasi (jumlah harian 0).
403not_allowedPemain ini tidak't diizinkan aplikasi Anda'notifikasi, atau mereka menonaktifkannya.
404unknown_playerTidak ada pemain, atau bukan pemain dari kunci Anda'mode mencapai (kunci uji hanya mencapai penguji Anda).
429rate_limitedBatas tercapai. Untuk aplikasi Anda'batasannya tubuh memiliki retryAt, ketika Anda mungkin mencoba lagi.

#Iklan

Lihat Iklan.

#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"
}'
Buka di playground

Apakah iklan ini benar-benar ditonton, dan oleh siapa? Periksa sebelum memberikan sesuatu untuk video berhadiah.

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 }
BidangJenis
adIdstringID dari Lia.showAd().
playerIdstringPemain yang ditunjukkan. Periksa itu'orang yang bertanya.
formatstring atau null"rewarded", "rewardedInterstitial", "interstitial", "banner" atau "native" (null untuk iklan dari sebelum SDK 1.7). Hanya "rewarded" dan "rewardedInterstitial" bernilai hadiah.
watchedbooleanDitonton hingga selesai (atau, untuk iklan interstisial, banner, atau native, ditampilkan).
watchedAtnomor atau nullKapan.

Tanyakan dengan kunci mode iklan yang ditampilkan: iklan mode uji (selalu salah satu dari Google'iklan uji s, tidak pernah dihitung sebagai pendapatan) adalah not_found ke kunci live.

Lia tidak bisa'tidak menandai iklan sebagai digunakan saat Anda memverifikasi, jadi bayar setiap adId sekali diri Anda sendiri (gunakan ad:<adId> sebagai kunci hadiah).

StatusKodeKapan
404not_foundTidak ada iklan untuk aplikasi Anda dalam kunci Anda'mode.

#Lobby

Tabel publik yang dapat ditemukan oleh siapa saja di Lia. Lia hanya menyimpan daftar: server Anda menjalankan tabel tersebut. Lihat Tabel publik.

Objek tabel:

BidangJenis
idstringTabel Anda'id.
gamestringAplikasi Anda'id.
hostobjek{ name }: host's Lia nama pengguna.
seats, takennomorTotal kursi, dan yang sudah diambil.
titlestring atau nullDifilter seperti semua yang dibaca orang-orang di Lia.
stake, potnomorDi LIA, untuk ditampilkan.
createdAt, expiresAtnomor

#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
}'
Buka di playground

Mendaftarkan meja yang'menunggu pemain, atau memperbarui daftarnya (tetap di tempatnya dalam daftar). Daftarkan kembali saat kursinya berubah.

{ "tableId": "t8k2d", "hostPlayerId": "p_3f9c0a6d1b2e4f5a6b7c", "seats": 2, "taken": 1, "title": "Quick game", "stake": 5, "expiresIn": 900 }
BidangJenis
tableIdstringMilik Anda, 1 hingga 57 huruf, angka, _ dan - (pendek cukup untuk muat startParam lobby-<id>).
hostPlayerIdstringPemain yang menyelenggarakan acara tersebut.
seatsnomorOpsional. 2 hingga 10, 2 secara default.
takennomorOpsional. Kursi terisi, pemilik'termasuk: 1 ke seats, 1 secara default.
titlestringOpsional, hingga 40 karakter.
stake, potnomorOpsional. Dalam LIA, 0 hingga 10,000, ditampilkan hanya dalam daftar. Lia tidak'tidak menahan atau memindahkan mereka: taruh taruhan dengan produk Anda sendiri.
expiresInnomorOpsional. Detik durasi listing, 60 hingga 3600, 1800 secara default.
{ "listed": true, "tableId": "t8k2d", "seats": 2, "taken": 1, "expiresAt": 1761999300000 }

Kapan taken mencapai seats, tabel diambil dari daftar itu, dan jawabannya adalah { "listed": false }.

StatusKodeKapan
400bad_table_id, bad_seats, bad_taken, bad_title, bad_amount, bad_expires_inSebuah bidang tidak'tidak cocok.
404unknown_playerTidak ada host dalam aplikasi Anda.
429too_many_tablesHost sudah memiliki 3 meja terbuka di aplikasi Anda. Tubuh memiliki 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"
Buka di playground

Aplikasi Anda'buka tabel di kunci Anda'mode, terbaru dulu, hingga 200: setiap host'dengan blok yang disisihkan (yang'untuk setiap pemain'tampilan miliknya).

{ "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"
}'
Buka di playground

Menempatkan pemain di meja yang terdaftar, sebelum server Anda mengizinkannya. Lia menolak orang yang diblokir oleh pemilik atau yang memblokir pemilik. Ketika kursi terakhir diambil, meja itu keluar dari daftar.

{ "playerId": "p_8a1e0c4d2b7f9e3a5c6d" }
{ "seated": true, "taken": 2, "seats": 2, "full": true }
StatusKodeKapan
404unknown_playerTidak ada pemain dalam aplikasi Anda.
404not_foundTabel tidak'tidak terdaftar, telah berakhir, atau host dan pemain saling memblokir satu sama lain.
409fullSetiap kursi terisi.
409own_tablePemain adalah tuan rumah.

#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'
Buka di playground

Mengambil tabel dari daftar, ketika permainannya dimulai atau ditutup. Aman untuk diulang.

{ "removed": true }

removed adalah false ketika tidak'tidak terdaftar.

#Mencoba lagi

Kirim sebuah Idempotency-Key header dengan setiap POST, dan yang sama lagi pada setiap ulang panggilan permintaan tersebut. Sebuah ulang panggilan kemudian tidak pernah melakukan apa pun dua kali, dan menjawab seperti permintaan pertama.

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." }
  • Kunci apa pun yang Anda suka, 1 hingga 128 huruf, angka, _, -, . dan :. Satu UUID per operasi adalah benar.
  • Permintaan pertama berjalan. Jika berhasil (2xx), jawabannya disimpan selama 24 jam, dan ulang dengan kunci yang sama dan tubuh yang sama akan mendapatkan jawaban yang sama lagi, dengan header Idempotent-Replayed: true.
  • Sebuah penolakan tidak menyimpan apa pun (4xx atau 5xx), jadi Anda bisa memperbaiki penyebabnya dan coba lagi dengan kunci yang sama.
  • Kunci yang sama dengan tubuh yang berbeda adalah 422 idempotency_key_reused.
  • Kunci yang sama sementara yang pertama masih berjalan adalah 409 idempotency_key_in_use dengan Retry-After: 1. Ulang coba, dan Anda mendapatkan yang pertama'jawaban.
  • Kunci adalah aplikasi Anda'miliknya, dan uji coba serta live menjaga milik mereka sendiri. Kunci yang sama di endpoint lain adalah kunci yang berbeda.

Tanpa header, sebagian besar endpoint masih aman untuk diulang: bacaan tidak mengubah apa pun, pengiriman dan pengembalian dana aman untuk diulang, dan hadiah dibayarkan sekali per key. Notifikasi adalah pengecualian: tanpa header, ulang coba mengirim notifikasi lagi.

Diterjemahkan otomatis. Bahasa Inggris adalah sumber kebenaran. Baca dalam Bahasa Inggris

Ketik untuk mencari setiap halaman, metode, dan titik akhir.