API

Everything the panel does is available through two separate APIs. Both use the same account, the same balance and the same catalog; they differ in format and capability.

Everything the panel does is available through two separate APIs. Both use the same account, the same balance and the same catalog; they differ in format and capability.

Why two APIs?

The classic reseller API (v2) that the whole industry uses posts a form to a single endpoint and always answers HTTP 200. That is exactly the shape off-the-shelf panel software expects, so it stays as it is. Developers writing their own systems kept hitting its limits: errors could not be told apart, the catalog arrived in one piece, and order status had to be polled forever. v3 was written for them.

The legacy API will not be shut down. There is no sunset date; you never have to change a working integration.

Comparison

FeatureLegacy (v2)New (v3)
ShapeOne endpoint, form post, action parameterResource-oriented REST, JSON body
HTTP statusAlways 200, even on failureReal codes (400, 401, 402, 404, 409, 429, 502)
ErrorsFree-form texttype + stable code + localized message + param + doc_url
Order statusLocalized text onlyStable machine value plus a separate display label
Service descriptionNoneDescription in 10 languages, average time, platform, category
Order fieldsGuessed from the type nameEach service publishes its own field schema
Pricing unitUnstated (a 1000x error source on packages)Explicitly per_1000 or per_order
CatalogEvery service in one responseFilters plus cursor pagination
Duplicate protectionNoneIdempotency-Key
Status updatesConstant pollingSigned webhooks or an event stream
SchemaNoneOpenAPI 3.1
LanguagesEnglish and Turkish (separate URLs)10 languages (header or parameter)

Which one should I use?

Legacy (v2)

Pick the legacy API if you run off-the-shelf panel software, a bot or a reseller panel. Most of them only ask you to change the API URL and the key, and start working in minutes.

New API (v3)

Pick v3 if you are writing your own application, storefront or automation. Error handling, duplicate protection and notifications come built in, and you can generate your order form straight from the service schema.

Getting started

  1. 1Create an API key on the Keys tab.
  2. 2Fetch the service list and read the id and field schema of the service you need.
  3. 3Validate the order with preview first, then create it.
  4. 4Register a webhook, or read the event stream, to follow status changes.

Errors (48)

CodeStatusDescription
missing_api_key401No API key provided. Send it as 'Authorization: Bearer <key>'.
invalid_api_key401The API key you provided is not valid.
revoked_api_key401This API key has been revoked and can no longer be used.
account_banned403This account is banned.
account_suspended403This account is suspended.
insufficient_scope403This API key does not have permission for this endpoint.
invalid_json400The request body is not valid JSON.
unsupported_content_type415Unsupported Content-Type. Use application/json or application/x-www-form-urlencoded.
method_not_allowed405This HTTP method is not allowed on this endpoint.
payload_too_large413The request body is too large.
missing_parameter400A required parameter is missing.
invalid_parameter400A parameter has an invalid value.
invalid_quantity400The quantity is not a valid positive whole number.
quantity_out_of_range400The quantity is outside the range allowed by this service.
invalid_comments400The comments field is empty or has too many lines.
invalid_username400The username is not valid for this service.
invalid_subscription400The subscription parameters are not valid.
invalid_runs400The 'runs' value is not valid for drip-feed.
invalid_interval400The 'interval' value is not valid for drip-feed.
dripfeed_not_supported400This service does not support drip-feed.
missing_required_field400A field required by this service type is missing or invalid.
service_inactive400This service is not currently available for ordering.
invalid_cursor400The pagination cursor is not valid.
invalid_limit400The 'limit' parameter is outside the allowed range.
invalid_webhook_url400The webhook URL must be a public https:// address.
invalid_events400One or more of the requested event types is unknown.
batch_too_large400Too many items in a single batch request.
cancel_not_supported400This service does not support cancellation.
refill_not_supported400This service does not offer refill.
unknown_endpoint404Unknown endpoint. See the API reference for the available routes.
service_not_found404No service exists with this id.
order_not_found404No order exists with this id on your account.
refill_not_found404No refill exists with this id on your account.
webhook_not_found404No webhook endpoint exists with this id on your account.
order_not_cancelable409This order can no longer be canceled because of its current status.
cancel_rejected409The provider rejected the cancellation request.
order_not_completed409Refill can only be requested for a completed order.
idempotency_key_reuse409This Idempotency-Key was already used with a different request body.
idempotency_in_progress409A request with this Idempotency-Key is still being processed. Retry shortly.
webhook_limit_reached409You have reached the maximum number of webhook endpoints.
insufficient_balance402Not enough funds in your balance for this order.
rate_limit_exceeded429Rate limit exceeded. See the Retry-After response header.
provider_error502The upstream provider returned an error. Try again.
refill_failed502The refill request was rejected by the provider.
service_temporarily_unavailable503This service is temporarily unavailable. Try again later.
internal_error500An unexpected error occurred on our side.