API Documentation
Integrate captcha solving into your application in minutes.
Authentication
All API requests require an API Key. Pass it in the X-API-Key header.
X-API-Key: YOUR_API_KEY_HERE
Get Balance
Returns current account balance in RUB with 0.001 precision.
Request
curl -X GET "http://api.noncaptcha.com/api/json/balance" \
-H "X-API-Key: YOUR_API_KEY"
Response
{
"balance": 12.345
}
Get API Endpoints
Returns list of active API mirrors for high availability and failover support.
Request
curl -X GET "http://api.noncaptcha.com/api/json/endpoints" \
-H "X-API-Key: YOUR_API_KEY"
Response
{
"endpoints": [
{
"url": "https://api.noncaptcha.com"
}
]
}
Pricing
You are charged only for successful solves. 1 Unit = 0.0001 ₽.
| Captcha Type | Endpoint | Price (Units) | RUB |
|---|---|---|---|
| Text Captcha | /api/json/text |
4 units | 0.0004 ₽ |
| Puzzle Captcha | /api/json/puzzle |
20 units | 0.002 ₽ |
| Coords Captcha | /api/json/coords |
20 units | 0.002 ₽ |
Text Captcha (OCR)
Solves standard text captcha images.
Request
KEY TYPE DESCRIPTION
image file Captcha image file (PNG, JPG)
Response
{
"text": "abc123"
}
Puzzle Captcha
Solves puzzle slider captchas.
Request
KEY TYPE DESCRIPTION
captcha file Puzzle background image
task string Task (e.g., '[6,8,2,7,0,6,8,0,3,2,8,3,3,0,1,5,2,7,8,6,6,2,6,1,2,6]')
Response
{
"step": 120
}
Why we don't accept HTML pages
Unlike some captcha solving services that require you to send the entire HTML page or URL to their servers, we use a different approach for security reasons:
⚠️ Problems with HTML-based solving:
- Your server makes requests to target websites from different IPs, risking bans
- Browser fingerprints don't match your actual automation environment
- Session cookies and sensitive data may be exposed to third-party servers
- Target websites can detect and block the solving service's infrastructure
✅ Our secure approach:
- You extract captcha parameters (image + task array) on your side
- You send only the captcha image and task data to our API (no HTML, no URLs)
- We solve only the mathematical/visual puzzle, not the entire page
- You apply the solution in your own browser with your IP and fingerprint
- No session data, cookies, or page structure is exposed to our servers
Result: Your automation remains undetectable because all requests to target websites come from your infrastructure, not ours.
How to extract captcha parameters
Use these regex patterns to extract the required parameters from the page HTML:
// Extract task array
task:""\[(.*?)\]""
// Extract image URL
imageSrc:""(.*?)""
See our detailed guide: How to Solve Puzzle Captcha
Coords Captcha
Solves coordinate selection captchas (click-on-image).
Request
KEY TYPE DESCRIPTION
captcha file Main captcha image
hint file Hint/Example image
Response
{
"coords": [
{
"x": 201,
"y": 134
},
{
"x": 127,
"y": 72
},
{
"x": 278,
"y": 54
},
{
"x": 39,
"y": 87
},
{
"x": 207,
"y": 46
}
]
}
Error Handling
| Code | Error ID | Description |
|---|---|---|
| 401 | Missing API key |
X-API-Key header not provided. |
| 401 | Invalid API key |
The provided key is incorrect or inactive. |
| 402 | INSUFFICIENT_BALANCE |
Not enough funds to process the request. |
| 403 | Account banned |
Your account has been suspended. |
| 499 | CANCELED |
Request was canceled by client. |
| 500 | INTERNAL_ERROR |
Server failed to process the image. |
Code Examples
curl -X GET "http://api.noncaptcha.com/api/json/balance" \
-H "X-API-Key: YOUR_API_KEY"
curl -X GET "http://api.noncaptcha.com/api/json/endpoints" \
-H "X-API-Key: YOUR_API_KEY"
curl -X POST "http://api.noncaptcha.com/api/json/text" \
-H "X-API-Key: YOUR_API_KEY" \
-F "image=@captcha.png"
curl -X POST "http://api.noncaptcha.com/api/json/puzzle" \
-H "X-API-Key: YOUR_API_KEY" \
-F "captcha=@puzzle_bg.png" \
-F "task=[6,8,2,7,0,6,8,0,3,2,8,3,3,0,1,5,2,7,8,6,6,2,6,1,2,6]"
curl -X POST "http://api.noncaptcha.com/api/json/coords" \
-H "X-API-Key: YOUR_API_KEY" \
-F "captcha=@main_image.png" \
-F "hint=@hint_image.png"
using System.Net.Http;
using System.Text.Json;
var apiKey = "YOUR_API_KEY";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", apiKey);
// ===== 1. Get Balance =====
var balanceResp = await client.GetAsync("http://api.noncaptcha.com/api/json/balance");
var balanceJson = await balanceResp.Content.ReadAsStringAsync();
var balance = JsonSerializer.Deserialize<JsonElement>(balanceJson).GetProperty("balance").GetDecimal();
// ===== 2. Get Endpoints =====
var endpointsResp = await client.GetAsync("http://api.noncaptcha.com/api/json/endpoints");
var endpointsJson = await endpointsResp.Content.ReadAsStringAsync();
// Parse endpointsJson as needed
// ===== 3. Text Captcha =====
var textContent = new MultipartFormDataContent();
textContent.Add(new StreamContent(File.OpenRead("captcha.png")), "image", "captcha.png");
var textResp = await client.PostAsync("http://api.noncaptcha.com/api/json/text", textContent);
// ===== 4. Puzzle Captcha =====
var puzzleContent = new MultipartFormDataContent();
puzzleContent.Add(new StreamContent(File.OpenRead("puzzle.png")), "captcha", "puzzle.png");
puzzleContent.Add(new StringContent("[6,8,2,7,0,6,8,0,3,2,8,3,3,0,1,5,2,7,8,6,6,2,6,1,2,6]"), "task");
var puzzleResp = await client.PostAsync("http://api.noncaptcha.com/api/json/puzzle", puzzleContent);
// ===== 5. Coords Captcha =====
var coordsContent = new MultipartFormDataContent();
coordsContent.Add(new StreamContent(File.OpenRead("main.png")), "captcha", "main.png");
coordsContent.Add(new StreamContent(File.OpenRead("hint.png")), "hint", "hint.png");
var coordsResp = await client.PostAsync("http://api.noncaptcha.com/api/json/coords", coordsContent);
import requests
api_key = "YOUR_API_KEY"
headers = {"X-API-Key": api_key}
base_url = "http://api.noncaptcha.com/api/json"
# ===== 1. Get Balance =====
resp = requests.get(f"{base_url}/balance", headers=headers)
balance = resp.json()["balance"]
# ===== 2. Get Endpoints =====
resp = requests.get(f"{base_url}/endpoints", headers=headers)
endpoints = resp.json()["endpoints"]
# ===== 3. Text Captcha =====
files = {"image": open("captcha.png", "rb")}
resp = requests.post(f"{base_url}/text", headers=headers, files=files)
# ===== 4. Puzzle Captcha =====
files = {"captcha": open("puzzle.png", "rb")}
data = {"task": "[6,8,2,7,0,6,8,0,3,2,8,3,3,0,1,5,2,7,8,6,6,2,6,1,2,6]"}
resp = requests.post(f"{base_url}/puzzle", headers=headers, files=files, data=data)
# ===== 5. Coords Captcha =====
files = {
"captcha": open("main.png", "rb"),
"hint": open("hint.png", "rb")
}
resp = requests.post(f"{base_url}/coords", headers=headers, files=files)
<?php
$apiKey = 'YOUR_API_KEY';
$baseUrl = 'http://api.noncaptcha.com/api/json';
// ===== 1. Get Balance =====
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$baseUrl/balance");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$balance = json_decode($response, true)['balance'];
curl_close($ch);
// ===== 2. Get Endpoints =====
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$baseUrl/endpoints");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$endpoints = json_decode($response, true)['endpoints'];
curl_close($ch);
// ===== 3. Text Captcha =====
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$baseUrl/text");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'image' => new CURLFile('captcha.png', 'image/png', 'captcha.png')
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// ===== 4. Puzzle Captcha =====
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$baseUrl/puzzle");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'captcha' => new CURLFile('puzzle.png', 'image/png', 'puzzle.png'),
'task' => '[6,8,2,7,0,6,8,0,3,2,8,3,3,0,1,5,2,7,8,6,6,2,6,1,2,6]'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// ===== 5. Coords Captcha =====
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$baseUrl/coords");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'captcha' => new CURLFile('main.png', 'image/png', 'main.png'),
'hint' => new CURLFile('hint.png', 'image/png', 'hint.png')
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
?>
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;
import java.nio.file.Path;
public class NonCaptchaExample {
private static final String API_KEY = "YOUR_API_KEY";
private static final String BASE_URL = "http://api.noncaptcha.com/api/json";
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
// ===== 1. Get Balance =====
HttpRequest balanceRequest = HttpRequest.newBuilder()
.uri(URI.create(BASE_URL + "/balance"))
.header("X-API-Key", API_KEY)
.GET()
.build();
HttpResponse<String> balanceResponse = client.send(balanceRequest, HttpResponse.BodyHandlers.ofString());
// Parse balanceResponse.body() as JSON
// ===== 2. Get Endpoints =====
HttpRequest endpointsRequest = HttpRequest.newBuilder()
.uri(URI.create(BASE_URL + "/endpoints"))
.header("X-API-Key", API_KEY)
.GET()
.build();
HttpResponse<String> endpointsResponse = client.send(endpointsRequest, HttpResponse.BodyHandlers.ofString());
// Parse endpointsResponse.body() as JSON
// ===== 3-5. Captcha Solving =====
// Note: Java 11+ HttpClient requires manual multipart implementation
// or use Apache HttpClient/OkHttp for easier file uploads
}
}