{"openapi":"3.1.0","info":{"title":"Xtrada Data API","version":"0.4.0","description":"Xtrada Data API with database-checked server keys, shared quotas and five-minute source cache. Demand-driven event metadata observations are retained privately; they are not individual ticket transactions. Coverage is partial."},"servers":[{"url":"https://data.xtrada.dev","description":"Canonical domain after manual DNS/deploy setup"},{"url":"http://127.0.0.1:8080","description":"Local development"}],"security":[{"ApiKey":[]}],"paths":{"/v1/events":{"get":{"operationId":"listEvents","summary":"Search and browse events","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Case-insensitive event/venue/city substring."}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listEventsResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"events:read","description":"A nonempty q performs bounded discovery/search against configured sources on cache miss. Equivalent normalized queries share a five-minute cache across clients and instances; page size and cursor reuse the same source results. No source pagination crawl."}},"/v1/events/{id}":{"get":{"operationId":"getEvent","summary":"Event metadata and reported metrics","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Xtrada event ID"}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getEventResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"events:read"}},"/v1/events/{id}/sales":{"get":{"operationId":"listSales","summary":"Individual sales · unavailable","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Xtrada event ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."},{"name":"section","in":"query","required":false,"schema":{"type":"string"},"description":""}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listSalesResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"sales:read","description":"Currently returns 503 DATA_UNAVAILABLE. The configured sources do not provide a verified detailed sales ledger or historical series."}},"/v1/events/{id}/history":{"get":{"operationId":"listHistory","summary":"Detailed market history · unavailable","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Xtrada event ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listHistoryResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"history:read","description":"Currently returns 503 DATA_UNAVAILABLE. The configured sources do not provide a verified detailed sales ledger or historical series."}},"/v1/events/{id}/price-histogram":{"get":{"operationId":"listPriceHistogram","summary":"Sale price histogram · unavailable","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Xtrada event ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listPriceHistogramResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"history:read","description":"Currently returns 503 DATA_UNAVAILABLE. The configured sources do not provide a verified detailed sales ledger or historical series."}},"/v1/events/{id}/media":{"get":{"operationId":"getMedia","summary":"Event images and static seatmaps","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Xtrada event ID"}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getMediaResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"events:read","description":"Images and static seatmap URLs from source metadata, refreshed with the live catalogue through a shared five-minute source cache. Supplier media is not rehosted. The Xtrada placeholder is served from the same API project."}},"/v1/calendar":{"get":{"operationId":"listCalendar","summary":"Event dates, on-sales and presales","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["event","public_sale","presale"]},"description":""},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"Inclusive UTC date."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"Inclusive UTC date."}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listCalendarResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"calendar:read"}},"/v1/market/hot":{"get":{"operationId":"getHot","summary":"Reported hot events","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."},{"name":"window","in":"query","required":false,"schema":{"type":"string","enum":["24h"],"default":"24h"},"description":""}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getHotResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"market:read"}},"/v1/market/movers":{"get":{"operationId":"getMovers","summary":"Reported market movers","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."},{"name":"metric","in":"query","required":false,"schema":{"type":"string","enum":["tickets_sold_growth_24h"],"default":"tickets_sold_growth_24h"},"description":""}],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getMoversResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"market:read"}},"/v1/usage":{"get":{"operationId":"getUsage","summary":"Your client usage today","parameters":[],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getUsageResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"usage:read"}},"/v1/capabilities":{"get":{"operationId":"getCapabilities","summary":"Available data capabilities","parameters":[],"responses":{"200":{"description":"Normalized Xtrada data from configured live public sources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/getCapabilitiesResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported metric/window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"events:read"}},"/health":{"get":{"operationId":"health","security":[],"responses":{"200":{"description":"Liveness only.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"service":{"type":"string"}},"required":["status","service"]}}}}},"summary":"Process liveness"}},"/contract":{"get":{"operationId":"contract","security":[],"responses":{"200":{"description":"This OpenAPI document.","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"OpenAPI contract"}},"/v1/events/{id}/observations":{"get":{"operationId":"listObservations","summary":"Stored event observations","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Xtrada event ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Signed opaque cursor; reuse original filters and limit."}],"responses":{"200":{"description":"Stored observations; X-Xtrada-Cache is ARCHIVE.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/listObservationsResponse"}}}},"400":{"description":"Invalid query/cursor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid/expired/disabled key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope or IP policy denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-scope":"history:read","description":"Changed event metadata captured from successful shared source collections. Ordered by recorded ID descending, anchored to the first page; cursors expire after 24 hours. Does not reconstruct individual ticket sales or data before capture started."}}},"components":{"schemas":{"Image":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"width":{"type":"integer"},"height":{"type":"integer"},"ratio":{"type":"string"},"fallback":{"type":"boolean"},"attribution":{"type":"string"}},"required":["url","fallback"],"description":"Provider image URL preserved after HTTPS/host validation. A live event with no valid image receives https://data.xtrada.dev/placeholder.svg with fallback=true. External image bytes are not proxied; clients should use the placeholder on load errors. Access credentials are server-side only."},"Seatmap":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"const":"static"},"interactive":{"const":false}},"required":["url","kind","interactive"],"description":"Static supplier URL when available. No generated map or interactive seat availability."},"Venue":{"type":"object","properties":{"name":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"timezone":{"type":"string"}},"required":["name","city","country","timezone"]},"Metrics":{"type":"object","properties":{"reportedTicketsSold":{"type":["integer","null"]},"reportedTicketsSold24h":{"type":["integer","null"]},"reportedTicketsSoldGrowth24hPercent":{"type":["number","null"]},"reportedAvailableTickets":{"type":["integer","null"]},"reportedAverageSoldPrice":{"type":["string","null"]},"currency":{"type":["string","null"]}},"required":["reportedTicketsSold","reportedTicketsSold24h","reportedTicketsSoldGrowth24hPercent","reportedAvailableTickets","reportedAverageSoldPrice","currency"]},"Coverage":{"type":"object","properties":{"status":{"type":"string","enum":["partial","unavailable","complete"]},"observedRows":{"type":"integer"},"reportedRows":{"type":["integer","null"]},"missingRows":{"type":["integer","null"]},"observedTickets":{"type":"integer"}},"required":["status","observedRows","reportedRows","missingRows","observedTickets"]},"PriceRange":{"type":"object","properties":{"min":{"type":"string"},"max":{"type":"string"},"currency":{"type":"string"},"basis":{"type":"string"}},"required":["min","max","currency","basis"]},"Event":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"startsAt":{"type":["string","null"]},"localDate":{"type":"string"},"status":{"type":"string"},"venue":{"$ref":"#/components/schemas/Venue"},"images":{"type":"array","items":{"$ref":"#/components/schemas/Image"}},"seatmaps":{"type":"array","items":{"$ref":"#/components/schemas/Seatmap"}},"metrics":{"anyOf":[{"$ref":"#/components/schemas/Metrics"},{"type":"null"}]},"metricObservedDate":{"type":"string"},"collectedAt":{"type":["string","null"]},"salesCoverage":{"$ref":"#/components/schemas/Coverage"},"priceRanges":{"type":"array","items":{"$ref":"#/components/schemas/PriceRange"}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["id","name","startsAt","localDate","status","venue","images","seatmaps","metrics","collectedAt","salesCoverage","priceRanges","warnings"]},"Sale":{"type":"object","properties":{"id":{"type":"string","description":"Observation ID within the capture; not a transaction ID."},"eventId":{"type":"string"},"section":{"type":"string"},"row":{"type":["string","null"]},"quantity":{"type":"integer"},"displayedPrice":{"type":"string"},"currency":{"type":"string"},"priceBasis":{"type":"string","enum":["displayed_unverified_unit"]},"soldAt":{"type":"null"},"sourceTime":{"type":"string","description":"Literal time with unverified timezone."},"timezone":{"type":"null"},"collectedAt":{"type":"string"}},"required":["id","eventId","section","row","quantity","displayedPrice","currency","priceBasis","soldAt","sourceTime","timezone","collectedAt"]},"Snapshot":{"type":"object","properties":{"date":{"type":"string"},"collectedAt":{"type":"string"},"metrics":{"$ref":"#/components/schemas/Metrics"}},"required":["date","collectedAt","metrics"]},"PriceBucket":{"type":"object","properties":{"displayedPrice":{"type":"string"},"currency":{"type":"string"},"observations":{"type":"integer"},"tickets":{"type":"integer"}},"required":["displayedPrice","currency","observations","tickets"]},"Media":{"type":"object","properties":{"images":{"type":"array","items":{"$ref":"#/components/schemas/Image"}},"seatmaps":{"type":"array","items":{"$ref":"#/components/schemas/Seatmap"}},"delivery":{"type":"string","enum":["external_links"]},"rehosted":{"const":false}},"required":["images","seatmaps","delivery","rehosted"]},"CalendarEntry":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string"},"name":{"type":"string"},"startsAt":{"type":"string"},"localDate":{"type":"string"},"country":{"type":"string"},"kind":{"type":"string","enum":["event","public_sale","presale"]},"collectedAt":{"type":["string","null"]}},"required":["id","eventId","name","startsAt","localDate","country","kind","collectedAt"]},"Usage":{"type":"object","properties":{"clientId":{"type":"string"},"requests":{"type":"integer"},"rowsDelivered":{"type":"integer"},"since":{"type":"string"},"persistence":{"type":"string","enum":["process_memory","shared_redis_daily"]}},"required":["clientId","requests","rowsDelivered","since","persistence"]},"Capabilities":{"type":"object","properties":{"events":{"type":"integer"},"salesRows":{"type":"integer"},"images":{"type":"string"},"seatmaps":{"type":"string"},"hot":{"type":"string"},"movers":{"type":"string"},"transactionHistory":{"type":"string"},"priceMovers":{"type":"boolean"},"interactiveSeatAvailability":{"type":"boolean"},"automatedCollection":{"type":"boolean"},"opsConnected":{"type":"boolean"},"storage":{"type":"string"}},"required":["events","salesRows","images","seatmaps","hot","movers","transactionHistory","priceMovers","interactiveSeatAvailability","automatedCollection","opsConnected","storage"]},"Pagination":{"type":"object","properties":{"nextCursor":{"type":["string","null"]},"hasMore":{"type":"boolean"},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["nextCursor","hasMore","limit"]},"Meta":{"type":"object","properties":{"requestId":{"type":"string"},"brand":{"type":"string"},"mode":{"type":"string","enum":["snapshot","live"]},"coverage":{"type":"string"},"freshness":{"type":"string","enum":["fresh","stale","unknown"]},"datasetVersion":{"type":"string"},"collectedAt":{"type":["string","null"]},"asOfDate":{"type":"string"},"cacheTtlSeconds":{"type":"integer"},"refreshPolicy":{"type":"string","enum":["manual_sync","on_demand_per_instance","shared_on_demand"]},"metric":{"type":"string"},"rankingUniverse":{"type":"string"},"eligibleEvents":{"type":"integer"},"window":{"type":"string"},"salesCoverage":{"$ref":"#/components/schemas/Coverage"}},"required":["requestId"],"additionalProperties":true},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}},"required":["code","message","requestId"]}},"required":["error"]},"listEventsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","pagination","meta"]},"getEventResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Event"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]},"listSalesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Sale"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","pagination","meta"]},"listHistoryResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Snapshot"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","pagination","meta"]},"listPriceHistogramResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PriceBucket"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","pagination","meta"]},"getMediaResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Media"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]},"listCalendarResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CalendarEntry"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","pagination","meta"]},"getHotResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","pagination","meta"]},"getMoversResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","pagination","meta"]},"getUsageResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Usage"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]},"getCapabilitiesResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Capabilities"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["data","meta"]},"Observation":{"type":"object","required":["id","observedAt","lastSeenAt","event","calendar"],"properties":{"id":{"type":"string","pattern":"^[0-9]+$"},"observedAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"},"event":{"$ref":"#/components/schemas/Event"},"calendar":{"type":"array","items":{"$ref":"#/components/schemas/CalendarEntry"}}}},"listObservationsResponse":{"type":"object","required":["data","pagination","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Observation"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"brand":{"const":"Xtrada Data"},"mode":{"const":"snapshot"},"basis":{"const":"metadata_observations_not_ticket_transactions"},"seriesComplete":{"const":false},"capturePolicy":{"const":"successful_cache_fills"},"order":{"const":"recorded_desc"},"captureStartedWithService":{"const":true}},"required":["requestId","basis","seriesComplete"]}}}},"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","description":"Server-side Xtrada key. Never ship to browser bundles."}}}}