For resellers
Partner API guide
Let your own site or bot order from us, paid from your deposit or credit, with the login back at once.
Getting started
- Become a reseller on "Sell with us" and wait for approval.
- Ask for API access on the support page; the shop makes your key and webhook secret.
- Make a deposit, or agree a credit limit and billing cycle with the shop.
Authentication
Every request carries an Authorization Bearer header. Keep the key on your server, never in a web page or an app.
curl https://api.luminapluspremium.com/api/v1/partner/v1/balance \
-H "Authorization: Bearer lp_live_xxxxxxxxxxxxxxxx"Endpoints
GET /partner/v1/productsProducts, your wholesale price and stock left (null = delivered by hand, no count)GET /partner/v1/balanceBalance, credit limit, what you can still spend, and what you owePOST /partner/v1/ordersOrder: variantId, quantity, reference (your id; repeating it never orders twice), inviteEmail (email-invite packages only)GET /partner/v1/ordersYour orders, newest first (limit, offset)GET /partner/v1/orders/:idAn order with the logins delivered (while they are live)GET /partner/v1/statement?from=&to=The bill for a period (ISO 8601)
curl -X POST https://api.luminapluspremium.com/api/v1/partner/v1/orders \
-H "Authorization: Bearer lp_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"variantId":"<variantId>","quantity":1,"reference":"SHOP-10023"}'
# 201
{"data":{"id":"…","orderNumber":"LPAPI20261026-1A2B3C4D","reference":"SHOP-10023",
"status":"FULFILLED","total":"80.00","items":[{"productName":"Netflix","variantName":"30 วัน",
"deliveries":[{"status":"ACTIVE","expiresAt":"…","seat":"จอ 3",
"credential":{"email":"…","password":"…"}}]}]},"replayed":false}Errors
401 API_KEY_REQUIRED / API_KEY_INVALID· No key, a revoked key, or a suspended account402 INSUFFICIENT_BALANCE· Not enough money; see needed and available404 VARIANT_NOT_AVAILABLE· The package is off sale or does not exist409 OUT_OF_STOCK· Sold out; nothing was charged400 QUANTITY_LIMIT· Too many in one order; see max
Webhooks
When an order is delivered we POST to your URL. Check the signature before trusting it, then read the login with GET /partner/v1/orders/:id. A call that fails is retried every minute for a day.
POST <your webhook URL>
X-LuminaPlus-Timestamp: 1767225600
X-LuminaPlus-Signature: sha256=<hex>
{"event":"order.delivered","orderId":"…","orderNumber":"…","reference":"SHOP-10023","status":"FULFILLED"}
// Node.js
const expected = "sha256=" + crypto.createHmac("sha256", WEBHOOK_SECRET)
.update(timestamp + "." + rawBody).digest("hex");
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))
&& Math.abs(Date.now() / 1000 - Number(timestamp)) < 300;Deposit, credit and bills
Every order is taken from your balance; with a credit limit it may go below zero up to that limit. A refunded or cancelled order gives the money back. The shop bills on the cycle you agreed.
Problems and claims
Resellers reach us directly on the support page, and are answered first. Sign-in codes and service mail are on My products in your reseller account.