The order is queued and has not started yet.
SMMWave API reference
Use one endpoint to load services, place orders, check delivery, and cancel work that is still in progress.
https://smm.lat/api/v2
Your first request
Read the parameterscurl 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
Official links
Use the links below for announcements, order access, and account support.
Authentication
Every request needs your API key. Send it in the key field, the X-Api-Key header, or as a Bearer token.
Do not place it in browser code, screenshots, public repositories, or support messages.
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.
| Field | Type | Description |
|---|---|---|
key | string | Your API key |
action | string | The operation to run |
Business errors are returned as JSON with HTTP 200 for compatibility with panel adapters. Always inspect the response body for an error field.
List services
action=servicesReturns every active service available to the provider account. Numeric values use strings so they can be consumed safely by older panel software.
Parameters
| Field | Required | Description |
|---|---|---|
key | required | API key |
action | required | Set to services |
Service fields
serviceNumeric service IDratePrice per 1,000 unitsmin/maxAccepted quantity rangecancel1when cancellation is availablerefill0; public refill is not supported
Response
[
{
"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"
}
]Check balance
action=balanceReturns the provider balance with six decimal places and its configured currency.
Parameters
| Field | Required | Description |
|---|---|---|
key | required | API key |
action | required | Set to balance |
Response
{
"balance": "125.500000",
"currency": "USD"
}Add an order
action=addCreates a new order and returns a numeric order ID. Save this value: it is used for status checks and cancellation.
Parameters
| Field | Required | Description |
|---|---|---|
key | required | API key |
action | required | Set to add |
service | required | Service ID from the service list |
link | required | Public username, URL, or invite link |
quantity | required | Whole number within the service limits |
idempotency_key | optional | Prevents an accidental duplicate submission |
Request
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"{ "order": 891518433422477 }Order status
action=statusReturns the current delivery state for one order. The remaining quantity is calculated from the latest recorded progress.
Parameters
| Field | Required | Description |
|---|---|---|
key | required | API key |
action | required | Set to status |
order | required | Numeric order ID |
Response
{
"charge": "2.125000",
"start_count": "521",
"status": "In progress",
"remains": "250",
"currency": "USD"
}Multiple order status
action=statusChecks up to 100 orders in one request. Supply comma-separated IDs in orders. Each response entry is keyed by the requested order ID.
Parameters
| Field | Required | Description |
|---|---|---|
key | required | API key |
action | required | Set to status |
orders | required | Up to 100 comma-separated IDs |
Response
{
"891518433422477": {
"charge": "4.250000",
"start_count": "521",
"status": "Completed",
"remains": "0",
"currency": "USD"
},
"999999": {
"error": "Incorrect order ID"
}
}Cancel orders
action=cancelRequests cancellation for one or more pending or running orders. The response is always an array, including single-order requests.
Parameters
| Field | Required | Description |
|---|---|---|
key | required | API key |
action | required | Set to cancel |
order | one of | A single order ID |
orders | one of | Up to 100 comma-separated IDs |
Response
[
{
"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.
Delivery has started and progress is still being recorded.
The full requested quantity was delivered.
Some quantity was delivered, but the order ended before reaching its target.
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
{
"error": "Incorrect order ID"
}Integration notes
Import services first. Use the IDs and min/max limits returned by the API instead of hard-coding them.
Use POST in production. GET is supported for compatibility, but query strings may be stored in access logs.
Store the order ID. It is the stable reference for later status and cancellation requests.
Poll responsibly. A 10–30 second interval is sufficient for normal order-status checks.
Parse the body on every response. Business errors use HTTP 200 by design.