Error catalog
API errors include a docUrl field linking to these guides. Slugs are derived from the machine-readable code field (. and _ → -).
Documented errors
- Invalid credentials —
invalid_credentials(401) - User not confirmed —
user_not_confirmed(401) - Product not found —
product.not_found(404) - Product archived —
product.archived(422) - Product not in draft —
product.not_draft(409) - Product or plan values rejected —
product.provider_rejected(422) - Plan amount out of range —
plan.amount_out_of_range(400) - Plan billing interval too long —
plan.billing_period_too_long(400) request.numeric_out_of_range(400) — a number in the request is too large to store. Lower the amount, price or quantity; retrying the same request will not help.product.name_contains_markup(400) — the product name contains an HTML-like tag such as<b>or<Beta>. Theerrorsentry fornamesays how to fix it; use parentheses instead of angle brackets, e.g.Pro (Beta).- Checkout plan not found —
checkout.plan_not_found(404) - Transaction not found —
transaction.not_found(404) - Transaction not refundable —
transaction.not_refundable(422) - Refund exceeds available balance —
transaction.refund_insufficient_funds(400) - Merchant not found —
merchant.not_found(404) - Merchant not linked —
merchant.not_linked(400) - Company provisioning failed —
company_provisioning_failed(409) - Business name already in use —
business_name_taken(409) - Email cannot receive mail —
email_undeliverable(400) - Invoice not found —
invoice.not_found(404) - Customer not found —
customer.not_found(404) - API key not found —
api_key.not_found(404) - Webhook destination not found —
webhook_destination.not_found(404) - Webhook URL forbidden —
webhook_destination.url_forbidden(400) - Discount code not found —
discount_code.not_found(404) - User not found —
user.not_found(404) - User already a team member —
team.already_member(409) - Team role forbidden —
team.role_forbidden(403)
MCP authentication
Returned by the MCP endpoint (/api/mcp) with HTTP 401. The WWW-Authenticate header still carries the OAuth discovery challenge.
- Missing MCP token —
missing_token(401) - Invalid MCP token —
invalid_token(401) - MCP token expired —
token_expired(401) token_validation_unavailable(401) — the token could not be checked because the backend is unavailable. Retry in a moment; do not generate a new token.
How docUrl works
https://doc.mor.payments.ai/errors/{slug} — e.g. product.not_found → /errors/product-not-found