Capmonster.cloud SDK for Node.js & TypeScript
At least 2x cheaper, up to 30x faster than manual recognition services.
# bun (recommended)
bun add node-capmonster
# npm
npm install node-capmonster
# yarn
yarn add node-capmonster
# pnpm
pnpm add node-capmonster| 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 |
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)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.
Note: Support is provided for the code and library only — not for captcha solving usage, integration strategies, or site-specific guidance.
- Bug reports & feature requests: GitHub Issues
- Contact: business@alperen.io
This project is licensed under the MIT License.