Dokumentasi REST API YNA-PREM
API publik ini memungkinkan developer (bot WhatsApp, website, atau aplikasi milik Anda sendiri) membuat & mengecek pesanan Alight Motion Premium secara otomatis, tanpa harus membuka dashboard web secara manual.
Pengantar
Semua endpoint API publik berada di bawah base URL berikut:
https://prem.ynastore.my.id/api/v1
Setiap request WAJIB menyertakan header autentikasi
X-Api-Key (lihat bagian
Autentikasi di bawah). Seluruh body
request dikirim sebagai JSON (Content-Type: application/json),
dan seluruh response juga selalu dalam format JSON — lihat bagian
Format Response & Error.
POST /am/create— buat pesanan AM Prem baru & kirim link verifikasi ke email tujuan.POST /am/verify— kirim link verifikasi yang sudah dibuka, lanjutkan proses pembelian.GET /am/status/:order_id— cek status pesanan.GET /account/balance— cek saldo akun Anda.GET /account/history— riwayat pesanan akun Anda.
curl,
contoh response) ada di bagian Endpoint AM &
Endpoint Account di sidebar kiri.
Autentikasi
Seluruh endpoint /api/v1/* dilindungi API key
pribadi milik akun Anda. Sertakan API key itu di setiap request
lewat header berikut:
X-Api-Key: yna-premxxxxxxxxxxxxxxxxxxxx
Cara mendapatkan API key
- Login/daftar akun di dashboard YNA-PREM.
- Buka menu Profil di sidebar, lalu gulir ke bagian
API Saya (atau buka langsung
/dashboard/profil#api-saya). - API key Anda akan tampil di sana. Kalau perlu diganti (mis. merasa API key lama bocor), gunakan tombol Regenerate API Key — key lama langsung tidak berlaku begitu diganti, jadi pastikan langsung memperbarui key di aplikasi/bot Anda setelah regenerate.
Response saat autentikasi gagal
| Kondisi | HTTP Status | Pesan |
|---|---|---|
Header X-Api-Key tidak disertakan |
401 | Header X-Api-Key wajib disertakan. |
| API key tidak dikenali | 401 | API key tidak valid. |
| Akun pemilik key dinonaktifkan admin | 401 | Akun pemilik API key ini telah dinonaktifkan oleh administrator. |
Format Response & Error
Seluruh response API (sukses maupun gagal) selalu berbentuk objek JSON dengan 3 field yang sama:
| Field | Tipe | Keterangan |
|---|---|---|
status |
string | "success" atau "error". |
message |
string | Penjelasan singkat yang bisa langsung ditampilkan ke pengguna/log. |
data |
object | null | Isi hasil (bentuknya beda tiap endpoint, lihat detail masing-masing endpoint). null untuk response error. |
Contoh response sukses
{
"status": "success",
"message": "Status order berhasil diambil.",
"data": { "...": "..." }
}
Contoh response error
{
"status": "error",
"message": "API key tidak valid.",
"data": null
}
Kode HTTP status yang umum dipakai
| Status | Arti |
|---|---|
| 200 / 201 | Berhasil (201 khusus untuk pesanan baru dibuat). |
| 400 | Input tidak valid (field wajib kosong/salah format). |
| 401 | API key tidak disertakan/tidak valid/akun nonaktif. |
| 402 | Saldo tidak cukup untuk membuat pesanan. |
| 404 | Data yang diminta (mis. order) tidak ditemukan / bukan milik Anda. |
| 409 | Aksi tidak bisa dilakukan karena status data saat ini (mis. verifikasi dikirim 2x). |
| 429 | Terlalu banyak request — lihat bagian Rate Limit. |
| 503 | Layanan sedang tidak tersedia (mis. produk sedang dinonaktifkan admin). |
Rate Limit
Untuk menjaga kestabilan layanan bagi semua pengguna, setiap API
key dibatasi maksimal
60 request per 60 detik
di seluruh endpoint /api/v1/* (batas ini dihitung
per API key, bukan per IP — jadi tidak terpengaruh API key lain
yang berbagi jaringan/server yang sama dengan Anda).
Kalau batas ini terlampaui, request akan ditolak dengan:
HTTP 429 Too Many Requests
{
"status": "error",
"message": "Terlalu banyak permintaan API dalam waktu singkat untuk API key ini. Coba lagi beberapa saat lagi.",
"data": null
}
Info sisa kuota juga dikirim lewat header response standar
(RateLimit-Limit, RateLimit-Remaining,
RateLimit-Reset) di setiap request — pantau header
ini untuk menghindari request Anda ditolak.
Endpoint AM (Create / Verify / Status)
Ketiga endpoint di bawah ini memakai logika yang sama persis dengan alur order satuan di dashboard — tidak ada aturan bisnis kedua yang berbeda. Hasilnya, kalau alur order di dashboard sudah bisa dipercaya, alur lewat API ini pasti identik hasilnya.
POST /am/create
Membuat pesanan AM Prem baru & langsung mengirim link verifikasi ke email tujuan dalam satu kali panggilan.
GET /account/balance
sebelum memanggil endpoint ini. Kalau saldo kurang, request akan
ditolak 402 tanpa memotong apapun.
Body request (JSON)
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
email | string | Ya | Alamat email tujuan yang akan menerima akun AM Prem. |
Contoh curl
curl -X POST https://prem.ynastore.my.id/api/v1/am/create \
-H "X-Api-Key: yna-premxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"email": "pembeli@contoh.com"
}'
Contoh response sukses (201 Created)
{
"status": "success",
"message": "Order berhasil dibuat & magic link verifikasi sudah dikirim ke email tujuan. Buka email tersebut, salin link verifikasinya, lalu kirim ke POST /api/v1/am/verify dengan field \"rawUrl\".",
"data": {
"order_id": "ord_a1b2c3d4e5f6",
"status": "menunggu_verifikasi_user",
"email_target": "pembeli@contoh.com",
"payment_method": "saldo",
"amount_charged": 1500,
"fail_reason": null,
"created_at": "2026-08-13T04:10:00.000Z",
"updated_at": "2026-08-13T04:10:02.000Z"
}
}
Contoh response error (402 — saldo tidak cukup)
{
"status": "error",
"message": "Saldo tidak cukup untuk membuat order ini. Isi saldo terlebih dahulu lewat dashboard, lalu coba lagi.",
"data": null
}
data.status pada response
sukses:
menunggu_verifikasi_user— kondisi normal, magic link sudah terkirim. Lanjutkan keam/verify.gagal— magic link gagal terkirim (mis. gangguan di sisi BetaBotz). HTTP status tetap 200 karena panggilan API-nya sendiri berhasil diproses, walau order-nya gagal — dana yang sempat terpotong SUDAH otomatis dikembalikan (lihatfail_reasonuntuk alasannya). Jangan lanjut memanggilam/verifyuntuk order berstatus ini, buat order baru.
POST /am/verify
Melanjutkan proses verifikasi & pembelian setelah link verifikasi dari email dibuka. Endpoint ini menyelesaikan alur sampai tuntas (verifikasi → pembelian) dan langsung mengembalikan status final.
Body request (JSON)
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
order_id | string | Ya | Id order dari response am/create sebelumnya. |
rawUrl | string | Ya | Link verifikasi mentah persis seperti yang tertulis di email (jangan dipotong/diubah). |
Contoh curl
curl -X POST https://prem.ynastore.my.id/api/v1/am/verify \
-H "X-Api-Key: yna-premxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"order_id": "ord_a1b2c3d4e5f6",
"rawUrl": "https://link-verifikasi-dari-email.contoh/xxxxx"
}'
Contoh response sukses (200 — akun berhasil dibuat)
{
"status": "success",
"message": "Alight Motion Premium berhasil diaktifkan ke email tujuan.",
"data": {
"order_id": "ord_a1b2c3d4e5f6",
"status": "sukses",
"email_target": "pembeli@contoh.com",
"payment_method": "saldo",
"amount_charged": 1500,
"fail_reason": null,
"created_at": "2026-08-13T04:10:00.000Z",
"updated_at": "2026-08-13T04:10:09.000Z"
}
}
Contoh response error (409 — sudah pernah diverifikasi)
{
"status": "error",
"message": "Order tidak dalam status menunggu_verifikasi_user.",
"data": null
}
data.status pada response
sukses:
sukses— akun AM Prem berhasil dibuat & aktif di email tujuan.gagal— verifikasi atau pembelian gagal di tengah jalan (link kadaluarsa/sudah dipakai, kuota BetaBotz habis, dsb). Dana SUDAH otomatis dikembalikan sesuai metode bayar — lihatfail_reason.
order_id milik API key lain, atau id yang tidak ada
sama sekali, SAMA-SAMA dibalas 404
"Order tidak ditemukan." (tidak dibedakan, demi keamanan).
GET /am/status/:order_id
Mengecek status sebuah order kapan saja tanpa mengubah apapun — cocok dipakai untuk polling dari sisi bot/aplikasi Anda.
Contoh curl
curl -X GET https://prem.ynastore.my.id/api/v1/am/status/ord_a1b2c3d4e5f6 \
-H "X-Api-Key: yna-premxxxxxxxxxxxxxxxxxxxx"
Contoh response sukses (200)
{
"status": "success",
"message": "Status order berhasil diambil.",
"data": {
"order_id": "ord_a1b2c3d4e5f6",
"status": "menunggu_verifikasi_user",
"email_target": "pembeli@contoh.com",
"payment_method": "saldo",
"amount_charged": 1500,
"fail_reason": null,
"created_at": "2026-08-13T04:10:00.000Z",
"updated_at": "2026-08-13T04:10:02.000Z"
}
}
Semua nilai data.status yang mungkin muncul
| Status | Keterangan |
|---|---|
created | Order dibuat tapi belum diproses (jarang terlihat lewat API — am/create selalu lanjut ke langkah berikutnya). |
dibayar | Pembayaran berhasil, magic link belum/sedang dikirim. |
magic_link_dikirim | Magic link sudah terkirim. |
menunggu_verifikasi_user | Menunggu link verifikasi dikirim lewat am/verify. |
memverifikasi / memproses_pembelian | Sedang diproses oleh sistem (status transisi singkat, jarang tertangkap saat polling). |
sukses | Akun AM Prem berhasil aktif. Status final. |
gagal | Order gagal di salah satu tahap, dana sudah dikembalikan otomatis. Status final — lihat fail_reason. |
Endpoint Account (Balance / History)
GET /account/balance
Mengecek saldo akun pemilik API key saat ini.
Contoh curl
curl -X GET https://prem.ynastore.my.id/api/v1/account/balance \
-H "X-Api-Key: yna-premxxxxxxxxxxxxxxxxxxxx"
Contoh response sukses (200)
{
"status": "success",
"message": "Saldo berhasil diambil.",
"data": {
"saldo": 48500,
"saldo_hold": 1500,
"total": 50000
}
}
| Field | Keterangan |
|---|---|
saldo | Dana bebas yang bisa langsung dipakai untuk am/create baru. |
saldo_hold | Dana yang sedang ditahan untuk order yang masih berjalan (belum final). |
total | Penjumlahan saldo + saldo_hold (total dana milik Anda di sistem). |
GET /account/history?page=&limit=
Mengambil riwayat seluruh order milik akun pemilik API key (dibuat lewat API maupun lewat dashboard web), terurut dari yang terbaru.
Query parameter
| Parameter | Default | Keterangan |
|---|---|---|
page | 1 | Nomor halaman. Nilai di luar rentang otomatis disesuaikan ke halaman valid terdekat. |
limit | 20 | Jumlah item per halaman, maksimal 100 (nilai lebih besar otomatis dipangkas ke 100). |
Contoh curl
curl -X GET "https://prem.ynastore.my.id/api/v1/account/history?page=1&limit=10" \
-H "X-Api-Key: yna-premxxxxxxxxxxxxxxxxxxxx"
Contoh response sukses (200)
{
"status": "success",
"message": "Riwayat order berhasil diambil.",
"data": {
"orders": [
{
"order_id": "ord_a1b2c3d4e5f6",
"status": "sukses",
"email_target": "pembeli@contoh.com",
"payment_method": "saldo",
"amount_charged": 1500,
"fail_reason": null,
"created_at": "2026-08-13T04:10:00.000Z",
"updated_at": "2026-08-13T04:10:09.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 1,
"total_pages": 1
}
}
}
Contoh Alur Integrasi Lengkap
Berikut narasi lengkap integrasi dari nol sampai akun AM Prem aktif, memakai ketiga endpoint AM secara berurutan.
Langkah 1 — Pastikan saldo cukup
Panggil GET /account/balance
dan pastikan field saldo lebih besar atau sama
dengan harga produk. Kalau kurang, arahkan pengguna Anda untuk
deposit dulu lewat dashboard /dashboard/deposit.
Langkah 2 — Buat pesanan
Panggil POST /am/create
dengan email tujuan. Simpan data.order_id dari
response — ini dipakai di semua langkah berikutnya. Kalau
data.status yang kembali adalah gagal,
hentikan alur di sini (dana sudah otomatis kembali, buat order
baru kalau ingin coba lagi).
Langkah 3 — Tunggu & ambil link verifikasi dari email
Sistem mengirim email berisi link verifikasi ke alamat yang Anda kirim di Langkah 2. Link ini biasanya perlu diambil manual oleh pengguna Anda (buka email, salin link) — alur API ini TIDAK membaca email secara otomatis.
Langkah 4 — Kirim link verifikasi
Begitu link didapat, panggil
POST /am/verify dengan
order_id dari Langkah 2 dan rawUrl
persis seperti di email. Response ini SUDAH final — cek
data.status: sukses berarti akun AM
Prem sudah aktif di email tujuan, gagal berarti
ada masalah di tengah jalan (dana sudah otomatis kembali).
Langkah 5 — (Opsional) Cek ulang status kapan saja
Kalau ingin memverifikasi ulang hasil akhir sebuah order (mis.
untuk sinkronisasi database internal aplikasi Anda), panggil
GET /am/status/:order_id
kapan saja — endpoint ini aman dipanggil berkali-kali
karena hanya membaca data, tidak mengubah apapun.
GET /account/balance -> pastikan saldo cukup
POST /am/create -> dapat order_id, magic link terkirim
(ambil link dari email tujuan, di luar API ini)
POST /am/verify -> status akhir: sukses / gagal
GET /am/status/:order_id -> (opsional) cek ulang kapan saja
am/create maupun am/verify bisa
mengembalikan HTTP 200/201 dengan data.status: "gagal"
— ini BUKAN error jaringan/API, tapi kegagalan bisnis
(link kadaluarsa, kuota habis, dsb) yang sudah ditangani sistem
(dana otomatis kembali). Aplikasi Anda tetap WAJIB mengecek
data.status pada response sukses, jangan hanya
mengandalkan HTTP status code.