2xx means the request succeeded, 4xx means something about the request needs to change, and 5xx means the problem is on Dotlet’s side.
Validation errors
A422 response means the request body didn’t match the expected shape — a missing required field, a value out of range, or the wrong type. The response lists every field that failed, not just the first one.
loc is the path to the offending field, starting from where it appears in the request — ["body", "contact", "phone"] means the phone field inside the contact object in the request body.
Action-specific errors
Some endpoints return200 with success: false and an error_message field instead of an HTTP error, because the request was well-formed but the underlying action — like a domain purchase or renewal — failed at the registrar. Always check success on these responses rather than only checking the HTTP status:
POST /registrar/purchase and POST /registrar/domains/{domain}/renew.
Retrying safely
GET requests are always safe to retry. For POST requests that create something — orders, purchases, DNS records — retrying after a timeout can create a duplicate. If a purchase or order request times out, check GET /registrar/orders for an existing order before resubmitting.