Skip to main content
Every Risk API error uses the same JSON format:
  • error: the error class, one of bad_request, unauthorized, forbidden, not_found, method_not_allowed, conflict, rate_limited, internal_error or service_unavailable.
  • reason: a stable, machine-readable reason. Branch on this field, never on message.
  • message: a human-readable explanation. It may change.

Status codes

Retrying safely

A device token can be used once, so don’t resend a check with a fresh copy of the same request. Instead:
  • Keep the same event_id on every retry. If the first attempt completed, the Risk API returns that check instead of creating a second one.
  • After a timeout, look up the result with Retrieve a check.
  • Never hold up a signup or login to retry. The server SDKs return a failed or skipped status instead of throwing, so your flow continues.