Skip to content
Guide · Developer · 6 min

Troubleshooting (camera blocked, blurry rejections, duplicate image, webhook signature mismatch)

The four problems you are most likely to meet, and how to fix them.

Camera is blocked or does not start

  • The page must be HTTPS (or localhost). Plain http:// on a LAN IP will not expose the camera.
  • The user may have denied permission. They need to re-enable Camera for the site in browser settings and reload.
  • In an iframe the camera needs delegation (allow="camera") and matching response headers. The default Permissions-Policy: camera=(self) only allows the flow's own origin. See the website integration guide.
  • In a WebView the app must grant the permission (see the mobile guide).
  • Another app may be using the camera. Close it and retry.

Photos keep getting rejected as blurry

  • Ask the user for good light, a still hand, the card filling the frame, and to tap to focus.
  • Low-end cameras and heavy compression score low on the sharpness measure. If many genuine users are rejected, review the values on real traffic and lower DOC_BLUR_RETRY carefully.
  • Dark, glare and low-resolution rejections are separate checks: read the error message shown to the user.

Duplicate image or duplicate ID

  • The same photo used for front and back is rejected (SAME_IMAGE_BOTH_SIDES). The user must photograph each side.
  • An image already used in another finished session of the same company is flagged for review. Legitimate cause: a user who retried with a saved photo. Reviewers decide.
  • With checkCINUniqueness: true, a second verification of the same ID number is refused with 409 DUPLICATE_CIN_NUMBER.

Webhook signature mismatch

  1. Use the raw bodyCompute the HMAC over the exact received bytes. Body parsers that re-serialize JSON change the bytes.
  2. Use the right secretIt is the App's secret key. Only if the session has no app is the company API key used.
  3. Build the signed string correctly<t>.<rawBody> with a literal dot, where t is the value from the header, and compare hex digests in constant time.
  4. Check the clockIf your server clock drifts more than five minutes you will reject valid events. Sync with NTP.
  5. Check your proxySome gateways modify or compress bodies. Verify at the application, before any transformation.

Other status codes

401 wrong or inactive key, 402 quota reached, 403 flow not enabled or wrong company, 409 session closed, 413 file above 10 MB, 415 unsupported type or PDF, 429 slow down and respect Retry-After.