Mulai dalam Tiga Langkah
Partner API dirancang untuk reseller yang ingin mengintegrasikan produk Ezkielyna ke bot atau aplikasi mereka.
/partner_api. Key hanya ditampilkan satu kali.Autentikasi yang Aman
Base URL: https://ezkielyna.store/partner/v1
# Header Autentikasi Standar
Authorization: Bearer YOUR_PARTNER_API_KEY
Idempotency-Key: unique_key_for_each_write
# Contoh Cek Saldo & Status
curl -s https://ezkielyna.store/partner/v1/balance -H "Authorization: Bearer YOUR_PARTNER_API_KEY"
Idempotency-Key unik. Retry dengan key yang sama mengembalikan hasil awal; body berbeda dengan key sama ditolak dengan 409.
Katalog & Saldo
Endpoint pembacaan data katalog produk, saldo wallet partner, riwayat order, dan invoice topup.
| Method | Endpoint | Fungsi |
|---|---|---|
| GET | /products |
SKU yang tersedia melalui Partner API (daftar live dari GET /products) dan harga partner resmi. |
| GET | /balance |
Partner Balance serta limit transaksi harian. |
| GET | /orders |
Riwayat order partner dan status pemenuhan. |
| GET | /orders/po_{id} |
Baca status spesifik satu order dan kredensial delivery. |
| GET | /topups |
Riwayat top-up Partner Balance dan invoice pembayaran. |
curl -s https://ezkielyna.store/partner/v1/products -H "Authorization: Bearer YOUR_PARTNER_API_KEY"
Harga Dikontrol Ezkielyna
Reseller tidak dapat mengubah harga produk melalui Partner API. Harga pada GET /products adalah harga partner resmi dan otomatis menjadi dasar pemotongan Partner Balance.
Jangan mengirim field harga atau markup sebagai sumber kebenaran. Harga dihitung server-side oleh Ezkielyna dan field harga dari client tidak mengubah total order.
Simulasi Margin Keuntungan Reseller
Pilih produk dan tentukan harga jual ke customer untuk menghitung estimasi profit:
Buat Order
Hanya SKU dari GET /products yang bisa dipesan. Harga dihitung server-side; jangan kirim harga dari aplikasi kamu.
curl -X POST https://ezkielyna.store/partner/v1/purchases -H "Authorization: Bearer YOUR_PARTNER_API_KEY" -H "Idempotency-Key: order_20260817_0001" -H "Content-Type: application/json" -d '{
"product_code": "api-credit-25",
"quantity": 1,
"customer_reference": "INV-1001"
}'
Gunakan GET /orders/po_123 untuk membaca status dan delivery setelah order selesai.
Top-up Partner Balance
Top-up terikat ke akun reseller dan hanya dikredit setelah pembayaran diverifikasi server-side.
# 1. Top-up via QRIS
curl -X POST https://ezkielyna.store/partner/v1/topups -H "Authorization: Bearer YOUR_PARTNER_API_KEY" -H "Idempotency-Key: topup_20260817_0001" -H "Content-Type: application/json" -d '{"payment_method":"qris","amount":50000}'
# 2. Top-up via USDT BSC
curl -X POST https://ezkielyna.store/partner/v1/topups -H "Authorization: Bearer YOUR_PARTNER_API_KEY" -H "Idempotency-Key: topup_20260817_0002" -H "Content-Type: application/json" -d '{"payment_method":"usdt","amount":50000,"rail":"usdt_bsc"}'
Setelah membayar, cek GET /topups/ptp_123. Untuk USDT, ikuti persis nominal dan network pada invoice.
Template Integrasi Siap Pakai
Contoh modul integrasi lengkap untuk menghubungkan bot Telegram, web app, atau backend toko Anda ke Partner API:
import requests, uuid
class EzkielynaPartnerClient:
def __init__(self, api_key: str, base_url: str = "https://ezkielyna.store/partner/v1"):
self.api_key = api_key
self.base_url = base_url.rstrip("/")
self.session = requests.Session()
self.session.headers.update({
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
})
def get_balance(self) -> dict:
# Check partner balance and daily limit
res = self.session.get(f"{self.base_url}/balance")
res.raise_for_status()
return res.json()["balance"]
def list_products(self) -> list:
# Fetch entire active digital products catalog
res = self.session.get(f"{self.base_url}/products")
res.raise_for_status()
return res.json()["products"]
def purchase(self, product_code: str, quantity: int = 1, customer_ref: str = "") -> dict:
# Purchase instant product with Idempotency protection
idempotency_key = f"ord_{uuid.uuid4().hex}"
payload = {
"product_code": product_code,
"quantity": quantity,
"customer_reference": customer_ref
}
res = self.session.post(
f"{self.base_url}/purchases",
json=payload,
headers={"Idempotency-Key": idempotency_key}
)
return res.json()
# Usage Example:
# client = EzkielynaPartnerClient("ezk_live_YOUR_KEY")
# print(client.get_balance())
# order = client.purchase("api-credit-25", quantity=1, customer_ref="INV-BOT-001")
# print("Delivered Credentials:", order["order"].get("delivery", []))
Error & Retry
| Code | Arti | Aksi |
|---|---|---|
UNAUTHORIZED |
Key salah atau sudah dicabut. | Periksa environment key. |
INSUFFICIENT_BALANCE |
Saldo partner kurang. | Top-up lalu ulangi request. |
RATE_LIMITED |
Limit request tercapai. | Tunggu sesuai Retry-After. |
IDEMPOTENCY_CONFLICT |
Key dipakai untuk body berbeda. | Buat key baru; jangan ubah body saat retry. |
PAYMENT_METHOD_UNAVAILABLE |
Rail belum aktif. | Pilih method/rail yang tersedia. |
FORBIDDEN HTTP 403 |
Key tidak punya scope untuk endpoint ini, atau akun partner tidak aktif. | Minta admin mengaktifkan scope/akun. |
NOT_FOUND HTTP 404 |
Order/top-up tidak ada atau bukan milik key ini. | Periksa id (po_…, ptp_…). |
INVALID_REQUEST HTTP 400 |
Body/Idempotency-Key tidak valid, product_code tidak tersedia, atau quantity di atas max_quantity produk. | Perbaiki request; ambil product_code dan max_quantity dari GET /products. |
OUT_OF_STOCK HTTP 409 |
Stok habis saat ini. | Coba lagi nanti atau pilih SKU lain. |
DAILY_LIMIT_EXCEEDED HTTP 429 |
Batas belanja harian partner tercapai. | Tunggu hari berikutnya atau minta admin menaikkan limit. |
TOPUP_PENDING_REVIEW HTTP 409 |
Invoice top-up perlu dicek admin. | Jangan ulangi dengan key baru; hubungi support dengan request_id. |
PAYMENT_PROVIDER_ERROR HTTP 502 |
Penyedia pembayaran mengembalikan nominal tidak valid. | Coba lagi nanti. |
PAYMENT_TEMPORARILY_UNAVAILABLE HTTP 503 |
Alokasi invoice USDT sementara tidak tersedia. | Coba lagi setelah beberapa menit. |
INTERNAL_ERROR HTTP 500 |
Kesalahan server. | Untuk POST /purchases: cek GET /orders dulu sebelum mengulang; ulangi dengan Idempotency-Key yang SAMA. |
Status order: completed (delivery tersedia), paid/pending_admin (produk supplier sedang diproses atau ditinjau admin; polling GET /orders/{id}, JANGAN beli ulang), cancelled (supplier menolak; saldo dikembalikan otomatis). Rate limit: 120 request/menit per IP; per key 10/menit untuk POST /purchases, 30/menit untuk saldo, 60/menit lainnya. |
||
request_id dari respons ke support. Jangan kirim API key atau detail delivery.
Pertanyaan Umum
request_id dan order_code dari respon API ke Customer Support via WhatsApp di +62 857-1099-9204 untuk klaim garansi ganti baru instan.