Verify API
Note
There’re many ready integrations available and API is also available here as Swagger / OpenAPI definition.
After captcha widget has finished solving the puzzle, it adds a hidden form field with solution (defined by data-solution-field attribute).
<form>
<!-- ... -->
<input name="private-captcha-solution" type="hidden" value="AAAAAAACAhQEAOiDAAAAAAC...IsoSTgYAAA=">
<!-- ... -->
</form>When handling form submission on the server-side, this is the field you need to validate using Private Captcha API.
Request
To verify solutions you need to make a POST request to https://api.privatecaptcha.com/verify with the body of the request being solution field’s contents from your form.
# an example how that will look like with curl
curl -X POST \
-H "X-Api-Key: your-api-key-here" \
-d "solution" \
https://api.privatecaptcha.com/verifyNote
Usually you would not send that POST request yourself, but use one of our pre-built integrations.
Response
Here’s how a successful response from /verify endpoint looks like:
{
"success": true,
"timestamp": "2025-01-13T16:17:27+00:00",
"origin": "privatecaptcha.com",
"code": 0
}Verifying captcha
Verification status is defined by a single field only: success (boolean) must be equal to true.
Error codes
Note
If code is not zero, it does not mean that verification failed. See details below.
Default /verify endpoint should be used with one of the integration SDKs which allow you to get a string description of the numeric error code.
reCAPTCHA-compatible /siteverify endpoint will contain the string version in error-codes field.
code can be one of the error codes:
| Error code | Description |
|---|---|
no-error |
No error (shown here for completeness) |
error-other |
Unspecified error |
solution-duplicates |
Solution contains duplicates |
solution-invalid |
Solution verification error |
solution-bad-format |
Solution has invalid format |
puzzle-expired |
Puzzle for this solution has expired |
property-invalid |
Property for this puzzle/solution cannot be found |
property-owner-mismatch |
API key’s owner does not have permission for property |
solution-verified-before |
Solution has been already verified |
property-test |
Test property is used for verification |
maintenance-mode |
Maintenance mode (see below) |
integrity-error |
Puzzle or solution integrity is compromised |
Errors during successful verification
There are a couple of cases, when success in response will be equal to true (successful verification), but code will not be zero. This is made in order to help you distinguish certain use-cases of captcha (and decide yourself if you trust submissions):
- When you’re using a test property,
codewill beproperty-test(but verification will succeed). - During maintenance mode, Private Captcha still verifies cryptographic solution validity, however, account validity might not be possible to verify. If solution is valid,
successin response is equal totrue, butcodewill bemaintenance-mode. - If you configured property to “Accept repeated solutions” (during verification window), verification of repeated solution will cause
codeto besolution-verified-before.