Wave SMM Panel Documentation
Open Telegram bot

SMMWave API reference

Use one endpoint to load services, place orders, check delivery, and cancel work that is still in progress.

Base URL https://smm.lat/api/v2

Your first request

Read the parameters
cURL example
curl https://smm.lat/api/v2 \
  -X POST \
  -d "key=YOUR_API_KEY" \
  -d "action=services"

Examples only. No requests are sent from this page.

Transport
HTTPS
Request
POST preferred
Response format
JSON

Authentication

Every request needs your API key. Send it in the key field, the X-Api-Key header, or as a Bearer token.

Keep the key on your server.

Do not place it in browser code, screenshots, public repositories, or support messages.

cURL
curl https://your-domain.example/api/v2 \
  --request POST \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "key=YOUR_API_KEY" \
  --data-urlencode "action=balance"

Request format

Send requests to the same endpoint and select an operation with the action parameter. Form-encoded POST is recommended because it works across older PHP panels as well as modern clients. JSON bodies and GET query parameters are accepted too.

Request format parameters
FieldTypeDescription
keystringYour API key
actionstringThe operation to run
HTTP status behavior

Business errors are returned as JSON with HTTP 200 for compatibility with panel adapters. Always inspect the response body for an error field.

POST

List services

action=services

Returns every active service available to the provider account. Numeric values use strings so they can be consumed safely by older panel software.

Parameters

List services parameters
FieldRequiredDescription
keyrequiredAPI key
actionrequiredSet to services

Service fields

  • serviceNumeric service ID
  • ratePrice per 1,000 units
  • min / maxAccepted quantity range
  • cancel1 when cancellation is available
  • refill0; public refill is not supported

Response

200 JSON
[
  {
    "service": "1000",
    "name": "Telegram Channel Members",
    "type": "Default",
    "category": "Telegram",
    "rate": "4.250000",
    "min": "10",
    "max": "10000",
    "refill": "0",
    "cancel": "1",
    "dripfeed": "0",
    "desc": "Channel members"
  }
]
POST

Check balance

action=balance

Returns the provider balance with six decimal places and its configured currency.

Parameters

Check balance parameters
FieldRequiredDescription
keyrequiredAPI key
actionrequiredSet to balance

Response

200 JSON
{
  "balance": "125.500000",
  "currency": "USD"
}
POST

Add an order

action=add

Creates a new order and returns a numeric order ID. Save this value: it is used for status checks and cancellation.

Parameters

Add an order parameters
FieldRequiredDescription
keyrequiredAPI key
actionrequiredSet to add
servicerequiredService ID from the service list
linkrequiredPublic username, URL, or invite link
quantityrequiredWhole number within the service limits
idempotency_keyoptionalPrevents an accidental duplicate submission

Request

cURL
curl https://your-domain.example/api/v2 \
  -X POST \
  -d "key=YOUR_API_KEY" \
  -d "action=add" \
  -d "service=1000" \
  --data-urlencode "link=https://t.me/example" \
  -d "quantity=500"
Response{ "order": 891518433422477 }
POST

Order status

action=status

Returns the current delivery state for one order. The remaining quantity is calculated from the latest recorded progress.

Parameters

Order status parameters
FieldRequiredDescription
keyrequiredAPI key
actionrequiredSet to status
orderrequiredNumeric order ID

Response

200 JSON
{
  "charge": "2.125000",
  "start_count": "521",
  "status": "In progress",
  "remains": "250",
  "currency": "USD"
}
POST

Multiple order status

action=status

Checks up to 100 orders in one request. Supply comma-separated IDs in orders. Each response entry is keyed by the requested order ID.

Parameters

Multiple order status parameters
FieldRequiredDescription
keyrequiredAPI key
actionrequiredSet to status
ordersrequiredUp to 100 comma-separated IDs

Response

200 JSON
{
  "891518433422477": {
    "charge": "4.250000",
    "start_count": "521",
    "status": "Completed",
    "remains": "0",
    "currency": "USD"
  },
  "999999": {
    "error": "Incorrect order ID"
  }
}
POST

Cancel orders

action=cancel

Requests cancellation for one or more pending or running orders. The response is always an array, including single-order requests.

Parameters

Cancel orders parameters
FieldRequiredDescription
keyrequiredAPI key
actionrequiredSet to cancel
orderone ofA single order ID
ordersone ofUp to 100 comma-separated IDs

Response

200 JSON
[
  {
    "order": "891518433422477",
    "cancel": 1
  },
  {
    "order": "260731849605218",
    "cancel": {
      "error": "Order cannot be canceled"
    }
  }
]

Status values

Terminal states are based on the amount actually delivered. A completed quantity takes precedence over an internal processing error.

Pending

The order is queued and has not started yet.

In progress

Delivery has started and progress is still being recorded.

Completed

The full requested quantity was delivered.

Partial

Some quantity was delivered, but the order ended before reaching its target.

Canceled

No quantity was delivered, or a pending/running order was canceled.

Errors

Errors use a short JSON object. They deliberately keep HTTP 200 for compatibility, so treat the presence of error as a failed operation.

Invalid API keyThe supplied key is missing or incorrect.
Invalid actionThe requested action is not available.
Incorrect service IDThe service does not exist or is inactive.
Incorrect linkThe order link is missing.
Incorrect quantityThe quantity is invalid or outside service limits.
Incorrect order IDThe order is missing or cannot be found.
Refill is not supportedThe public refill action is not enabled.

Error response

200 JSON
{
  "error": "Incorrect order ID"
}

Integration notes

  1. Import services first. Use the IDs and min/max limits returned by the API instead of hard-coding them.

  2. Use POST in production. GET is supported for compatibility, but query strings may be stored in access logs.

  3. Store the order ID. It is the stable reference for later status and cancellation requests.

  4. Poll responsibly. A 10–30 second interval is sufficient for normal order-status checks.

  5. Parse the body on every response. Business errors use HTTP 200 by design.

Copied to clipboard