Problems
Every RFC 9457 problem Payssage can answer, by status.
Every Payssage error is an application/problem+json body: type, status, title, detail and instance are always present, plus errors: [{ field, message }] when request fields are at fault. A problem's type is {API_URL}/problems/{slug}, which the API itself serves as documentation. Branch on the slug at the end of type, not on title or detail. The members listed below a problem are its own, on top of the standard ones.
400
Add Owner To Org
add-owner-to-org — Owners can't be added to organizations they own.
{
"type": "https://api.payssage.trieoh.com/problems/add-owner-to-org",
"status": 400,
"title": "Add Owner To Org",
"detail": "…",
"instance": "/…"
}Add Self To Org
add-self-to-org — Users can't add themselves to organizations.
{
"type": "https://api.payssage.trieoh.com/problems/add-self-to-org",
"status": 400,
"title": "Add Self To Org",
"detail": "…",
"instance": "/…"
}Already Org Member
already-org-member — User is already a member of the organization.
{
"type": "https://api.payssage.trieoh.com/problems/already-org-member",
"status": 400,
"title": "Already Org Member",
"detail": "…",
"instance": "/…"
}Batch Failed
batch-failed — Some items of a batch failed; each is answered as its own problem.
| Member | Type | Description |
|---|---|---|
items | object[] |
{
"type": "https://api.payssage.trieoh.com/problems/batch-failed",
"status": 400,
"title": "Batch Failed",
"detail": "…",
"instance": "/…",
"items": []
}Intent Status
intent-status — The intent's status does not allow the action.
| Member | Type | Description |
|---|---|---|
action | string | The refused action, such as refunded or cancelled. |
intent_status | string | The intent's current status. |
{
"type": "https://api.payssage.trieoh.com/problems/intent-status",
"status": 400,
"title": "Intent Status",
"detail": "…",
"instance": "/…",
"action": "…",
"intent_status": "…"
}Invalid Checkout Provider Data
invalid-checkout-provider-data — Invalid checkout_provider_data.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-checkout-provider-data",
"status": 400,
"title": "Invalid Checkout Provider Data",
"detail": "…",
"instance": "/…"
}Invalid Flow
invalid-flow — Invalid flow.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-flow",
"status": 400,
"title": "Invalid Flow",
"detail": "…",
"instance": "/…"
}Invalid Metadata
invalid-metadata — Invalid metadata.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-metadata",
"status": 400,
"title": "Invalid Metadata",
"detail": "…",
"instance": "/…"
}Invalid Provider
invalid-provider — Invalid provider.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-provider",
"status": 400,
"title": "Invalid Provider",
"detail": "…",
"instance": "/…"
}Invalid Provider Data
invalid-provider-data — Invalid provider_data.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-provider-data",
"status": 400,
"title": "Invalid Provider Data",
"detail": "…",
"instance": "/…"
}Invalid Request
invalid-request — Invalid request.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-request",
"status": 400,
"title": "Invalid Request",
"detail": "…",
"instance": "/…"
}Not Org Member
not-org-member — User is not a member of the organization.
{
"type": "https://api.payssage.trieoh.com/problems/not-org-member",
"status": 400,
"title": "Not Org Member",
"detail": "…",
"instance": "/…"
}Provider Mismatch
provider-mismatch — Provider mismatch.
{
"type": "https://api.payssage.trieoh.com/problems/provider-mismatch",
"status": 400,
"title": "Provider Mismatch",
"detail": "…",
"instance": "/…"
}Provider Not Implemented
provider-not-implemented — Provider not implemented.
{
"type": "https://api.payssage.trieoh.com/problems/provider-not-implemented",
"status": 400,
"title": "Provider Not Implemented",
"detail": "…",
"instance": "/…"
}Provider Rejected
provider-rejected — The payment provider rejected the request.
| Member | Type | Description |
|---|---|---|
provider | string | The provider's name. |
reason | string | Payssage's reading of the provider's cause, or empty. |
{
"type": "https://api.payssage.trieoh.com/problems/provider-rejected",
"status": 400,
"title": "Provider Rejected",
"detail": "…",
"instance": "/…",
"provider": "…",
"reason": "…"
}Remove Org Owner
remove-org-owner — Cannot remove the owner of the organization.
{
"type": "https://api.payssage.trieoh.com/problems/remove-org-owner",
"status": 400,
"title": "Remove Org Owner",
"detail": "…",
"instance": "/…"
}Remove Self From Org
remove-self-from-org — Cannot remove yourself from the organization.
{
"type": "https://api.payssage.trieoh.com/problems/remove-self-from-org",
"status": 400,
"title": "Remove Self From Org",
"detail": "…",
"instance": "/…"
}Seller Flow Needs Wallet
seller-flow-needs-wallet — Wallet_id is required for seller flow.
{
"type": "https://api.payssage.trieoh.com/problems/seller-flow-needs-wallet",
"status": 400,
"title": "Seller Flow Needs Wallet",
"detail": "…",
"instance": "/…"
}Seller Not In Wallet
seller-not-in-wallet — Seller does not belong to wallet.
{
"type": "https://api.payssage.trieoh.com/problems/seller-not-in-wallet",
"status": 400,
"title": "Seller Not In Wallet",
"detail": "…",
"instance": "/…"
}Unsupported Provider
unsupported-provider — Payssage has no payment provider by this name.
| Member | Type | Description |
|---|---|---|
provider | string | The provider's name. |
{
"type": "https://api.payssage.trieoh.com/problems/unsupported-provider",
"status": 400,
"title": "Unsupported Provider",
"detail": "…",
"instance": "/…",
"provider": "…"
}Validation Failed
validation — The request is malformed or breaks a rule; `errors` names the
offending fields.
{
"type": "https://api.payssage.trieoh.com/problems/validation",
"status": 400,
"title": "Validation Failed",
"detail": "…",
"instance": "/…"
}Webhook Missing Data ID
webhook-missing-data-id — Mercadopago webhook: missing data.id.
{
"type": "https://api.payssage.trieoh.com/problems/webhook-missing-data-id",
"status": 400,
"title": "Webhook Missing Data ID",
"detail": "…",
"instance": "/…"
}Webhook Not Implemented
webhook-not-implemented — Webhook handling not implemented for this provider.
{
"type": "https://api.payssage.trieoh.com/problems/webhook-not-implemented",
"status": 400,
"title": "Webhook Not Implemented",
"detail": "…",
"instance": "/…"
}Webhook Payload Invalid
webhook-payload-invalid — Mercadopago webhook: invalid payload.
{
"type": "https://api.payssage.trieoh.com/problems/webhook-payload-invalid",
"status": 400,
"title": "Webhook Payload Invalid",
"detail": "…",
"instance": "/…"
}401
API Keys Not Accepted
api-keys-not-accepted — This API takes bearer tokens only, not API keys.
{
"type": "https://api.payssage.trieoh.com/problems/api-keys-not-accepted",
"status": 401,
"title": "API Keys Not Accepted",
"detail": "…",
"instance": "/…"
}Email Not Verified
email-not-verified — The caller must verify their email address first.
{
"type": "https://api.payssage.trieoh.com/problems/email-not-verified",
"status": 401,
"title": "Email Not Verified",
"detail": "…",
"instance": "/…"
}Invalid API Key
invalid-api-key — The API key is unknown, malformed or revoked.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-api-key",
"status": 401,
"title": "Invalid API Key",
"detail": "…",
"instance": "/…"
}Invalid Token
invalid-token — The bearer token does not parse, its signature or issuer is
wrong, or it is not valid yet.
{
"type": "https://api.payssage.trieoh.com/problems/invalid-token",
"status": 401,
"title": "Invalid Token",
"detail": "…",
"instance": "/…"
}Provider Unauthorized
provider-unauthorized — The payment provider refused Payssage's credentials.
| Member | Type | Description |
|---|---|---|
provider | string | The provider's name. |
reason | string | Payssage's reading of the provider's cause, or empty. |
{
"type": "https://api.payssage.trieoh.com/problems/provider-unauthorized",
"status": 401,
"title": "Provider Unauthorized",
"detail": "…",
"instance": "/…",
"provider": "…",
"reason": "…"
}Token Expired
token-expired — The bearer token has expired; refresh it and retry.
{
"type": "https://api.payssage.trieoh.com/problems/token-expired",
"status": 401,
"title": "Token Expired",
"detail": "…",
"instance": "/…"
}Unauthenticated
unauthenticated — The request carries no credentials: no bearer token and no API
key where the operation needs one.
{
"type": "https://api.payssage.trieoh.com/problems/unauthenticated",
"status": 401,
"title": "Unauthenticated",
"detail": "…",
"instance": "/…"
}Webhook Signature Mismatch
webhook-signature-mismatch — Mercadopago webhook: signature mismatch.
{
"type": "https://api.payssage.trieoh.com/problems/webhook-signature-mismatch",
"status": 401,
"title": "Webhook Signature Mismatch",
"detail": "…",
"instance": "/…"
}Webhook Signature Missing
webhook-signature-missing — Mercadopago webhook: missing ts or v1 in x-signature header.
{
"type": "https://api.payssage.trieoh.com/problems/webhook-signature-missing",
"status": 401,
"title": "Webhook Signature Missing",
"detail": "…",
"instance": "/…"
}403
Insufficient Role
insufficient-role — The caller's role does not allow the operation.
{
"type": "https://api.payssage.trieoh.com/problems/insufficient-role",
"status": 403,
"title": "Insufficient Role",
"detail": "…",
"instance": "/…"
}Not Resource Owner
not-resource-owner — Insufficient permissions.
{
"type": "https://api.payssage.trieoh.com/problems/not-resource-owner",
"status": 403,
"title": "Not Resource Owner",
"detail": "…",
"instance": "/…"
}Seller Revoked
seller-revoked-checkout — The seller revoked Payssage's access, so it cannot be charged.
| Member | Type | Description |
|---|---|---|
seller_id | string | The seller. |
{
"type": "https://api.payssage.trieoh.com/problems/seller-revoked-checkout",
"status": 403,
"title": "Seller Revoked",
"detail": "…",
"instance": "/…",
"seller_id": "…"
}404
Not Found
not-found — The requested resource does not exist.
{
"type": "https://api.payssage.trieoh.com/problems/not-found",
"status": 404,
"title": "Not Found",
"detail": "…",
"instance": "/…"
}Provider Not Found
provider-not-found — The payment provider does not know the resource.
| Member | Type | Description |
|---|---|---|
provider | string | The provider's name. |
reason | string | Payssage's reading of the provider's cause, or empty. |
{
"type": "https://api.payssage.trieoh.com/problems/provider-not-found",
"status": 404,
"title": "Provider Not Found",
"detail": "…",
"instance": "/…",
"provider": "…",
"reason": "…"
}Unhandled Webhook Event
unhandled-webhook-event — Payssage does not handle this webhook event type.
| Member | Type | Description |
|---|---|---|
event_type | string | The event type. |
{
"type": "https://api.payssage.trieoh.com/problems/unhandled-webhook-event",
"status": 404,
"title": "Unhandled Webhook Event",
"detail": "…",
"instance": "/…",
"event_type": "…"
}Unknown Webhook Provider
unknown-webhook-provider — Unknown webhook provider.
{
"type": "https://api.payssage.trieoh.com/problems/unknown-webhook-provider",
"status": 404,
"title": "Unknown Webhook Provider",
"detail": "…",
"instance": "/…"
}Webhook Intent Not Found
webhook-intent-not-found — No intent was created for the webhook's payment.
| Member | Type | Description |
|---|---|---|
payment_id | string | The provider's payment. |
{
"type": "https://api.payssage.trieoh.com/problems/webhook-intent-not-found",
"status": 404,
"title": "Webhook Intent Not Found",
"detail": "…",
"instance": "/…",
"payment_id": "…"
}409
Credentials Connected
credentials-connected — Credentials for this provider are already connected to this wallet.
{
"type": "https://api.payssage.trieoh.com/problems/credentials-connected",
"status": 409,
"title": "Credentials Connected",
"detail": "…",
"instance": "/…"
}Delivery Exists
delivery-exists — A delivery for this event and endpoint already exists.
{
"type": "https://api.payssage.trieoh.com/problems/delivery-exists",
"status": 409,
"title": "Delivery Exists",
"detail": "…",
"instance": "/…"
}No Transaction To Cancel
no-transaction-to-cancel — Intent has no mercadopago transaction to cancel.
{
"type": "https://api.payssage.trieoh.com/problems/no-transaction-to-cancel",
"status": 409,
"title": "No Transaction To Cancel",
"detail": "…",
"instance": "/…"
}No Transaction To Refund
no-transaction-to-refund — Intent has no mercadopago transaction to refund.
{
"type": "https://api.payssage.trieoh.com/problems/no-transaction-to-refund",
"status": 409,
"title": "No Transaction To Refund",
"detail": "…",
"instance": "/…"
}Org Collector Connected
org-collector-connected — This collector is already connected to this organization.
{
"type": "https://api.payssage.trieoh.com/problems/org-collector-connected",
"status": 409,
"title": "Org Collector Connected",
"detail": "…",
"instance": "/…"
}Org Slug Taken
org-slug-taken — An organization with this slug already exists.
{
"type": "https://api.payssage.trieoh.com/problems/org-slug-taken",
"status": 409,
"title": "Org Slug Taken",
"detail": "…",
"instance": "/…"
}Org Wallet Name Taken
org-wallet-name-taken — A wallet with this name already exists in this organization.
{
"type": "https://api.payssage.trieoh.com/problems/org-wallet-name-taken",
"status": 409,
"title": "Org Wallet Name Taken",
"detail": "…",
"instance": "/…"
}Personal Collector Connected
personal-collector-connected — This collector is already connected to your account.
{
"type": "https://api.payssage.trieoh.com/problems/personal-collector-connected",
"status": 409,
"title": "Personal Collector Connected",
"detail": "…",
"instance": "/…"
}Personal Wallet Taken
personal-wallet-taken — A wallet with this name already exists.
{
"type": "https://api.payssage.trieoh.com/problems/personal-wallet-taken",
"status": 409,
"title": "Personal Wallet Taken",
"detail": "…",
"instance": "/…"
}Provider Conflict
provider-conflict — The payment provider answered with a conflict.
| Member | Type | Description |
|---|---|---|
provider | string | The provider's name. |
reason | string | Payssage's reading of the provider's cause, or empty. |
{
"type": "https://api.payssage.trieoh.com/problems/provider-conflict",
"status": 409,
"title": "Provider Conflict",
"detail": "…",
"instance": "/…",
"provider": "…",
"reason": "…"
}Seller Connected
seller-connected — This seller is already connected to this wallet.
{
"type": "https://api.payssage.trieoh.com/problems/seller-connected",
"status": 409,
"title": "Seller Connected",
"detail": "…",
"instance": "/…"
}Seller Provider Mismatch
seller-provider-mismatch — The seller is connected through another payment provider.
| Member | Type | Description |
|---|---|---|
seller_id | string | The seller. |
provider | string | The provider's name. |
{
"type": "https://api.payssage.trieoh.com/problems/seller-provider-mismatch",
"status": 409,
"title": "Seller Provider Mismatch",
"detail": "…",
"instance": "/…",
"seller_id": "…",
"provider": "…"
}Seller Revoked
seller-revoked — The seller revoked Payssage's access, so the payment cannot be refunded or cancelled here; it needs manual handling at the provider.
| Member | Type | Description |
|---|---|---|
seller_id | string | The seller. |
{
"type": "https://api.payssage.trieoh.com/problems/seller-revoked",
"status": 409,
"title": "Seller Revoked",
"detail": "…",
"instance": "/…",
"seller_id": "…"
}Webhook Event Exists
webhook-event-exists — A webhook event for this external id and type already exists for this provider.
{
"type": "https://api.payssage.trieoh.com/problems/webhook-event-exists",
"status": 409,
"title": "Webhook Event Exists",
"detail": "…",
"instance": "/…"
}Webhook Seller Token Missing
webhook-seller-token-missing — The intent's seller has no provider access token, so the webhook cannot be resolved.
| Member | Type | Description |
|---|---|---|
seller_id | string | The seller. |
intent_id | string | The intent. |
{
"type": "https://api.payssage.trieoh.com/problems/webhook-seller-token-missing",
"status": 409,
"title": "Webhook Seller Token Missing",
"detail": "…",
"instance": "/…",
"seller_id": "…",
"intent_id": "…"
}429
Provider Rate Limited
provider-rate-limited — The payment provider is rate limiting Payssage; retry later.
| Member | Type | Description |
|---|---|---|
provider | string | The provider's name. |
reason | string | Payssage's reading of the provider's cause, or empty. |
{
"type": "https://api.payssage.trieoh.com/problems/provider-rate-limited",
"status": 429,
"title": "Provider Rate Limited",
"detail": "…",
"instance": "/…",
"provider": "…",
"reason": "…"
}Too Many Requests
rate-limited — The caller exceeded the rate limit; retry later.
{
"type": "https://api.payssage.trieoh.com/problems/rate-limited",
"status": 429,
"title": "Too Many Requests",
"detail": "…",
"instance": "/…"
}500
Internal Server Error
internal-server-error — The server failed unexpectedly. The cause is logged, never
returned.
{
"type": "https://api.payssage.trieoh.com/problems/internal-server-error",
"status": 500,
"title": "Internal Server Error",
"detail": "Internal Server Error",
"instance": "/…"
}502
Provider Request Failed
provider-request-failed — Payment provider request failed.
{
"type": "https://api.payssage.trieoh.com/problems/provider-request-failed",
"status": 502,
"title": "Provider Request Failed",
"detail": "…",
"instance": "/…"
}Provider Unavailable
provider-unavailable — The payment provider failed on its side.
| Member | Type | Description |
|---|---|---|
provider | string | The provider's name. |
reason | string | Payssage's reading of the provider's cause, or empty. |
{
"type": "https://api.payssage.trieoh.com/problems/provider-unavailable",
"status": 502,
"title": "Provider Unavailable",
"detail": "…",
"instance": "/…",
"provider": "…",
"reason": "…"
}503
Identity Unavailable
identity-unavailable — IdentityX could not be reached to check the API key; retry
later.
{
"type": "https://api.payssage.trieoh.com/problems/identity-unavailable",
"status": 503,
"title": "Identity Unavailable",
"detail": "…",
"instance": "/…"
}Test Mode Only
test-mode-only — Test mode only.
{
"type": "https://api.payssage.trieoh.com/problems/test-mode-only",
"status": 503,
"title": "Test Mode Only",
"detail": "…",
"instance": "/…"
}