Skip to content

Problem types

USP uses RFC 9457 Problem Details for protocol errors. Every canonical type URI is under https://usp-protocol.dev/errors/ and uses a kebab-case slug. Clients branch on the exact URI, never on the human-readable title.

Not every USP error code is a Problem type. Specification Section 9.4.1 splits conditions into three disjoint families, and only the first family below has type URIs.

Protocol errors (RFC 9457 Problem types)

Returned with a 4xx or 5xx status and an application/problem+json body. The full matrix of status, type slug, JSON-RPC code and MCP data.code is in specification Section 9.4.3.

Business outcome codes (not Problem types)

These are not type URIs. The request succeeded, and the business is reporting a scheduling or policy outcome in a messages[] entry carried with HTTP 200 OK. Clients branch on messages[].code. The registry is specification Section 9.4.2.

slot_unavailable, hold_expired, booking_window_violated, capacity_exceeded, reschedule_limit_reached, cancellation_not_allowed, invalid_transition, payment_required, payment_expired, payment_amount_mismatch, actions_pending, price_mismatch, capabilities_incompatible.

The waitlist extension registers its own codes in specification Section 11.1.6.

Pages kept for older links: actions-pending, reschedule-limit-reached, slot-unavailable, slot-expired.

ESP frame codes (not Problem types)

The Embedded Scheduling Protocol carries failures as esp.error postMessage frames, which are neither HTTP responses nor JSON-RPC errors: canceled, payment_failed, slot_unavailable, internal_error. See specification Section 9.5.5.

Page kept for older links: payment-failed.