Skip to main content
Every error answer has the same shape. Its message is written for people: what is wrong, and how to fix it.
string
required
The error’s name: invalid, required, unauthorized, forbidden, notfound, conflict, tooManyRequests or error.
string
What is wrong, and how to fix it.
object
The details, by error.

Status codes

Show message to people when it says more than the error’s name. A bare 404 for an unknown id is just notfound: say “not found” in your own words there.

What the SDKs retry

A write that timed out may still have landed. Check before you send it again: a resend is a new write.

In the SDKs: nothing to catch

The SDKs retry what is safe, then throw what is left as one class per failure, carrying the site’s own words. You catch only what you want to react to.
Laravel’s exception handler takes care of the rest: every failure is logged with its site, route, status and request id, and rendered properly. A refused value becomes Laravel’s own validation response, so a controller needs no try:
NotFound renders a 404, RateLimited a 503 with Retry-After, anything else a 502.

Every class, and what it carries

The Laravel and TypeScript tabs each list them, with what is retried.