Developer docs

Developer docsArtist shows

Artist shows

GET /v1/artists/{username}/shows returns published shows for a public artist username. It requires no authentication.

Request

The username path value is resolved case-insensitively. It must be between 3 and 64 characters and must not have leading or trailing whitespace.

Query parameters

ParameterTypeDescription
limitintegerNumber of rows to return, from 1 to 100. The default is 20.
cursorstringOpaque cursor from the previous response's pagination.next_cursor.

Example request

curl --fail-with-body \
  'https://api.b90hq.app/v1/artists/artist/shows?limit=20'

Response

The response contains data and a pagination object. This endpoint uses snake_case field names.

{
  "data": [
    {
      "id": "00000000-0000-4000-8000-000000000001",
      "short_code": "berlin-show",
      "title": "HQ at the venue",
      "event_date": "2026-10-10",
      "start_time": "2026-10-10T22:00:00.000Z",
      "end_time": "2026-10-11T04:00:00.000Z",
      "is_playtime_tba": false,
      "timezone": "Europe/Berlin",
      "location_name": "The venue",
      "location_city": "Berlin",
      "location_country": "Germany",
      "web_url": "https://joinhq.app/show/berlin-show",
      "thumbnail_url": "https://cdn.example.com/show.jpg",
      "artists": [
        {
          "artist_id": "00000000-0000-4000-8000-000000000002",
          "display_name": "Artist name",
          "username": "artist",
          "avatar_url": "https://cdn.example.com/avatar.jpg",
          "avatar_thumb_url": "https://cdn.example.com/avatar-thumb.jpg",
          "community_id": "00000000-0000-4000-8000-000000000003",
          "community_name": "Artist community",
          "start_time": "2026-10-10T22:00:00.000Z",
          "end_time": "2026-10-11T00:00:00.000Z",
          "is_playtime_tba": false
        }
      ],
      "created_at": "2026-08-01T12:00:00.000Z",
      "updated_at": null
    }
  ],
  "pagination": {
    "limit": 20,
    "has_next": true,
    "next_cursor": "opaque-cursor"
  }
}

Show fields

FieldTypeDescription
idstringStable show ID.
short_codestringPublic short code.
titlestringShow title.
event_datestringEvent date in YYYY-MM-DD format.
start_time, end_timestringISO 8601 timestamps.
is_playtime_tbabooleanAggregate flag: true only when all artist playtime rows are to be announced. Use the matching artists[].is_playtime_tba value for one artist.
timezonestringIANA timezone for the event.
location_name, location_city, location_countrystringPublic venue and location fields.
web_urlstring | nullShow URL, when available.
thumbnail_urlstring | nullPublic show image URL, when available.
artistsarrayPublic artist and timetable rows.
created_atstring | nullISO 8601 creation timestamp, when available.
updated_atstring | nullISO 8601 update timestamp, when available.

Artist rows contain public profile, community, and timetable fields. Nullable values are returned as null.

Pagination and ordering

Use pagination.next_cursor as the next request's cursor value. Treat it as opaque: do not decode or construct it yourself.

Results are ordered by start_time and then id in ascending order. When has_next is false, next_cursor is null.

The top-level is_playtime_tba value is an all-artists aggregate. For an individual artist, use the matching artists[].is_playtime_tba value. Any row marked with is_playtime_tba: true still contains fallback start_time and end_time values for scheduling; display the TBA state instead of presenting those fallback times as confirmed playtimes.

Errors

StatusErrorCause
400invalid_usernameThe username is outside the accepted length or whitespace bounds.
400invalid_limitlimit is not an integer from 1 to 100.
400invalid_cursorcursor is not a valid cursor returned by this endpoint.
404artist_not_foundNo public artist matches the username.
409username_ambiguousMore than one public artist matches the username.

The route is public and cacheable. It allows direct browser GET and OPTIONS requests from any origin with Access-Control-Allow-Origin: *.