Skip to content

Use code FUN10 for 10% bonus credits

DocsShape

Shape API Reference

Get Shape Security headers for one protected request.

Read Markdown (English)

The Captcha.fun Shape API accepts kind, url, challengeHtml, protectedUrl and returns Shape request headers. Send the API_KEY header, create a solve with POST /v1/request, then poll GET /v2/response/{id} until ready is true.

What you’ll need

  • Your API key
  • The URL of the page where the challenge appears
  • challengeHtml — Captured HTML of the page that loads Shape’s sensor
  • protectedUrl — Endpoint the headers are for. Replay them on a request to exactly this URL
  • A proxy, if the result must come from your own IP (shape_proxy)
Use kind

Good to Know

The Shape product replays the page that loads Shape's sensor (ssx.mod.js or an inline equivalent), lets the sensor arm, then fires a request against your protected endpoint from the browser and harvests the Shape headers off the wire.

Shape headers are URL-bound — they encode the request URL into their telemetry — so one solve produces one replayable header set for exactly the endpoint you pass in protectedUrl. Mint a fresh header set per protected endpoint.

A few gateways reject synthetic captures at the app layer; the solver detects those protected URLs and drives the site's real sign-in UI to mint the set instead.

Send the Challenge

Send the page details with your API key. You get a solve id back right away.

POSThttps://api.captcha.fun/v1/request
curl -X POST https://api.captcha.fun/v1/request \
  -H "API_KEY: CAPFUN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
  "kind": "shape",
  "url": "https://your-domain.example/login",
  "challengeHtml": "<CAPTURED_LOGIN_PAGE_HTML>",
  "protectedUrl": "https://your-domain.example/api/login"
}'

Response

Returns the solve id. Use it to get the result.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "message": "Started Solving"
}
Request fields6 body fields · 4 required

Headers

NameTypeRequiredDescription
API_KEYstringYesYour API key
Content-TypestringYesapplication/json
APP_IDstringNoOptional app ID for request tracking

Body

NameTypeRequiredDescription
kindstringYesOne of shape, shape_proxy
urlstringYesPage URL where the challenge appears
challengeHtmlstringYesCaptured HTML of the page that loads Shape’s sensor
protectedUrlstringYesEndpoint the headers are for. Replay them on a request to exactly this URL
proxystringNoFor _proxy kinds: host:port or host:port:username:password
platformstringNoRequested platform label: windows (default) or mac

Wait for the Result

Use the solve id to fetch the result.

GEThttps://api.captcha.fun/v2/response/{id}

Poll every second until ready is true.

Example

curl -X GET https://api.captcha.fun/v2/response/550e8400-e29b-41d4-a716-446655440000 \
  -H "API_KEY: CAPFUN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Accept: application/json"

Response

{
  "ready": true,
  "status": "SUCCESS",
  "success": true,
  "userAgent": "RETURNED_USER_AGENT",
  "secUa": "RETURNED_SEC_CH_UA",
  "token": "",
  "headers": {
    "x-6a7b8c-a": "0:0:0:0:1:2:3:...",
    "x-6a7b8c-b": "1:1:1:...",
    "x-6a7b8c-f": "abc123..."
  }
}
Request and response fields7 response fields

Request

NameTypeRequiredDescription
idstring (UUID)YesPath parameter. The id from Create Solve
API_KEYstringYesHeader. Your API key

Response Fields

NameTypeRequiredDescription
readyboolean—true when the solve is finished (v2 only)
statusstring—PENDING while solving, then SUCCESS or FAILURE
successboolean—Whether the solve succeeded
userAgentstring—Value to send as User-Agent when using the result. Preserve it exactly
secUastring—Value to send as Sec-CH-UA when using the result
headersobject—Shape headers to replay as-is: the x-<customer-id>-a / a0 / b / c / d / f / z family plus extras like x-application-mouse-tool-key
messagestring—Failure reason. Omitted on success

Replay the Request

  • Send one outbound request to exactly protectedUrl with every returned header set verbatim, and the returned userAgent as your User-Agent header.
  • Replay the set from the same egress IP as the solve, with the returned userAgent as your User-Agent header — the headers are bound to the solving browser's identity.

When using a successful result, preserve the returned userAgent as User-Agent and secUa as Sec-CH-UA.

Wrong or rejected result? Report the failed solve.