← Back to home

API documentation

Order programmatically with the same account and balance you use in the Telegram bot.

Getting started

The API follows the standard SMM panel API v2 format, so most panels, scripts and resellers' software work with it as is.

Endpointhttps://gniorder.com/api
MethodPOST (GET also works, but POST is recommended)
FormatJSON response, application/x-www-form-urlencoded request
CurrencyAll amounts are in USD

Get your API key

  1. Open the Telegram bot (@GniOrderbot) and request access. Your account must be approved by an admin.
  2. Open 🔑 API from the bot menu to see your key. You can generate a new key at any time; the old one stops working immediately.
Keep your key secret. Anyone who has it can place orders using your balance.

Common parameters

ParameterDescription
keyYour API key (required in every request)
actionOne of services, add, status, balance

POSTservices

Returns the list of active services you can order. Use the service value as the service ID when ordering.

Parameters

ParameterDescription
keyYour API key
actionservices

Example request

cURL
curl -X POST https://gniorder.com/api \
  -d key='YOUR_API_KEY' \
  -d action='services'
PHP
<?php
$ch = curl_init('https://gniorder.com/api');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => http_build_query([
        'key' => 'YOUR_API_KEY',
        'action' => 'services',
    ]),
]);
$response = json_decode(curl_exec($ch), true);
print_r($response);
Python
import requests

response = requests.post("https://gniorder.com/api", data={
    "key": "YOUR_API_KEY",
    "action": "services",
})
print(response.json())
Node.js
const params = new URLSearchParams({
  key: 'YOUR_API_KEY',
  action: 'services',
});

const res = await fetch('https://gniorder.com/api', { method: 'POST', body: params });
console.log(await res.json());

Example response

JSON
[
  {
    "service": "12",
    "name": "Telegram Channel Members",
    "type": "Default",
    "category": "Telegram",
    "rate": "1.5",
    "min": "100",
    "max": "50000",
    "desc": ""
  },
  {
    "service": "13",
    "name": "Instagram Custom Comments",
    "type": "Custom Comments",
    "category": "Instagram",
    "rate": "4",
    "min": "5",
    "max": "500",
    "desc": ""
  }
]

Response fields

FieldDescription
serviceService ID to use in add
name, category, descService title, category and description
typeDefault (link + quantity) or Custom Comments (link + comments)
ratePrice in USD per 1000 units
min, maxAllowed quantity range per order

POSTadd

Places a new order. The cost is deducted from your balance immediately. If the order cannot be placed, you are not charged.

Parameters

ParameterDescription
keyYour API key
actionadd
serviceService ID from services
linkTarget link (e.g. https://t.me/example) or @username
quantityQuantity, between the service min and max
commentsOnly for Custom Comments services: one comment per line. quantity is not needed; it equals the number of lines.

Price = rate × quantity / 1000.

Example request

cURL
curl -X POST https://gniorder.com/api \
  -d key='YOUR_API_KEY' \
  -d action='add' \
  -d service='12' \
  -d link='https://t.me/example' \
  -d quantity='1000'
PHP
<?php
$ch = curl_init('https://gniorder.com/api');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => http_build_query([
        'key' => 'YOUR_API_KEY',
        'action' => 'add',
        'service' => '12',
        'link' => 'https://t.me/example',
        'quantity' => '1000',
    ]),
]);
$response = json_decode(curl_exec($ch), true);
print_r($response);
Python
import requests

response = requests.post("https://gniorder.com/api", data={
    "key": "YOUR_API_KEY",
    "action": "add",
    "service": "12",
    "link": "https://t.me/example",
    "quantity": "1000",
})
print(response.json())
Node.js
const params = new URLSearchParams({
  key: 'YOUR_API_KEY',
  action: 'add',
  service: '12',
  link: 'https://t.me/example',
  quantity: '1000',
});

const res = await fetch('https://gniorder.com/api', { method: 'POST', body: params });
console.log(await res.json());

Example request: custom comments

cURL
curl -X POST https://gniorder.com/api \
  -d key=YOUR_API_KEY -d action=add -d service=13 \
  -d link='https://instagram.com/p/xyz' \
  --data-urlencode $'comments=Great post!\nLove it\nAmazing work'

Example response

JSON
{
  "order": 10025
}

order is your tracking code. Use it with the status action.

Example error response

JSON
{
  "error": "Insufficient balance."
}

POSTstatus

Returns the status of one order, or of up to 100 orders in a single request.

