WatShop Reseller API
Resell our full digital-goods catalog on your own website, SMM panel or WooCommerce store. Orders debit your wallet and auto-deliver — stock credentials arrive instantly, manual items follow within their ETA. All delivery notifications go out by email.
Overview & Authentication
There are two API surfaces over the same account, wallet and catalog:
| API | Base URL | Auth | Best for |
|---|---|---|---|
| SMM Panel API | https://mskey.watshop.in/api/v2 |
key parameter (form or JSON) |
SMM panels (Perfect Panel, SmartPanel, Rental panels…) via the standard provider format |
| REST API v1 | https://mskey.watshop.in/api/v1 |
Authorization: Bearer <api_key> (or ?key=) |
Custom websites, AI-built storefronts, the WordPress plugin, scripts |
Get your API key by creating a reseller account — the key is issued instantly and shown on your dashboard, where you also top up your wallet.
402 and v2 responds {"error":"..."}. Suspended accounts get {"error":"Account suspended"} on every call.
SMM Panel API — POST /api/v2
The industry-standard SMM provider format: one endpoint, POST only, form-encoded (or JSON) body, an action parameter, responses in JSON. Errors always come back as {"error":"message"} with HTTP 200, as SMM panels expect.
POST action=services
Returns the full catalog as SMM services. service is a stable integer id; rate is the INR price per unit.
| Parameter | Required | Description |
|---|---|---|
key | Yes | Your API key |
action | Yes | services |
curl -X POST https://mskey.watshop.in/api/v2 \
-d 'key=YOUR_API_KEY' \
-d 'action=services'[
{
"service": 12,
"name": "Netflix Premium — 1 Month",
"type": "Package",
"category": "Streaming",
"rate": "99.00",
"min": 1,
"max": 14,
"refill": false,
"cancel": false
}
]max reflects available stock for instant-delivery products (falls back to 1000 for manual delivery).
POST action=add
Places an order: checks the product is active and your balance covers rate × quantity, debits the wallet atomically, then delivers instantly when stock is available.
| Parameter | Required | Description |
|---|---|---|
key | Yes | Your API key |
action | Yes | add |
service | Yes | Service id from action=services |
quantity | No | Defaults to 1 |
customer_email | No | Non-standard extra: your buyer's email — credentials are emailed there (you get a copy). Defaults to your reseller email. |
curl -X POST https://mskey.watshop.in/api/v2 \
-d 'key=YOUR_API_KEY' \
-d 'action=add' \
-d 'service=12' \
-d 'quantity=1' \
-d '[email protected]'{ "order": 5731 }POST action=status
Check one order. credentials is included only once the order is Completed.
| Parameter | Required | Description |
|---|---|---|
key | Yes | Your API key |
action | Yes | status |
order | Yes | Order id returned by add |
curl -X POST https://mskey.watshop.in/api/v2 \
-d 'key=YOUR_API_KEY' \
-d 'action=status' \
-d 'order=5731'{
"charge": "99.00",
"start_count": "0",
"status": "Completed",
"remains": "0",
"currency": "INR",
"credentials": "[email protected]:password123"
}| Status | Meaning |
|---|---|
Completed | Paid and delivered — credentials included |
In progress | Paid, delivery being prepared |
Pending | Awaiting fulfillment (manual-delivery products) |
Refunded | Charge returned to your wallet |
Canceled | Order cancelled |
POST action=status (multiple orders)
Pass orders as a comma-separated list (instead of order) to check up to 100 orders in one call.
curl -X POST https://mskey.watshop.in/api/v2 \
-d 'key=YOUR_API_KEY' \
-d 'action=status' \
-d 'orders=5731,5732,5733'{
"5731": { "charge": "99.00", "start_count": "0", "status": "Completed", "remains": "0", "currency": "INR", "credentials": "[email protected]:password123" },
"5732": { "charge": "199.00", "start_count": "0", "status": "In progress", "remains": "0", "currency": "INR" },
"5733": { "error": "Incorrect order ID" }
}POST action=balance
curl -X POST https://mskey.watshop.in/api/v2 \
-d 'key=YOUR_API_KEY' \
-d 'action=balance'{ "balance": "1234.50", "currency": "INR" }{ "error": "Not enough funds in the balance" }REST API v1
Clean JSON over proper HTTP verbs and status codes. Authenticate with Authorization: Bearer <api_key> (a ?key= query parameter also works for quick tests).
| Code | Meaning |
|---|---|
401 | Missing or invalid API key |
402 | Insufficient wallet funds |
404 | Unknown product or order |
422 | Validation error (bad quantity, missing fields…) |
GET /api/v1/products
Full catalog, including live stock for instant-delivery products.
curl https://mskey.watshop.in/api/v1/products \
-H 'Authorization: Bearer YOUR_API_KEY'[
{
"id": "netflix_premium_1m",
"api_service_id": 12,
"name": "Netflix Premium — 1 Month",
"category": "Streaming",
"description": "4K UHD private profile, instant delivery",
"price_inr": 99,
"price_usdt": 1.2,
"image_url": "https://mskey.watshop.in/images/netflix.png",
"delivery_type": "auto",
"eta_minutes": 0,
"in_stock": true,
"stock_count": 14
}
]POST /api/v1/orders
Create an order. Pass either product_id (string id) or service (integer id from the SMM services list). If the product delivers instantly, credentials is already in the response.
curl -X POST https://mskey.watshop.in/api/v1/orders \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"product_id": "netflix_premium_1m",
"quantity": 1,
"customer_email": "[email protected]"
}'{
"order_id": 5731,
"charge": 99,
"balance_after": 1135.5,
"status": "Completed",
"credentials": "[email protected]:password123"
}{ "error": "Insufficient funds" }GET /api/v1/orders/:id
Order details. Poll this until status is Completed for manual-delivery products.
curl https://mskey.watshop.in/api/v1/orders/5731 \
-H 'Authorization: Bearer YOUR_API_KEY'{
"order_id": 5731,
"product": "Netflix Premium — 1 Month",
"status": "Completed",
"charge": 99,
"credentials": "[email protected]:password123",
"created_at": "2026-08-05 12:41:03"
}GET /api/v1/orders?limit=50
Your most recent orders, newest first. limit defaults to 50.
curl 'https://mskey.watshop.in/api/v1/orders?limit=10' \
-H 'Authorization: Bearer YOUR_API_KEY'[
{ "order_id": 5731, "product": "Netflix Premium — 1 Month", "status": "Completed", "charge": 99, "created_at": "2026-08-05 12:41:03" },
{ "order_id": 5729, "product": "Spotify Premium — 3 Months", "status": "Pending", "charge": 249, "created_at": "2026-08-05 11:02:47" }
]GET /api/v1/balance
curl https://mskey.watshop.in/api/v1/balance \
-H 'Authorization: Bearer YOUR_API_KEY'{ "balance": 1135.5, "currency": "INR" }GET /api/v1/me
Account details — handy as a "test connection" call.
curl https://mskey.watshop.in/api/v1/me \
-H 'Authorization: Bearer YOUR_API_KEY'{
"name": "Acme Digital",
"email": "[email protected]",
"status": "active",
"created_at": "2026-07-01 09:15:00"
}Connect from an SMM Panel
WatShop speaks the standard SMM provider protocol, so any panel software (Perfect Panel, SmartPanel, rental panels, custom scripts) can plug us in as a provider:
- 1In your panel's admin area open Providers (sometimes called API Providers or Services → Providers).
- 2Click Add provider.
- 3API URL:
https://mskey.watshop.in/api/v2 - 4API key: paste the key from your reseller dashboard.
- 5Save, then import services — our catalog appears with INR rates. Set your own markup per service.
- 6Map order delivery: when an order completes, fetch
action=status— thecredentialsfield contains what your buyer receives (also emailed automatically when you passcustomer_emailonadd).
Integrate with an AI Website Builder
Building a storefront with Lovable, v0, Bolt or a similar AI builder? Paste the prompt below, replace YOUR_API_KEY, and the builder will wire a complete storefront against our REST API — with the key safely kept server-side.
You are building a digital-goods storefront that resells products from the
WatShop Reseller API.
API BASE URL: https://mskey.watshop.in/api/v1
API KEY: YOUR_API_KEY
AUTH: every request to the WatShop API needs the header
Authorization: Bearer <API KEY>
SECURITY (most important requirement):
Create server-side API routes (for example /api/watshop/*) that forward
requests to the WatShop API and inject the Authorization header from an
environment variable named WATSHOP_API_KEY. The browser must only ever call
these proxy routes. Never place the key in client-side code, bundles, or
public config — if the framework only supports client code, generate a small
serverless/edge function for the proxy.
BUILD THIS:
1. Catalog page
- GET {base}/products returns an array of:
{ id, api_service_id, name, category, description, price_inr,
price_usdt, image_url, delivery_type, eta_minutes, in_stock,
stock_count }
- Render a responsive product grid grouped by category with name, image,
description, delivery ETA and an "In stock" badge.
- Show a selling price of price_inr with my margin applied (make the
margin a single constant I can edit, default 20%).
- Grey out / disable buying when in_stock is false.
2. Checkout
- Collect the buyer's email address, then POST {base}/orders with JSON:
{ "product_id": "<id>", "quantity": 1, "customer_email": "<buyer email>" }
- A 201 response returns { order_id, charge, balance_after, status,
credentials? }. If credentials is present, the item was delivered
instantly — show it on a success page with a copy button.
- Error handling: 402 means my reseller wallet is out of funds — show the
buyer "temporarily unavailable, try again soon" (never mention the
wallet); 404 unknown product; 422 validation error; show friendly toasts.
3. Order status page
- For orders that are not yet Completed, poll GET {base}/orders/{order_id}
every 15 seconds. The response is { order_id, product, status, charge,
credentials?, created_at }.
- While status is "Pending" or "In progress" show a friendly "your order
is being prepared" state with the ETA. When it becomes "Completed",
stop polling and reveal the credentials with a copy button.
- Give the buyer a link they can bookmark to come back to this page.
4. Utilities (server-side only)
- GET {base}/balance returns { balance, currency } — log a server-side
warning when the balance drops below 500 so I know to top up.
- GET {base}/me verifies the key works; use it in a health-check route.
GENERAL: mobile-first responsive design, clear loading and empty states,
no exposure of wholesale price_inr or my wallet anywhere in the UI.WordPress Plugin
Already running WooCommerce? The WatShop Reseller plugin imports our catalog as WooCommerce products with your margin, keeps prices and stock in sync hourly, and fulfills paid orders automatically — credentials land in the buyer's completion email.
Install & set up
- 1Requirements: WordPress with WooCommerce active, PHP 7.4+.
- 2WP Admin → Plugins → Add New → Upload Plugin → choose
watshop-reseller.zip→ Install Now. - 3Click Activate.
- 4Open Settings → WatShop Reseller and enter the API URL
https://mskey.watshop.in/api/v1and your API key. Set your price margin % and (optionally) enable hourly auto-sync. - 5Click Test connection — it calls
/api/v1/meand shows your account plus wallet balance. - 6Click Import now — the catalog is created as virtual WooCommerce products (SKU = product id, price = INR price × (1 + margin)), with categories and images mapped.
How selling works
- 1A customer pays for an imported product in your WooCommerce store.
- 2The plugin places the order on WatShop with your buyer's email and stores the WatShop order id on the WooCommerce order.
- 3A cron job polls the order until it is
Completed, then saves the credentials to the order, adds an order note and sends them to the buyer in the completion email. - 4If the order fails (for example your wallet hits
402), the WooCommerce order stays in processing with a note, you get an admin email, and a Retry button appears in the order's WatShop meta box.
WatShop Reseller API · Portal login · Create account