{"openapi":"3.1.0","info":{"title":"bandori.live Open API","version":"1.0.0","description":"Read-only public data for BanG Dream! bands, songs, events, and setlists. The service is provided as-is without an availability SLA."},"servers":[{"url":"/api/v1"}],"tags":[{"name":"Bands"},{"name":"Songs"},{"name":"Events"}],"paths":{"/bands":{"get":{"tags":["Bands"],"summary":"List bands","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Band"}}}}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Preflight accepted"}}}},"/bands/{slug}":{"get":{"tags":["Bands"],"summary":"Get one band","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Band"}}}}}},"400":{"description":"Invalid request parameter","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Preflight accepted"}}}},"/songs":{"get":{"tags":["Songs"],"summary":"List and search songs","parameters":[{"name":"limit","in":"query","description":"Page size. Defaults to 500 and cannot exceed 1000.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":500}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the preceding response.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Case-insensitive title substring.","schema":{"type":"string","maxLength":100}},{"name":"category","in":"query","schema":{"type":"string","enum":["original","cover","project-common"]}},{"name":"band","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["id","releaseDate","title"],"default":"id"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SongListResponse"}}}},"400":{"description":"Invalid request parameter","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Preflight accepted"}}}},"/songs/{id}":{"get":{"tags":["Songs"],"summary":"Get one song","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Song"}}}}}},"400":{"description":"Invalid request parameter","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Preflight accepted"}}}},"/songs/{id}/events":{"get":{"tags":["Songs","Events"],"summary":"List events where a song was performed","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventSummary"}}}}}}},"400":{"description":"Invalid request parameter","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Preflight accepted"}}}},"/events":{"get":{"tags":["Events"],"summary":"List and search events with setlists","parameters":[{"name":"limit","in":"query","description":"Page size. Defaults to 500 and cannot exceed 1000.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":500}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the preceding response.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Case-insensitive title substring.","schema":{"type":"string","maxLength":100}},{"name":"band","in":"query","schema":{"type":"string"}},{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}},{"name":"setlistStatus","in":"query","schema":{"type":"string","enum":["missing","partial","complete"]}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListResponse"}}}},"400":{"description":"Invalid request parameter","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Preflight accepted"}}}},"/events/{eventernoteEventId}":{"get":{"tags":["Events"],"summary":"Get an event and its ordered setlist","parameters":[{"name":"eventernoteEventId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/EventDetail"}}}}}},"400":{"description":"Invalid request parameter","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Resource not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Preflight accepted"}}}}},"components":{"schemas":{"Band":{"type":"object","properties":{"slug":{"type":"string"},"nameJa":{"type":"string"},"nameEn":{"type":"string"},"displayOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"groupType":{"type":"string","enum":["band","project-common"]},"supportColor":{"anyOf":[{"type":"string"},{"type":"null"}]},"eventernoteActorId":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"musicbrainzArtistMbid":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]}},"required":["slug","nameJa","nameEn","displayOrder","groupType","supportColor","eventernoteActorId","musicbrainzArtistMbid"],"additionalProperties":false},"Song":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string"},"category":{"type":"string","enum":["original","cover","project-common"]},"bandSlug":{"anyOf":[{"type":"string"},{"type":"null"}]},"firstReleaseDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"hasBeenPlayedLive":{"type":"boolean"}},"required":["id","title","category","bandSlug","firstReleaseDate","hasBeenPlayedLive"],"additionalProperties":false},"EventSummary":{"type":"object","properties":{"eventernoteEventId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string"},"eventDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"venue":{"anyOf":[{"type":"string"},{"type":"null"}]},"performingBandSlugs":{"type":"array","items":{"type":"string"}},"setlistStatus":{"type":"string","enum":["missing","partial","complete"]},"sourceUrl":{"type":"string","format":"uri"}},"required":["eventernoteEventId","title","eventDate","venue","performingBandSlugs","setlistStatus","sourceUrl"],"additionalProperties":false},"EventDetail":{"type":"object","properties":{"eventernoteEventId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string"},"eventDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"venue":{"anyOf":[{"type":"string"},{"type":"null"}]},"performingBandSlugs":{"type":"array","items":{"type":"string"}},"setlistStatus":{"type":"string","enum":["missing","partial","complete"]},"sourceUrl":{"type":"string","format":"uri"},"setlist":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string"},"song":{"anyOf":[{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string"},"category":{"type":"string","enum":["original","cover","project-common"]},"bandSlug":{"anyOf":[{"type":"string"},{"type":"null"}]},"firstReleaseDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"hasBeenPlayedLive":{"type":"boolean"}},"required":["id","title","category","bandSlug","firstReleaseDate","hasBeenPlayedLive"],"additionalProperties":false},{"type":"null"}]}},"required":["position","title","song"],"additionalProperties":false}}},"required":["eventernoteEventId","title","eventDate","venue","performingBandSlugs","setlistStatus","sourceUrl","setlist"],"additionalProperties":false},"Pagination":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["limit","nextCursor"],"additionalProperties":false},"Problem":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string"}},"required":["type","title","status","detail","instance","code"],"additionalProperties":false},"SongListResponse":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Song"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"EventListResponse":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}}
