ProdSeller API

Resell products from your balance on any bot or website. Authenticate with your API key, list available products, create orders deducted from your balance, and get instant key delivery.

Base URL https://prodseller.com/v1

API Key Auth

Send your key in the X-API-Key header with every request.

Balance-based

Orders are deducted directly from your USDT balance — no payment step needed.

Rate limit

300 requests per 15 minutes per IP. Use the X-RateLimit-* headers to track usage.

Authentication

Every request must include your API key in the X-API-Key request header. Get or generate your key in the ProdSeller admin panel under API Manager.

Header format

X-API-Key: psk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Example request
# curl
curl -H "X-API-Key: psk_YOUR_KEY" https://prodseller.com/v1/balance

Error Handling

All errors return a JSON object with an error field and a standard HTTP status code.

// Error response shape
{
  "error": "Solde insuffisant"
}
CodeMeaning
401API key missing, invalid, or disabled
400Bad request — missing or invalid parameter
402Insufficient balance
404Resource not found
409Conflict — e.g., out of stock
429Rate limit exceeded
500Internal server error

Endpoints

GET /v1/products List all active products

Returns all active products available for purchase. price is the actual unit price your API key will be charged at POST /v1/orders — it already reflects any account-specific or API-wide fixed price set for this product. publicPrice is the standard listed price, shown for reference/comparison only.

Response
{
  "products": [
    {
      "id":          "64abc...",
      "name":        "Netflix 1 Month",
      "description": "Premium account",
      "price":       4.99, // what you will actually be charged
      "publicPrice": 5.99, // standard listed price, for reference
      "imageUrl":    "https://...",
      "delivery":    { "type": "instant" },
      "sold":        120,
      "inStock":     true
    }
  ]
}
GET /v1/products/:id Get product details
ParameterTypeDescription
id *stringMongoDB product ID
Response
{
  "id":      "64abc...",
  "name":    "Netflix 1 Month",
  "price":   4.99, // what you will actually be charged
  "publicPrice": 5.99, // standard listed price, for reference
  "stock":   47,   // null for custom-delivery products
  "delivery": { "type": "instant" }
}
GET /v1/balance Get your current balance

Returns the balance and membership tier of the user linked to the API key.

Response
{
  "telegramId": 123456789,
  "username":   "mybot",
  "balance":    25.50,
  "membership": "gold"
}
POST /v1/orders Create an order (deducts balance)

Purchases a product and delivers the key(s) instantly. The order amount is deducted from your balance. Your membership discount is applied automatically.

Recommended: prevent duplicate charges

Send a stable, unique Idempotency-Key header for each customer checkout (maximum 100 characters). Retrying the same checkout with the same key returns the first order without charging the balance again.

Request body

FieldTypeDescription
productId *stringProduct ID to purchase
quantitynumberQuantity (default: 1)
Request
{
  "productId": "64abc...",
  "quantity":  1
}
Response (instant delivery)
{
  "orderId":       "64xyz...",
  "status":        "delivered",
  "product":       { "id": "64abc...", "name": "Netflix 1 Month" },
  "quantity":      1,
  "amount":        4.99,
  "membershipDiscount": 5,
  "bulkDiscount":       null,
  "discountAmount":  0.25,
  "deliveredKey":  "email:pass123",   // single key
  "deliveredKeys": ["key1", "key2"],  // multiple (quantity > 1)
  "createdAt":     "2026-01-15T10:30:00Z"
}
GET /v1/orders List your orders

Returns your own order history (every order placed with this account's API key), newest first. Use this to recover order IDs if your integration didn't store them.

ParameterTypeDescription
pagenumberPage number, default 1
limitnumberResults per page, default 50, max 200
statusstringFilter by status: pending | paid | delivered | failed
Response
{
  "orders": [
    {
      "orderId":      "64xyz...",
      "status":       "delivered",
      "product":      { "id": "...", "name": "..." },
      "quantity":     1,
      "amount":       4.99,
      "deliveredKey": "email:pass",
      "createdAt":    "2026-08-10T12:00:00.000Z"
    }
  ],
  "pagination": { "page": 1, "limit": 50, "total": 3, "pages": 1 }
}
GET /v1/orders/:id Get order status
ParameterTypeDescription
id *stringOrder ID returned from POST /orders
Response
{
  "orderId":      "64xyz...",
  "status":       "delivered",  // pending | paid | delivered | failed
  "product":      { "id": "...", "name": "..." },
  "quantity":     1,
  "amount":       4.99,
  "deliveredKey": "email:pass"
}

Code Examples

Python

Python — buy a product
import requests

API_KEY  = "psk_YOUR_KEY_HERE"
BASE_URL = "https://prodseller.com/v1"
HEADERS  = { "X-API-Key": API_KEY }

# 1. List products
products = requests.get(f"{BASE_URL}/products", headers=HEADERS).json()["products"]
product  = products[0]
print(f"Buying: {product['name']} — ${product['price']}")

# 2. Check balance
balance = requests.get(f"{BASE_URL}/balance", headers=HEADERS).json()["balance"]
print(f"Balance: ${balance}")

# 3. Create order
order = requests.post(f"{BASE_URL}/orders", headers=HEADERS, json={
    "productId": product["id"],
    "quantity": 1
}).json()

print(f"Key: {order.get('deliveredKey')}")

Node.js

Node.js — buy a product
const API_KEY  = 'psk_YOUR_KEY_HERE';
const BASE_URL = 'https://prodseller.com/v1';
const headers  = { 'X-API-Key': API_KEY, 'Content-Type': 'application/json', 'Idempotency-Key': 'checkout_123' };

// List products
const { products } = await fetch(`${BASE_URL}/products`, { headers }).then(r => r.json());

// Buy first product
const order = await fetch(`${BASE_URL}/orders`, {
  method: 'POST', headers,
  body: JSON.stringify({ productId: products[0].id, quantity: 1 })
}).then(r => r.json());

console.log('Delivered key:', order.deliveredKey);

Telegram Bot (python-telegram-bot)

Python — Telegram bot handler
from telegram import Update
from telegram.ext import CommandHandler, ApplicationBuilder
import requests

API_KEY = "psk_YOUR_KEY"
HEADERS = { "X-API-Key": API_KEY }
BASE    = "https://prodseller.com/v1"

async def buy(update: Update, context):
    args = context.args
    if not args:
        await update.message.reply_text("Usage: /buy <productId>")
        return

    resp  = requests.post(f"{BASE}/orders", headers=HEADERS,
                          json={ "productId": args[0], "quantity": 1 })
    order = resp.json()

    if "error" in order:
        await update.message.reply_text(f"❌ {order['error']}")
    else:
        key = order.get("deliveredKey", "(pending delivery)")
        await update.message.reply_text(f"✅ Order #{order['orderId'][:8]}\n\n🔑 {key}")

app = ApplicationBuilder().token("BOT_TOKEN").build()
app.add_handler(CommandHandler("buy", buy))
app.run_polling()