{"openapi":"3.1.0","info":{"title":"Airports of the world: Spatibase Content Delivery API","version":"1.0.0+2","description":"Read-only API for the published content of a Spatibase project: entries with their locations, types, groups, GeoJSON and vector tiles. Generated from the server's response schemas, which the test suite checks against every response.\n\n**Keys.** A public project needs no key. A private project needs a read key (`sb_live_…`) of that project on every request: `Authorization: Bearer <key>`, `X-API-Key: <key>` or `?api_key=<key>` (for map libraries that can't send headers; prefer a header). Public projects accept and ignore keys. Edit keys (`sb_edit_…`) work too, but only in headers.\n\n**Caching.** Every 200/204/304 has an ETag; send it back as If-None-Match to get 304 when nothing changed. Public: `Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=86400`; private: `private, max-age=60` with `Vary: Authorization, X-API-Key`. Errors are `no-store`.\n\n**Fields.** Typed for this project's content model at content version 2: one Entry<Type> schema per enabled Type, with every element as a key (null when empty), choices as enums of the current options, and a named parameter per filter. **Regenerate your client after changing the content model** (types, elements, options, groups); responses always follow the current model.","contact":{"name":"Spatibase","url":"https://spatibase.com/docs/"},"license":{"name":"MIT (this API description only)","identifier":"MIT"},"termsOfService":"https://spatibase.com/legal/terms/"},"servers":[{"url":"https://api.spatibase.com","description":"Spatibase API"}],"security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]},{"apiKeyQuery":[]}],"tags":[{"name":"Project","description":"The project and its content model"},{"name":"Groups","description":"Curated lists of entries"},{"name":"Entries","description":"Published entries, as JSON or GeoJSON"},{"name":"Tiles","description":"Vector tiles of the main locations"},{"name":"Files","description":"Files and images of entries (outside /delivery/v1, no key)"},{"name":"Webhooks","description":"Signed messages Spatibase sends to your server when published content changes"},{"name":"Meta","description":"About this API"}],"paths":{"/delivery/v1/projects/{projectId}/openapi.json":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"getProjectOpenApi","summary":"This project's typed OpenAPI document","description":"The OpenAPI 3.1 description of this project's Delivery API, with one schema per Type, enums of its types, groups and choice options, and a named parameter per filter. Regenerate clients after changing the content model.","tags":["Meta"],"parameters":[{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDocument"}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"getProject","summary":"Get the project with its types, groups and feature types","tags":["Project"],"parameters":[{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/types":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"listTypes","summary":"List the enabled types (tree order) with their effective elements","tags":["Project"],"parameters":[{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Type"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/feature-types":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"listFeatureTypes","summary":"List the geo feature types","tags":["Project"],"parameters":[{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeatureType"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/groups":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"listGroups","summary":"List the groups with their number of published entries","tags":["Groups"],"parameters":[{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Group"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/groups/{groupKey}":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"getGroup","summary":"Get a group with its published entries in group order","tags":["Groups"],"parameters":[{"$ref":"#/components/parameters/groupKey"},{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/include"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWithEntries"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/entries":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"listEntries","summary":"List and search published entries","tags":["Entries"],"parameters":[{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/type"},{"$ref":"#/components/parameters/subtypes"},{"$ref":"#/components/parameters/group"},{"$ref":"#/components/parameters/q"},{"$ref":"#/components/parameters/filter.ident"},{"$ref":"#/components/parameters/filter.ident.ne"},{"$ref":"#/components/parameters/filter.ident.in"},{"$ref":"#/components/parameters/filter.ident.contains"},{"$ref":"#/components/parameters/filter.ident.exists"},{"$ref":"#/components/parameters/filter.iata_code"},{"$ref":"#/components/parameters/filter.iata_code.ne"},{"$ref":"#/components/parameters/filter.iata_code.in"},{"$ref":"#/components/parameters/filter.iata_code.contains"},{"$ref":"#/components/parameters/filter.iata_code.exists"},{"$ref":"#/components/parameters/filter.icao_code"},{"$ref":"#/components/parameters/filter.icao_code.ne"},{"$ref":"#/components/parameters/filter.icao_code.in"},{"$ref":"#/components/parameters/filter.icao_code.contains"},{"$ref":"#/components/parameters/filter.icao_code.exists"},{"$ref":"#/components/parameters/filter.gps_code"},{"$ref":"#/components/parameters/filter.gps_code.ne"},{"$ref":"#/components/parameters/filter.gps_code.in"},{"$ref":"#/components/parameters/filter.gps_code.contains"},{"$ref":"#/components/parameters/filter.gps_code.exists"},{"$ref":"#/components/parameters/filter.local_code"},{"$ref":"#/components/parameters/filter.local_code.ne"},{"$ref":"#/components/parameters/filter.local_code.in"},{"$ref":"#/components/parameters/filter.local_code.contains"},{"$ref":"#/components/parameters/filter.local_code.exists"},{"$ref":"#/components/parameters/filter.airport_type"},{"$ref":"#/components/parameters/filter.airport_type.ne"},{"$ref":"#/components/parameters/filter.airport_type.in"},{"$ref":"#/components/parameters/filter.airport_type.exists"},{"$ref":"#/components/parameters/filter.scheduled_service"},{"$ref":"#/components/parameters/filter.scheduled_service.ne"},{"$ref":"#/components/parameters/filter.scheduled_service.exists"},{"$ref":"#/components/parameters/filter.elevation_ft"},{"$ref":"#/components/parameters/filter.elevation_ft.ne"},{"$ref":"#/components/parameters/filter.elevation_ft.gt"},{"$ref":"#/components/parameters/filter.elevation_ft.gte"},{"$ref":"#/components/parameters/filter.elevation_ft.lt"},{"$ref":"#/components/parameters/filter.elevation_ft.lte"},{"$ref":"#/components/parameters/filter.elevation_ft.in"},{"$ref":"#/components/parameters/filter.elevation_ft.exists"},{"$ref":"#/components/parameters/filter.continent"},{"$ref":"#/components/parameters/filter.continent.ne"},{"$ref":"#/components/parameters/filter.continent.in"},{"$ref":"#/components/parameters/filter.continent.exists"},{"$ref":"#/components/parameters/filter.country_code"},{"$ref":"#/components/parameters/filter.country_code.ne"},{"$ref":"#/components/parameters/filter.country_code.in"},{"$ref":"#/components/parameters/filter.country_code.contains"},{"$ref":"#/components/parameters/filter.country_code.exists"},{"$ref":"#/components/parameters/filter.country"},{"$ref":"#/components/parameters/filter.country.ne"},{"$ref":"#/components/parameters/filter.country.in"},{"$ref":"#/components/parameters/filter.country.contains"},{"$ref":"#/components/parameters/filter.country.exists"},{"$ref":"#/components/parameters/filter.region_code"},{"$ref":"#/components/parameters/filter.region_code.ne"},{"$ref":"#/components/parameters/filter.region_code.in"},{"$ref":"#/components/parameters/filter.region_code.contains"},{"$ref":"#/components/parameters/filter.region_code.exists"},{"$ref":"#/components/parameters/filter.region"},{"$ref":"#/components/parameters/filter.region.ne"},{"$ref":"#/components/parameters/filter.region.in"},{"$ref":"#/components/parameters/filter.region.contains"},{"$ref":"#/components/parameters/filter.region.exists"},{"$ref":"#/components/parameters/filter.municipality"},{"$ref":"#/components/parameters/filter.municipality.ne"},{"$ref":"#/components/parameters/filter.municipality.in"},{"$ref":"#/components/parameters/filter.municipality.contains"},{"$ref":"#/components/parameters/filter.municipality.exists"},{"$ref":"#/components/parameters/filter.website"},{"$ref":"#/components/parameters/filter.website.ne"},{"$ref":"#/components/parameters/filter.website.in"},{"$ref":"#/components/parameters/filter.website.contains"},{"$ref":"#/components/parameters/filter.website.exists"},{"$ref":"#/components/parameters/filter.wikipedia"},{"$ref":"#/components/parameters/filter.wikipedia.ne"},{"$ref":"#/components/parameters/filter.wikipedia.in"},{"$ref":"#/components/parameters/filter.wikipedia.contains"},{"$ref":"#/components/parameters/filter.wikipedia.exists"},{"$ref":"#/components/parameters/bbox"},{"$ref":"#/components/parameters/near"},{"$ref":"#/components/parameters/radius"},{"$ref":"#/components/parameters/nearest"},{"$ref":"#/components/parameters/within"},{"$ref":"#/components/parameters/withinEntry"},{"$ref":"#/components/parameters/withinField"},{"$ref":"#/components/parameters/contains"},{"$ref":"#/components/parameters/containsField"},{"$ref":"#/components/parameters/sort"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/include"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryList"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/entries.geojson":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"listEntriesGeojson","summary":"Published entries with a main location as a GeoJSON FeatureCollection","description":"The same filters as listEntries. Entries without a main location are left out.","tags":["Entries"],"parameters":[{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/type"},{"$ref":"#/components/parameters/subtypes"},{"$ref":"#/components/parameters/group"},{"$ref":"#/components/parameters/q"},{"$ref":"#/components/parameters/filter.ident"},{"$ref":"#/components/parameters/filter.ident.ne"},{"$ref":"#/components/parameters/filter.ident.in"},{"$ref":"#/components/parameters/filter.ident.contains"},{"$ref":"#/components/parameters/filter.ident.exists"},{"$ref":"#/components/parameters/filter.iata_code"},{"$ref":"#/components/parameters/filter.iata_code.ne"},{"$ref":"#/components/parameters/filter.iata_code.in"},{"$ref":"#/components/parameters/filter.iata_code.contains"},{"$ref":"#/components/parameters/filter.iata_code.exists"},{"$ref":"#/components/parameters/filter.icao_code"},{"$ref":"#/components/parameters/filter.icao_code.ne"},{"$ref":"#/components/parameters/filter.icao_code.in"},{"$ref":"#/components/parameters/filter.icao_code.contains"},{"$ref":"#/components/parameters/filter.icao_code.exists"},{"$ref":"#/components/parameters/filter.gps_code"},{"$ref":"#/components/parameters/filter.gps_code.ne"},{"$ref":"#/components/parameters/filter.gps_code.in"},{"$ref":"#/components/parameters/filter.gps_code.contains"},{"$ref":"#/components/parameters/filter.gps_code.exists"},{"$ref":"#/components/parameters/filter.local_code"},{"$ref":"#/components/parameters/filter.local_code.ne"},{"$ref":"#/components/parameters/filter.local_code.in"},{"$ref":"#/components/parameters/filter.local_code.contains"},{"$ref":"#/components/parameters/filter.local_code.exists"},{"$ref":"#/components/parameters/filter.airport_type"},{"$ref":"#/components/parameters/filter.airport_type.ne"},{"$ref":"#/components/parameters/filter.airport_type.in"},{"$ref":"#/components/parameters/filter.airport_type.exists"},{"$ref":"#/components/parameters/filter.scheduled_service"},{"$ref":"#/components/parameters/filter.scheduled_service.ne"},{"$ref":"#/components/parameters/filter.scheduled_service.exists"},{"$ref":"#/components/parameters/filter.elevation_ft"},{"$ref":"#/components/parameters/filter.elevation_ft.ne"},{"$ref":"#/components/parameters/filter.elevation_ft.gt"},{"$ref":"#/components/parameters/filter.elevation_ft.gte"},{"$ref":"#/components/parameters/filter.elevation_ft.lt"},{"$ref":"#/components/parameters/filter.elevation_ft.lte"},{"$ref":"#/components/parameters/filter.elevation_ft.in"},{"$ref":"#/components/parameters/filter.elevation_ft.exists"},{"$ref":"#/components/parameters/filter.continent"},{"$ref":"#/components/parameters/filter.continent.ne"},{"$ref":"#/components/parameters/filter.continent.in"},{"$ref":"#/components/parameters/filter.continent.exists"},{"$ref":"#/components/parameters/filter.country_code"},{"$ref":"#/components/parameters/filter.country_code.ne"},{"$ref":"#/components/parameters/filter.country_code.in"},{"$ref":"#/components/parameters/filter.country_code.contains"},{"$ref":"#/components/parameters/filter.country_code.exists"},{"$ref":"#/components/parameters/filter.country"},{"$ref":"#/components/parameters/filter.country.ne"},{"$ref":"#/components/parameters/filter.country.in"},{"$ref":"#/components/parameters/filter.country.contains"},{"$ref":"#/components/parameters/filter.country.exists"},{"$ref":"#/components/parameters/filter.region_code"},{"$ref":"#/components/parameters/filter.region_code.ne"},{"$ref":"#/components/parameters/filter.region_code.in"},{"$ref":"#/components/parameters/filter.region_code.contains"},{"$ref":"#/components/parameters/filter.region_code.exists"},{"$ref":"#/components/parameters/filter.region"},{"$ref":"#/components/parameters/filter.region.ne"},{"$ref":"#/components/parameters/filter.region.in"},{"$ref":"#/components/parameters/filter.region.contains"},{"$ref":"#/components/parameters/filter.region.exists"},{"$ref":"#/components/parameters/filter.municipality"},{"$ref":"#/components/parameters/filter.municipality.ne"},{"$ref":"#/components/parameters/filter.municipality.in"},{"$ref":"#/components/parameters/filter.municipality.contains"},{"$ref":"#/components/parameters/filter.municipality.exists"},{"$ref":"#/components/parameters/filter.website"},{"$ref":"#/components/parameters/filter.website.ne"},{"$ref":"#/components/parameters/filter.website.in"},{"$ref":"#/components/parameters/filter.website.contains"},{"$ref":"#/components/parameters/filter.website.exists"},{"$ref":"#/components/parameters/filter.wikipedia"},{"$ref":"#/components/parameters/filter.wikipedia.ne"},{"$ref":"#/components/parameters/filter.wikipedia.in"},{"$ref":"#/components/parameters/filter.wikipedia.contains"},{"$ref":"#/components/parameters/filter.wikipedia.exists"},{"$ref":"#/components/parameters/bbox"},{"$ref":"#/components/parameters/near"},{"$ref":"#/components/parameters/radius"},{"$ref":"#/components/parameters/nearest"},{"$ref":"#/components/parameters/within"},{"$ref":"#/components/parameters/withinEntry"},{"$ref":"#/components/parameters/withinField"},{"$ref":"#/components/parameters/contains"},{"$ref":"#/components/parameters/containsField"},{"$ref":"#/components/parameters/sort"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/geojsonLimit"},{"$ref":"#/components/parameters/include"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/geo+json":{"schema":{"$ref":"#/components/schemas/EntryFeatureCollection"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/entries.index":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"listEntriesIndex","summary":"A compact index of published entries: id, type, title and bounding box","description":"The same filters and sort as listEntries, without fields and geometries, and up to 5000 per page: all entries of a large project in a few requests, e.g. for a list or a search box. Fetch an entry's details from getEntry.","tags":["Entries"],"parameters":[{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/type"},{"$ref":"#/components/parameters/subtypes"},{"$ref":"#/components/parameters/group"},{"$ref":"#/components/parameters/q"},{"$ref":"#/components/parameters/filter.ident"},{"$ref":"#/components/parameters/filter.ident.ne"},{"$ref":"#/components/parameters/filter.ident.in"},{"$ref":"#/components/parameters/filter.ident.contains"},{"$ref":"#/components/parameters/filter.ident.exists"},{"$ref":"#/components/parameters/filter.iata_code"},{"$ref":"#/components/parameters/filter.iata_code.ne"},{"$ref":"#/components/parameters/filter.iata_code.in"},{"$ref":"#/components/parameters/filter.iata_code.contains"},{"$ref":"#/components/parameters/filter.iata_code.exists"},{"$ref":"#/components/parameters/filter.icao_code"},{"$ref":"#/components/parameters/filter.icao_code.ne"},{"$ref":"#/components/parameters/filter.icao_code.in"},{"$ref":"#/components/parameters/filter.icao_code.contains"},{"$ref":"#/components/parameters/filter.icao_code.exists"},{"$ref":"#/components/parameters/filter.gps_code"},{"$ref":"#/components/parameters/filter.gps_code.ne"},{"$ref":"#/components/parameters/filter.gps_code.in"},{"$ref":"#/components/parameters/filter.gps_code.contains"},{"$ref":"#/components/parameters/filter.gps_code.exists"},{"$ref":"#/components/parameters/filter.local_code"},{"$ref":"#/components/parameters/filter.local_code.ne"},{"$ref":"#/components/parameters/filter.local_code.in"},{"$ref":"#/components/parameters/filter.local_code.contains"},{"$ref":"#/components/parameters/filter.local_code.exists"},{"$ref":"#/components/parameters/filter.airport_type"},{"$ref":"#/components/parameters/filter.airport_type.ne"},{"$ref":"#/components/parameters/filter.airport_type.in"},{"$ref":"#/components/parameters/filter.airport_type.exists"},{"$ref":"#/components/parameters/filter.scheduled_service"},{"$ref":"#/components/parameters/filter.scheduled_service.ne"},{"$ref":"#/components/parameters/filter.scheduled_service.exists"},{"$ref":"#/components/parameters/filter.elevation_ft"},{"$ref":"#/components/parameters/filter.elevation_ft.ne"},{"$ref":"#/components/parameters/filter.elevation_ft.gt"},{"$ref":"#/components/parameters/filter.elevation_ft.gte"},{"$ref":"#/components/parameters/filter.elevation_ft.lt"},{"$ref":"#/components/parameters/filter.elevation_ft.lte"},{"$ref":"#/components/parameters/filter.elevation_ft.in"},{"$ref":"#/components/parameters/filter.elevation_ft.exists"},{"$ref":"#/components/parameters/filter.continent"},{"$ref":"#/components/parameters/filter.continent.ne"},{"$ref":"#/components/parameters/filter.continent.in"},{"$ref":"#/components/parameters/filter.continent.exists"},{"$ref":"#/components/parameters/filter.country_code"},{"$ref":"#/components/parameters/filter.country_code.ne"},{"$ref":"#/components/parameters/filter.country_code.in"},{"$ref":"#/components/parameters/filter.country_code.contains"},{"$ref":"#/components/parameters/filter.country_code.exists"},{"$ref":"#/components/parameters/filter.country"},{"$ref":"#/components/parameters/filter.country.ne"},{"$ref":"#/components/parameters/filter.country.in"},{"$ref":"#/components/parameters/filter.country.contains"},{"$ref":"#/components/parameters/filter.country.exists"},{"$ref":"#/components/parameters/filter.region_code"},{"$ref":"#/components/parameters/filter.region_code.ne"},{"$ref":"#/components/parameters/filter.region_code.in"},{"$ref":"#/components/parameters/filter.region_code.contains"},{"$ref":"#/components/parameters/filter.region_code.exists"},{"$ref":"#/components/parameters/filter.region"},{"$ref":"#/components/parameters/filter.region.ne"},{"$ref":"#/components/parameters/filter.region.in"},{"$ref":"#/components/parameters/filter.region.contains"},{"$ref":"#/components/parameters/filter.region.exists"},{"$ref":"#/components/parameters/filter.municipality"},{"$ref":"#/components/parameters/filter.municipality.ne"},{"$ref":"#/components/parameters/filter.municipality.in"},{"$ref":"#/components/parameters/filter.municipality.contains"},{"$ref":"#/components/parameters/filter.municipality.exists"},{"$ref":"#/components/parameters/filter.website"},{"$ref":"#/components/parameters/filter.website.ne"},{"$ref":"#/components/parameters/filter.website.in"},{"$ref":"#/components/parameters/filter.website.contains"},{"$ref":"#/components/parameters/filter.website.exists"},{"$ref":"#/components/parameters/filter.wikipedia"},{"$ref":"#/components/parameters/filter.wikipedia.ne"},{"$ref":"#/components/parameters/filter.wikipedia.in"},{"$ref":"#/components/parameters/filter.wikipedia.contains"},{"$ref":"#/components/parameters/filter.wikipedia.exists"},{"$ref":"#/components/parameters/bbox"},{"$ref":"#/components/parameters/near"},{"$ref":"#/components/parameters/radius"},{"$ref":"#/components/parameters/nearest"},{"$ref":"#/components/parameters/within"},{"$ref":"#/components/parameters/withinEntry"},{"$ref":"#/components/parameters/withinField"},{"$ref":"#/components/parameters/contains"},{"$ref":"#/components/parameters/containsField"},{"$ref":"#/components/parameters/sort"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/geojsonLimit"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryIndex"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/entries/{entryId}":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"getEntry","summary":"Get one published entry","tags":["Entries"],"parameters":[{"$ref":"#/components/parameters/entryId"},{"$ref":"#/components/parameters/locale"},{"$ref":"#/components/parameters/include"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/tiles.json":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"getTileJson","summary":"TileJSON for the vector tiles","tags":["Tiles"],"parameters":[{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TileJson"}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/delivery/v1/projects/{projectId}/tiles/{z}/{x}/{y}.pbf":{"parameters":[{"$ref":"#/components/parameters/projectId"}],"get":{"operationId":"getTile","summary":"A Mapbox Vector Tile of the published main locations","description":"One layer, `entries`, with the properties id, type, title, color and the scalar element values (strings cut at 255 characters, multiple choices joined with \", \"). Empty tile → 204.","tags":["Tiles"],"parameters":[{"$ref":"#/components/parameters/z"},{"$ref":"#/components/parameters/x"},{"$ref":"#/components/parameters/y"},{"$ref":"#/components/parameters/type"},{"$ref":"#/components/parameters/subtypes"},{"$ref":"#/components/parameters/group"},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/vnd.mapbox-vector-tile":{"schema":{"type":"string","format":"binary"}}}},"204":{"description":"Empty tile (nothing in it)","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/assets/{assetId}/{filename}":{"get":{"operationId":"getAssetFile","summary":"A file or image, optionally resized or converted","description":"Every Asset.url in Delivery output (images and files elements, links in markdown) points here. **No API key, also for private projects:** an `<img>` can't send one, so files stay reachable by their unguessable URL. Without parameters you get the original. w, h, fit, fmt and q apply to images (JPEG, PNG, GIF, WebP, AVIF, SVG) and are ignored for other files. Without fmt a resized image keeps its format; SVG is served as-is unless fmt is given (then it is rasterised, also above its nominal size). Variants are cached, and every response is immutable: an asset id never gets other content.","tags":["Files"],"security":[{}],"parameters":[{"name":"assetId","in":"path","required":true,"description":"The asset's id (Asset.id)","schema":{"type":"string","format":"uuid"}},{"name":"filename","in":"path","required":true,"description":"Cosmetic: the file is found by its id (Delivery URLs use the file's name)","schema":{"type":"string"}},{"name":"w","in":"query","description":"Width in px, 1–4000. Snaps up to the next step of a fixed size ladder (16, 32, 48, 64, 96, 128, 160, 200, 256, 320, 400, 480, 512, 640, 800, 960, 1024, 1280, 1600, 1920, 2048, 2560, 3200, 3840; larger values → 3840). A raster image is never enlarged beyond its original size; with w, h and cover/contain the box keeps its aspect ratio while it shrinks to fit","schema":{"type":"integer","minimum":1,"maximum":4000},"example":800},{"name":"h","in":"query","description":"Height in px, 1–4000. Snaps up to the next step of a fixed size ladder (16, 32, 48, 64, 96, 128, 160, 200, 256, 320, 400, 480, 512, 640, 800, 960, 1024, 1280, 1600, 1920, 2048, 2560, 3200, 3840; larger values → 3840). A raster image is never enlarged beyond its original size; with w, h and cover/contain the box keeps its aspect ratio while it shrinks to fit","schema":{"type":"integer","minimum":1,"maximum":4000},"example":600},{"name":"fit","in":"query","description":"With w and h: cover (default) crops to fill the box, contain fits inside it with transparent bars (white for jpeg), inside fits without bars. With one side: inside. fit alone changes nothing","schema":{"type":"string","enum":["cover","contain","inside"]}},{"name":"fmt","in":"query","description":"Output format (case-insensitive; jpg = jpeg). The response's Content-Type and file name follow it","schema":{"type":"string","enum":["webp","jpeg","jpg","png","avif"]}},{"name":"q","in":"query","description":"Quality for webp, jpeg and avif (default 80), rounded to the nearest 10 (at least 10); png ignores it. q alone re-encodes a JPEG, WebP or AVIF in its own format","schema":{"type":"integer","minimum":1,"maximum":100,"default":80},"example":80},{"$ref":"#/components/parameters/ifNoneMatch"}],"responses":{"200":{"description":"The file, with its own Content-Type (with fmt: the chosen format)","headers":{"Cache-Control":{"description":"public, max-age=31536000, immutable","schema":{"type":"string"}},"ETag":{"description":"Send it as If-None-Match to get 304","schema":{"type":"string"}},"Content-Disposition":{"description":"inline; filename=\"<name>\"; filename*=UTF-8''<name> (with fmt, the extension follows the format)","schema":{"type":"string"}},"X-Variant-Cache":{"description":"HIT or MISS: whether a resized or converted image came from the variant cache","schema":{"type":"string","enum":["HIT","MISS"]}},"Content-Security-Policy":{"description":"A sandbox policy for types a browser would run (SVG, HTML, XML, JavaScript)","schema":{"type":"string"}}},"content":{"*/*":{"schema":{"type":"string","format":"binary"}}}},"206":{"description":"A byte range (Range request) of a file or a cached variant","content":{"*/*":{"schema":{"type":"string","format":"binary"}}}},"304":{"description":"Not modified: the If-None-Match ETag is still current (no body). The ETag of a variant's first, freshly rendered response differs from the cached copy's, so revalidating that one gets a 200 once"},"400":{"description":"An image parameter is invalid or given twice (bad_request); never for other files","headers":{"Cache-Control":{"description":"no-store","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such asset, or its file is missing (not_found)","headers":{"Cache-Control":{"description":"no-store","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"entries.published":{"post":{"operationId":"webhookEntriesPublished","summary":"Entries went live or changed: a project publish, or going back to a version","description":"Sent to the project's webhook address (API → Webhooks in the app; one per project). Body: ids only, read the content from the Delivery API. Headers also include Content-Type: application/json and User-Agent: Spatibase-Webhooks/1.","tags":["Webhooks"],"security":[{}],"parameters":[{"name":"Spatibase-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">, keyed with the project's signing secret (the whole whsec_… text). To verify, compute it over the body exactly as received (before parsing JSON), compare in constant time, and refuse a t older than a few minutes so a captured message can't be replayed. Rotating the secret signs new messages with the new one at once","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"}},{"name":"Spatibase-Event","in":"header","required":true,"description":"The event, as in the body's type","schema":{"type":"string","enum":["entries.published"]}},{"name":"Spatibase-Delivery","in":"header","required":true,"description":"The delivery id, as in the body's id","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEntriesPublished"}}}},"responses":{"2XX":{"description":"Received. Answer within 5 seconds. Anything else (3xx too: redirects aren't followed) is a failure: events are tried up to 3 times (after 1 s and 10 s, same id), the test ping once"}}}},"entries.unpublished":{"post":{"operationId":"webhookEntriesUnpublished","summary":"Entries came off the live API: a project publish, or going back to a version","description":"Sent to the project's webhook address (API → Webhooks in the app; one per project). Body: ids only, read the content from the Delivery API. Headers also include Content-Type: application/json and User-Agent: Spatibase-Webhooks/1.","tags":["Webhooks"],"security":[{}],"parameters":[{"name":"Spatibase-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">, keyed with the project's signing secret (the whole whsec_… text). To verify, compute it over the body exactly as received (before parsing JSON), compare in constant time, and refuse a t older than a few minutes so a captured message can't be replayed. Rotating the secret signs new messages with the new one at once","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"}},{"name":"Spatibase-Event","in":"header","required":true,"description":"The event, as in the body's type","schema":{"type":"string","enum":["entries.unpublished"]}},{"name":"Spatibase-Delivery","in":"header","required":true,"description":"The delivery id, as in the body's id","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEntriesUnpublished"}}}},"responses":{"2XX":{"description":"Received. Answer within 5 seconds. Anything else (3xx too: redirects aren't followed) is a failure: events are tried up to 3 times (after 1 s and 10 s, same id), the test ping once"}}}},"entries.deleted":{"post":{"operationId":"webhookEntriesDeleted","summary":"Entries were deleted (moved to the trash): live ones at a project publish, others at once","description":"Sent to the project's webhook address (API → Webhooks in the app; one per project). Body: ids only, read the content from the Delivery API. Headers also include Content-Type: application/json and User-Agent: Spatibase-Webhooks/1.","tags":["Webhooks"],"security":[{}],"parameters":[{"name":"Spatibase-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">, keyed with the project's signing secret (the whole whsec_… text). To verify, compute it over the body exactly as received (before parsing JSON), compare in constant time, and refuse a t older than a few minutes so a captured message can't be replayed. Rotating the secret signs new messages with the new one at once","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"}},{"name":"Spatibase-Event","in":"header","required":true,"description":"The event, as in the body's type","schema":{"type":"string","enum":["entries.deleted"]}},{"name":"Spatibase-Delivery","in":"header","required":true,"description":"The delivery id, as in the body's id","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEntriesDeleted"}}}},"responses":{"2XX":{"description":"Received. Answer within 5 seconds. Anything else (3xx too: redirects aren't followed) is a failure: events are tried up to 3 times (after 1 s and 10 s, same id), the test ping once"}}}},"groups.changed":{"post":{"operationId":"webhookGroupsChanged","summary":"A publish, or going back to a version, changed the live groups (created, renamed, deleted, members, order)","description":"Sent to the project's webhook address (API → Webhooks in the app; one per project). Body: ids only, read the content from the Delivery API. Headers also include Content-Type: application/json and User-Agent: Spatibase-Webhooks/1.","tags":["Webhooks"],"security":[{}],"parameters":[{"name":"Spatibase-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">, keyed with the project's signing secret (the whole whsec_… text). To verify, compute it over the body exactly as received (before parsing JSON), compare in constant time, and refuse a t older than a few minutes so a captured message can't be replayed. Rotating the secret signs new messages with the new one at once","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"}},{"name":"Spatibase-Event","in":"header","required":true,"description":"The event, as in the body's type","schema":{"type":"string","enum":["groups.changed"]}},{"name":"Spatibase-Delivery","in":"header","required":true,"description":"The delivery id, as in the body's id","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookGroupsChanged"}}}},"responses":{"2XX":{"description":"Received. Answer within 5 seconds. Anything else (3xx too: redirects aren't followed) is a failure: events are tried up to 3 times (after 1 s and 10 s, same id), the test ping once"}}}},"ping":{"post":{"operationId":"webhookPing","summary":"Send test message in the app (or POST …/webhook/test)","description":"Sent to the project's webhook address (API → Webhooks in the app; one per project). Body: ids only, read the content from the Delivery API. Headers also include Content-Type: application/json and User-Agent: Spatibase-Webhooks/1.","tags":["Webhooks"],"security":[{}],"parameters":[{"name":"Spatibase-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">, keyed with the project's signing secret (the whole whsec_… text). To verify, compute it over the body exactly as received (before parsing JSON), compare in constant time, and refuse a t older than a few minutes so a captured message can't be replayed. Rotating the secret signs new messages with the new one at once","schema":{"type":"string","pattern":"^t=\\d+,v1=[0-9a-f]{64}$"}},{"name":"Spatibase-Event","in":"header","required":true,"description":"The event, as in the body's type","schema":{"type":"string","enum":["ping"]}},{"name":"Spatibase-Delivery","in":"header","required":true,"description":"The delivery id, as in the body's id","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookPing"}}}},"responses":{"2XX":{"description":"Received. Answer within 5 seconds. Anything else (3xx too: redirects aren't followed) is a failure: events are tried up to 3 times (after 1 s and 10 s, same id), the test ping once"}}}}},"components":{"schemas":{"Geometry":{"description":"GeoJSON geometry (RFC 7946), coordinates rounded to 7 decimals","anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Point"},"coordinates":{"description":"[longitude, latitude] in WGS84 degrees","minItems":2,"type":"array","items":{"type":"number"}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"LineString"},"coordinates":{"type":"array","items":{"description":"[longitude, latitude] in WGS84 degrees","minItems":2,"type":"array","items":{"type":"number"}}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"Polygon"},"coordinates":{"type":"array","items":{"type":"array","items":{"description":"[longitude, latitude] in WGS84 degrees","minItems":2,"type":"array","items":{"type":"number"}}}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"MultiPoint"},"coordinates":{"type":"array","items":{"description":"[longitude, latitude] in WGS84 degrees","minItems":2,"type":"array","items":{"type":"number"}}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"MultiLineString"},"coordinates":{"type":"array","items":{"type":"array","items":{"description":"[longitude, latitude] in WGS84 degrees","minItems":2,"type":"array","items":{"type":"number"}}}}},"required":["type","coordinates"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"MultiPolygon"},"coordinates":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"description":"[longitude, latitude] in WGS84 degrees","minItems":2,"type":"array","items":{"type":"number"}}}}}},"required":["type","coordinates"],"additionalProperties":false}]},"Link":{"examples":[{"url":"https://www.nps.gov/redw","label":"Park website"}],"type":"object","properties":{"url":{"type":"string","format":"uri"},"label":{"type":"string"}},"required":["url"],"additionalProperties":false},"Translations":{"description":"locale=*: the stored translations per language (title and text/markdown fields), only what exists; no fallback","examples":[{"de":{"title":"Redwood-Nationalpark","values":{"description":"Küstenwald mit riesigen Mammutbäumen"}}}],"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"title":{"type":"string"},"values":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"additionalProperties":false}},"PageMeta":{"examples":[{"page":1,"limit":50,"total":120,"totalPages":3}],"type":"object","properties":{"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"totalPages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["page","limit","total","totalPages"],"additionalProperties":false},"PageLinks":{"description":"Absolute URLs of this request with another page (the query is kept, an api_key too)","type":"object","properties":{"self":{"format":"uri","type":"string","pattern":"^[A-Za-z0-9\\-._~:/?#@!$&'()*+,;=%]+$"},"next":{"anyOf":[{"format":"uri","type":"string","pattern":"^[A-Za-z0-9\\-._~:/?#@!$&'()*+,;=%]+$"},{"type":"null"}]},"prev":{"anyOf":[{"format":"uri","type":"string","pattern":"^[A-Za-z0-9\\-._~:/?#@!$&'()*+,;=%]+$"},{"type":"null"}]}},"required":["self","next","prev"],"additionalProperties":false},"EntryIndexItem":{"description":"One published entry in the compact index","type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"description":"apiKey of the entry's Type","type":"string"},"title":{"type":"string"},"bbox":{"description":"The main location's bounding box [minLng, minLat, maxLng, maxLat] (6 decimals; a point has min = max); null without one","anyOf":[{"type":"array","prefixItems":[{"type":"number"},{"type":"number"},{"type":"number"},{"type":"number"}],"items":false,"minItems":4},{"type":"null"}]},"distance":{"description":"Meters from near or nearest (only with one of them)","type":"number"},"translations":{"description":"Only with locale=*: the title per language (only those that exist)","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"title":{"type":"string"}},"required":["title"],"additionalProperties":false}}},"required":["id","type","title","bbox"],"additionalProperties":false},"EntryIndex":{"description":"A compact list of published entries (id, type, title, bbox), for lists, search boxes and \"zoom to\" links","examples":[{"data":[{"id":"0b6f3c1e-5d2a-4c1b-9f3e-2a7d8c9e4f10","type":"national-park","title":"Redwood National Park","bbox":[-124.0046,41.2132,-124.0046,41.2132]}],"meta":{"page":1,"limit":1000,"total":1,"totalPages":1},"links":{"self":"https://api.spatibase.com/delivery/v1/projects/7d1c2a9e-4b3f-4e8a-9c2d-1f0e3b5a6c7d/entries.index?sort=title","next":null,"prev":null}}],"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EntryIndexItem"}},"meta":{"$ref":"#/components/schemas/PageMeta"},"links":{"$ref":"#/components/schemas/PageLinks"}},"required":["data","meta","links"],"additionalProperties":false},"TypeElement":{"type":"object","properties":{"apiKey":{"type":"string"},"label":{"type":"string"},"kind":{"type":"string","enum":["text","markdown","number","boolean","date","choice","link","images","files","contact","color","reference","geo","identifier","embed","location","phone"]},"required":{"type":"boolean"},"helpText":{"type":"string"},"config":{"description":"Kind-specific settings (SPEC §3). Reference targets (targetTypes) and geo feature types (featureTypes) are listed by apiKey","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"inheritedFrom":{"description":"apiKey of the ancestor Type it is inherited from, null for own elements","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["apiKey","label","kind","required","helpText","config","inheritedFrom"],"additionalProperties":false},"Type":{"description":"An enabled Type (tree order)","type":"object","properties":{"apiKey":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}]},"path":{"type":"array","items":{"type":"string"}},"children":{"type":"array","items":{"type":"string"}},"locationMode":{"type":"string","enum":["required","optional","none"]},"geometryKinds":{"type":"array","items":{"type":"string","enum":["Point","LineString","Polygon"]}},"color":{"type":"string"},"entryCount":{"description":"Published entries of this Type itself; entries of its subtypes count for their own Type","type":"integer"},"elements":{"description":"Effective elements: inherited first, then own","type":"array","items":{"$ref":"#/components/schemas/TypeElement"}}},"required":["apiKey","name","description","parent","path","children","locationMode","geometryKinds","color","entryCount","elements"],"additionalProperties":false},"FeatureType":{"description":"A named, styled kind of shape in geo fields","type":"object","properties":{"apiKey":{"type":"string"},"name":{"type":"string"},"geometryKind":{"type":"string","enum":["Point","LineString","Polygon"]},"icon":{"anyOf":[{"type":"string","enum":["pin","flag","tree","mountain","tent","water","building","route","star","parking","info"]},{"type":"null"}]},"color":{"type":"string"}},"required":["apiKey","name","geometryKind","icon","color"],"additionalProperties":false},"Group":{"type":"object","properties":{"apiKey":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"entryCount":{"description":"Published entries of enabled Types in the group","type":"integer"}},"required":["apiKey","name","description","entryCount"],"additionalProperties":false},"Project":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"contentVersion":{"description":"Goes up with every change to Delivery output","type":"integer"},"locales":{"description":"Only for projects with languages: their codes, the first is the default","type":"array","items":{"type":"string"}},"defaultLocale":{"description":"Only for projects with languages: the default language's code","type":"string"},"types":{"type":"array","items":{"$ref":"#/components/schemas/Type"}},"groups":{"type":"array","items":{"$ref":"#/components/schemas/Group"}},"featureTypes":{"type":"array","items":{"$ref":"#/components/schemas/FeatureType"}}},"required":["id","name","description","contentVersion","types","groups","featureTypes"],"additionalProperties":false},"TileJson":{"description":"TileJSON 3.0.0 for the vector tiles","type":"object","properties":{"tilejson":{"type":"string","const":"3.0.0"},"name":{"type":"string"},"description":{"type":"string"},"version":{"description":"The project's contentVersion","type":"string"},"scheme":{"type":"string","const":"xyz"},"tiles":{"description":"Tile URL template; with ?api_key= in the request it carries the key too","type":"array","items":{"type":"string"}},"minzoom":{"type":"integer","minimum":0,"maximum":22},"maxzoom":{"type":"integer","minimum":0,"maximum":22},"bounds":{"description":"minLng, minLat, maxLng, maxLat of the published main locations","minItems":4,"maxItems":4,"type":"array","items":{"type":"number"}},"center":{"minItems":3,"maxItems":3,"type":"array","items":{"type":"number"}},"vector_layers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","const":"entries"},"description":{"type":"string"},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","enum":["String","Number","Boolean"]}},"minzoom":{"type":"integer","minimum":0,"maximum":22},"maxzoom":{"type":"integer","minimum":0,"maximum":22}},"required":["id","description","fields","minzoom","maxzoom"],"additionalProperties":false}}},"required":["tilejson","name","version","scheme","tiles","minzoom","maxzoom","bounds","center","vector_layers"],"additionalProperties":false},"Error":{"examples":[{"error":{"code":"not_found","message":"Entry \"…\" not found (or not published) in this project"}}],"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","not_found","method_not_allowed","internal_error","api_key_required","api_key_invalid","rate_limited","locale_unknown","project_expired"]},"message":{"description":"A plain-language explanation, safe to show developers","type":"string"},"locales":{"description":"With locale_unknown: the project's locales","type":"array","items":{"type":"string"}}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false},"OpenApiDocument":{"description":"This document","type":"object","properties":{"openapi":{"type":"string","const":"3.1.0"},"info":{"type":"object","properties":{"title":{"type":"string"},"version":{"type":"string"}},"required":["title","version"],"additionalProperties":{}},"paths":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["openapi","info","paths"],"additionalProperties":{}},"WebhookEntriesPublished":{"description":"Entries went live or changed: a project publish, or going back to a version","examples":[{"id":"1042","type":"entries.published","projectId":"7f1c2a9e-4b3d-4e8a-9c21-5d6f8a0b1c2d","createdAt":"2026-10-15T09:30:00.000Z","contentVersion":57,"entryIds":["a3e1f0c2-9d4b-4c7e-8f6a-1b2c3d4e5f60"]}],"type":"object","properties":{"id":{"description":"The delivery id (also in Spatibase-Delivery). Retries keep it: use it to ignore duplicates","type":"string","pattern":"^\\d+$"},"type":{"type":"string","const":"entries.published"},"projectId":{"type":"string","format":"uuid"},"createdAt":{"description":"When the event was created","type":"string","format":"date-time"},"contentVersion":{"description":"The project's contentVersion when the message was sent: compare it with the last one you saw","type":"integer"},"version":{"description":"The number of the project version that caused this (publish or going back)","type":"integer"},"entryIds":{"description":"Ids of the entries (at most 200: a longer list is cut, re-read what you need)","minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid"}}},"required":["id","type","projectId","createdAt","contentVersion","entryIds"],"additionalProperties":false},"WebhookEntriesUnpublished":{"description":"Entries came off the live API: a project publish, or going back to a version","examples":[{"id":"1042","type":"entries.unpublished","projectId":"7f1c2a9e-4b3d-4e8a-9c21-5d6f8a0b1c2d","createdAt":"2026-10-15T09:30:00.000Z","contentVersion":57,"entryIds":["a3e1f0c2-9d4b-4c7e-8f6a-1b2c3d4e5f60"]}],"type":"object","properties":{"id":{"description":"The delivery id (also in Spatibase-Delivery). Retries keep it: use it to ignore duplicates","type":"string","pattern":"^\\d+$"},"type":{"type":"string","const":"entries.unpublished"},"projectId":{"type":"string","format":"uuid"},"createdAt":{"description":"When the event was created","type":"string","format":"date-time"},"contentVersion":{"description":"The project's contentVersion when the message was sent: compare it with the last one you saw","type":"integer"},"version":{"description":"The number of the project version that caused this (publish or going back)","type":"integer"},"entryIds":{"description":"Ids of the entries (at most 200: a longer list is cut, re-read what you need)","minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid"}}},"required":["id","type","projectId","createdAt","contentVersion","entryIds"],"additionalProperties":false},"WebhookEntriesDeleted":{"description":"Entries were deleted (moved to the trash): live ones at a project publish, others at once","examples":[{"id":"1042","type":"entries.deleted","projectId":"7f1c2a9e-4b3d-4e8a-9c21-5d6f8a0b1c2d","createdAt":"2026-10-15T09:30:00.000Z","contentVersion":57,"entryIds":["a3e1f0c2-9d4b-4c7e-8f6a-1b2c3d4e5f60"]}],"type":"object","properties":{"id":{"description":"The delivery id (also in Spatibase-Delivery). Retries keep it: use it to ignore duplicates","type":"string","pattern":"^\\d+$"},"type":{"type":"string","const":"entries.deleted"},"projectId":{"type":"string","format":"uuid"},"createdAt":{"description":"When the event was created","type":"string","format":"date-time"},"contentVersion":{"description":"The project's contentVersion when the message was sent: compare it with the last one you saw","type":"integer"},"version":{"description":"The number of the project version that caused this (publish or going back)","type":"integer"},"entryIds":{"description":"Ids of the entries (at most 200: a longer list is cut, re-read what you need)","minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid"}}},"required":["id","type","projectId","createdAt","contentVersion","entryIds"],"additionalProperties":false},"WebhookGroupsChanged":{"description":"A publish, or going back to a version, changed the live groups (created, renamed, deleted, members, order)","examples":[{"id":"1042","type":"groups.changed","projectId":"7f1c2a9e-4b3d-4e8a-9c21-5d6f8a0b1c2d","createdAt":"2026-10-15T09:30:00.000Z","contentVersion":57,"groupIds":["a3e1f0c2-9d4b-4c7e-8f6a-1b2c3d4e5f60"],"entryIds":["a3e1f0c2-9d4b-4c7e-8f6a-1b2c3d4e5f60"]}],"type":"object","properties":{"id":{"description":"The delivery id (also in Spatibase-Delivery). Retries keep it: use it to ignore duplicates","type":"string","pattern":"^\\d+$"},"type":{"type":"string","const":"groups.changed"},"projectId":{"type":"string","format":"uuid"},"createdAt":{"description":"When the event was created","type":"string","format":"date-time"},"contentVersion":{"description":"The project's contentVersion when the message was sent: compare it with the last one you saw","type":"integer"},"version":{"description":"The number of the project version that caused this (publish or going back)","type":"integer"},"groupIds":{"description":"Ids of the groups (at most 200: a longer list is cut, re-read what you need)","minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid"}},"entryIds":{"description":"Ids of the entries whose membership changed (at most 200: a longer list is cut, re-read what you need)","minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid"}}},"required":["id","type","projectId","createdAt","contentVersion","groupIds"],"additionalProperties":false},"WebhookPing":{"description":"Send test message in the app (or POST …/webhook/test)","examples":[{"id":"1042","type":"ping","projectId":"7f1c2a9e-4b3d-4e8a-9c21-5d6f8a0b1c2d","createdAt":"2026-10-15T09:30:00.000Z","contentVersion":57}],"type":"object","properties":{"id":{"description":"The delivery id (also in Spatibase-Delivery). Retries keep it: use it to ignore duplicates","type":"string","pattern":"^\\d+$"},"type":{"type":"string","const":"ping"},"projectId":{"type":"string","format":"uuid"},"createdAt":{"description":"When the event was created","type":"string","format":"date-time"},"contentVersion":{"description":"The project's contentVersion when the message was sent: compare it with the last one you saw","type":"integer"},"version":{"description":"The number of the project version that caused this (publish or going back)","type":"integer"}},"required":["id","type","projectId","createdAt","contentVersion"],"additionalProperties":false},"EntryAirport":{"description":"A published Airport entry","type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"airport"},"typePath":{"type":"array","prefixItems":[{"type":"string","const":"airport"}],"items":false,"minItems":1},"title":{"type":"string"},"geometry":{"description":"The main location; null without one (always for Types with locationMode \"none\")","anyOf":[{"$ref":"#/components/schemas/Geometry"},{"type":"null"}]},"fields":{"description":"Every effective element (inherited first), keyed by apiKey; empty → null","type":"object","properties":{"ident":{"description":"Ident. Required to publish (but entries published before it was required can be null). OurAirports identifier, e.g. LKPR","anyOf":[{"type":"string"},{"type":"null"}]},"iata_code":{"description":"IATA code","anyOf":[{"type":"string"},{"type":"null"}]},"icao_code":{"description":"ICAO code","anyOf":[{"type":"string"},{"type":"null"}]},"gps_code":{"description":"GPS code","anyOf":[{"type":"string"},{"type":"null"}]},"local_code":{"description":"Local code","anyOf":[{"type":"string"},{"type":"null"}]},"airport_type":{"description":"Airport type","anyOf":[{"type":"string","enum":["large_airport","medium_airport","small_airport","seaplane_base"]},{"type":"null"}]},"scheduled_service":{"description":"Scheduled service","anyOf":[{"type":"boolean"},{"type":"null"}]},"elevation_ft":{"description":"Elevation","anyOf":[{"type":"number"},{"type":"null"}]},"continent":{"description":"Continent","anyOf":[{"type":"string","enum":["AF","AN","AS","EU","NA","OC","SA"]},{"type":"null"}]},"country_code":{"description":"Country code. ISO 3166-1 alpha-2","anyOf":[{"type":"string"},{"type":"null"}]},"country":{"description":"Country","anyOf":[{"type":"string"},{"type":"null"}]},"region_code":{"description":"Region code. ISO 3166-2","anyOf":[{"type":"string"},{"type":"null"}]},"region":{"description":"Region","anyOf":[{"type":"string"},{"type":"null"}]},"municipality":{"description":"Municipality","anyOf":[{"type":"string"},{"type":"null"}]},"website":{"description":"Website","anyOf":[{"$ref":"#/components/schemas/Link"},{"type":"null"}]},"wikipedia":{"description":"Wikipedia","anyOf":[{"$ref":"#/components/schemas/Link"},{"type":"null"}]}},"required":["ident","iata_code","icao_code","gps_code","local_code","airport_type","scheduled_service","elevation_ft","continent","country_code","country","region_code","region","municipality","website","wikipedia"],"additionalProperties":false},"groups":{"description":"apiKeys of the groups the entry is in","type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"description":"Equals publishedAt: draft saves never change Delivery output","type":"string","format":"date-time"},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"distance":{"description":"Meters from near or nearest (only with one of them)","type":"number"},"locale":{"description":"With locale=<code>: the language of this response (the default language's code when it is served)","type":"string"},"missingTranslations":{"description":"With locale=<code>: \"title\" and the apiKeys of the text fields that fall back to the default language (empty when complete, and for the default language)","type":"array","items":{"type":"string"}},"translations":{"description":"Only with locale=*","$ref":"#/components/schemas/Translations"}},"required":["id","type","typePath","title","geometry","fields","groups","createdAt","updatedAt","publishedAt"],"additionalProperties":false},"Entry":{"$ref":"#/components/schemas/EntryAirport"},"EntryList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Entry"}},"meta":{"$ref":"#/components/schemas/PageMeta"},"links":{"$ref":"#/components/schemas/PageLinks"}},"required":["data","meta","links"],"additionalProperties":false},"EntryResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Entry"}},"required":["data"],"additionalProperties":false},"GroupWithEntries":{"type":"object","properties":{"data":{"type":"object","properties":{"apiKey":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["apiKey","name","description"],"additionalProperties":false},"entries":{"description":"In the group's manual order","type":"array","items":{"$ref":"#/components/schemas/Entry"}},"meta":{"$ref":"#/components/schemas/PageMeta"},"links":{"$ref":"#/components/schemas/PageLinks"}},"required":["data","entries","meta","links"],"additionalProperties":false},"EntryFeatureCollection":{"description":"Published entries with a main location as GeoJSON; meta and links are foreign members (RFC 7946 §6.1)","type":"object","properties":{"type":{"type":"string","const":"FeatureCollection"},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"Feature"},"id":{"type":"string","format":"uuid"},"geometry":{"$ref":"#/components/schemas/Geometry"},"properties":{"description":"id, type and title, then the entry's fields (as in its Entry<Type>.fields)","type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","const":"airport"},"title":{"type":"string"},"ident":{"description":"Ident. Required to publish (but entries published before it was required can be null). OurAirports identifier, e.g. LKPR","anyOf":[{"type":"string"},{"type":"null"}]},"iata_code":{"description":"IATA code","anyOf":[{"type":"string"},{"type":"null"}]},"icao_code":{"description":"ICAO code","anyOf":[{"type":"string"},{"type":"null"}]},"gps_code":{"description":"GPS code","anyOf":[{"type":"string"},{"type":"null"}]},"local_code":{"description":"Local code","anyOf":[{"type":"string"},{"type":"null"}]},"airport_type":{"description":"Airport type","anyOf":[{"type":"string","enum":["large_airport","medium_airport","small_airport","seaplane_base"]},{"type":"null"}]},"scheduled_service":{"description":"Scheduled service","anyOf":[{"type":"boolean"},{"type":"null"}]},"elevation_ft":{"description":"Elevation","anyOf":[{"type":"number"},{"type":"null"}]},"continent":{"description":"Continent","anyOf":[{"type":"string","enum":["AF","AN","AS","EU","NA","OC","SA"]},{"type":"null"}]},"country_code":{"description":"Country code. ISO 3166-1 alpha-2","anyOf":[{"type":"string"},{"type":"null"}]},"country":{"description":"Country","anyOf":[{"type":"string"},{"type":"null"}]},"region_code":{"description":"Region code. ISO 3166-2","anyOf":[{"type":"string"},{"type":"null"}]},"region":{"description":"Region","anyOf":[{"type":"string"},{"type":"null"}]},"municipality":{"description":"Municipality","anyOf":[{"type":"string"},{"type":"null"}]},"website":{"description":"Website","anyOf":[{"$ref":"#/components/schemas/Link"},{"type":"null"}]},"wikipedia":{"description":"Wikipedia","anyOf":[{"$ref":"#/components/schemas/Link"},{"type":"null"}]}},"required":["id","type","title","ident","iata_code","icao_code","gps_code","local_code","airport_type","scheduled_service","elevation_ft","continent","country_code","country","region_code","region","municipality","website","wikipedia"],"additionalProperties":false}},"required":["type","id","geometry","properties"],"additionalProperties":false}},"meta":{"$ref":"#/components/schemas/PageMeta"},"links":{"$ref":"#/components/schemas/PageLinks"}},"required":["type","features","meta","links"],"additionalProperties":false}},"parameters":{"projectId":{"name":"projectId","in":"path","required":true,"description":"The project's id (Settings → API in the app)","schema":{"type":"string","format":"uuid","enum":["f7f53b91-4e86-4a73-9f50-70f4bff43652"],"default":"f7f53b91-4e86-4a73-9f50-70f4bff43652"},"example":"f7f53b91-4e86-4a73-9f50-70f4bff43652"},"groupKey":{"name":"groupKey","in":"path","required":true,"description":"The group's apiKey","schema":{"type":"string"}},"entryId":{"name":"entryId","in":"path","required":true,"description":"The entry's id","schema":{"type":"string","format":"uuid"}},"z":{"name":"z","in":"path","required":true,"description":"Zoom level","schema":{"type":"integer","minimum":0,"maximum":22},"example":10},"x":{"name":"x","in":"path","required":true,"description":"Tile column, 0 … 2^z − 1","schema":{"type":"integer","minimum":0},"example":159},"y":{"name":"y","in":"path","required":true,"description":"Tile row, 0 … 2^z − 1","schema":{"type":"integer","minimum":0},"example":383},"ifNoneMatch":{"name":"If-None-Match","in":"header","description":"An ETag from an earlier response: 304 when nothing changed","schema":{"type":"string"}},"locale":{"name":"locale","in":"query","description":"Projects with languages: the language of the response, a code of the project's `locales` (e.g. de). Title and text fields (and choice option labels) fall back to the default language field by field, and the entry says so in `missingTranslations`. `*` returns the default language plus all stored translations in `translations`. Without it the best match of the `Accept-Language` header is served (quality values honoured), else the default language. An unknown code → 400 locale_unknown. The language is part of the ETag. Projects without languages: nothing changes","schema":{"type":"string"},"example":"de"},"page":{"name":"page","in":"query","description":"Page number","schema":{"type":"integer","minimum":1,"maximum":1000000,"default":1},"example":1},"limit":{"name":"limit","in":"query","description":"Entries per page (default 50, max 500; above the max → 400)","schema":{"type":"integer","minimum":1,"maximum":500,"default":50},"example":50},"geojsonLimit":{"name":"limit","in":"query","description":"Entries per page (default 1000, max 5000; above the max → 400)","schema":{"type":"integer","minimum":1,"maximum":5000,"default":1000},"example":1000},"include":{"name":"include","in":"query","description":"references: expand reference fields to full published entries (one level)","schema":{"type":"string","enum":["references"]}},"type":{"name":"type","in":"query","description":"Type apiKeys: entries of any of them. Includes subtypes unless subtypes=false. Unknown type → 400. Repeat the parameter for more values; a comma-separated list works too","schema":{"type":"array","items":{"type":"string","enum":["airport"]}},"style":"form","explode":true},"subtypes":{"name":"subtypes","in":"query","description":"false: with type, match only exactly those Types","schema":{"type":"boolean","default":true}},"group":{"name":"group","in":"query","description":"Group apiKeys: entries in any of them. Unknown group → 400. Repeat the parameter for more values; a comma-separated list works too","schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true},"q":{"name":"q","in":"query","description":"Case-insensitive match on the title, in the default and the served language (max 500 characters)","schema":{"type":"string","maxLength":500}},"bbox":{"name":"bbox","in":"query","description":"minLng,minLat,maxLng,maxLat: entries whose main location intersects the box","schema":{"type":"string"},"example":"-125,40,-120,42"},"near":{"name":"near","in":"query","description":"lng,lat: entries within `radius` of the point; each entry gets `distance` (meters)","schema":{"type":"string"},"example":"-124.0,41.2"},"radius":{"name":"radius","in":"query","description":"Meters around near (needs near; default 10000, max 20037509)","schema":{"type":"number","exclusiveMinimum":0,"maximum":20037509,"default":10000},"example":5000},"within":{"name":"within","in":"query","description":"A GeoJSON Polygon or MultiPolygon (URL-encoded, max 8000 characters): entries whose main location intersects it. Not together with withinEntry","schema":{"type":"string","maxLength":8000}},"withinEntry":{"name":"withinEntry","in":"query","description":"Entries whose main location intersects the area of this published entry's main location (the entry itself is left out)","schema":{"type":"string","format":"uuid"}},"withinField":{"name":"withinField","in":"query","description":"With withinEntry: use the area drawn in this geo element of that entry instead","schema":{"type":"string"}},"nearest":{"name":"nearest","in":"query","description":"lng,lat: every entry with a main location, closest first, with no distance limit (page through them); each entry gets `distance` (meters). Not together with near or radius; sort may only be distance","schema":{"type":"string"},"example":"-124.0,41.2"},"contains":{"name":"contains","in":"query","description":"lng,lat: entries whose main location is an area (Polygon or MultiPolygon) covering the point, boundary included, e.g. \"which delivery zone is this address in?\". Points and lines never match","schema":{"type":"string"},"example":"-124.0,41.2"},"containsField":{"name":"containsField","in":"query","description":"With contains: match the areas drawn in this geo element instead of the main location (e.g. a store's delivery area). Not index-assisted: combine it with type or other filters on large projects","schema":{"type":"string"}},"sort":{"name":"sort","in":"query","description":"Sort keys in order: title, createdAt, updatedAt, publishedAt, distance (needs near or nearest), group (needs exactly one group: the manual group order). Prefix with - for descending. Default -publishedAt. Repeat the parameter for more values; a comma-separated list works too","schema":{"type":"array","items":{"type":"string","enum":["title","-title","createdAt","-createdAt","updatedAt","-updatedAt","publishedAt","-publishedAt","distance","-distance","group","-group"]}},"style":"form","explode":true,"example":["-publishedAt","title"]},"filter.ident":{"name":"filter[ident]","in":"query","description":"Ident (identifier): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.ident.ne":{"name":"filter[ident][ne]","in":"query","description":"Ident (identifier): is empty or not the value","schema":{"type":"string"}},"filter.ident.in":{"name":"filter[ident][in]","in":"query","description":"Ident (identifier): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.ident.contains":{"name":"filter[ident][contains]","in":"query","description":"Ident (identifier): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.ident.exists":{"name":"filter[ident][exists]","in":"query","description":"Ident (identifier): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.iata_code":{"name":"filter[iata_code]","in":"query","description":"IATA code (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.iata_code.ne":{"name":"filter[iata_code][ne]","in":"query","description":"IATA code (text): is empty or not the value","schema":{"type":"string"}},"filter.iata_code.in":{"name":"filter[iata_code][in]","in":"query","description":"IATA code (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.iata_code.contains":{"name":"filter[iata_code][contains]","in":"query","description":"IATA code (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.iata_code.exists":{"name":"filter[iata_code][exists]","in":"query","description":"IATA code (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.icao_code":{"name":"filter[icao_code]","in":"query","description":"ICAO code (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.icao_code.ne":{"name":"filter[icao_code][ne]","in":"query","description":"ICAO code (text): is empty or not the value","schema":{"type":"string"}},"filter.icao_code.in":{"name":"filter[icao_code][in]","in":"query","description":"ICAO code (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.icao_code.contains":{"name":"filter[icao_code][contains]","in":"query","description":"ICAO code (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.icao_code.exists":{"name":"filter[icao_code][exists]","in":"query","description":"ICAO code (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.gps_code":{"name":"filter[gps_code]","in":"query","description":"GPS code (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.gps_code.ne":{"name":"filter[gps_code][ne]","in":"query","description":"GPS code (text): is empty or not the value","schema":{"type":"string"}},"filter.gps_code.in":{"name":"filter[gps_code][in]","in":"query","description":"GPS code (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.gps_code.contains":{"name":"filter[gps_code][contains]","in":"query","description":"GPS code (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.gps_code.exists":{"name":"filter[gps_code][exists]","in":"query","description":"GPS code (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.local_code":{"name":"filter[local_code]","in":"query","description":"Local code (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.local_code.ne":{"name":"filter[local_code][ne]","in":"query","description":"Local code (text): is empty or not the value","schema":{"type":"string"}},"filter.local_code.in":{"name":"filter[local_code][in]","in":"query","description":"Local code (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.local_code.contains":{"name":"filter[local_code][contains]","in":"query","description":"Local code (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.local_code.exists":{"name":"filter[local_code][exists]","in":"query","description":"Local code (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.airport_type":{"name":"filter[airport_type]","in":"query","description":"Airport type (choice): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string","enum":["large_airport","medium_airport","small_airport","seaplane_base"]}},"filter.airport_type.ne":{"name":"filter[airport_type][ne]","in":"query","description":"Airport type (choice): is empty or not the value","schema":{"type":"string","enum":["large_airport","medium_airport","small_airport","seaplane_base"]}},"filter.airport_type.in":{"name":"filter[airport_type][in]","in":"query","description":"Airport type (choice): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["large_airport","medium_airport","small_airport","seaplane_base"]},"maxItems":100}},"filter.airport_type.exists":{"name":"filter[airport_type][exists]","in":"query","description":"Airport type (choice): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.scheduled_service":{"name":"filter[scheduled_service]","in":"query","description":"Scheduled service (boolean): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string","enum":["true","false"]}},"filter.scheduled_service.ne":{"name":"filter[scheduled_service][ne]","in":"query","description":"Scheduled service (boolean): is empty or not the value","schema":{"type":"string","enum":["true","false"]}},"filter.scheduled_service.exists":{"name":"filter[scheduled_service][exists]","in":"query","description":"Scheduled service (boolean): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.elevation_ft":{"name":"filter[elevation_ft]","in":"query","description":"Elevation (number): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"number"}},"filter.elevation_ft.ne":{"name":"filter[elevation_ft][ne]","in":"query","description":"Elevation (number): is empty or not the value","schema":{"type":"number"}},"filter.elevation_ft.gt":{"name":"filter[elevation_ft][gt]","in":"query","description":"Elevation (number): greater than","schema":{"type":"number"}},"filter.elevation_ft.gte":{"name":"filter[elevation_ft][gte]","in":"query","description":"Elevation (number): at least","schema":{"type":"number"}},"filter.elevation_ft.lt":{"name":"filter[elevation_ft][lt]","in":"query","description":"Elevation (number): less than","schema":{"type":"number"}},"filter.elevation_ft.lte":{"name":"filter[elevation_ft][lte]","in":"query","description":"Elevation (number): at most","schema":{"type":"number"}},"filter.elevation_ft.in":{"name":"filter[elevation_ft][in]","in":"query","description":"Elevation (number): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"number"},"maxItems":100}},"filter.elevation_ft.exists":{"name":"filter[elevation_ft][exists]","in":"query","description":"Elevation (number): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.continent":{"name":"filter[continent]","in":"query","description":"Continent (choice): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string","enum":["AF","AN","AS","EU","NA","OC","SA"]}},"filter.continent.ne":{"name":"filter[continent][ne]","in":"query","description":"Continent (choice): is empty or not the value","schema":{"type":"string","enum":["AF","AN","AS","EU","NA","OC","SA"]}},"filter.continent.in":{"name":"filter[continent][in]","in":"query","description":"Continent (choice): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["AF","AN","AS","EU","NA","OC","SA"]},"maxItems":100}},"filter.continent.exists":{"name":"filter[continent][exists]","in":"query","description":"Continent (choice): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.country_code":{"name":"filter[country_code]","in":"query","description":"Country code (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.country_code.ne":{"name":"filter[country_code][ne]","in":"query","description":"Country code (text): is empty or not the value","schema":{"type":"string"}},"filter.country_code.in":{"name":"filter[country_code][in]","in":"query","description":"Country code (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.country_code.contains":{"name":"filter[country_code][contains]","in":"query","description":"Country code (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.country_code.exists":{"name":"filter[country_code][exists]","in":"query","description":"Country code (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.country":{"name":"filter[country]","in":"query","description":"Country (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.country.ne":{"name":"filter[country][ne]","in":"query","description":"Country (text): is empty or not the value","schema":{"type":"string"}},"filter.country.in":{"name":"filter[country][in]","in":"query","description":"Country (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.country.contains":{"name":"filter[country][contains]","in":"query","description":"Country (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.country.exists":{"name":"filter[country][exists]","in":"query","description":"Country (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.region_code":{"name":"filter[region_code]","in":"query","description":"Region code (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.region_code.ne":{"name":"filter[region_code][ne]","in":"query","description":"Region code (text): is empty or not the value","schema":{"type":"string"}},"filter.region_code.in":{"name":"filter[region_code][in]","in":"query","description":"Region code (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.region_code.contains":{"name":"filter[region_code][contains]","in":"query","description":"Region code (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.region_code.exists":{"name":"filter[region_code][exists]","in":"query","description":"Region code (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.region":{"name":"filter[region]","in":"query","description":"Region (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.region.ne":{"name":"filter[region][ne]","in":"query","description":"Region (text): is empty or not the value","schema":{"type":"string"}},"filter.region.in":{"name":"filter[region][in]","in":"query","description":"Region (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.region.contains":{"name":"filter[region][contains]","in":"query","description":"Region (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.region.exists":{"name":"filter[region][exists]","in":"query","description":"Region (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.municipality":{"name":"filter[municipality]","in":"query","description":"Municipality (text): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.municipality.ne":{"name":"filter[municipality][ne]","in":"query","description":"Municipality (text): is empty or not the value","schema":{"type":"string"}},"filter.municipality.in":{"name":"filter[municipality][in]","in":"query","description":"Municipality (text): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.municipality.contains":{"name":"filter[municipality][contains]","in":"query","description":"Municipality (text): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.municipality.exists":{"name":"filter[municipality][exists]","in":"query","description":"Municipality (text): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.website":{"name":"filter[website]","in":"query","description":"Website (link): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.website.ne":{"name":"filter[website][ne]","in":"query","description":"Website (link): is empty or not the value","schema":{"type":"string"}},"filter.website.in":{"name":"filter[website][in]","in":"query","description":"Website (link): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.website.contains":{"name":"filter[website][contains]","in":"query","description":"Website (link): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.website.exists":{"name":"filter[website][exists]","in":"query","description":"Website (link): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}},"filter.wikipedia":{"name":"filter[wikipedia]","in":"query","description":"Wikipedia (link): equals the value (a multiple choice: contains it; a reference: the target entry id)","schema":{"type":"string"}},"filter.wikipedia.ne":{"name":"filter[wikipedia][ne]","in":"query","description":"Wikipedia (link): is empty or not the value","schema":{"type":"string"}},"filter.wikipedia.in":{"name":"filter[wikipedia][in]","in":"query","description":"Wikipedia (link): any of these values (max 100, each max 500 characters). Repeat the parameter for more values; a comma-separated list works too","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":100}},"filter.wikipedia.contains":{"name":"filter[wikipedia][contains]","in":"query","description":"Wikipedia (link): contains the text (case-insensitive)","schema":{"type":"string"}},"filter.wikipedia.exists":{"name":"filter[wikipedia][exists]","in":"query","description":"Wikipedia (link): true: has a value; false: is empty","schema":{"type":"string","enum":["true","false"]}}},"headers":{"ETag":{"description":"Weak ETag of this response; send it as If-None-Match","schema":{"type":"string"}},"Cache-Control":{"description":"See the caching notes in the description","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer realm=\"Spatibase Delivery API\" (with error=\"invalid_token\" for a bad key)","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait","schema":{"type":"integer"}}},"responses":{"NotModified":{"description":"Not modified: the If-None-Match ETag is still current (no body)","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}}},"BadRequest":{"description":"A query parameter is invalid (bad_request); the message says which and how to fix it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The project is private: no key (api_key_required) or a key that isn't valid for it (api_key_invalid)","headers":{"WWW-Authenticate":{"$ref":"#/components/headers/WWW-Authenticate"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"No such project, entry or group (not_found)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Gone":{"description":"A temporary project that expired because nobody kept it (project_expired); answered for 30 days","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"Too many failed key checks from this client (rate_limited)","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A read or edit key of the project: Authorization: Bearer sb_live_…"},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"A read or edit key of the project"},"apiKeyQuery":{"type":"apiKey","in":"query","name":"api_key","description":"A read key only (edit keys are refused in URLs). Ends up in logs: prefer a header"}}}}