Parameters

ParameterDescription
keyYour API key
actionstatus
orderOne tracking code (single order)
ordersComma separated tracking codes, e.g. 10025,10026 (use instead of order)

Single order

cURL
curl -X POST https://gniorder.com/api \
  -d key='YOUR_API_KEY' \
  -d action='status' \
  -d order='10025'
PHP
<?php
$ch = curl_init('https://gniorder.com/api');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => http_build_query([
        'key' => 'YOUR_API_KEY',
        'action' => 'status',
        'order' => '10025',
    ]),
]);
$response = json_decode(curl_exec($ch), true);
print_r($response);
Python
import requests

response = requests.post("https://gniorder.com/api", data={
    "key": "YOUR_API_KEY",
    "action": "status",
    "order": "10025",
})
print(response.json())
Node.js
const params = new URLSearchParams({
  key: 'YOUR_API_KEY',
  action: 'status',
  order: '10025',
});

const res = await fetch('https://gniorder.com/api', { method: 'POST', body: params });
console.log(await res.json());
JSON response
{
  "charge": "1.5",
  "start_count": "2310",
  "status": "In progress",
  "remains": "400",
  "currency": "USD"
}

Multiple orders

cURL
curl -X POST https://gniorder.com/api \
  -d key='YOUR_API_KEY' \
  -d action='status' \
  -d orders='10025,10026,99999'
PHP
<?php
$ch = curl_init('https://gniorder.com/api');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => http_build_query([
        'key' => 'YOUR_API_KEY',
        'action' => 'status',
        'orders' => '10025,10026,99999',
    ]),
]);
$response = json_decode(curl_exec($ch), true);
print_r($response);
Python
import requests

response = requests.post("https://gniorder.com/api", data={
    "key": "YOUR_API_KEY",
    "action": "status",
    "orders": "10025,10026,99999",
})
print(response.json())
Node.js
const params = new URLSearchParams({
  key: 'YOUR_API_KEY',
  action: 'status',
  orders: '10025,10026,99999',
});

const res = await fetch('https://gniorder.com/api', { method: 'POST', body: params });
console.log(await res.json());
JSON response
{
  "10025": {
    "charge": "1.5",
    "start_count": "2310",
    "status": "In progress",
    "remains": "400",
    "currency": "USD"
  },
  "10026": {
    "charge": "0.8",
    "start_count": "0",
    "status": "Completed",
    "remains": "0",
    "currency": "USD"
  },
  "99999": {
    "error": "Incorrect order ID"
  }
}

Order statuses

StatusMeaning
PendingReceived, waiting to start
ProcessingBeing prepared
In progressRunning; remains shows what is left
CompletedFinished
PartialPartly delivered. The undelivered part is refunded to your balance automatically
CanceledCanceled. The full cost is refunded to your balance automatically

POSTbalance

Returns your current balance.

Parameters

ParameterDescription
keyYour API key
actionbalance

Example request

cURL
curl -X POST https://gniorder.com/api \
  -d key='YOUR_API_KEY' \
  -d action='balance'
PHP
<?php
$ch = curl_init('https://gniorder.com/api');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => http_build_query([
        'key' => 'YOUR_API_KEY',
        'action' => 'balance',
    ]),
]);
$response = json_decode(curl_exec($ch), true);
print_r($response);
Python
import requests

response = requests.post("https://gniorder.com/api", data={
    "key": "YOUR_API_KEY",
    "action": "balance",
})
print(response.json())
Node.js
const params = new URLSearchParams({
  key: 'YOUR_API_KEY',
  action: 'balance',
});

const res = await fetch('https://gniorder.com/api', { method: 'POST', body: params });
console.log(await res.json());

Example response

JSON
{
  "balance": "12.5",
  "currency": "USD"
}

Add funds from the Telegram bot (💰 Add funds).

Errors

On failure the response is a JSON object with an error field. Always check for it before reading other fields.

JSON
{
  "error": "Invalid API key"
}
Error messageCause
Incorrect requestMissing or invalid key, action or required parameters
Invalid API keyWrong key, or the account is not approved or is blocked
Service is offlineOrdering is temporarily disabled
Incorrect service IDThe service does not exist
Incorrect quantityQuantity is not a whole number
Quantity must be between X and Y.Out of the service's min/max range
Insufficient balance.Balance is lower than the order cost
This service is not available.The service is currently disabled
Incorrect order IDOrder not found on your account

Notes