Perfect Panel compatible API

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.

From $0.002 / 1K 100 orders per status call Telegram-only backends
1Services live
100Orders per status call
7API actions · v2
200alwaysHTTP status · errors in body
1 Telegram category
TelegramTelegram

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.

Live rates Rates per 1,000 in USD · refreshed every 2 minutes
ID Service Rate per 1K Min – Max Refill Cancel Drip-feed
How it works

Three steps, then it runs itself.

01

Create your key

Open the bot, tap Dashboard, copy the key. Ninety seconds, no forms.

02
# 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.

03
#9000131In progress
#9000130Completed
#9000129Pending
#9000128Partial

Watch orders complete

Status flows back to your panel. Partial and Canceled refund the remainder automatically.

Perfect Panel API v2

Same endpoints, same fields, faster answers.

services · add · status · cancel · refill · refill_status · balance Multi-status, cancel, refill and refill_status for up to 100 IDs per call Drip-feed (runs / interval), Custom Comments, Poll and Package service types Refill and cancel with idempotent refunds Always HTTP 200 — errors in the body, as panels expect
Read the full reference
format POST · form-urlencoded → JSON endpoint /api/v2 status live
# 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" }
Reference

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.

servicestringservice ID — pass it back as service in add
name, categorystringdisplay name and category
typestringservice type in Perfect Panel / JAP spelling: Default, Package, Custom Comments, Poll, Mentions … — decides which add parameters apply (see service types)
ratestringUSD per 1,000 units, 4–6 decimals
min, maxstringquantity limits per order
refill, cancel, dripfeedbooleanwhether refill, cancel and runs/interval are available for this service
brand, descstringextra, 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.

keyrequiredyour API key
servicerequiredservice ID from the list
linkrequiredfull 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=…
quantityrequiredbetween the service's min and max. Not needed for Custom Comments (the number of lines is the quantity) or Package (fixed package size)
runs, intervaloptionaldrip-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
commentsper typeCustom Comments: one comment per line (\n or \r\n); empty lines are dropped, quantity = number of lines
answer_numberper typePoll: the option to vote for, together with quantity
groupsper typeInvites from Groups: source groups, one per line, together with quantity
usernames, hashtag, hashtags, username, media, keywordsper typeaccepted 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.

Defaultlink, quantity (+ runs, interval where dripfeed is true) — views, members, reactions, shares, story views, boosts, bot starts
Packagelink; 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 Commentslink, comments (one per line; quantity = lines)
Polllink, quantity, answer_number
Invites from Groupslink, quantity, groups (one per line)
Mentions Custom Listlink, usernames (one per line; quantity = lines)
Mentions Hashtaglink, 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.

Pendingaccepted, waiting for dispatch
Processinghanded to a backend
In progressdelivering — remains counts down
Completedfully delivered
Partialstopped early, remainder refunded
Cancelednot delivered, refunded

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"}
Why Torch

Torch vs. a typical panel

SMM TorchTypical panel
Telegram-only backendsYes — nothing else on the boxesShared with 40 networks
Refund on Partial / CanceledAutomatic, idempotentOpen a ticket
Multi-status polling100 orders per callOne at a time
Error formatHTTP 200 + error string, alwaysRandom 4xx/5xx pages
DashboardInside Telegram — key, balance, ordersA web login you forget
Backends we operateOur own delivery nodes, not resold traffic.
Automatic failoverA backend stalls, the dispatcher re-routes and retries with back-off.
Refill windowMarked services refill inside the window, free.
Provider-grade limits100-order status calls, per-key rate limits you can raise, no throttling games.

Light it up.

One key. Every Telegram category. Orders that report back.