Errors
Every error is an RFC 9457 problem details body with a stable code and a link to its page.
Shape
Errors answer with a 4xx or 5xx status and Content-Type: application/problem+json:
{
"type": "https://api.bymundi.com/problems/invalid_request",
"title": "Bad Request",
"status": 400,
"detail": "The passenger would not be valid.",
"code": "invalid_request",
"requestId": "req_7f3c…",
"errors": [{ "path": "email", "message": "Invalid email" }]
}
codeis stable: branch on it, never ondetailortitle.typeopens a page that explains the code and what to do.errors[], when present, names each failing field by its path in your request (ops.2.parentId).requestIdis also in theRequest-Idheader of every response, success or not. Quote it when you report a problem.
Some problems add members: requiresConfirmation on confirmation_required, occupiedDays on days_occupied.
What to retry
| Status | Retry? |
|---|---|
| 400, 401, 403, 404, 422 | No: fix the request. |
| 409 | After re-reading: the resource changed, or a request is still running. |
| 429 | Yes, after Retry-After seconds. |
| 500, 503 | Yes, with backoff and the same Idempotency-Key for writes. |
Every code
access_not_openalready_completealready_deletedalready_queuedambiguous_refbad_pairingbasket_rulesbeing_editedbody_too_largechange_not_appliedconfirmation_requiredconflictcontact_existsday_plan_refuseddays_occupieddecision_refuseddelivery_busydry_run_unsupportedduplicate_client_idempty_routeempty_selectionempty_updateendpoint_disabledendpoint_existsendpoint_limitentry_deletedevent_type_not_permittedexternal_id_takenfield_not_applicablefile_too_largefilter_too_broadfolder_not_in_tripforbiddenhttps_requiredidempotency_key_reusedinline_too_largeinsufficient_scopeinternalinvalid_base64invalid_blockinvalid_contentinvalid_cursorinvalid_idempotency_keyinvalid_jsoninvalid_lineinvalid_linesinvalid_parentinvalid_requestinvalid_rich_textinvalid_routeinvalid_stopinvalid_urlkey_invalidkind_mismatchmejora_needs_packagemetadata_too_largemethod_not_allowedmode_immutablenegative_priceno_contactno_designno_emailno_inversenot_a_base_linenot_an_imagenot_archivednot_deletednot_foundnothing_to_updateorigin_not_allowedoutput_contractowner_not_staffpackage_in_usepackage_slot_takenparent_not_foundpax_below_rosterpax_exceededpax_lockedpax_out_of_rangeplace_requiredplace_takenplan_refusedprivate_destinationquote_has_paymentsquote_soldrate_limitedrequest_in_progressroot_type_mismatchroster_lockedroute_not_foundroute_too_shortstop_not_foundstored_content_invalidtemplate_errortoo_many_imagestoo_many_packagestravelers_mismatchtrip_has_no_designunauthorizedundo_expiredunknown_addressunknown_imageunknown_lineunknown_packageunknown_stopunknown_templateunprocessableunresolvableunsupported_media_typeupload_incompleteupload_missingupstream_unavailable