F↗FollowexDevelopers Provider portal
FOLLOWEX API REFERENCE

Your panel.
Connected to Followex.

Discover Rubino services, submit orders and track independently verified delivery. Choose the integration that fits your panel.

راهنمای اتصال پنل شما به فالو ایکس — برای پنل‌های Perfect Panel و پنل‌های اختصاصی. کلید اتصال را از پنل همکاران دریافت کنید.

Examples use illustrative IDs, prices and counts. Read your live service catalog for the actual service IDs, rates and limits. This page does not send API requests or collect keys.
01 / SETUP

Get connected

  1. Sign in to the Provider Portal. Open providers.followex.ir with the username and password supplied by Followex.
  2. Create a panel connection. In اتصالات پنل‌ها, choose Perfect Panel or Custom REST and enter your panel details. Use one connection per external panel.
  3. Save the issued key securely. The full key is shown only when issued. Use it only from your server. Keys are protocol-specific, scoped and expire after 30 days. Rotate or revoke them in the portal.
  4. Discover services, then check credit. Successful discovery of an eligible, nonempty catalog activates a configuring connection. Ordering also requires approved access, an ordering key and sufficient available wallet credit.
Perfect Panel integration: if “Add provider” says “Provider not found” before asking for a key, ask official Perfect Panel support to integrate Followex. Give them this documentation and the API URL. Confirm that their integration sends a stable order reference on every add and retry. A compatible request format alone does not establish that Followex is in their provider registry.

Keep API keys out of browser code, URLs, screenshots and public tickets. If support needs access, use a separate restricted connection and their approved private credential-sharing method; revoke it after testing. Your portal password is not an API key.

02 / FORM INTEGRATION

Perfect Panel API

POSThttps://api.followex.ir/api/v2

Send application/x-www-form-urlencoded. Put key and action in the request body, not the query string. Every request requires your Perfect Panel connection key.

Discover services

curl 'https://api.followex.ir/api/v2' \
  --data-urlencode 'key=YOUR_CONNECTION_KEY' \
  --data 'action=services'
[
  {
    "service": 1,
    "name": "Rubino Followers",
    "type": "Default",
    "category": "Rubino",
    "rate": "1.001",
    "currency": "IRT",
    "min": 10,
    "max": 100000,
    "refill": false,
    "cancel": true,
    "service_reference": "follow",
    "platform": "Rubino"
  }
]

rate is the global selling price per 1,000 followers in Tomans. Service IDs are connection-local aliases: always use the ID returned for your own connection. An empty catalog is not permission to submit an arbitrary ID.

Check available balance

curl 'https://api.followex.ir/api/v2' \
  --data-urlencode 'key=YOUR_CONNECTION_KEY' \
  --data 'action=balance'
{ "balance": "100.842920", "currency": "IRT" }

Submit an order

FieldRequiredMeaning
keyYesPerfect Panel connection key.
actionYesadd
serviceYesNumeric ID from your services response.
linkYesRubino target profile URL; maximum 2,048 characters.
quantityYesWhole number within published service limits.
external_order_idOne identity requiredYour stable order reference. Alternatively send the Idempotency-Key HTTP header. This is a Followex extension.
target_profile_idConditionalExpected immutable Rubino profile ID when required by target resolution. Do not guess an ID from a username.
curl 'https://api.followex.ir/api/v2' \
  --data-urlencode 'key=YOUR_CONNECTION_KEY' \
  --data 'action=add' \
  --data 'service=1' \
  --data-urlencode 'link=https://rubino.ir/example' \
  --data 'quantity=10' \
  --data-urlencode 'external_order_id=SHOP-1001'
{ "order": 23501 }

order is the Followex order ID. Save it with your own reference. The target must be independently resolved before admission; the example URL is illustrative and is not a test account.

Read order status

Use action=status and either order=23501 for one order, or orders=23501,23502 for up to 100 IDs. Do not send both fields.

curl 'https://api.followex.ir/api/v2' \
  --data-urlencode 'key=YOUR_CONNECTION_KEY' \
  --data 'action=status&order=23501'

A single order returns the order object below. A batch returns an object keyed by Followex order ID. An unknown batch item returns {"error":"Unknown order"} for that item; other authorized items can still succeed.

Request cancellation

curl 'https://api.followex.ir/api/v2' \
  --data-urlencode 'key=YOUR_CONNECTION_KEY' \
  --data 'action=cancel&orders=23501,23502'
