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.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
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
}
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:

Regex Patterns
// 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
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.