Error Reference
Common error codes and how to fix them.
Error Codes
invalid_token
Meaning: Token is invalid or expired.
Fix: Re-authenticate for a fresh token.
Response: 401 { "error": "invalid_token" }
permission_denied
Meaning: Token lacks required permission.
Fix: Add permission to manifest; have merchant re-approve.
Response: 403 { "error": "permission_denied" }
plugin_not_found
Meaning: No plugin with given ID/slug.
Fix: Verify in Developer Console.
Response: 404 { "error": "plugin_not_found" }
plugin_not_installed
Meaning: Plugin not installed for target brand.
Fix: Direct merchant to install.
Response: 404 { "error": "plugin_not_installed" }
plugin_inactive
Meaning: Plugin installed but disabled.
Fix: Check health endpoint; ask merchant to re-enable.
Response: 403 { "error": "plugin_inactive" }
action_not_enabled
Meaning: Action not enabled for this install.
Fix: Check enabled_actions in brand plugin settings.
Response: 403 { "error": "action_not_enabled" }
manifest_invalid
Meaning: Manifest has validation errors.
Fix: Validate against schema in Developer Console.
Response: 422 { "error": "manifest_invalid" }
provider_unreachable
Meaning: Cannot reach your remote service.
Fix: Verify service is running and accessible.
Response: 502 { "error": "provider_unreachable" }
signature_invalid
Meaning: Request signature mismatch.
Fix: Verify webhook_secret and raw body signing.
Response: 401 { "error": "signature_invalid" }
webhook_replay_detected
Meaning: Timestamp too old.
Fix: Sync server clock (NTP); send requests promptly.
Response: 401 { "error": "webhook_replay_detected" }
rate_limited
Meaning: Too many requests.
Fix: Implement exponential backoff; cache responses.
Response: 429 { "error": "rate_limited", "retry_after": 60 }
validation_failed
Meaning: Request body invalid.
Fix: Check body against endpoint schema.
Response: 422 { "error": "validation_failed" }
health_check_failed
Meaning: Health endpoint didn't respond correctly.
Fix: Return 200 { "status": "ok" } within 5 seconds.
Response: 503 { "error": "health_check_failed" }