API reference

Sell digital goods from your own bot or website. You order over HTTP, we deliver the codes in the same response, and your wallet balance covers the cost.

Base URL

https://api.geminipro7.store

Every response is JSON and carries a success boolean. All prices are in USD.

Authentication

Send your key in the X-API-Key header on every request. Get one in the bot under Profile → API. Keys start with hd_.

X-API-Key: hd_your_key_here
Keep the key server-side. Anyone holding it can spend your balance. If it leaks, open Profile → API and regenerate — the old key stops working immediately.

A Bearer token in the Authorization header also works if that fits your HTTP client better.

Rate limits

LimitDefaultWhat counts
Requests60 per minuteEvery call, including reads
Orders500 per dayItems purchased, not requests

Going over the request limit returns 429; the counter clears at the start of the next minute. Need more? Ask in the bot and we'll raise it on your key.

Errors

Failures return a non-2xx status with a plain-language message. Nothing is charged when an order fails.

{
  "success": false,
  "error": "Insufficient balance. Required: $1.50, available: $0.73"
}
StatusMeaningWhat to do
401Key missing or invalidCheck the X-API-Key header.
403Key disabled or account blockedRegenerate the key, or contact support.
404Unknown service or orderRe-read /products — IDs change when a product is retired.
429Rate or daily limit hitBack off and retry.
400Bad input, low balance, or out of stockThe message names which one.

Balance

GET/me

Returns your wallet balance and the limits on your key. Cheap to call — use it as a health check.

{
  "success": true,
  "user": "your_username",
  "balance": 12.40,
  "currency": "USD",
  "rate_per_min": 60,
  "daily_limit": 500
}

Products

GET/products

Everything currently on sale, with live stock. Prices here are your API prices — one flat rate per item, no bulk tiers.

{
  "success": true,
  "services": [
    {
      "service_id": "gp_12",
      "name": "Gemini Pro 18 months #2",
      "price": 0.68,
      "stock": 488
    }
  ]
}
FieldTypeNotes
service_idstringPass this to /order.
pricenumberPer item, in USD.
stockinteger9999 means the supplier didn't report a count — treat it as available.
Cache this for a minute or two rather than calling it before every order. Stock moves, but not that fast.

Place order

POST/order

Buys and delivers in one call. The cost leaves your balance immediately.

Request

{
  "service_id": "gp_12",
  "quantity": 2
}
FieldTypeNotes
service_idstring, requiredFrom /products.
quantityinteger1 to 100. Defaults to 1.

Response

{
  "success": true,
  "order_id": "GP2184",
  "service_id": "gp_12",
  "quantity": 2,
  "total_cost": 1.36,
  "new_balance": 11.04,
  "products": [
    "GEMINI-18M-7F3A-91KD",
    "GEMINI-18M-2B8C-40XQ"
  ],
  "pending": 0
}
The codes are in products — not in order_id.
order_id (e.g. GP234) is a receipt number for looking the order up later. The thing your buyer pays for is every element of the products array.

Store the codes before you reply to your buyer — this is the only response that carries them all at once. If you lose them, GET /order/{order_id} returns them again at no cost.

Ordering many at once. If some items deliver and others don't, you're only charged for the ones that did. Check quantity in the response, not the one you sent.

Order status

GET/order/{order_id}

Re-read a single order. Useful when an order came back pending, or when you need to hand a buyer their code again. Free — re-reading never charges you.

GET /order/GP2184
{
  "success": true,
  "order_id": "GP2184",
  "status": "delivered",
  "total_cost": 0.68,
  "products": ["GEMINI-18M-7F3A-91KD"],
  "created_at": "2026-08-13 11:42:08"
}
StatusMeaning
deliveredDone. Codes are in products.
pendingSupplier hasn't released it yet. Poll this endpoint.
failedDidn't go through. You were refunded.

Order history

GET/orders

Your API orders, newest first. Paginated.

QueryDefaultNotes
page1
limit50Max 100.
{
  "success": true,
  "page": 1,
  "limit": 50,
  "total_orders": 124,
  "total_pages": 3,
  "orders": [
    {
      "order_id": "GP2184",
      "name": "Gemini Pro 18 months #2",
      "total_cost": 0.68,
      "status": "delivered",
      "products": ["GEMINI-18M-7F3A-91KD"],
      "created_at": "2026-08-13 11:42:08"
    }
  ]
}
Only orders placed through the API appear here. Purchases you make inside the bot stay in the bot.

Pending orders

Most orders come back delivered with the codes attached. Occasionally a supplier queues one instead — then products is short and pending is greater than zero.

When that happens, poll /order/{order_id} every 30 seconds or so. It usually resolves within a couple of minutes. If it turns failed, the money is already back in your balance — nothing to reclaim.

Don't re-order on a pending result. You'd pay twice for the same item. Poll instead.

Code examples

Placing an order and reading the codes back.

curl -X POST https://api.geminipro7.store/order \
  -H "X-API-Key: hd_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"service_id":"gp_12","quantity":1}'
<?php
$ch = curl_init('https://api.geminipro7.store/order');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'X-API-Key: hd_your_key_here',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'service_id' => 'gp_12',
        'quantity'   => 1,
    ]),
]);

$res = json_decode(curl_exec($ch), true);
curl_close($ch);

if (empty($res['success'])) {
    throw new Exception($res['error'] ?? 'Order failed');
}

foreach ($res['products'] as $code) {
    // hand $code to your buyer
}
import requests

r = requests.post(
    "https://api.geminipro7.store/order",
    headers={"X-API-Key": "hd_your_key_here"},
    json={"service_id": "gp_12", "quantity": 1},
    timeout=30,
)
data = r.json()

if not data.get("success"):
    raise RuntimeError(data.get("error", "Order failed"))

for code in data["products"]:
    print(code)  # hand it to your buyer
const res = await fetch("https://api.geminipro7.store/order", {
  method: "POST",
  headers: {
    "X-API-Key": "hd_your_key_here",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ service_id: "gp_12", quantity: 1 }),
});

const data = await res.json();
if (!data.success) throw new Error(data.error);

for (const code of data.products) {
  // hand code to your buyer
}