API docs
Your API key
Sign in to create your API key, see the calls your script made and choose the API currency.
Quick start
Standard SMM API v2 — scripts written for other panels usually work here after changing the address and key.
- Send a request
POSThttps://seedingthucong.com/api/v2The body can be a form (application/x-www-form-urlencoded) or JSON. Use POST with key and action in the body. GET also works, but GET puts your key into server logs. A key in the query string of a POST is treated as a wrong key.
- Read the result
HTTP 200 with error and code fields for every API error; only transport errors keep their HTTP code: 404, 405, 413 and any other 4xx (code bad_request). No error field means success. Amounts and quantities come back as strings (e.g. "11900") — convert them before calculating.
- Currency and limits
Amounts come back in VND unless the key is switched to USD after signing in. The coin/USD button at the top of the page only changes how the website shows money; it never affects the API. At most 300 requests a minute per API key.
- Retry without duplicate orders
Every add call is a new order and a new charge. Send a unique ref_id with every order. If add times out or the network fails, wait longer than the maximum processing time of 60 seconds, then call status with that ref_id — only send add again if no order exists. Never retry after receiving {"order": …} or a business error.
More connection rules
- status: at most 100 IDs per call, once a minute is enough. Statuses update every 2–30 minutes. Only ask for orders that are not final yet.
- orders=",,," (only commas) returns [] for cancel and {} for status.
- cancel answers per order; cancel can also answer Internal error for one order (safe to call again).
- updates: without since_id, newest first. With since_id, items come oldest first, up to 100; an item shows up about 10 seconds after it is created.
- Showing a hidden item again, or changing your own price or tier, is not sent again to a script that already passed that item.
- JSON without a Content-Type header: at most 64 KB, nesting depth 8.
Actions
Pick an action to see its parameters, sample code and response.
action=servicesServer list
All servers you can use, with your own price per 1,000 units. Call once at start-up and keep it; no need before every order.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always services | services |
Shows sk_live_… — sign in and create your API key to get your own.
service- Server ID used when ordering. It never changes and is never reused.
name- Server name, in your server name language
category- Group as "Platform - Group"
type- "Default" = link + quantity. "Custom Comments" / "Mentions Custom List" = send the list in comments (or usernames), one item per line; the quantity is the number of non-empty lines
rate- Your price per 1,000 units in your API currency. Order amount = rate × quantity ÷ 1000.
min · max- Smallest / largest quantity per order
cancel- true = can be cancelled with the cancel action
refund- true = the part not delivered is refunded; false = a "no cancel, no refund" server: once started, the order ends as Completed with no refund
refill- true = this server has a warranty: send refill for its Completed / Partial orders within the warranty period
dripfeed- Always false — not supported
country- 2-letter country code of the audience (vn, th, us…), global = worldwide
average_time- Median minutes from placing an order to its start, over the last 24 hours; null until enough orders
speed_per_day- Median units delivered per day, over the last 24 hours; null until enough orders
promise_start_minutes · promise_per_day- The promise of this server: starts within this many minutes / delivers about this many units a day; null = no promise
promise_per_day_max · promise_speed_unit- The promised speed as a range: promise_per_day is the lower bound, promise_per_day_max the upper bound (both per day; null = no range). promise_speed_unit is how the promise was set — hour or day; per-hour promises are still given per day here (× 24)
refill_days · refill_unit- The warranty as numbers: refill_days is the warranty in days (whole number, null = no warranty — refill above is refill_days > 0); refill_unit is how it was set — day, week or month (a month counts as 30 days)
status- Speed status, refreshed every few minutes: fast (at or above the promise), normal, slow, very_slow, maintenance, paused (not taking orders right now)
status_note- A note from our team about this server, in your server name language; null when there is none
action=addPlace order
Creates a new order and charges your balance at once. Every call is a new order — the server does not block duplicates, so always send a ref_id.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always add | add |
service | Yes | integer | Server ID from services | 1021 |
link | Yes | string (URL) | The link to grow, matching the server platform | https://www.facebook.com/abc |
quantity | Yes | integer | Quantity, within the server min–max. Not needed for Custom Comments servers — ignored there | 1000 |
comments | No | string | Custom Comments servers only: one comment per line. Quantity = number of non-empty lines (blank lines are not counted, repeated lines are kept and charged). usernames is accepted too | Nice!\nLove it |
ref_id | No | string ≤ 64 characters | Your own order code — send it to find the order again after a network error | order-2291 |
Shows sk_live_… — sign in and create your API key to get your own.
order- Our order ID — keep it to ask status or cancel
action=statusOrder status
Send exactly one of: order (one order), orders (several) or ref_id (find by your code). Only ask for orders that are not final yet.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always status | status |
order | One of | integer | One order ID → one object | 100245 |
orders | One of | string | Up to 100 IDs separated by commas → an object keyed by order ID | 100245,100246 |
ref_id | One of | string | The ref_id you sent → your orders with it (up to 100 newest; none → {}) | order-2291 |
Shows sk_live_… — sign in and create your API key to get your own.
(key)- With orders / ref_id: the key is the order ID as a string. A wrong ID gets its own error and does not break the call.
charge- Amount charged, in your API currency
start_count- Starting count when the order started; 0 until known
status- One of the 5 statuses in the table below
remains- Quantity not delivered yet
currency- Currency of charge
ref_id- The ref_id you sent; null if none
action=cancelCancel orders
Requests cancellation of one or more orders. The answer is per order; one failing does not affect the others.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always cancel | cancel |
order | One of | integer | One order ID | 100245 |
orders | One of | string | Up to 100 IDs separated by commas | 100245,100246 |
Shows sk_live_… — sign in and create your API key to get your own.
order- Order ID
cancel- 1 = request received. The part not delivered is refunded once the order stops — follow it with status (Canceled or Partial).
cancel.error- This order cannot be cancelled — see the error table
action=refillRequest a refill
Asks for a refill (warranty) of a Completed or Partial order whose server shows refill: true, within the warranty period counted from when the order finished. We record the request and our team handles it — nothing is charged or refunded; follow it with refill_status. One open request per order at a time.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always refill | refill |
order | One of | integer | One order ID → one object | 100245 |
orders | One of | string | Up to 100 IDs separated by commas → a list, one item per order | 100245,100246 |
Shows sk_live_… — sign in and create your API key to get your own.
refill- ID of the warranty request — keep it to ask refill_status
refill.error- This order cannot be refilled now — see the error table
action=refill_statusRefill status
Status of your warranty requests. Only ask for requests that are not final yet.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always refill_status | refill_status |
refill | One of | integer | One refill ID → one object | 731 |
refills | One of | string | Up to 100 refill IDs separated by commas → a list, one item per request | 731,732 |
Shows sk_live_… — sign in and create your API key to get your own.
status- One of the four values below
Pending- Received, not handled yet
In progress- Our team is handling it
Completed- Refilled — final
Rejected- Not refilled — final; the note usually says why
note- A note from our team about this request, in the language it was written; left out when there is none
status.error- No such request, or it is not yours
action=balanceBalance
Your current balance in your API currency.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always balance | balance |
Shows sk_live_… — sign in and create your API key to get your own.
balance- Current balance
currency- Your API currency
action=updatesServer updates
Specific to this panel (not in the standard SMM API v2): changes to servers you can use — new server, price change, maintenance, discontinued, min/max change, announcements.
| Name | Required | Value type | Meaning | Example |
|---|---|---|---|---|
key | Yes | string | Your API key | sk_live_… |
action | Yes | string | Always updates | updates |
since_id | No | integer | Only items with a larger id — send the largest id you received last time | 5119 |
Shows sk_live_… — sign in and create your API key to get your own.
id- Item ID, increasing — store the largest and send it as since_id
type- One of: new · price_up · price_down · maintenance · resumed · discontinued · limits_changed · announcement
service- Related server ID; null for announcements
title · body- Title and text, in your server name language
old · new- Price items: price per 1,000 units before → after, in your API currency, always as strings. limits_changed: {"min", "max"}, always as strings; other types: null.
created_at- Time, ISO 8601 Vietnam time (+07:00)
Order statuses
Values of the status field. The first two are in progress; the last three are final — they never change, stop asking about that order.
In progress | Received and running — remains is what is still left. | keep asking |
Completed | Delivered in full, remains = 0. | final |
Partial | Under-delivered; the part not delivered (remains) has been refunded to your balance. | final |
Canceled | Cancelled; the part not delivered has been refunded (cancelled before starting = full refund). | final |
Error codes and what to do
code — a short machine code that never changes; have your script check this field. error — the English text of the standard SMM API, kept word for word so scripts that compare it keep working.
code | error | Meaning | What to do |
|---|---|---|---|
invalid_key | Invalid API key | The key is wrong or was replaced by a new one. | Copy the key again on this page. More than 20 wrong keys a minute from one IP are refused for up to a minute. |
account_disabled | Account disabled | Your account is locked. | Contact support; do not retry. |
api_disabled | API disabled | API access is turned off for your account. | Contact support to turn it on. |
email_not_verified | Email not verified | Your email address is not verified yet. | Verify your email on the website, then call again. |
rate_limited | Too many requests | More than 300 requests a minute on your key, or too many wrong keys from your IP. | Wait a few seconds; ask status for many IDs in one call. |
maintenance | Maintenance | The whole system is under maintenance; every action answers this. | Retry in a few minutes. |
action_not_supported | Action not supported | This action does not exist (e.g. a drip-feed or subscription action). | Use only the actions on this page. |
drip_feed_not_supported | Drip-feed not supported | runs / interval were sent — drip-feed is not supported. | Remove runs and interval. |
order_not_found | Incorrect order ID | No such order, or it is not yours. | Check the order ID. |
incorrect_ref_id | Incorrect ref_id | ref_id is not text or is longer than 64 characters. | Send text of at most 64 characters. |
incorrect_since_id | Incorrect since_id | since_id is not a whole number of 0 or more. | Send the largest id you received, or leave it out. |
internal_error | Internal error | An unexpected error on our side. | Safe to retry the same call after a moment; for add, wait longer than the maximum processing time of 60 seconds and check status by ref_id before sending it again. |
method_not_allowed | Method not allowed | Only GET and POST are accepted; this answer comes with HTTP 405. | Use POST. |
request_too_large | Request too large | The request body is too large; this answer comes with HTTP 413. | Send fewer IDs or a shorter link. |
not_found | Not found | Wrong address under /api/v2; this answer comes with HTTP 404. | Call exactly https://seedingthucong.com/api/v2. |
timed_out_not_placed | Timed out, order not placed | add could not finish in time (at most 60 seconds); no order was placed and nothing was charged — this is our side, not your request. | Not a business error: send add again at once — the same ref_id is fine. |
refill_not_available | Refill is not available for this service | The server of this order has no warranty (services shows refill: false). | Do not retry — only servers with refill: true take warranty requests. |
order_not_completed | Order is not completed | The order is still running or was cancelled — only Completed or Partial orders have a warranty. | Wait until the order is Completed or Partial; a cancelled order cannot be refilled. |
refill_expired | Refill period has expired | The warranty period of this server, counted from when the order finished, is over. | Do not retry. |
refill_in_progress | A refill request is already in progress for this order | This order already has a warranty request that is not finished. | Follow it with refill_status; send a new one once it is Completed or Rejected. |
refill_not_found | Incorrect refill ID | No such warranty request, or it is not yours. | Use the refill ID that refill returned. |
cannot_cancel | Order can't be canceled | The server does not allow cancelling, or the order has finished. | Do not retry. |
cancel_already_requested | Cancel already requested | A cancel request was already sent. | Wait and follow it with status. |
missing_parameter | Missing parameter: X | Parameter X is missing. | Add X to the request body. |
too_many_ids | Too many order IDs (max 100) | More than 100 order IDs in one call. | Split into several calls of at most 100 IDs. |
too_many_ids | Too many refill IDs (max 100) | More than 100 refill IDs in one call. | Split into several calls of at most 100 IDs. |
bad_request | Internal error | The request was refused at the HTTP level (for example HTTP 400); this answer keeps that HTTP code. | Check the request method, headers and body against this page; do not resend it unchanged. |
orders_paused | Maintenance | New orders are paused; only add answers this — status, cancel, refill and balance keep working. | Keep following your orders with status; send add again later. |
incorrect_service | Incorrect service ID | No such server, or you cannot use it. | Call services to get the IDs again. |
service_not_active | Service not active | The server is no longer sold. | Choose another server (see the updates action). |
service_maintenance | Service under maintenance | The server is under maintenance. | Retry later or choose another server. |
service_unavailable | Service temporarily unavailable | The server is temporarily not taking orders. | Retry in a few minutes. |
incorrect_quantity | Incorrect quantity | quantity is not a positive whole number. | Send a whole number, e.g. 1000. |
quantity_below_min | Quantity less than minimal X | Quantity is below the minimum. | Raise the quantity to at least X. |
quantity_above_max | Quantity more than maximal X | Quantity is above the maximum. | Lower the quantity or split the order. |
incorrect_link | Incorrect link | The link is malformed or not for this server platform. | Check the link and the platform. |
not_enough_funds | Not enough funds on balance | Not enough balance. | Top up, then order again. |
below_min_charge | Order amount is below minimum | The order amount is below the minimum. | Raise the quantity. |
duplicate_link | You have active order with this link. Please wait until order being completed. | This server does not allow two running orders for the same link. | Wait for the earlier order to finish. |
incorrect_content | Incorrect comments | A “Custom Comments” server got no usable lines in comments / usernames (empty, only blank lines, not text). | Send the list as text, one item per line. |
incorrect_content | Incorrect usernames | A “Custom Comments” server got no usable lines in comments / usernames (empty, only blank lines, not text). | Send the list as text, one item per line. |
content_too_large | Too many comments | comments / usernames is too large to process (over 900 KB once encoded — Vietnamese and emoji count about 3 times). | Split the list into several orders. |
content_too_large | Too many usernames | comments / usernames is too large to process (over 900 KB once encoded — Vietnamese and emoji count about 3 times). | Split the list into several orders. |
content_line_too_long | Line N is longer than X characters | Line N of comments / usernames is longer than this server allows (X characters). | Shorten that line, then send again. |