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.