PUSH API · v1a
Error codes
Find public API and dashboard errors separately. Use the actual response to decide whether a request can be retried.
API
| Code | HTTP | Meaning |
|---|---|---|
| UNAUTHENTICATED | 401 | The credential is missing or cannot be authenticated. |
| PERMISSION_DENIED | 403 | The credential or signed-in account does not have permission for this operation. |
| RESOURCE_NOT_FOUND | 404 | The requested resource was not found within the current access scope. |
| IDEMPOTENCY_KEY_REUSED | 409 | The same idempotency key was used with different input. Inspect the earlier request and result before proceeding. |
| IDEMPOTENCY_IN_PROGRESS | 409 | A request using the same idempotency key is still processing. Wait for Retry-After before retrying the same request. |
| IDENTITY_REBIND_CONFLICT | 409 | The expected user binding changed during a concurrent update. Read the current state before deciding what to do. |
| IDENTITY_REBIND_IN_PROGRESS | 409 | An installation binding update is in progress. Retry the same request and key after Retry-After. |
| DELIVERY_NOT_RESOLVABLE | 409 | The delivery is not an unresolved unknown outcome that can be manually resolved. |
| DISPATCH_CONTROL_STALE | 409 | Dispatch control changed after it was read. Refresh the state and confirm the intended action. |
| PROVIDER_CONNECTION_EXISTS | 409 | A connection already exists for this provider and environment. Credential rotation is a separate operation. |
| PROVIDER_CREDENTIAL_IDENTITY_PENDING | 503 | Credential identity verification is not yet complete. Wait before trying again. |
| PROVIDER_CREDENTIAL_RECOVERY_REQUIRED | 409 | This credential requires the explicit recovery workflow, not ordinary rotation. |
| PROVIDER_CREDENTIAL_RECOVERY_NOT_REQUIRED | 409 | The current credential state does not require explicit recovery. Read the latest connection state. |
| PROVIDER_CREDENTIAL_RECOVERY_IN_PROGRESS | 409 | Credential recovery verification is in progress. Honor Retry-After before checking the same operation. |
| MALFORMED_REQUEST | 400 | The request cannot be parsed, for example because the body is not a JSON object or a path escape is malformed. |
| FIELD_REQUIRED | 422 | A required field or header is missing. Inspect field_errors. |
| METHOD_NOT_ALLOWED | 405 | This path does not accept the requested HTTP method. |
| REQUEST_TOO_LARGE | 413 | The HTTP request body exceeds the server limit. |
| PAYLOAD_TOO_LARGE | 422 | The serialized notification exceeds a provider payload limit. Reduce the message content. |
| RESERVED_DATA_KEY | 422 | A data key uses a reserved provider prefix or the Kits namespace. |
| UNKNOWN_FIELD | 422 | A request field is not in the supported registry. |
| FIELD_TYPE_MISMATCH | 422 | An input value has the wrong type. Inspect field_errors. |
| ATTRIBUTE_KEY_NOT_REGISTERED | 422 | The attribute key has not been registered. |
| EVENT_NAME_NOT_REGISTERED | 422 | The event name is unregistered or retired. |
| DEFINITION_LIMIT_EXCEEDED | 422 | The project environment has reached its attribute or event definition limit. |
| INSTALLATION_LIMIT_EXCEEDED | 422 | The app environment has reached its cumulative installation limit. Ask an operator to review capacity and retention. |
| RESERVED_NAMESPACE | 422 | The input uses a reserved namespace. |
| PROVIDER_CREDENTIAL_INVALID | 422 | The provider credential could not be verified. |
| PROVIDER_ENVIRONMENT_MISMATCH | 422 | The APNs sandbox/production environment does not match. |
| RATE_LIMITED | 429 | A request-rate or concurrency limit was reached. Honor Retry-After. |
| INTERNAL_ERROR | 500 | The server encountered an internal error. Follow the actual retry metadata and retain the request ID. |
| DISPATCH_PAUSED | 503 | Dispatch is paused for this app environment. The request was not accepted; an operator decides when to resume. |
| RESOURCE_ARCHIVED | 409 | The selected resource or an ancestor scope is archived, so this operation is unavailable. Check the current archive state. |
Dashboard
| Code | HTTP | Meaning |
|---|---|---|
| APP_PLATFORM_ALREADY_REGISTERED | 409 | This project environment already has an active app environment for the same platform, so no app environment was created or restored. Each project environment holds one Android app and one iOS app. Deactivate the existing app first, or, when creating, choose another environment kind. |
| AUTHENTICATION_FAILED | 401 | The authentication details could not be verified. Check the input or use password reset. |
| BROADCAST_ROLLOUT_BLOCKED | 409 | Dashboard broadcasts are not enabled for this app environment. An operator must review and enable them. |
| CONCURRENT_MUTATION | 409 | A concurrent change prevented completion. Read the latest state. |
| CONTROL_PLANE_UNAVAILABLE | 503 | The dashboard processing service is temporarily unavailable. Check later and contact the operator if it persists. |
| CSRF_INVALID | 403 | The browser origin or session protection is invalid. Reload the official dashboard and try again. |
| DISPATCH_CONTROL_STALE | 409 | Dispatch control changed after it was read. Refresh the state and confirm the intended action. |
| DISPATCH_PAUSED | 503 | Dispatch is paused for this app environment. The request was not accepted; an operator decides when to resume. |
| IDEMPOTENCY_IN_PROGRESS | 409 | A request using the same idempotency key is still processing. Wait for Retry-After before retrying the same request. |
| IDEMPOTENCY_KEY_REUSED | 409 | The same idempotency key was used with different input. Inspect the earlier request and result before proceeding. |
| INITIAL_SIGNUP_UNAVAILABLE | 410 | The initial signup link cannot be used. Request a new verification email from account creation; existing accounts should sign in or reset their password. |
| INVITATION_UNAVAILABLE | 410 | The invitation cannot be used. Ask an administrator to check it and issue a new invitation if needed. |
| LAST_ACTIVE_OWNER_REQUIRED | 409 | The last active owner cannot be removed or deactivated. Establish another active owner first. |
| MESSAGE_LIBRARY_PROJECT_COMPOSITION | 409 | This draft is saved for several apps of the project environment, so it was not overwritten with a composition for one app. Edit it from the project’s Create message screen, or save only its name, labels and message without a composition. |
| METHOD_NOT_ALLOWED | 405 | This path does not accept the requested HTTP method. |
| OUTCOME_ALREADY_RESOLVED | 409 | This delivery outcome is already final or is not eligible for manual resolution. |
| PASSWORD_RESET_UNAVAILABLE | 410 | The password-reset link cannot be used. Request a new reset from the login screen. |
| PERMISSION_DENIED | 403 | The credential or signed-in account does not have permission for this operation. |
| PROVIDER_CREDENTIAL_IDENTITY_PENDING | 503 | Credential identity verification is not yet complete. Wait before trying again. |
| PROVIDER_CREDENTIAL_RECOVERY_IN_PROGRESS | 409 | Credential recovery verification is in progress. Honor Retry-After before checking the same operation. |
| PROVIDER_CREDENTIAL_RECOVERY_NOT_REQUIRED | 409 | The current credential state does not require explicit recovery. Read the latest connection state. |
| PROVIDER_CREDENTIAL_RECOVERY_REQUIRED | 409 | This credential requires the explicit recovery workflow, not ordinary rotation. |
| RATE_LIMITED | 429 | A request-rate or concurrency limit was reached. Honor Retry-After. |
| REAUTHENTICATION_REQUIRED | 403 | Confirm your current password again before continuing with this sensitive operation. |
| REQUEST_TOO_LARGE | 413 | The HTTP request body exceeds the server limit. |
| RESOURCE_ARCHIVED | 409 | The selected resource or an ancestor scope is archived, so this operation is unavailable. Check the current archive state. |
| RESOURCE_NOT_FOUND | 404 | The requested resource was not found within the current access scope. |
| SESSION_REQUIRED | 401 | A valid dashboard session is required. Sign in and try again. |
| VALIDATION_FAILED | 422 | The input does not meet the request requirements. Inspect field_errors. |