| 400 | invalid_phone | Phone number failed normalization/validation |
| 400 | invalid_state | Session not in valid state for action (cancel) |
| 400 | invalid_range | Analytics date range invalid (0–90 days) |
| 400 | invalid_organization | Malformed X-Shernova-Organization-Id |
| 400 | invalid_invitation | Invitation expired or invalid |
| 400 | owner_protected | Cannot change/remove organization owner |
| 400 | invalid_request | Invalid billing request (e.g. non-positive credits) |
| 400 | invalid_webhook_url | Webhook URL malformed |
| 400 | webhook_https_required | Webhook URL must use HTTPS |
| 400 | webhook_private_address | Webhook URL resolves to a private/reserved address |
| 400 | validation_error | Request body failed Zod schema validation |
| 401 | unauthorized | Missing or invalid auth token/key |
| 401 | invalid_credentials | Wrong email/password on login |
| 401 | invalid_refresh | Refresh token invalid or already used |
| 402 | plan_expired | Application plan has expired |
| 402 | insufficient_credits | No available credits for verification |
| 403 | account_inactive | Developer account disabled |
| 403 | forbidden | Insufficient permission for resource |
| 403 | app_disabled | Application is disabled |
| 403 | app_frozen | Application billing frozen by admin |
| 403 | package_mismatch | SDK package_name doesn't match registered app |
| 403 | signature_not_registered | Android SHA256 not registered |
| 403 | test_mode_only | Live key used where test keys are required (SH_013) |
| 404 | not_found | Resource not found |
| 404 | organization_not_found | No active organization for user |
| 409 | email_exists | Email already registered |
| 409 | member_exists | User already organization member |
| 409 | gateway_number_mismatch | Gateway heartbeat number mismatch |
| 409 | last_admin | Cannot demote last platform admin |
| 409 | self_protected | Cannot remove own admin access |
| 409 | receipt_already_used | Receipt JWT already verified (replay) |
| 409 | idempotency_conflict | Idempotency-Key conflict |
| 401 | receipt_invalid | Receipt JWT malformed or expired |
| 422 | webhook_redirect | Webhook URL redirected (not allowed) |
| 422 | webhook_rejected | Webhook endpoint rejected request |
| 422 | webhook_dns_failed | Webhook hostname DNS lookup failed |
| 422 | webhook_connection_failed | Could not connect to webhook URL |
| 429 | concurrent_limit_exceeded | Too many waiting sessions for app |