Getting started
CAPTCHA Solving API Pricing: Pay Per Solved Task
SolveHub pricing per CAPTCHA type: Cloudflare Turnstile, DataDome, Akamai, PerimeterX, Imperva, AWS WAF, FunCaptcha and OCR. Pay only for completed tasks in USD; failed tasks are refunded. Live price table.
For authorized QA automation and browser integration. Use only on websites and workflows you have permission to test.
Live prices
Loaded from the public endpoint GET /v1/prices. Amounts are USD per successful task; the timestamp is this fetch, not the last price change.
| Type | Status | Per task (USD) | Per 1,000 |
|---|---|---|---|
| Image CAPTCHA OCR | Available | $0.0002 | $0.20 |
| Cloudflare Turnstile | Available | $0.0002 | $0.20 |
| Cloudflare Interstitial | Available | $0.0004 | $0.40 |
| PerimeterX / HUMAN | Available | $0.001 | $1.00 |
| DataDome | Available | $0.0012 | $1.20 |
| Akamai Bot Manager | Available | $0.0008 | $0.80 |
| Alibaba Cloud CAPTCHA 2.0 | Available | $0.0004 | $0.40 |
| Imperva / Incapsula | Available | $0.0016 | $1.60 |
| AWS WAF | Available | $0.001 | $1.00 |
| Arkose FunCaptcha | Available | $0.002 | $2.00 |
Price snapshot taken 2026-11-04 07:18 (UTC) from GET /v1/prices; the page script replaces it with live values when JavaScript runs.
Showing the 2026-11-04 07:18 (UTC) price snapshot
The price table below reads directly from the public endpoint GET /v1/prices and shows whether each CAPTCHA type is currently enabled, along with its public per-task list price. No login is required to view it; the refresh button re-requests the server and never uses the static example prices from the documentation.
New email/password accounts can bind and verify one Telegram account on the console's Security page to receive 0.10 USD of trial credit once: no top-up needed, it never expires, and it covers one concurrent task. Binding cannot be undone, and each Telegram account can claim the trial credit only once, so registering again does not grant another credit. See free trial credit for the steps, scope and FAQ, or estimate spend by volume with the price calculator.
| Response field | Type | Meaning |
|---|---|---|
available |
Boolean | Whether the type is enabled in the price catalog; does not guarantee current queue capacity. |
priceMicros |
Integer | The public per-task price when enabled, in micro-USD (micros). 1 USD = 1,000,000 micros. |
currency |
String | Currently USD. |
reason |
String | Generic reason when disabled, such as TYPE_DISABLED or PRICE_NOT_CONFIGURED. |
version |
Integer | Price configuration version; incremented on every change. |
updatedAt |
RFC 3339 time | Time of the most recent price configuration update. |
The priceMicros returned when creating a task is the actual price frozen for that task. Customers with negotiated pricing may see a price different from the public list price; call GET /v1/me/prices with an API Key or a console session to query your own effective unit prices (negotiated:true means a negotiated price is in effect). The charge is applied when the task completes; on an explicit failure or a cancellation before dispatch, the hold is refunded. Do not derive per-task amounts from the per-thousand display price; use the integer priceMicros for accounting. Stop creating tasks of a disabled type, and refresh the price table later to check whether it has been restored.
Endpoint example:
GET /v1/prices HTTP/1.1
Host: www.tiam.codes
The response is keyed by task type, for example:
{"turnstile":{"available":true,"priceMicros":200,"currency":"USD","version":1,"updatedAt":"2026-10-05T00:00:00Z"},"alix5sec":{"available":false,"reason":"TYPE_DISABLED","version":1,"updatedAt":"2026-10-05T00:00:00Z"}}
The example above is only meant to explain the fields. The table below and the API response are authoritative for live status and prices; click a type name to view its request fields and result description.
Billing rules and how to read prices
- The price is frozen when a task is created:
priceMicrosin the response is the actual price for that task, charged on completion. - Tasks that fail explicitly, or are cancelled before dispatch, release the reservation and are not billed;
uncertainmeans the result is still being verified — keep polling the same task. - Failures and refunds do not release a key's safety-window quota, which prevents create-refund probing.
- Prices change over time. The numbers in the table above are read from
GET /v1/pricesby a page script; you can also call that endpoint directly for JSON, or callGET /v1/me/priceswith an API key to see negotiated rates. - Orderability follows
available: disabled types (for example when an upstream price is unconfirmed) are not orderable.
New accounts can use the free trial credit for a first integration without topping up.
Related documentation
Last updated: