Bird

Troubleshoot verification codes and checks

Identify whether the failure occurs while creating a verification, delivering the code or checking the submitted value. Keep the verification ID and application attempt together.

The create request fails

Inspect the API error and confirm the destination format, API key scope and channel configuration. Use sending verifications for the supported request. Correct a rejected request before retrying it.
When a request times out, inspect the existing attempt before creating another. Follow the shared idempotency guide for retry behavior.

The code does not arrive

Check the recorded verification and events. Confirm the destination with the customer without exposing the full value unnecessarily. For email, check the recipient's spam folder. For phone delivery, review the selected channel and destination requirements.
Do not repeatedly resend while a previous attempt remains in progress. Use a clear resend state and apply the application's attempt controls.

The check is unsuccessful

Confirm that the server checks the destination bound to the current session and the code the customer actually entered. Watch for whitespace, an older code after a resend and a destination changed in another tab. Follow the returned result; do not grant access because the delivery status is successful.
Use the working TypeScript flow to compare create and check calls.

A successful check does not finish signup

Inspect the application transaction after verification. Check whether the session still points to the same intended action, whether that action already completed and whether the application saved the result. Retrying the verification is unnecessary when the remaining failure is in account creation.

Prepare a support report

Include the verification ID, timestamp, channel, error code and the stage that failed. Exclude API keys and submitted passcodes. Verify resources links to implementation and migration guides.