Errors worth branching on
These five failures cover the session attach (POST /api/v1/cobrowse/sessions//host), on every operator join. Each block below is a full{ error, meta } envelope as the API returns it, and the matrix at the bottom answers retry vs surface for the same five classes. For the platform-wide decision table these branches plug into, see the error handling guide.
401 — Unauthorized
401 on this page is the bearer key failing before the route ran — it never means the resource is wrong. Rotate the key or re-mint the scoped token; retrying the same request changes nothing.
403 — Forbidden
403 means the key authenticated but the operation is gated by scope — check the key’s scopes on the developer page; a 403 is never a data-not-found shape.
422 — Schema
422 means the payload did not match the request schema — branch on error.details.field and resend with a JSON object for visitor_context instead of blind-retrying the same body.
429 — Rate
Retry-After header and error.details.retry_after are both set on every 429 — resend the SAME request after the lower of the two.
409 — Conflict
60-second retry matrix
SDK surface bridge — End a co-browse session, accept the pending join request, or join for real with the operator’s live key.
These three tabs mirror SDK status and coverage. Python fronts
client.request, Go fronts client.Request, and TS fronts fetch-TS — each with the live key.