AltairSMM
USD

Display currency

Sign in

Perfect Panel API

API documentation

Public documentation for the Perfect Panel-compatible HTTP API for catalog and order management.

Sign in to create a key

Connection

API endpoint
POST / GET https://altairsmm.com/api/v2
Authentication
The key parameter in the request

Use POST for actions that change data. Read-only methods — services, status, balance, and refill_status — accept either POST or GET with key and action parameters.

Common parameters

FieldTypeRequiredDescriptionValues / format
keystringRequiredAPI key from your account.—
actionstringRequiredMethod name.services | add | status | balance | refill | refill_status | cancel

Quick start

Create a key, add it to the example, and send your first request.

  1. 01

    Create an API key

    Your key is available in account settings. Save it as soon as it is created.

  2. 02

    Copy the API endpoint

    Send every request to this endpoint with key and action parameters.

  3. 03

    Send a request

    Start with services to get the available services.

Request example

Replace YOUR_API_KEY with the API key you created.

curl -X POST "https://altairsmm.com/api/v2" \
  -d "key=YOUR_API_KEY" \
  -d "action=services"

Methods

For every method, send the common key and action parameters; action must equal the method name.

services

Get available services.

Parameters

No additional parameters are required.

Response

JSON
[
  {
    "service": 1002,
    "name": "Telegram Bot Starts — Verified",
    "type": "Default",
    "category": "Telegram",
    "rate": "0.99",
    "min": 100,
    "max": 100000,
    "refill": false,
    "cancel": false,
    "dripfeed": true
  }
]

Response fields

FieldTypeDescriptionValues / format
serviceintegerService export ID; send it as add.service.—
namestringService name.—
typestringService type. This is a response field and is not sent in requests.Default — the only value in the current API
categorystringPlatform or category name.—
ratestringUSD price per 1,000 units in decimal format.—
minintegerMinimum order quantity.—
maxintegerMaximum total order quantity.—
refillbooleanWhether refill is supported.—
cancelbooleanWhether order cancellation is supported.—
dripfeedbooleanWhether runs and interval can be sent when creating an order.—

add

Create an order using a service export ID.

Parameters

FieldTypeRequiredDescriptionValues / format
serviceintegerRequiredInteger service ID from the services response.—
linkstringRequiredPublic target URL.—
quantityintegerRequiredInteger quantity. For drip-feed, this is the quantity per run; total quantity is quantity × runs.—
runsintegerOptionalNumber of drip-feed runs. Send only together with interval and only when the service has dripfeed: true.2–100
intervalintegerOptionalPause between runs in minutes. The next run is created only after the previous one is completed and this pause has elapsed.1–43200 (minutes)

For drip-feed, the total quantity must be within max and every run must meet the service min.

Response

JSON
{
  "order": 10001
}

Response fields

FieldTypeDescriptionValues / format
orderintegerPublic created-order ID; use it in status, refill, and cancel.—

status

Check one or more order statuses.

Parameters

FieldTypeRequiredDescriptionValues / format
orderintegerOptionalInteger ID of one order. Do not send together with orders.—
ordersstringOptionalComma-separated order IDs. Returns a status or error for each ID.10001,10002

For requests with orders, the response is an object keyed by order ID; each value contains these fields or { error: string }.

Response

JSON
{
  "charge": "0.99",
  "start_count": "0",
  "status": "In progress",
  "remains": "500"
}

Response fields

FieldTypeDescriptionValues / format
chargestringFull order charge in USD in decimal format.—
start_countstringTarget count when fulfilment started; "0" when unknown.—
statusstringCurrent order status. This is a response field and is not sent in requests.Pending | In progress | Completed | Partial | Canceled
remainsstringQuantity remaining to fulfil.—

balance

Get the available account balance.

Parameters

No additional parameters are required.

Response

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

Response fields

FieldTypeDescriptionValues / format
balancestringAvailable balance in decimal format.—
currencystringBalance currency code.USD

refill

Request a refill for a supported order.

Parameters

FieldTypeRequiredDescriptionValues / format
orderintegerRequiredInteger order ID.—

Response

JSON
{
  "refill": 70001
}

Response fields

FieldTypeDescriptionValues / format
refillintegerPublic created-refill ID; use it in refill_status.—

refill_status

Check the status of a previously created refill.

Parameters

FieldTypeRequiredDescriptionValues / format
refillintegerRequiredInteger refill ID from the refill response.—

Response

JSON
{
  "status": "Completed"
}

Response fields

FieldTypeDescriptionValues / format
statusstringRefill status returned by the provider.Provider-dependent; commonly Pending | In progress | Completed

cancel

Cancel an order when the service supports cancellation.

Parameters

FieldTypeRequiredDescriptionValues / format
orderintegerRequiredInteger order ID.—

Response

JSON
{
  "cancel": 1
}

Response fields

FieldTypeDescriptionValues / format
cancelintegerConfirmation that the cancellation request was accepted.1

Errors

Check every response body: the Perfect Panel format returns business validation errors as a JSON object with an error field.

Authentication and parameters

JSON
{"error":"Incorrect API key"}
{"error":"Incorrect service ID"}
{"error":"Incorrect order ID"}

Rate limit

When the rate limit is exceeded, the API returns HTTP 429 and {"error":"Rate limit exceeded"}.

Bulk status

For an unknown ID inside orders, the error is returned only for that ID; the available statuses of the remaining orders stay in the response.