Skip to content
MarvySocials is a prepaid platform — add funds to spend on services. Create an account, browse Services, then place an order from your dashboard. Need help? Open FAQ, Contact, or a support ticket from your account.

Reseller API v1

Base URL https://smm.windelsai.com/api/v1. Authenticate with X-Api-Key: wind_…. Create a key in your dashboard. Machine-readable docs at /api/docs/json.

Authentication & envelope

Every response is JSON: {success, data|error, meta?, requestId}. Mutating POSTs accept an Idempotency-Key header. Rate limits are returned via X-RateLimit-Limit, X-RateLimit-Remaining, and Retry-After.

curl https://smm.windelsai.com/api/v1/balance \
  -H "X-Api-Key: wind_yourkey"

Key scopes

A key may have full access or an explicit allow-list. A request outside that allow-list returns 403 SCOPE_FORBIDDEN. Available scopes are:

services.readRead services and resolved prices.
orders.readRead orders and refill statuses.
orders.writePlace, refill, and cancel orders.
account.readRead wallet balance.
referrals.readRead referral and commission totals.

Endpoints

PathDescription
GET/servicesList active services with your price. Filters: category, q, page, limit.
GET/services/:public_idSingle service.
GET/balanceWallet balance and currency.
POST/ordersPlace an order. Body: {service, link, quantity, fields?, note?}.
POST/orders/massPlace up to 100 instructions. Body: {orders:[{service, link, quantity}]}. Returns separate successful and failed rows.
GET/ordersList your orders (status, page, limit).
GET/orders/:public_idOrder status, charge and status history.
POST/orders/statusBulk lookup: {orderIds:[…]} (max 100).
POST/refillsRequest a refill: {orderId}.
GET/refills/:public_idRefill status.
POST/cancellationsCancel an order: {orderId}.

Dashboard endpoints (session-authenticated)

These power the panel's own pages and authenticate with your signed-in session, not an API key — they are not part of the reseller API and are listed here so the surface is documented in one place. State-changing calls need the CSRF token, which https://smm.windelsai.com/csrf returns; send it as the X-CSRF-TOKEN header. Base URL https://smm.windelsai.com/api.

PathDescription
POST/payments/fundsvera/initializeStart a bank-transfer deposit. Body: {amount}. Returns the account details to pay into. Your wallet is credited by the provider's webhook, never by returning to the site.
GET/payments/historyYour deposits.
GET/payments/:referenceOne deposit by its reference.
GET/referrals/my-codeYour referral code, link and click/sign-up counts.
POST/referrals/validateCheck a code before signing up. Body: {code}. The only endpoint here reachable without a session; rate limited per IP.
GET/referrals/dashboardReferral totals and earnings summary.
GET/referrals/historyPeople you referred and their qualification status.
GET/earningsAvailable, pending, locked and paid balances, kept separate.
GET/earnings/historyThe earnings ledger for your account.
POST/withdrawalsRequest a payout of available earnings. Body: {amount, method, destination?}. WALLET_CREDIT converts to spendable balance immediately; BANK_TRANSFER is reviewed by staff.
GET/withdrawals/historyYour payout requests and their status.

Deposited wallet funds cannot be withdrawn — only referral and campaign earnings are payable. The two balances are separate ledgers.

Place an order

curl -X POST https://smm.windelsai.com/api/v1/orders \
  -H "X-Api-Key: wind_..." \
  -H "Content-Type: application/json" \
  -d '{"service":"01SVC...","link":
   "https://instagram.com/u","quantity":1000}'

Order response

{
  "success": true,
  "data": {
    "order": "01ORDER...",
    "status": "PROCESSING",
    "quantity": 1000,
    "charge": "1.20000000",
    "currency": "NGN"
  },
  "requestId": "..."
}

All monetary amounts are strings in DECIMAL(20,8) to avoid floating-point errors.