[
  { "order": 23501, "cancel": 1 },
  { "order": 23502, "cancel": { "error": "Cancellation pending or unavailable" } }
]

Only cancel: 1 confirms cancellation. A request can remain pending while an in-flight action is reconciled. Poll status; do not assume immediate release of all reserved credit. The form cancellation action accepts orders, including a single ID in that field.

List this connection’s orders FOLLOWEX EXTENSION

Use action=orders. The response contains items (up to 25 order objects) and next_before. For the next page send before equal to that value; a null value means no next page.

03 / JSON INTEGRATION

Custom REST API

BASEhttps://api.followex.ir/api/v1/panel

Use a Custom REST connection key in Authorization: Bearer YOUR_CONNECTION_KEY. Quantities and service IDs are JSON integers; financial amounts are decimal strings. A Perfect Panel key cannot be reused as a REST key.

MethodPathResult
GET/servicesService catalog with connection-local numeric IDs and effective limits.
GET/balanceAvailable balance and currency.
POST/ordersAccept an order and return its full projection.
GET/orders/{id}One authorized order’s current projection.
GET/orders?before={cursor}items and next_before; omit the query for the first page.
POST/orders/{id}/cancelCurrent order projection after cancellation processing. Check cancellation_confirmed.

Discover services

curl 'https://api.followex.ir/api/v1/panel/services' \
  -H 'Authorization: Bearer YOUR_CONNECTION_KEY'

Create an order

Send Content-Type: application/json. Required JSON fields: service_id, quantity, target. Supply a stable external_order_id or Idempotency-Key header. target_profile_id is conditional, as in the form API. Unknown fields and string quantities are rejected.

curl 'https://api.followex.ir/api/v1/panel/orders' \
  -H 'Authorization: Bearer YOUR_CONNECTION_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: SHOP-1001' \
  --data '{"service_id":1,"quantity":10,"target":"https://rubino.ir/example","external_order_id":"SHOP-1001"}'

Track or cancel

curl 'https://api.followex.ir/api/v1/panel/orders/23501' \
  -H 'Authorization: Bearer YOUR_CONNECTION_KEY'

curl -X POST 'https://api.followex.ir/api/v1/panel/orders/23501/cancel' \
  -H 'Authorization: Bearer YOUR_CONNECTION_KEY'

Both return the same order-field contract. The REST status projection can explicitly represent Recovery required or Review required; do not interpret those states as success or safe permission to create another order.

04 / RESPONSE CONTRACT

Read an order with confidence

This illustrative terminal partial order delivered 3 of 10 followers. At a rate of 1.001 IRT per 1,000, its original cost is 0.010010 IRT. Only the verified portion is settled.

{
  "order": 23501,
  "external_order_id": "SHOP-1001",
  "status": "Partial",
  "quantity": 10,
  "completed": 3,
  "remains": 7,
  "live_remaining_followers": 7,
  "target_initial_follower_count": 1250,
  "target_initial_follower_count_observed_at": "2026-11-03T09:00:00Z",
  "start_count": "1250",
  "currency": "IRT",
  "order_cost": "0.010010",
  "reserved": "0.010010",
  "charge": "0.003003",
  "released": "0.007007",
  "cancellation_confirmed": false
}
Field / typeMeaning
order · integerFollowex order ID, scoped to this connection.
external_order_id · stringYour stable purchase reference.
status · stringCurrent evidenced state; see lifecycle below.
quantity · integerAccepted requested quantity.
completed · integerIndependently verified deliveries credited toward this specific order.
remains, live_remaining_followers · integermax(0, quantity − completed). Pending, uncertain and duplicate results do not reduce it.
target_initial_follower_count · integer or nullImmutable pre-execution observation. Zero is a real observed zero; null means unavailable.
target_initial_follower_count_observed_at · timestamp or nullISO 8601 observation time of the stored initial count.
start_count · string or nullCompatibility representation of that same initial count, not a live total.
currency · stringIRT: Iranian Toman.
order_cost, reserved · decimal stringOriginal order reservation, not the wallet’s current held balance.
charge · decimal stringAmount settled for independently verified delivery.
released · decimal stringUnused reserved amount returned to available credit.
cancellation_confirmed · booleanTrue only when requested cancellation is confirmed at terminal closeout.
A target’s changing follower count is not order fulfillment evidence. Followex counts verified order-specific deliveries; it never estimates delivery by subtracting the baseline from a later profile count.
05 / PROGRESS

Order lifecycle & cancellation

Pending→In progress→Completed

