Telegram growth, delivered at provider speed.
Views, members, reactions and ten more Telegram services through one API key. A drop-in replacement for any Perfect Panel provider — same endpoints, same fields, faster answers.
Every Telegram service, one price list.
Panels import our catalogue once and sell every category. Rates below come straight from the catalogue; nothing on this page is a promise we cannot measure.
| ID | Service | Rate per 1K | Min – Max | Refill | Cancel | Drip-feed |
|---|
Three steps, then it runs itself.
Create your key
Open the bot, tap Dashboard, copy the key. Ninety seconds, no forms.
# Perfect Panel → Providers → Add API URL https://tgtorch.com/api/v2 API key •••••••••••••••• # then: Sync 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) — views, members, reactions, shares, story views, boosts, 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 dispatched yet is canceled and refunded immediately; otherwise the undelivered part is refunded once the backend confirms, so 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 or Canceled it never changes and never refunds 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"} # back off a second and retry {"error":"Internal error"} # transient (rolled back) — retry # add {"error":"Incorrect service ID"} {"error":"Incorrect link"} {"error":"Incorrect link format"} {"error":"Incorrect comments"} {"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 backends | Yes — nothing else on the boxes | Shared with 40 networks |
| Refund on Partial / Canceled | Automatic, idempotent | 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. Every Telegram category. Orders that report back.