Kunci Bearer
Kirim Authorization: Bearer smp_live_… atau X-Api-Key. Kunci lengkap hanya ditampilkan sekali dan hanya hash-nya yang disimpan. Hingga 20 kunci aktif per akun, tanggal kedaluwarsa opsional, dan rotasi dengan satu klik.
Cara kerja integrasi
API meniru apa yang dilakukan dasbor, dengan urutan yang sama. Tidak ada biaya sampai Anda membuat pesanan, dan setiap penulisan bersifat idempoten.
Di dasbor, pilih cakupan yang dibutuhkan kunci dan, jika mau, IP yang boleh menggunakannya. Kunci lengkap hanya ditampilkan sekali.
GET /v1/catalog/services menampilkan setiap layanan yang diterbitkan dengan harga yang sudah dalam mata uang dan tingkat akun Anda.
POST /v1/orders/preview memvalidasi tautan dan jumlah, lalu mengembalikan biaya yang tepat tanpa membuat apa pun.
POST /v1/orders dengan Idempotency-Key. Dompet prabayar didebit dan pesanan dialihkan ke pemasok dengan kualitas terukur terbaik.
Daftarkan endpoint https dan terima event bertanda tangan untuk perubahan status, pengiriman sebagian, penyelesaian, pengembalian dana, dan isi ulang.
curl -X POST https://YOUR-DOMAIN/v1/orders \
-H "Authorization: Bearer smp_live_xxxxxxxxxx_..." \
-H "Idempotency-Key: 2b7c1d9e-order-1001" \
-H "Content-Type: application/json" \
-d '{"service":"<service_id>","link":"https://instagram.com/p/abc","quantity":1000}'Ganti YOUR-DOMAIN dengan host toko ini, kunci dengan kunci Anda sendiri, dan <service_id> dengan id dari katalog.
Autentikasi dan batas
Kunci adalah kredensial sisi server. Kunci tidak pernah masuk ke browser, hanya membawa izin yang Anda berikan, dan Anda bisa mencabut atau merotasinya kapan saja tanpa mengganggu kunci lain.
Kirim Authorization: Bearer smp_live_… atau X-Api-Key. Kunci lengkap hanya ditampilkan sekali dan hanya hash-nya yang disimpan. Hingga 20 kunci aktif per akun, tanggal kedaluwarsa opsional, dan rotasi dengan satu klik.
Secara opsional, kunci dapat dikunci ke hingga 20 alamat IP. Permintaan dari alamat lain ditolak dengan 403 FORBIDDEN.
Setiap kunci mewarisi batas permintaan per menit dari tingkat pelanggan Anda. Setiap respons menyertakan RateLimit-Limit, RateLimit-Remaining, dan RateLimit-Reset; jika melewati batas, Anda menerima 429 dengan Retry-After.
Batas yang berlaku untuk tingkat Reseller1.200 permintaan per menit
Setiap kunci hanya membawa cakupan yang Anda berikan. Panggilan di luar cakupannya ditolak dengan 403 FORBIDDEN.
| Cakupan | Fungsinya |
|---|---|
catalog:read | Melihat layanan dan harga |
orders:read | Membaca pesanan |
orders:write | Membuat pesanan, isi ulang, dan membatalkan |
wallet:read | Membaca saldo |
assets:read | Melihat listing dan penawaran Anda |
assets:write | Membuat dan mengedit listing, verifikasi, dan ketersediaan |
transactions:write | Mencatat langkah serah terima pada transaksi |
Idempotensi
POST /v1/orders dan POST /v1/orders/batch memerlukan header Idempotency-Key dengan panjang 8 sampai 120 karakter. Mengulang panggilan dengan kunci yang sama akan mengembalikan pesanan yang sama tanpa menagih lagi. Menggunakan ulang kunci dengan body yang berbeda ditolak dengan 409 IDEMPOTENCY_KEY_REUSE. Di dalam batch, setiap item diidentifikasi dengan kunci batch ditambah indeksnya.
HTTP/1.1 409 Conflict
X-Request-Id: req_<hex>
{
"error": {
"code": "IDEMPOTENCY_KEY_REUSE",
"message": "..."
},
"request_id": "req_<hex>"
}Endpoint
Semua path berada di bawah /v1 pada host toko ini. Uang selalu berupa string desimal dengan mata uang ISO 4217, bukan float. Skema lengkap permintaan dan respons ada di file OpenAPI.
| Metode | Path | Cakupan | Fungsinya |
|---|---|---|---|
| GET | /v1/catalog/platforms | catalog:read | Platform yang saat ini memiliki layanan terbit |
| GET | /v1/catalog/services | catalog:read | Layanan dengan harga dalam mata uang dan tingkat Anda; filter berdasarkan platform |
| GET | /v1/catalog/services/{id} | catalog:read | Satu layanan beserta skema kolomnya |
| Metode | Path | Cakupan | Fungsinya |
|---|---|---|---|
| POST | /v1/orders/preview | orders:write | Validasi dan hitung kuotasi tanpa membuat atau menagih |
| POST | /v1/ordersIdempotency-Key wajib | orders:write | Buat pesanan: mendebit dompet prabayar dan mengalihkan ke pemasok terbaik |
| GET | /v1/orders | orders:read | Daftar pesanan, terbaru lebih dulu, dengan paginasi cursor |
| POST | /v1/orders/batchIdempotency-Key wajib | orders:write | Hingga 100 pesanan dalam satu panggilan, masing-masing dengan hasilnya sendiri |
| GET | /v1/orders/{id} | orders:read | Ambil satu pesanan berdasarkan id |
| POST | /v1/orders/{id}/refill | orders:write | Minta isi ulang dalam periode garansi |
| POST | /v1/orders/{id}/cancel | orders:write | Minta pembatalan; dikembalikan setelah pemasok mengonfirmasi |
| Metode | Path | Cakupan | Fungsinya |
|---|---|---|---|
| GET | /v1/wallet/balance | wallet:read | Saldo per mata uang: tersedia, tunai, bonus, dan ditahan |
| Metode | Path | Cakupan | Fungsinya |
|---|---|---|---|
| POST | /v1/assets | assets:write | Buat draf listing; tayang setelah verifikasi dan moderasi |
| GET | /v1/assets | assets:read | Listing Anda |
| PATCH | /v1/assets/{id} | assets:write | Perbarui listing (body lengkap; If-Match untuk penguncian optimis) |
| POST | /v1/assets/batch | assets:write | Impor hingga 1.000 listing, dicocokkan berdasarkan external_ref |
| POST | /v1/assets/{id}/verify | assets:write | Mulai (method) atau cek (verification_id) verifikasi kepemilikan |
| POST | /v1/assets/{id}/availability | assets:write | Sembunyikan atau tampilkan listing (tidak saat sedang negosiasi) |
| Metode | Path | Cakupan | Fungsinya |
|---|---|---|---|
| GET | /v1/offers | assets:read | Penawaran yang diterima pada listing Anda |
| Metode | Path | Cakupan | Fungsinya |
|---|---|---|---|
| POST | /v1/transactions/{id}/handoff | transactions:write | Tandai langkah prosedur, tambahkan item aman, atau selesaikan serah terima |
HTTP/1.1 201 Created
X-Request-Id: req_<hex>
X-Api-Version: 2026-09-23
RateLimit-Limit: <limit> RateLimit-Remaining: <n> RateLimit-Reset: <seconds>
{
"id": "SMP-7K2Q9XHT",
"status": "routing",
"service": "<service_id>",
"link": "https://instagram.com/p/abc",
"quantity": 1000,
"charge": "<decimal>",
"refunded": "0",
"currency": "USD",
"start_count": null,
"remains": null,
"delivered": null,
"refill_until": null,
"created_at": "2026-09-23T12:00:00.000Z",
"updated_at": "2026-09-23T12:00:00.000Z"
}Webhook
Daftarkan endpoint https di host publik dan pilih event yang Anda inginkan. Setiap pengiriman ditandatangani dengan secret endpoint Anda, yang ditampilkan sekali saat endpoint dibuat.
POST /webhooks/orders HTTP/1.1
Content-Type: application/json
Webhook-Id: <event id>
Webhook-Timestamp: 1790000000
Webhook-Signature: t=1790000000,v1=<hex HMAC-SHA256(secret, "1790000000.<body>")>
{ "id": "<event id>", "type": "order.partial", "created_at": "2026-09-23T12:05:00.000Z",
"data": { "orderId": "SMP-7K2Q9XHT", ... } }import { createHmac, timingSafeEqual } from 'node:crypto';
export function verifyWebhook(secret, headers, rawBody) {
const t = headers['webhook-timestamp'];
const v1 = (headers['webhook-signature'] ?? '')
.split(',').find((p) => p.startsWith('v1='))?.slice(3) ?? '';
const expected = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300; // 5 minutes
return fresh && expected.length === v1.length
&& timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}Event ditulis ke outbox dalam transaksi database yang sama dengan perubahan yang memicunya, jadi tidak ada yang hilang saat pengiriman gagal. Pengiriman yang gagal dicoba lagi setelah 1 menit, 5 menit, 30 menit, 2 jam, 6 jam, 12 jam, dan 24 jam sebelum ditandai sebagai mati.
order.createdorder.status_changedorder.partialorder.completedorder.refundedorder.refill_updateddeposit.confirmedoffer.createdoffer.updatedreservation.createdtransaction.updatedpayout.updatedlisting.updateddispute.updatedKompatibilitas
POST /api/v2 mengimplementasikan kontrak umum “SMM API v2”: kirim key dan action sebagai field formulir atau JSON. Kunci, cakupan, dan batas permintaan sama dengan /v1; hanya formatnya yang berubah, dan error dikembalikan sebagai { "error": "message" }.
Panel tidak mengirim kunci idempotensi, jadi kunci diturunkan dari isi pesanan dan menit saat ini; jendela pesanan ganda menangani sisanya.
curl -X POST https://YOUR-DOMAIN/api/v2 \
-d key=smp_live_xxxxxxxxxx_... \
-d action=add \
-d service=<service_id> \
-d link=https://instagram.com/p/abc \
-d quantity=1000
{ "order": "SMP-7K2Q9XHT" }Error
Setiap respons non-2xx memiliki body yang sama. Integrasikan berdasarkan kode, bukan pesan: pesan bisa berubah, kode tidak. request_id juga dikirim sebagai header X-Request-Id.
HTTP/1.1 400 Bad Request
X-Request-Id: req_<hex>
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request.",
"details": {
"fields": [{ "path": "quantity", "message": "..." }]
}
},
"request_id": "req_<hex>"
}| Kode | HTTP | Arti |
|---|---|---|
VALIDATION_ERROR | 400 | Body atau header tidak valid; details.fields mencantumkan setiap path dan masalahnya |
UNAUTHORIZED | 401 | Kunci tidak ada, tidak valid, dicabut, atau kedaluwarsa |
INSUFFICIENT_FUNDS | 402 | Saldo dompet prabayar tidak cukup untuk kuotasi |
FORBIDDEN | 403 | Kunci tidak memiliki cakupan, IP tidak diizinkan, sub-pengguna tanpa izin, atau akun ditangguhkan |
NOT_FOUND | 404 | Pesanan, layanan, atau listing tidak ada untuk akun ini |
CONFLICT | 409 | Konflik status, misalnya batas kunci aktif |
INVALID_TRANSITION | 409 | Pesanan atau transaksi tidak dapat berpindah ke status tersebut |
DUPLICATE_ORDER | 409 | Layanan, link, dan jumlah yang sama dalam jendela pesanan ganda |
IDEMPOTENCY_KEY_REUSE | 409 | Idempotency-Key sudah dipakai dengan body yang berbeda |
ALREADY_RESERVED | 409 | Aset sedang dipesan oleh pembeli lain |
POLICY_BLOCKED | 422 | Layanan atau negara diblokir oleh kebijakan platform |
MARGIN_GUARD | 422 | Tidak ada pemasok yang bisa melayani pesanan ini dengan harga yang dipublikasikan |
UNPROCESSABLE | 422 | Permintaan valid, tetapi tidak dapat dipenuhi |
RATE_LIMITED | 429 | Batas per kunci tercapai; tunggu beberapa detik sesuai Retry-After |
INTERNAL | 500 | Error tak terduga; hubungi dukungan dengan request_id |
PROVIDER_ERROR | 502 | Gangguan pemasok; pesanan dicoba ulang atau dana dikembalikan |
NO_ROUTE | 503 | Tidak ada rute pemasok yang tersedia saat ini; coba lagi nanti |
NOT_CONFIGURED | 503 | Fitur belum dikonfigurasi di toko ini |
Siapa yang bisa menggunakannya
Kunci API dan endpoint webhook dibuat oleh pemilik akun pada paket Reseller. Pesanan yang dibuat dengan kunci didebit dari dompet prabayar akun dan muncul di dasbor yang sama dengan pesanan manual. Sub-pengguna tidak dapat membuat kunci.
Baik Anda menjalankan panel yang membutuhkan penyedia yang andal, alat agensi yang memesan untuk klien, atau inventaris penjual yang harus tetap sinkron dengan marketplace, integrasinya mengikuti pola yang sama: kunci dengan cakupan terbatas, penulisan yang idempoten, dan event yang Anda verifikasi sebelum mempercayainya.
Setiap endpoint berada di bawah /v1 pada domain etalase yang Anda integrasikan. Respons berformat JSON, jumlah berupa string desimal yang dipasangkan dengan mata uang ISO 4217, dan timestamp mengikuti ISO 8601. Setiap respons membawa header X-Api-Version dengan tanggal kontrak yang sedang Anda gunakan, dan X-Request-Id yang dapat Anda sebutkan ke dukungan. Error selalu memiliki bentuk yang sama: objek error dengan kode yang stabil, pesan yang dapat dibaca, dan detail opsional, bersama request_id.
Berkas OpenAPI 3.1 mendeskripsikan setiap rute, skema, dan kode error. Impor ke klien HTTP atau generator kode Anda, dan Anda akan mendapatkan permintaan bertipe untuk katalog, pesanan, dompet, iklan, penawaran, dan serah terima transaksi.
Kunci dibuat oleh pemilik akun di paket Reseller dan hanya ditampilkan sekali; yang disimpan hanya hash-nya. Saat dibuat, Anda memilih izinnya, daftar IP yang diizinkan opsional (hingga 20 alamat), dan tanggal kedaluwarsa opsional. Rotasi membuat kunci baru dengan izin yang sama dan mencabut yang lama, sehingga Anda dapat mengganti kredensial tanpa gangguan. Pesanan yang dibuat dengan kunci didebitkan dari dompet akun dan muncul di dasbor pesanan yang sama dengan pesanan manual, dengan sumber yang ditandai sebagai API.
Setiap kunci mewarisi batas permintaan per menit dari tingkat klien akun. Header RateLimit-Limit, RateLimit-Remaining, dan RateLimit-Reset menunjukkan posisi Anda; jika batas terlampaui, API merespons 429 dengan header Retry-After, dan reaksi yang benar adalah menunggu tepat selama waktu itu.
Pembuatan pesanan adalah satu-satunya panggilan yang menggerakkan uang, jadi dilindungi dua kali. Pertama, header Idempotency-Key wajib: mengulang permintaan dengan kunci yang sama mengembalikan pesanan asli tanpa penagihan kedua, dan menggunakan kembali kunci dengan badan yang berbeda ditolak dengan 409 IDEMPOTENCY_KEY_REUSE. Kedua, jendela anti-duplikat mendeteksi layanan, tautan, dan jumlah yang sama yang dikirim lagi dalam interval singkat tanpa kecocokan kunci, dan mengembalikan 409 DUPLICATE_ORDER.
Batch menerima hingga 100 pesanan per panggilan. Setiap item divalidasi dan didebitkan secara terpisah, diidentifikasi oleh kunci batch ditambah indeksnya, dan respons melaporkan hasil per item, sehingga satu baris yang rusak tidak pernah menghentikan yang lain. Gunakan POST /v1/orders/preview terlebih dahulu saat Anda ingin tahu jumlah penagihan yang tepat dan hasil validasi tanpa membuat apa pun.
Setiap perubahan status ditulis ke antrean dalam transaksi database yang sama dengan perubahannya, dan distributor mengirimkannya ke endpoint https Anda dengan tiga header: Webhook-Id, Webhook-Timestamp, dan Webhook-Signature. Tanda tangannya adalah HMAC-SHA256 dari timestamp, titik, dan badan mentah, dihitung dengan secret endpoint yang ditampilkan sekali saat pembuatan. Verifikasi dalam waktu konstan, tolak timestamp yang lebih dari lima menit, dan deduplikasi berdasarkan Webhook-Id, karena event yang dicoba ulang membawa id yang sama.
Pengiriman yang tidak menerima 2xx akan dicoba ulang setelah 1 menit, 5 menit, 30 menit, 2 jam, 6 jam, 12 jam, dan 24 jam, sebelum ditandai gagal secara permanen. Balas dengan cepat dan proses secara asinkron; handler yang lambat adalah penyebab paling umum pemrosesan ganda.
Jika panel Anda sudah menggunakan format "SMM API v2" yang umum, Anda dapat menambahkan etalase ini sebagai penyedia dengan menempelkan URL /api/v2 dan kunci Anda. Tindakan yang didukung adalah services, add, status, balance, refill, refill_status, dan cancel; harga kembali dalam mata uang dan tingkat akun Anda, dan error menggunakan bentuk datar { "error": "pesan" } yang diharapkan panel-panel ini. Idempotensi berasal dari isi pesanan dan menit saat ini, sehingga pengiriman ganda yang tidak disengaja dalam menit yang sama akan digabungkan.
Paket Reseller. Kunci API dan endpoint webhook dibuat oleh pemilik akun; sub-pengguna tidak dapat membuatnya. Kunci adalah kredensial sisi server dan tidak boleh pernah ditanamkan di browser atau aplikasi mobile.
Kirim kunci sebagai Authorization: Bearer smp_live_… atau di header X-Api-Key. Kunci harus memiliki cakupan yang diminta endpoint, seperti orders:write untuk membuat pesanan atau catalog:read untuk mencantumkan layanan.
Kirim ulang dengan Idempotency-Key yang sama. Anda menerima pesanan asli dan tidak ada yang didebitkan dua kali. Jika Anda mengirim badan yang berbeda dengan kunci yang sama, API merespons 409 IDEMPOTENCY_KEY_REUSE.
Hitung HMAC-SHA256 dengan secret endpoint Anda atas string yang terdiri dari Webhook-Timestamp, titik, dan badan mentah, lalu bandingkan dalam waktu konstan dengan nilai v1 di Webhook-Signature. Tolak timestamp yang lebih dari 5 menit dan deduplikasi berdasarkan Webhook-Id.
Setiap kunci mewarisi batas permintaan per menit dari tingkat klien Anda, yang ditampilkan di halaman ini. Header RateLimit-* menunjukkan jendela saat ini, dan respons 429 menyertakan Retry-After dalam detik.
Ya. GET /v1/catalog/services mengembalikan harga yang sudah dikonversi ke mata uang akun Anda dengan diskon tingkat Anda, dan POST /v1/orders/preview mengembalikan jumlah penagihan yang tepat, termasuk diskon volume dan kupon, sebelum Anda mengonfirmasi.
Ya. Dengan cakupan assets:write Anda dapat membuat dan memperbarui iklan, mengimpor hingga 1.000 sekaligus, memulai verifikasi kepemilikan, dan mengubah ketersediaan; assets:read mencantumkan iklan dan penawaran Anda, dan transactions:write mencatat langkah serah terima pada sebuah negosiasi.
Di paket Reseller, buat kunci, unduh file OpenAPI, dan kirim pesanan pertama Anda dari sistem Anda sendiri.
Kami tidak pernah menjual ulasan atau penilaian. Beberapa platform membatasi layanan engagement atau pemindahan akun dalam ketentuannya; Anda bertanggung jawab atas aturan setiap platform yang Anda gunakan.