REST API
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.
Header
X-API-Key: YOUR_API_KEY_HERE
You can find your API key in the Dashboard after registration.
Get Balance
Returns current account balance in RUB with 0.001 precision.
Request
GET /api/json/balance
Header: X-API-Key: YOUR_API_KEY
curl -X GET "http://api.noncaptcha.com/api/json/balance" \
-H "X-API-Key: YOUR_API_KEY"
Response
200 OK
{
"balance": 12.345
}
Get API Endpoints
Returns list of active API mirrors for high availability and failover support.
Request
GET /api/json/endpoints
Header: X-API-Key: YOUR_API_KEY
curl -X GET "http://api.noncaptcha.com/api/json/endpoints" \
-H "X-API-Key: YOUR_API_KEY"
Response
200 OK
{
"endpoints": [
{
"url": "https://api.noncaptcha.com"
}
]
}
Implementation tip:
Use the endpoint with the lowest priority value first. If it fails, fall back to the next one in the list.
Pricing
You are charged only for successful solves. 1 Unit = 0.001 ₽.
| Captcha Type | Endpoint | Price (Units) | RUB |
|---|---|---|---|
| Text Captcha | /api/json/text |
2 units | 0.002 ₽ |
| Puzzle Captcha | /api/json/puzzle |
4 units | 0.004 ₽ |
| Coords Captcha | /api/json/coords |
6 units | 0.006 ₽ |
Text Captcha (OCR)
Solves standard text captcha images.
Request
POST /api/json/text
Content-Type: multipart/form-data
KEY TYPE DESCRIPTION
image file Captcha image file (PNG, JPG)
Response
200 OK
{
"text": "abc123"
}
Puzzle Captcha
Solves puzzle slider captchas.
Request
POST /api/json/puzzle
Content-Type: multipart/form-data
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
200 OK
{
"step": 120
}
Coords Captcha
Solves coordinate selection captchas (click-on-image).
Request
POST /api/json/coords
Content-Type: multipart/form-data
KEY TYPE DESCRIPTION
captcha file Main captcha image
hint file Hint/Example image
Response
200 OK
{
"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
}
}
Java's standard HttpClient requires a custom implementation for Multipart/Form-Data. It is recommended to use Apache HttpClient or OkHttp for easier file upload handling.