Skip to content

alperensert/node-capmonster

Repository files navigation

node-capmonster

Capmonster.cloud SDK for Node.js & TypeScript

At least 2x cheaper, up to 30x faster than manual recognition services.

npm version npm downloads bundle size license GitHub stars

DocumentationReport BugNPM Package


Installation

# bun (recommended)
bun add node-capmonster

# npm
npm install node-capmonster

# yarn
yarn add node-capmonster

# pnpm
pnpm add node-capmonster

Supported Captcha Types

Type Class Proxy Support
reCAPTCHA v2 RecaptchaV2Task Optional
reCAPTCHA v2 Enterprise RecaptchaV2EnterpriseTask Optional
reCAPTCHA v3 RecaptchaV3Task Built-in
FunCaptcha (Arkose Labs) FuncaptchaTask Optional
GeeTest v3 GeeTestTask Optional
GeeTest v4 GeeTestV4Task Optional
Cloudflare Turnstile TurnstileTask Optional
Image to Text ImageToTextTask N/A
AWS WAF AmazonTask Optional
Binance BinanceTask Optional
DataDome DataDomeTask Required
Imperva (Incapsula) ImpervaTask Required
TenDI TenDITask Optional
Complex Image ComplexImageTask N/A

Quick Start

import { RecaptchaV2Task } from "node-capmonster"

const client = new RecaptchaV2Task("<api_key>")

const task = client.task({
    websiteURL: "https://example.com",
    websiteKey: "<site_key>",
})

const taskId = await client.createWithTask(task)
const result = await client.joinTaskResult(taskId)

console.log(result.gRecaptchaResponse)

Examples

Turnstile with Cloudflare Challenge
import { TurnstileTask } from "node-capmonster"

const client = new TurnstileTask("<api_key>")

client.setGlobalProxy({
    proxyType: "http",
    proxyAddress: "1.2.3.4",
    proxyPort: 8080,
    proxyLogin: "user",
    proxyPassword: "pass",
})

const ua = await client.getUserAgent()

const task = client.task({
    websiteURL: "https://example.com",
    websiteKey: "0x4AAA...",
    cloudflareTaskType: "cf_clearance",
    htmlPageBase64: "<base64_encoded_403_page>",
    userAgent: ua,
})

const taskId = await client.createWithTask(task)
const result = await client.joinTaskResult(taskId)

console.log(result.cf_clearance)
FunCaptcha with blob data
import { FuncaptchaTask } from "node-capmonster"

const client = new FuncaptchaTask("<api_key>")

const task = client.task({
    websiteURL: "https://example.com",
    websitePublicKey: "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC",
    data: '{"blob":"value_from_network_request"}',
    funcaptchaApiJSSubdomain: "client-api.arkoselabs.com",
})

const taskId = await client.createWithTask(task)
const result = await client.joinTaskResult(taskId)

console.log(result.token)
Image to Text with recognition options
import { ImageToTextTask } from "node-capmonster"
import path from "path"

const client = new ImageToTextTask("<api_key>")

const body = await client.prepareImageFromLocal(path.resolve("./captcha.png"))

const task = client.task({
    body,
    numeric: 1,
    recognizingThreshold: 90,
    CapMonsterModule: "amazon",
})

const taskId = await client.createWithTask(task)
const result = await client.joinTaskResult(taskId)

console.log(result.text)
Error handling
import { RecaptchaV2Task, CapmonsterError } from "node-capmonster"

const client = new RecaptchaV2Task("<api_key>")

try {
    const task = client.task({
        websiteURL: "https://example.com",
        websiteKey: "<site_key>",
    })
    const taskId = await client.createWithTask(task)
    const result = await client.joinTaskResult(taskId)

    console.log(result.gRecaptchaResponse)
} catch (err) {
    if (err instanceof CapmonsterError) {
        console.error(`${err.errorCode}: ${err.errorDescription}`)
    }
}
Report incorrect solutions
// Report incorrect image captcha
await client.reportIncorrectImageCaptcha(taskId)

// Report incorrect token captcha (reCAPTCHA, Turnstile, GeeTest, etc.)
await client.reportIncorrectTokenCaptcha(taskId)

For more examples and detailed API reference, see the documentation.

Support

Note: Support is provided for the code and library only — not for captcha solving usage, integration strategies, or site-specific guidance.

License

This project is licensed under the MIT License.