Status: Platform Operational | USD Wallet | Proof-Verified Payouts
Home API Docs

API Docs

Reseller panel integration reference: endpoints, actions, webhooks, and service codes.

Deposits are website-only. The API cannot add wallet funds. Resellers must sign in and deposit at https://www.gainworkers.com/wallet/deposit. Orders auto-publish when balance is sufficient.

Quick start

New to panel integration? Follow the visual setup guide first, then return here for the full reference.

  1. Register as an employer account.
  2. Open Developer Hub and generate an API key.
  3. Add funds at wallet/deposit (not via API).
  4. In your panel, set API URL to https://www.gainworkers.com/api/v2.
  5. Run action=services, map IDs, test action=add.

Endpoint

URLhttps://www.gainworkers.com/api/v2
MethodPOST recommended. GET allowed for read-only actions.
Authenticationkey=gw_live_... in POST body, or Authorization: Bearer gw_live_...
Content typeapplication/x-www-form-urlencoded

Actions

action Purpose Parameters
servicesService catalog (JSON array)n/a
balanceSpendable USD balance + deposit URLn/a
addCreate orderservice, link, quantity, comments, runs, interval
statusOrder status (comma-separated IDs)order
cancelCancel when allowedorder
ordersPaginated historypage, per_page, status
refillCampaign top-uporder, quantity
exportBulk export (max 1000)status, since, limit

Example: create order

Request
curl -X POST 'https://www.gainworkers.com/api/v2' \
  -d 'key=gw_live_YOUR_KEY' \
  -d 'action=add' \
  -d 'service=1001' \
  -d 'link=https://example.com/landing' \
  -d 'quantity=100'
Response
{"order":9841203}

Example: balance

Request
curl -X POST 'https://www.gainworkers.com/api/v2' \
  -d 'key=gw_live_YOUR_KEY' \
  -d 'action=balance'
Response
{
  "balance": "124.5600",
  "currency": "USD",
  "deposit_url": "https://www.gainworkers.com/wallet/deposit",
  "deposits_via_api": false
}

Webhooks

Set a callback URL per API key in Developer Hub → Settings. We POST JSON on status changes with header X-GainWorkers-Signature: sha256=... (HMAC-SHA256 of the raw body).

Payload sample
{
  "event": "order.completed",
  "order": 12345,
  "status": "Completed",
  "remains": "0",
  "charge": "5.0000",
  "currency": "USD",
  "timestamp": 1751731200
}

Use webhooks to reduce action=status polling to every 5+ minutes.

Service codes

CodeTypeDescription
1001campaignMicro campaign proof tasks (optional drip: runs + interval)
2001live_taskStream watch
2002live_taskWebsite presence hold
3001arenaHeadline A/B test
3002arenaVisual A/B (image URLs)
4001rentalInstagram Story rental
4002rentalInstagram Post rental
5001task_hunterBroken link hunt bounty

Error codes

CodeMeaning
AUTH_001Invalid API key
AUTH_002IP not whitelisted
AUTH_004HTTPS required
AUTH_005API key must not be sent in URL query string
RATE_001Rate limit exceeded
WAL_001Insufficient balance (deposit on website)
WAL_002Deposits blocked via API
VAL_005Invalid or blocked link URL
VAL_007Mutation requires POST
ORD_001Order not found

Security checklist

  • Store API keys server-side only. Never expose them in browser JavaScript.
  • Enable IP whitelist on each production key.
  • Use HTTPS for API calls and webhook callbacks.
  • Send add, cancel, refill via POST body.
  • API orders auto-publish when balance is sufficient (no manual admin queue).
  • Fund wallet only through the deposit page after login.
  • Verify webhook HMAC before updating order status in your database.