Debugging
Every 4xx / 5xx response carries either anerror_code (in JSON envelopes) or a WWW-Authenticate reason (on empty-body 401s). Use this table to triage. See Pagination + errors for the full envelope catalogue.
Auth errors
Payment errors
Routing and request-shape errors
The 401 shape depends on the route, not the header you sent
A common gotcha: which 401 envelope you see is determined by the route family’s gating filter, not by which credential you happened to send.
If you accidentally send the wrong credential type, the 401 looks
exactly like a missing-credential 401: there’s no friendly “you
sent the wrong header” message. Confirm you’re using the right
credential for the route family before chasing token-validity bugs.
A
403 (rather than 401) means the token is valid but lacks the
scope the route needs, not a credential-type problem.
Silent failures worth knowing
These don’t return errors, but they don’t do what you’d expect either.- Unknown query parameters on
/check_insare silently ignored. A typo likerestaurants=instead ofrestaurant=is treated as no filter supplied. Since an unfiltered/check_insis valid, you won’t get an error; you’ll get the full unfiltered set, which is more rows than you expected. /users/me/membershipsignores an unrecognized filter param. A typo likerestaurant_id=instead ofrestaurant=returns the unfiltered membership set rather than an error.- Filter params on
/restaurants(cohort,cuisine) and/locations(restaurant,neighborhood,payments_enabled,is_club) are accepted but not implemented server-side. Filter client-side until they ship. Restaurant.cohortis currently a free-form string (the enum was removed). Don’tswitchon a fixed value set.Coordinate { latitude: 0.0, longitude: 0.0 }indicates missing geocoding, not a real point. Filter these out before placing map markers.- Member routes are subject-scoped to the token.
/users/me/*returns the authenticated member’s own data: there’s no UUID in the path and you can’t read another member’s data with the token. The legacy/users/{id}/*routes are gone (they now 404). See OAuth → Step 3 for the model.
Still stuck?
Contact Support and include:- The request URL and your headers (redacted)
- The status code and response body you got
- What you expected
- The time of the call (UTC) so the team can trace it
X-Request-Id header, paste that too.