Telegram growth, delivered at provider speed.
Post views, bot starts and more Telegram services through one API key. A drop-in replacement for any Perfect Panel provider — same endpoints, same fields, faster answers.
Our Telegram services, one price list.
Panels import our catalogue once and can sell everything in it. The rates below come straight from the live catalogue.
| ID | Service | Rate per 1K | Min – Max | Refill | Cancel | Drip-feed |
|---|
Three steps, then it runs itself.
Create your key
Open the bot and press Start — your API key arrives right away. No forms.
# Perfect Panel → Providers → Add API URL https://tgtorch.com/api/v2 API key •••••••••••••••• # then: Import services
Point your panel at us
Same Perfect Panel fields you already know. Import the catalogue once.
Watch orders complete
Status flows back to your panel. Partial and Canceled refund the remainder automatically.
Same endpoints, same fields, faster answers.
# place an order curl -X POST https://tgtorch.com/api/v2 \ -d "key=YOUR_KEY&action=add&service=1&link=https://t.me/yourchannel/123&quantity=1000" { "order": 9000123 } # poll it curl -X POST https://tgtorch.com/api/v2 -d "key=YOUR_KEY&action=status&order=9000123" { "charge": "0.00220", "start_count": "5210", "status": "In progress", "remains": "400", "currency": "USD" }
// place an order $r = file_get_contents('https://tgtorch.com/api/v2', false, stream_context_create(['http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => http_build_query([ 'key' => 'YOUR_KEY', 'action' => 'add', 'service' => 1, 'link' => 'https://t.me/yourchannel/123', 'quantity' => 1000, ]), ]])); $order = json_decode($r, true)['order']; // 9000123
// place an order const r = await fetch('https://tgtorch.com/api/v2', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ key: 'YOUR_KEY', action: 'add', service: '1', link: 'https://t.me/yourchannel/123', quantity: '1000', }), }); const { order } = await r.json(); // 9000123
API v2 reference
Every call is a POST (application/x-www-form-urlencoded; JSON bodies and GET query strings are accepted too) to https://tgtorch.com/api/v2, with key and action. Responses are JSON. Errors come back as HTTP 200 with an error field so panels display them verbatim. Standard Perfect Panel API v2 — add us as a provider with the URL above and your key.
action=servicesService list
Returns every active service with its rate and limits — the same rows your panel imports. A key is optional: with your key the rates shown are exactly the rates you are charged; without one you get the public catalogue.
| service | string | service ID — pass it back as service in add |
| name, category | string | display name and category |
| type | string | service type in Perfect Panel / JAP spelling: Default, Package, Custom Comments, Poll, Mentions … — decides which add parameters apply (see service types) |
| rate | string | USD per 1,000 units, 4–6 decimals |
| min, max | string | quantity limits per order |
| refill, cancel, dripfeed | boolean | whether refill, cancel and runs/interval are available for this service |
| brand, desc | string | extra, informational — safe to ignore |
requestcurl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=services"response[{"service":1,"name":"Telegram Post Views ⚡ Fast","type":"Default",
"category":"Telegram","brand":"Telegram","rate":"0.0022","min":"100","max":"1000000",
"refill":false,"cancel":false,"dripfeed":false,"desc":"..."}]action=addPlace an order
Charges the balance immediately and returns the order ID. Dripfeed splits delivery into runs spaced interval minutes apart, each run delivering quantity units. Which extra fields apply depends on the service type — see service types.
| key | required | your API key |
| service | required | service ID from the list |
| link | required | full Telegram URL — a post https://t.me/yourchannel/123 for views, reactions, shares, comments and votes; a channel https://t.me/yourchannel for members; also t.me/+invite, t.me/c/…/…, t.me/boost/…, t.me/…/s/…, t.me/yourbot?start=… |
| quantity | required | between the service's min and max. Not needed for Custom Comments (the number of lines is the quantity) or Package (fixed package size) |
| runs, interval | optional | drip-feed, only where dripfeed is true: runs 2–1000, interval 1–43200 minutes. runs=0&interval=0 (or runs=1) means a normal order, not an error |
| comments | per type | Custom Comments: one comment per line (\n or \r\n); empty lines are dropped, quantity = number of lines |
| answer_number | per type | Poll: the option to vote for, together with quantity |
| groups | per type | Invites from Groups: source groups, one per line, together with quantity |
| usernames, hashtag, hashtags, username, media, keywords | per type | accepted for the matching Mentions types. One list field is stored per order (the first of these present); types that need two fields at once are not offered |
request · Defaultcurl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=add&service=1&link=https://t.me/yourchannel/123&quantity=1000"request · drip-feedcurl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=add&service=1&link=https://t.me/yourchannel/123&quantity=500&runs=10&interval=30"request · Custom Commentscurl -X POST https://tgtorch.com/api/v2 \
--data-urlencode "key=YOUR_KEY" --data-urlencode "action=add" --data-urlencode "service=7" \
--data-urlencode "link=https://t.me/yourchannel/123" \
--data-urlencode $'comments=Great post!\nThanks for sharing\nLove this'response{"order": 9000123}Service types
The type field of each service uses the Perfect Panel / JAP names, so a panel that imports our list knows which order form to show. Every service in the catalogue is a Telegram service; types we do not offer (Subscriptions, Web Traffic, SEO) never appear.
| Default | link, quantity (+ runs, interval where dripfeed is true) — most services, such as post views and bot starts | |
| Package | link; quantity optional — without it the order is placed and charged for the service's min, the package size (we set min = max on Package services) | |
| Custom Comments | link, comments (one per line; quantity = lines) | |
| Poll | link, quantity, answer_number | |
| Invites from Groups | link, quantity, groups (one per line) | |
| Mentions Custom List | link, usernames (one per line; quantity = lines) | |
| Mentions Hashtag | link, quantity, hashtag |
action=statusOrder status
One order with order=, or up to 100 with orders= (comma-separated). The multi form returns an object keyed by order ID; an unknown ID gets its own error entry and never fails the whole call. remains counts down as delivery progresses; charge is the final amount after any refund.
requestcurl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=status&order=9000123"
curl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=status&orders=9000123,9000124,9000125"response · single{"charge":"0.00300","start_count":"5210","status":"In progress",
"remains":"400","currency":"USD"}response · multi{"9000123":{"charge":"0.00300","start_count":"5210","status":"Completed","remains":"0","currency":"USD"},
"9000124":{"charge":"0.00150","start_count":"0","status":"Pending","remains":"500","currency":"USD"},
"9000125":{"error":"Incorrect order ID"}}action=cancelCancel
Requests cancellation for up to 100 orders (orders=, comma-separated; order= works for one), on services marked cancel: true. The reply means the request was accepted — poll status for the outcome. An order that has not been sent to our servers yet is canceled and refunded immediately; otherwise delivery may already be under way and cannot always be stopped — poll status: if it stops, the order ends Canceled or Partial with the undelivered part refunded; if it does not, it runs to the end and anything not delivered is refunded then. You are never charged and refunded for the same units.
requestcurl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=cancel&orders=9000123,9000124"response[{"order":9000123,"cancel":1},
{"order":9000124,"cancel":{"error":"Incorrect order ID"}},
{"order":9000125,"cancel":{"error":"Cancel is not available"}}]action=refillRefill · refill_status
For services marked refill: true, on a Completed or Partial order inside the refill window. Returns a refill ID you can poll with refill_status. Both accept one ID (order= / refill=) or up to 100 (orders= / refills=). Refill statuses: Pending, In progress, Completed, Rejected, Error.
requestcurl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=refill&order=9000123"
curl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=refill&orders=9000123,9000124"
curl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=refill_status&refill=100001"
curl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=refill_status&refills=100001,100002"responses{"refill":100001}
[{"order":9000123,"refill":100001},{"order":9000124,"refill":{"error":"Refill is not available"}}]
{"status":"Completed"}
[{"refill":100001,"status":"Completed"},{"refill":100002,"status":{"error":"Incorrect refill ID"}}]action=balanceBalance
requestcurl -X POST https://tgtorch.com/api/v2 \
-d "key=YOUR_KEY&action=balance"response{"balance":"100.8429","currency":"USD"}Order statuses
Final states lock: once an order is Completed, Partial, Canceled or Fail it never changes and is never refunded twice.
Errors
Always HTTP 200 with an error string — exactly what Perfect Panel expects to show your customers. Batch calls never fail as a whole: a bad ID only errors its own entry.
# request / key {"error":"Incorrect request"} {"error":"Invalid API key"} {"error":"Account is suspended"} {"error":"IP not allowed"} {"error":"Too many requests"} # wait a second and retry {"error":"Internal error"} # nothing was saved or charged — retry # add {"error":"Incorrect service ID"} {"error":"Incorrect comments"} # a bad, empty or over-500-character link is not an error: you get an order ID, canceled at once, charge 0 {"error":"The quantity must be between 100 and 1000000"} {"error":"Dripfeed is not available for this service"} {"error":"Incorrect dripfeed parameters"} {"error":"Not enough funds on balance"} # status / cancel / refill (per item in batch calls) {"error":"Incorrect order ID"} {"error":"Incorrect order IDs"} {"error":"Incorrect order status"} {"error":"Cancel is not available"} {"error":"Refill is not available"} {"error":"Refill already requested"} {"error":"Refill period expired"} {"error":"Refill limit reached for this order"} {"error":"Refill was requested recently, try again later"} {"error":"Incorrect refill ID"} {"error":"Incorrect refill IDs"}
Torch vs. a typical panel
| SMM Torch | Typical panel | |
|---|---|---|
| Telegram-only servers | Yes — nothing else runs on them | Shared with 40 networks |
| Refund on Partial / Canceled | Automatic, never paid twice | Open a ticket |
| Multi-status polling | 100 orders per call | One at a time |
| Error format | HTTP 200 + error string, always | Random 4xx/5xx pages |
| Dashboard | Inside Telegram — key, balance, orders | A web login you forget |
Light it up.
One key. All our Telegram services. Orders that report back.