(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{344:function(t,e,s){"use strict";s.r(e);var a=s(28),r=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"errors-status-codes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#errors-status-codes"}},[t._v("#")]),t._v(" Errors & Status Codes")]),t._v(" "),e("h2",{attrs:{id:"error-format"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-format"}},[t._v("#")]),t._v(" Error Format")]),t._v(" "),e("p",[t._v("Every error response uses the same envelope:")]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"success"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"error"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"code"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ERROR_CODE"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Human-readable description"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("Validation errors include an extra "),e("code",[t._v("details")]),t._v(" field with per-field messages:")]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"success"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"error"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"code"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"VALIDATION_ERROR"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"The given data was invalid"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"details"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"email"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"The email field is required."')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"per_page"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"The per page must be between 1 and 100."')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"http-status-codes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#http-status-codes"}},[t._v("#")]),t._v(" HTTP Status Codes")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Code")]),t._v(" "),e("th",[t._v("Meaning")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("200")]),t._v(" "),e("td",[t._v("Request succeeded")])]),t._v(" "),e("tr",[e("td",[t._v("201")]),t._v(" "),e("td",[t._v("Resource created — returned by "),e("code",[t._v("POST /contact")])])]),t._v(" "),e("tr",[e("td",[t._v("400")]),t._v(" "),e("td",[t._v("Bad request — invalid parameter format (e.g. malformed "),e("code",[t._v("tag_ids")]),t._v(" list)")])]),t._v(" "),e("tr",[e("td",[t._v("401")]),t._v(" "),e("td",[t._v("Unauthorized — missing or invalid API key")])]),t._v(" "),e("tr",[e("td",[t._v("403")]),t._v(" "),e("td",[t._v("Forbidden — your key does not have access to this resource")])]),t._v(" "),e("tr",[e("td",[t._v("404")]),t._v(" "),e("td",[t._v("Not found — the requested resource does not exist")])]),t._v(" "),e("tr",[e("td",[t._v("409")]),t._v(" "),e("td",[t._v("Conflict — the resource already exists (e.g. duplicate contact email)")])]),t._v(" "),e("tr",[e("td",[t._v("422")]),t._v(" "),e("td",[t._v("Unprocessable — validation failed; see "),e("code",[t._v("error.details")]),t._v(" for field-level errors")])]),t._v(" "),e("tr",[e("td",[t._v("429")]),t._v(" "),e("td",[t._v("Too many requests — you have exceeded the rate limit (600 requests/minute)")])]),t._v(" "),e("tr",[e("td",[t._v("500")]),t._v(" "),e("td",[t._v("Server error — something went wrong on our end")])])])]),t._v(" "),e("h2",{attrs:{id:"error-codes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-codes"}},[t._v("#")]),t._v(" Error Codes")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Code")]),t._v(" "),e("th",[t._v("HTTP")]),t._v(" "),e("th",[t._v("When it occurs")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("UNAUTHORIZED")])]),t._v(" "),e("td",[t._v("401")]),t._v(" "),e("td",[t._v("API key is missing, invalid, or disabled")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("FORBIDDEN")])]),t._v(" "),e("td",[t._v("403")]),t._v(" "),e("td",[t._v("The API key does not have access to the requested resource")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("NOT_FOUND")])]),t._v(" "),e("td",[t._v("404")]),t._v(" "),e("td",[t._v("Contact, tag, or sequence not found — or doesn't belong to your account")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("CONTACT_EXISTS")])]),t._v(" "),e("td",[t._v("409")]),t._v(" "),e("td",[e("code",[t._v("POST /contact")]),t._v(" — a contact with that email already exists")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("VALIDATION_ERROR")])]),t._v(" "),e("td",[t._v("400/422")]),t._v(" "),e("td",[t._v("Validation failed. "),e("strong",[t._v("400")]),t._v(" when a list field ("),e("code",[t._v("tag_ids")]),t._v(", "),e("code",[t._v("sequence_ids")]),t._v(") is malformed — no "),e("code",[t._v("details")]),t._v(". "),e("strong",[t._v("422")]),t._v(" for standard field errors — includes "),e("code",[t._v("details")]),t._v(".")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("SERVER_ERROR")])]),t._v(" "),e("td",[t._v("500")]),t._v(" "),e("td",[t._v("Unexpected server-side error")])])])]),t._v(" "),e("h2",{attrs:{id:"rate-limiting-429"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rate-limiting-429"}},[t._v("#")]),t._v(" Rate Limiting (429)")]),t._v(" "),e("p",[t._v("When you exceed 600 requests per minute (≈ 10 requests per second), the API responds with:")]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"message"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Too Many Attempts."')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("HTTP status: "),e("strong",[t._v("429 Too Many Requests")])]),t._v(" "),e("p",[t._v("Implement an exponential back-off or a request queue on your side to stay within limits.")]),t._v(" "),e("h2",{attrs:{id:"tips"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tips"}},[t._v("#")]),t._v(" Tips")]),t._v(" "),e("ul",[e("li",[t._v("Always check "),e("code",[t._v("success")]),t._v(" before reading "),e("code",[t._v("data")]),t._v(".")]),t._v(" "),e("li",[t._v("On a 422, iterate over "),e("code",[t._v("error.details")]),t._v(" to surface per-field validation messages to your users.")]),t._v(" "),e("li",[t._v("On a 429, wait at least 60 seconds before retrying.")]),t._v(" "),e("li",[t._v("On a 5xx, log the full response and retry after a short delay — these are transient.")])])])}),[],!1,null,null,null);e.default=r.exports}}]);