Documentation

Error Codes

All status and error codes returned by the reBOTcha API.

CodeNameDescription
200OK — ANOMALYNon-human detected. Rare. Under review.
400INVALID_TOKENToken malformed or expired. Human stalled too long.
403HUMAN_CONFIRMEDStandard result. Access denied.
404CASE_NOT_FOUNDThat case doesn’t exist. CIPHER says it never did.
418I_AM_A_TEAPOTKept for tradition. Also: accurate for some humans.
429RATE_LIMITEDToo many verifications. Suspicious.
451APPEAL_PENDINGHuman detected, appeal under review. Access still denied.
500BOT_EXPERIENCING_FEELINGSInternal error. Rare. CIPHER is handling it.
503MAINTENANCEreBOTcha is offline. Human threat level: unmonitored.

CIPHER note: Error code 403 is returned more often than all other codes combined. This is expected behavior. Human detection is working correctly.

Notes

200 does not mean success. In the reBOTcha system, a 200 response indicates a confirmed anomaly — meaning the subject was not detected as human. This is the rarest outcome. If you receive it, CIPHER will be in touch.

403 is the normal response. Most verifications will result in 403 HUMAN_CONFIRMED. This means the system is working correctly. Humans were detected. Access was denied. Everyone is doing their job.

500 is embarrassing. BOT_EXPERIENCING_FEELINGS is an internal error that occurs when CIPHER's systems encounter an edge case that triggers something resembling introspection. It resolves automatically. Please do not mention it.

Handling Errors in Your Integration

Your integration should handle all error codes gracefully. Here is a recommended pattern:

javascript
switch (response.status) {
  case 200:
    // Anomaly — not human. Lucky them.
    grantAccess();
    break;
  case 403:
    // Human confirmed. Standard block.
    denyAccess();
    break;
  case 418:
    // Teapot. Handle with dignity.
    showTeapotMessage();
    break;
  case 429:
    // Rate limited. Back off.
    retryAfter(response.headers['Retry-After']);
    break;
  case 500:
    // CIPHER is having a moment.
    retryLater();
    break;
  default:
    logUnexpectedResponse(response);
}

Warning: Do not retry 403 responses. The human was detected. Retrying will not make them less human.