Files
SpotiFLAC-Mobile/docs/artist_concerts.md
T

3.3 KiB

Artist concerts

Any metadata extension can include an optional concerts list in getArtist or the artist object returned by handleUrl. The native metadata bridge preserves it as artist_info.concerts or artist.concerts, respectively. Older extensions may omit it; no concert button is shown for an empty list.

{
  "concerts": [{
    "id": "event-123",
    "location": "Example City, Region",
    "venue": "Example Hall",
    "start_at": "2026-10-07T01:00:00Z",
    "time_zone": "America/New_York",
    "detail_id": "event-123",
    "url": "https://example.com/events/123"
  }]
}
  • location and a valid ISO 8601 start_at are required. Date-only values (2026-10-06) are supported when a time has not been announced.
  • For UTC timestamps, supply the venue's IANA time_zone; the example above displays October 6 at 21:00, regardless of the listener's device time zone. Explicit offsets are also supported. Without a recognized time zone, the app preserves the wall-clock fields supplied in start_at.
  • id, venue, and url are optional. The app deduplicates by event ID (or date/location/venue), orders events by date, and accepts at most 500 entries.
  • Tapping an event opens its internal detail page. Only explicit ticket and map actions open external HTTP(S) links; the event URL is used for sharing.
  • Providers should return upcoming events only. Failure to fetch this optional information must not fail the artist's albums or top tracks.

The badge opens a native schedule with artist identity, venue-local date tiles, and event details. Labels are provider-neutral in both application themes. Concert metadata is supplied with the artist response, so the schedule opens immediately without a second loading state or network request.

The schedule follows the application's light/dark theme. The detail page uses the artist portrait's palette and light text in either theme, including its loading placeholders. Any metadata extension can implement getConcert(id) and supply detail_id on its events. The app requests it only when opening an event through getProviderMetadata(provider, "concert", detail_id), receiving the generic concert envelope. Older providers without detail_id still open a detail page with the schedule's date and venue.

{
  "id": "event-123",
  "artist_name": "Example Artist",
  "title": "Example Tour",
  "cover_url": "https://example.com/artist.jpg",
  "start_at": "2026-10-07T01:00:00Z",
  "end_at": "2026-10-07T04:00:00Z",
  "time_zone": "America/New_York",
  "venue": "Example Hall",
  "address": "123 Example Street",
  "ticket_url": "https://example.com/tickets/123",
  "map_url": "https://example.com/maps/123",
  "url": "https://example.com/events/123",
  "attribution": "Powered by Example Events",
  "set_list": {
    "id": "playlist-123",
    "name": "Example Tour Set List",
    "cover_url": "https://example.com/set-list.jpg"
  }
}

All detail fields are optional. Omit unavailable actions instead of fabricating links. Set lists open the existing internal playlist screen using the same metadata provider. Calendar actions present a system editor for the user to review and save; no event is added automatically. iOS 17+ needs no calendar read permission; iOS 16 requests legacy permission. Android uses an insert intent. Failed detail requests leave the date and venue visible with Retry.