List check-ins
Check-ins
List check-ins
GET
List check-ins
Returns the global check-in feed, newest first, optionally narrowed
by the filters below. Records are anonymized: each carries the
fully expanded location (with its restaurant), but no user field, so
the feed cannot be attributed to members. For a member’s own history
use
Auth: API key in
GET /users/me/check_ins.
Tasting note - All filters are optional. A bare
GET /check_ins
returns the full paginated set (~15.7k records in staging), so page
deliberately when you omit filters.X-API-Key — no user token needed. Two requirements
beyond the header:
- The key must carry the
read:checkinsscope. Key scopes are set in the body of the key-mint request; the app’sallowed_scopesare not inherited, so a key minted with an empty body gets403here even if its app listsread:checkins. - Send a non-empty
User-Agent. The edge rejects a missing or emptyUser-Agentwith a403HTML body, but any non-empty value — including SDK andcurldefaults — passes.
Filters
Combinations AND together.
?restaurant={uuid}&created_after=2026-06-01T00:00:00Z
returns only that restaurant’s check-ins since the cutoff.
Tasting note - The filter key is the bare resource name, same trap
as
/memberships: restaurant,
not restaurant_id. Unknown filter names (restaurant_id,
location_id, user, user_id) are silently ignored and return the
unfiltered set. A well-formed UUID that matches nothing is not an
error — it returns 200 with an empty list and total_count: 0.Example
Response
Schema
There is no user field.
Errors
400 - bad timestamp format
400 - malformed UUID
401 - missing API key
403 - key missing the scope
See also
- List my check-ins: a member’s own history, via their OAuth token.
- Check-in feed: render a feed from one filtered call.