Pending means accepted work is outstanding. In progress means fulfillment is underway. Completed requires the full requested quantity with consistent verified delivery and financial evidence. Partial is a terminal closeout with fewer verified deliveries. Canceled is confirmed cancellation without full delivery.

REST can also return Failed, Review required and Recovery required. The Perfect Panel adapter returns an error for those unsupported/uncertain representations. Inconsistent evidence can return HTTP 503 instead of a normal order object.

Cancellation closes new admission for that order. Already-dispatched work may need reconciliation; cancellation does not undo an external action. Verified work is charged, unused credit is released once at closeout, and uncertain work keeps its reservation until resolved. A completed delivery is not automatically reversed because of a later unfollow.

06 / ACCOUNTING

One wallet. Exact pricing.

All connections belonging to your provider account share one prepaid Toman wallet. The balance endpoint returns available credit. Reserved credit covers outstanding orders; spent credit records settled deliveries. Funding is handled manually by an authorized Followex administrator.

ORDER COSTquantity × rate_per_1000 ÷ 1000

The selling rate is global; accepted orders retain their original price. Any whole-number quantity within the published bounds is valid, including quantities that are not multiples of 1,000. Global bounds are 10–100,000; service and account policy may be tighter. Admission atomically reserves sufficient available credit, including when requests arrive concurrently.

Amounts are exact decimal strings. Use a decimal or fixed-point library, preserve fractional Tomans and do not round API amounts or calculate with binary floating-point. A rounded portal display does not change ledger amounts. There are no automatic deposits or payment-gateway top-ups in this integration.

07 / RELIABILITY

Retry the request, not the purchase

Every add needs an identity: external_order_id or the Idempotency-Key header. References contain 1–128 ASCII characters, begin with a letter or digit and then use letters, digits, ., _, : or -.

SituationCorrect action
Timeout or lost acknowledgementRetry with the same reference, connection and payload. Keep any supplied header stable.
Same reference, same orderFollowex returns the original order; no second reservation.
Same reference, changed payloadHTTP 409 conflict. Do not reinterpret it as a new purchase.
Second intentional purchase with identical detailsUse a new unique reference.
No identity suppliedAdmission is refused before tasks or wallet reservation; inspect API activity before retrying.

References are isolated by connection. Rotating a connection’s key preserves its order namespace. Revoking or disabling a connection stops new API access; it does not automatically cancel accepted orders. Use the portal’s Orders and API activity to investigate uncertain outcomes.

08 / TROUBLESHOOTING

Errors & request limits

{ "error": "CONNECTION_RATE_LIMITED" }
HTTPMeaning / action
200Successful protocol response. A batch may still contain per-order error objects; inspect every item.
400 / 413 / 415 / 422Invalid fields, oversized body or wrong content type. Correct the request before retrying.
401Invalid, expired or revoked credential. Check the connection and protocol.
403Missing scope, inactive connection or account policy refusal.
404Unknown/unauthorized order or unavailable adapter. Verify the URL and your connection’s order ID.
408Request body timed out.
409Funding, quota or conflicting idempotency identity. Inspect the error and portal state.
429Configured provider or connection rate limit reached. Back off; do not retry in a tight loop.
503Temporary evidence/storage uncertainty or required reconciliation. Preserve the original order identity and inspect status/activity.

Save the response’s X-Correlation-ID, request time, action and your order reference for support. Do not send the API key in diagnostic logs. Not every API error uses HTTP 200.

  • Request body: at most 8,192 bytes. Form requests: at most 32 fields; no duplicates or query parameters.
  • Single/multiple status and cancellation: at most 100 IDs per request.
  • Compressed request bodies are unsupported. JSON create requests reject duplicate and unknown fields.
  • Request-rate, daily quantity and open-order limits depend on the provider’s configured policy; there is no universal published requests-per-minute value.
09 / SCOPE

What this API supports

Available

  • Rubino follower services (Default)
  • Service discovery and prepaid balance
  • Order submission with stable retry identity
  • Single/batch form status; REST order pagination
  • Order cancellation with truthful pending outcomes
  • Initial follower baseline and verified remaining count

Not implemented

  • Refill and refill status
  • Automatic replacement after later follower drops
  • Drip-feed: runs and interval
  • Package or custom-comment orders
  • Likes, comments or other invented service types
  • Automatic wallet top-ups

refill: false is intentional. The connection adapter does not implement refill or refill_status; an authenticated request reaching action dispatch is rejected as unsupported. Retry/recovery preserves the original purchase and is not a refill service.