Skip to main content

Debugging

Every 4xx / 5xx response carries either an error_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_ins are silently ignored. A typo like restaurants= instead of restaurant= is treated as no filter supplied. Since an unfiltered /check_ins is valid, you won’t get an error; you’ll get the full unfiltered set, which is more rows than you expected.
  • /users/me/memberships ignores an unrecognized filter param. A typo like restaurant_id= instead of restaurant= 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.cohort is currently a free-form string (the enum was removed). Don’t switch on 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
If your response had an X-Request-Id header, paste that too.