{"components":{"parameters":{"Category":{"description":"Stable source-provided category slug","in":"query","name":"category","required":false,"schema":{"type":"string"}},"Club":{"description":"Stable club slug","in":"query","name":"club","required":false,"schema":{"type":"string"}},"CompetitionSeries":{"description":"Stable competition-series slug","in":"query","name":"competition_series","required":false,"schema":{"type":"string"}},"Page":{"description":"One-based page number","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},"PerPage":{"description":"Records per page","in":"query","name":"per_page","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}},"Person":{"description":"Stable person slug","in":"query","name":"person","required":false,"schema":{"type":"string"}},"RequiredSearchQuery":{"description":"Case-insensitive text search","in":"query","name":"q","required":true,"schema":{"minLength":1,"type":"string"}},"SearchQuery":{"description":"Case-insensitive text search","in":"query","name":"q","required":false,"schema":{"type":"string"}},"Slug":{"description":"Stable public record slug","in":"path","name":"slug","required":true,"schema":{"type":"string"}},"Sort":{"description":"Endpoint-specific lowercase snake-case sort key","in":"query","name":"sort","required":false,"schema":{"type":"string"}},"Sport":{"description":"Stable sport slug","in":"query","name":"sport","required":false,"schema":{"type":"string"}},"Venue":{"description":"Stable venue slug","in":"query","name":"venue","required":false,"schema":{"type":"string"}},"Year":{"description":"Four-digit event year","in":"query","name":"year","required":false,"schema":{"type":"integer"}}},"schemas":{"Error":{"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"}}},"externalDocs":{"description":"LLM and agent discovery guide","url":"https://shetlandcompetitions.com/llms.txt"},"info":{"description":"Versioned, read-only access to normalised Shetland competition data. Unknown values are null and must never be inferred or treated as zero.","license":{"identifier":"CC0-1.0","name":"CC0-1.0 for normalised factual data","url":"https://creativecommons.org/publicdomain/zero/1.0/"},"title":"Shetland Competition Archive API","version":"1.0.0"},"jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","openapi":"3.1.0","paths":{"/api/v1/competition-series":{"get":{"operationId":"listCompetitionSeries","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"List competition series","tags":["Browse"],"x-read-only":true}},"/api/v1/competitions":{"get":{"operationId":"listCompetitions","parameters":[{"$ref":"#/components/parameters/SearchQuery"},{"$ref":"#/components/parameters/Sport"},{"$ref":"#/components/parameters/CompetitionSeries"},{"$ref":"#/components/parameters/Year"},{"$ref":"#/components/parameters/Person"},{"$ref":"#/components/parameters/Club"},{"$ref":"#/components/parameters/Venue"},{"$ref":"#/components/parameters/Category"},{"$ref":"#/components/parameters/Sort"},{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/PerPage"}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"Search, filter, sort and paginate competitions","tags":["Competitions"],"x-read-only":true}},"/api/v1/competitions/{slug}":{"get":{"operationId":"getCompetition","parameters":[{"$ref":"#/components/parameters/Slug"}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Stable slug was not found"}},"summary":"Get detailed entries, attempts and disciplines for one competition","tags":["Competitions"],"x-read-only":true}},"/api/v1/competitions/{slug}/export.csv.zip":{"get":{"operationId":"exportCompetitionCsv","parameters":[{"$ref":"#/components/parameters/Slug"}],"responses":{"200":{"content":{"application/zip":{"schema":{"contentEncoding":"binary","type":"string"}}},"description":"Successful read-only response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Stable slug was not found"}},"summary":"Download normalised CSV tables for one competition","tags":["Exports"],"x-read-only":true}},"/api/v1/competitions/{slug}/export.json":{"get":{"operationId":"exportCompetitionJson","parameters":[{"$ref":"#/components/parameters/Slug"}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Stable slug was not found"}},"summary":"Download one round-trippable competition document","tags":["Exports"],"x-read-only":true}},"/api/v1/health/live":{"get":{"operationId":"getLiveness","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"Check whether the API process is running","tags":["Health"],"x-read-only":true}},"/api/v1/health/ready":{"get":{"operationId":"getReadiness","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"Check database connectivity and imported data readiness","tags":["Health"],"x-read-only":true}},"/api/v1/search":{"get":{"operationId":"searchArchive","parameters":[{"$ref":"#/components/parameters/RequiredSearchQuery"}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"Search currently published competitions","tags":["Archive"],"x-read-only":true}},"/api/v1/seasons":{"get":{"operationId":"listSeasons","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"List archive seasons","tags":["Browse"],"x-read-only":true}},"/api/v1/sports":{"get":{"operationId":"listSports","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"List represented sports and result counts","tags":["Browse"],"x-read-only":true}},"/api/v1/sports/{slug}":{"get":{"operationId":"getSport","parameters":[{"$ref":"#/components/parameters/Slug"}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Stable slug was not found"}},"summary":"Get one sport and its competitions","tags":["Browse"],"x-read-only":true}},"/api/v1/stats":{"get":{"operationId":"getArchiveStatistics","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"Get current public archive record counts","tags":["Archive"],"x-read-only":true}},"/api/v1/years":{"get":{"operationId":"listYears","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"Successful read-only response"}},"summary":"List represented calendar years","tags":["Browse"],"x-read-only":true}}},"security":[],"servers":[{"url":"/"}],"tags":[{"description":"Archive-wide discovery and statistics","name":"Archive"},{"description":"Competition lists and detailed result records","name":"Competitions"},{"description":"Sports, series and years in the launch collection","name":"Browse"},{"description":"Competition-scoped downloads; no whole-archive export","name":"Exports"},{"description":"Service health and readiness","name":"Health"}],"x-ai-guidance":{"download_scope":"Exports are intentionally limited to one currently published competition.","hidden_values":"A hidden bodyweight is null with bodyweight_status set to hidden and must not be reverse-engineered.","scoring":"Preserve source-provided totals, scores, places, points and ties; do not invent rules.","stable_identity":"Use explicit IDs and slugs. Do not merge similar names without an archive relationship.","unknown_values":"JSON null means unknown and never means zero."}}