Skip to main content
GET
/
check_ins
List check-ins
curl --request GET \
  --url https://api.staging.blackbird.xyz/flynet/v1/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 GET /users/me/check_ins.
Chef’s warning - The user filter is gone. Passing user= (or user_id=) is silently ignored and returns the full unfiltered list — and since records carry no user field, there is nothing to match client-side either. Filter by restaurant or location.
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.
Auth: API key in X-API-Key — no user token needed. Two requirements beyond the header:
  1. The key must carry the read:checkins scope. Key scopes are set in the body of the key-mint request; the app’s allowed_scopes are not inherited, so a key minted with an empty body gets 403 here even if its app lists read:checkins.
  2. Send a browser-like User-Agent (e.g. a Mozilla string), or the WAF responds 403 with an HTML body.
Auth stateResponse
No X-API-Key header401 MISSING_API_KEY
Key without read:checkins403 insufficient_scope
Key with read:checkins200

Filters

ParameterTypeNotes
restaurantUUIDReturns check-ins at any location of this restaurant.
locationUUIDReturns check-ins at this specific location.
created_afterISO 8601 timestampVisits created on/after this instant. Epoch seconds rejected.
created_beforeISO 8601 timestampVisits created before this instant.
pageintegerZero-indexed. Default 0.
page_sizeintegerDefault 50.
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

curl "https://api.staging.blackbird.xyz/flynet/v1/check_ins?restaurant={uuid}&created_after=2026-06-01T00:00:00Z" \
  -H "X-API-Key: $API_KEY" \
  -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36"

Response

{
  "check_ins": [
    {
      "id": "dce67498-5d0a-4455-9bcf-95d54c033b02",
      "object": "check_in",
      "location": {
        "id": "c8d79a1f-6cb8-4e6d-9b58-b2796cd6cdad",
        "object": "location",
        "name": "CLOVER",
        "restaurant": {
          "id": "abd27597-6ffd-4ad0-a958-33a7f2d5afe7",
          "object": "restaurant",
          "name": "FLYBAR",
          "cuisine": ["Italian"],
          "cohort": "qsr",
          "price": 3,
          "tags": [],
          "asset": {
            "preview_1x": "https://images.blackbird.xyz/rock/1x.png?expire=8782ddb89c",
            "web_2x": "https://images.blackbird.xyz/rock/2x.png?expire=8782ddb89c",
            "full_3x": "https://images.blackbird.xyz/rock/3x.png?expire=8782ddb89c"
          },
          "website_url": "https://barbutonyc.com",
          "instagram_url": null,
          "created_at": "2024-01-15T20:21:23.253929Z",
          "updated_at": "2026-06-11T09:00:48.460864Z"
        },
        "neighborhood": {
          "id": "df7c85e9-907e-41cf-84f2-efb86175e89b",
          "object": "neighborhood",
          "name": "Astoria",
          "region": "New York, NY"
        },
        "slug": "flybar-clover",
        "address": {
          "street": "14-01 Broadway",
          "street2": "",
          "city": "Astoria",
          "state": "NY",
          "zipcode": "11106",
          "country": "USA"
        },
        "coordinate": { "latitude": 40.72556, "longitude": -73.99513 },
        "phone_number": "+19176229717",
        "time_zone": "America/New_York",
        "payments_enabled": true,
        "is_club": false,
        "reservation_url": null,
        "reservations_enabled": false,
        "google_place_id": null,
        "created_at": "2026-05-11T17:20:12.798637Z",
        "updated_at": "2026-06-09T17:57:08.762073Z"
      },
      "blackbird_pay_enabled": true,
      "created_at": "2026-06-10T17:32:56.113304Z",
      "ended_at": "2026-06-10T17:45:00.949869Z"
    }
  ],
  "pagination": {
    "total_count": 26,
    "total_pages": 26,
    "current_page": 0,
    "next_page": 1,
    "page_size": 1
  }
}

Schema

FieldTypeNotes
idUUIDCheck-in id.
objectstringAlways "check_in".
locationobjectFully expanded location, including its nested restaurant, neighborhood, address, and coordinate.
blackbird_pay_enabledbooleanWhether Blackbird Pay was available for the visit.
created_atISO 8601 timestampVisit start — this is the timestamp the date filters apply to.
ended_atISO 8601 timestamp | nullVisit end. null for ongoing visits.
There is no user field.

Errors

400 - bad timestamp format

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "Parse attempt failed for value [1748736000]",
    "param": null
  }
}

400 - malformed UUID

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "Invalid UUID string: not-a-uuid",
    "param": null
  }
}

401 - missing API key

{
  "status": 401,
  "message": "API key is required...",
  "error_code": "MISSING_API_KEY"
}

403 - key missing the scope

{
  "error": {
    "type": "authorization_error",
    "code": "insufficient_scope",
    "message": "Missing required scope: read:checkins",
    "param": null
  }
}

See also