{"openapi":"3.1.0","info":{"title":"Panoramax API","description":"This STAC API references data from several Panoramax instances","contact":{"email":"panoramax@panoramax.fr"},"version":""},"servers":[],"paths":{"/":{},"/{lang}/index":{},"/instances":{},"/{lang}/instances":{},"/favicon.ico":{},"/robots.txt":{},"/api":{"get":{"tags":["Metadata"],"summary":"Root of Panoramax api","operationId":"get_api-944da21c517df0c48dfbef7af28f3093","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"RootCatalog","type":"object","properties":{"extent":{"$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/extent"}},"$ref":"https://api.stacspec.org/v1.0.0/core/openapi.yaml#/components/schemas/landingPage","required":["extent"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/queryables":{"get":{"tags":["Queryables"],"summary":"List of queryables for search","description":"\nQueryables are defined by https://github.com/stac-api-extensions/filter?tab=readme-ov-file#queryables","operationId":"get_api-queryables-b5e88d732159e031bf19b059ef2b6a50","responses":{"200":{"description":""}},"deprecated":false}},"/api/collections/queryables":{"get":{"tags":["Queryables"],"summary":"List of queryables for for collection-search","description":"\nQueryables are defined by https://github.com/stac-api-extensions/filter?tab=readme-ov-file#queryables","operationId":"get_api-collections-queryables-a5b5fa772a72c94a875cc440339b1407","responses":{"200":{"description":""}},"deprecated":false}},"/api/collections":{"get":{"tags":["Collections"],"summary":"Get list of collections.","operationId":"get_api-collections-1ca3722588540cec37923bf883e9de09","parameters":[{"name":"limit","in":"query","description":"Limit the number of collections","required":false,"schema":{"description":"Limit the number of collections","type":"integer","format":"uint16","minimum":1,"maximum":1000,"default":100}},{"name":"bbox","in":"query","description":"Limit to collections inside this bounding box","required":false,"schema":{"description":"Limit to collections inside this bounding box","type":["array","null"],"items":{"type":"number","format":"double"},"default":null}},{"name":"page","in":"query","description":"CQL2 filter, only used for pagination filter. User's filters should be passed in the `filter` parameter","required":false,"schema":{"description":"CQL2 filter, only used for pagination filter. User's filters should be passed in the `filter` parameter","type":["string","null"]}},{"name":"filter","in":"query","description":"CQL2 Filter\n\nNote: the provider is named 'user' or 'account' in GeoVisio\n\nFilter should be like `{field} {comparator} '{value}'` (Note the `'` around the value)\n\nlike `created > '2021-01-01T00:00:00Z'`\n\nAllowed fields are:\n - `created`\n - `updated`\n - `provider_id`\n\nOnly one field is allowed for the moment, no AND/OR combination yet","required":false,"schema":{"description":"CQL2 Filter\n\nNote: the provider is named 'user' or 'account' in GeoVisio\n\nFilter should be like `{field} {comparator} '{value}'` (Note the `'` around the value)\n\nlike `created > '2021-01-01T00:00:00Z'`\n\nAllowed fields are:\n - `created`\n - `updated`\n - `provider_id`\n\nOnly one field is allowed for the moment, no AND/OR combination yet","type":["string","null"]}},{"name":"sortby","in":"query","description":"Define the sort order based on given property.\n\nSort order is defined based on preceding '+' (asc) or '-' (desc).\n\nIf there is no prefix, default is ascending order.\n\nAvailable properties are: \"created\" and \"updated\".\n\nThis parameter MUST be urlencoded (%2B instead of '+')","required":false,"schema":{"description":"Define the sort order based on given property.\n\nSort order is defined based on preceding '+' (asc) or '-' (desc).\n\nIf there is no prefix, default is ascending order.\n\nAvailable properties are: \"created\" and \"updated\".\n\nThis parameter MUST be urlencoded (%2B instead of '+')","$ref":"#/components/schemas/CollectionSortBy"}},{"name":"format","in":"query","description":"Expected output format (STAC JSON or RSS XML)\n\nCan also be specified using the `Accept: application/rss+xml` header\n\nDefault is JSON","required":false,"schema":{"description":"Expected output format (STAC JSON or RSS XML)\n\nCan also be specified using the `Accept: application/rss+xml` header\n\nDefault is JSON","anyOf":[{"$ref":"#/components/schemas/CollectionsResponseFormat"},{"type":"null"}]}}],"responses":{"200":{"description":"Get list of collections.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Collections","$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/collections"}},"application/rss+xml":{"schema":{"type":"object","properties":{"version":{"type":"string","example":"2.0","xml":{"attribute":true}},"channel":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"link":{"type":"string","format":"uri"},"language":{"type":"string"},"lastBuildDate":{"type":"string"},"generator":{"type":"string"},"docs":{"type":"string","format":"uri"},"image":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"},"link":{"type":"string","format":"uri"}}},"item":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"link":{"type":"string","format":"uri"},"author":{"type":"string"},"pubDate":{"type":"string"},"enclosure":{"type":"object","properties":{"type":{"type":"string","xml":{"attribute":true}},"url":{"type":"string","format":"uri","xml":{"attribute":true}},"length":{"type":"integer","xml":{"attribute":true}}}},"guid":{"type":"string","format":"uri"},"point":{"type":"string","xml":{"namespace":"http://www.georss.org/georss","prefix":"georss"}},"encoded":{"type":"string","xml":{"namespace":"http://purl.org/rss/1.0/modules/content/","prefix":"content"}}},"required":["title","link","description","author","pubDate","point"]}}},"required":["title","link","description","generator","docs"]}},"xml":{"name":"rss"},"required":["version","channel"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/collections/{id}":{"get":{"tags":["Collections"],"summary":"Get a specific collection.","operationId":"get_api-collections-ad751579c3089da3789666412a7d7d5c","parameters":[{"name":"id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Collection","type":"object","$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/collection"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/collections/{id}/thumb.jpg":{"get":{"tags":["Collections"],"summary":"Get the thumbnail representing a single collection","description":"Redirection to a 500px wide ready-for-display image","operationId":"get_api-collections-98cffa99620051dfc6fc773fe8ad3529","parameters":[{"name":"id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}}],"responses":{"308":{"description":"","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/users/{id}/catalog":{"get":{"tags":["Providers","Collections"],"summary":"Get a STAC catalog for a given user","description":"\nThe STAC catalog is a single catalog with links to all collections of the user\nThe collections can be filterd with the different parameters","operationId":"get_api-users-e3187ba3ee62b1f23316912d5c1398b8","parameters":[{"name":"id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Limit the number of collections","required":false,"schema":{"description":"Limit the number of collections","type":"integer","format":"uint16","minimum":0,"maximum":1000,"default":100}},{"name":"bbox","in":"query","description":"Limit to collections inside this bounding box","required":false,"schema":{"description":"Limit to collections inside this bounding box","type":["array","null"],"items":{"type":"number","format":"double"},"default":null}},{"name":"page","in":"query","description":"CQL2 filter, only used for pagination filter.","required":false,"schema":{"description":"CQL2 filter, only used for pagination filter.","type":["string","null"]}},{"name":"sortby","in":"query","description":"Define the sort order based on given property.\nSort order is defined based on preceding '+' (asc) or '-' (desc).\nIf there is no prefix, default is ascending order.\n\nAvailable properties are: \"created\" and \"updated\".\n\nThis parameter MUST be urlencoded (%2B instead of '+')","required":false,"schema":{"description":"Define the sort order based on given property.\nSort order is defined based on preceding '+' (asc) or '-' (desc).\nIf there is no prefix, default is ascending order.\n\nAvailable properties are: \"created\" and \"updated\".\n\nThis parameter MUST be urlencoded (%2B instead of '+')","$ref":"#/components/schemas/CollectionSortBy"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Catalog","type":"object","$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/catalog"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/users/{id}/collection":{"get":{"tags":["Providers"],"summary":"Get a STAC Collection for a given user","description":"\nThis is quite the same as the /users/{userId}/catalog endpoint, but a STAC collection can have more metadata than a catalog\n\nThe collection is, like the catalog, a list of links to all collections of the user\nThe collections can be filtered with the different parameters","operationId":"get_api-users-ad171a8491cee03b32a4bb858956ec6f","parameters":[{"name":"id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Limit the number of collections","required":false,"schema":{"description":"Limit the number of collections","type":"integer","format":"uint16","minimum":0,"maximum":1000,"default":100}},{"name":"bbox","in":"query","description":"Limit to collections inside this bounding box","required":false,"schema":{"description":"Limit to collections inside this bounding box","type":["array","null"],"items":{"type":"number","format":"double"},"default":null}},{"name":"page","in":"query","description":"CQL2 filter, only used for pagination filter.","required":false,"schema":{"description":"CQL2 filter, only used for pagination filter.","type":["string","null"]}},{"name":"sortby","in":"query","description":"Define the sort order based on given property.\nSort order is defined based on preceding '+' (asc) or '-' (desc).\nIf there is no prefix, default is ascending order.\n\nAvailable properties are: \"created\" and \"updated\".\n\nThis parameter MUST be urlencoded (%2B instead of '+')","required":false,"schema":{"description":"Define the sort order based on given property.\nSort order is defined based on preceding '+' (asc) or '-' (desc).\nIf there is no prefix, default is ascending order.\n\nAvailable properties are: \"created\" and \"updated\".\n\nThis parameter MUST be urlencoded (%2B instead of '+')","$ref":"#/components/schemas/CollectionSortBy"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"UserCollection","type":"object","$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/collection"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/collections/{id}/items":{"get":{"tags":["Items"],"summary":"List all items of a collection","operationId":"get_api-collections-71924e982f24273ce8bbad495607eba3","parameters":[{"name":"id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Limit the number of collections","required":false,"schema":{"description":"Limit the number of collections","type":"integer","format":"uint16","minimum":1,"maximum":1000,"default":100}},{"name":"page","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"withPicture","in":"query","required":false,"schema":{"type":["string","null"],"format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Items","$ref":"https://api.stacspec.org/v1.0.0/item-search/openapi.yaml#/components/schemas/itemCollection"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/collections/{collection_id}/items/{id}":{"get":{"tags":["Items"],"summary":"Get a specific item of a collection","operationId":"get_api-collections-0feb49711b4897f508ed61d7eeffded3","parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"description":"Id of the collection","type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"description":"Id of the item","type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Item","$ref":"https://api.stacspec.org/v1.0.0/ogcapi-features/openapi.yaml#/components/responses/Feature"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/pictures/{id}":{"get":{"tags":["Items"],"summary":"Get a specific item (picture) without the need for its collection's id","description":"\nIt's the non-stac alias to the `/api/collections/<collectionId>/items/<itemId>` endpoint (but you don't need to know the collection ID here).","operationId":"get_api-pictures-9cff2bb7686c7be298ced472a41b9abe","parameters":[{"name":"id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Item","$ref":"https://api.stacspec.org/v1.0.0/ogcapi-features/openapi.yaml#/components/responses/Feature"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/search":{"post":{"tags":["Items"],"summary":"Search for some items by POSTing a json","operationId":"post_api-search-5769f3316ef291861415451c98c2e33f","requestBody":{"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"SearchParameters","type":"object","properties":{"limit":{"description":"Limit the number of results, Defaults to 10","type":"integer","format":"int16","minimum":-32768,"maximum":32767,"default":10},"ids":{"description":"Search for items with those IDs","type":["array","null"],"items":{"type":"string","format":"uuid"},"default":null},"collections":{"description":"Search for items belonging to those collections","type":["array","null"],"items":{"type":"string","format":"uuid"},"default":null},"bbox":{"description":"Search for items inside this bounding box","type":["array","null"],"items":{"type":"number","format":"double"},"default":null},"place_position":{"description":"Geographical coordinates (lon,lat) of a place you'd like to have pictures of.\nReturned pictures are either 360° or looking in direction of wanted place.","anyOf":[{"$ref":"#/components/schemas/Coord"},{"type":"null"}]},"place_distance":{"description":"Distance range (in meters) to search pictures for a particular place (place_position).\nDefault range is 3-15. Only used if place_position parameter is defined.","$ref":"#/components/schemas/Range"},"place_fov_tolerance":{"description":"Tolerance on how much the place should be centered in nearby pictures:\n * A lower value means place have to be at the very center of picture\n * A higher value means place could be more in picture sides\n\nValue is expressed in degrees (from 2 to 180, defaults to 30°), and represents the acceptable field of view relative to picture heading. Only used if place_position parameter is defined.\n\nExample values are:\n\n * <= 30° for place to be in the very center of picture\n * 60° for place to be in recognizable human field of view\n * 180° for place to be anywhere in a wide-angle picture\n\nNote that this parameter is not taken in account for 360° pictures, as by definition a nearby place would be theorically always visible in it.","type":"integer","format":"uint64","minimum":0,"default":30},"filter":{"description":"CQL2 filter for the search\n\nAllowed properties are:\n* field_of_view: field of view in degree.\n* semantics: filter on items based on their semantics. The attributes must either:\n   - start with \"semantics.\" and formated like \"semantics.some_key\"='some_value'.\n   - be \"semantics\" and only with the `IS NOT NULL` operator, to search for any semantics.\n\nTo search for any values of a semantic tag, use `\"semantics.some_key\" IS NOT NULL`` (case matter here).\n\nTo search for items with any semantic tags, use `\"semantics\" IS NOT NULL`.\n\nNote: for semantic:\n  * it's important for the attribute to be quoted (\") and the value to around simple quotes (') to avoid issues with CQL2 parsing.\n  * for the moment only equality (=), list (IN) and \"IS NOT NULL\" filters are supported.\n  * we do not support searching for multiple different tags at once with an AND operator (for example, \"semantics.traffic_sign\"='yes' AND \"semantics.colour\"='red' will not work). We suggest to filter data on your side, after retrieving by the main attribute depending on your interest.\n\nExamples:\n\n   * \"semantics.osm|traffic_sign\"='yes'\n   * \"semantics.osm|traffic_sign\" IS NOT NULL'\n   * \"semantics\" IS NOT NULL'\n   * \"semantics.osm|amenity\" IN ('bench', 'whatever') OR \"semantics.osm|traffic_sign\"='yes'\n   * field_of_view = 360\n\nUsage doc can be found here: https://docs.geoserver.org/2.23.x/en/user/tutorials/cql/cql_tutorial.html","anyOf":[{"$ref":"#/components/schemas/ItemFilter"},{"type":"null"}]},"sortby":{"description":"Define the sort order based on given property.\n\nSort order is defined based on preceding '+' (asc) or '-' (desc).\n\nIf there is no prefix, default is ascending order.\n\nAvailable properties is:\n\n  * \"ts\" (capture datetime of the picture)\n  * \"id\" (id of the picture)\n\nNote that, is no sortby parameter is provided, the default sort order is:\n\n* When searching using a bounding box (`bbox`), the distance to the center of this bounding box\n* When searching using a place (`place_distance`), the distance to this place\n* in other cases, by \"ts\" DESC.\n\nThis parameter MUST be urlencoded (%2B instead of '+')","anyOf":[{"$ref":"#/components/schemas/ItemSortBy"},{"type":"null"}]}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Items","$ref":"https://api.stacspec.org/v1.0.0/item-search/openapi.yaml#/components/schemas/itemCollection"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false},"get":{"tags":["Items"],"summary":"Search for some items","operationId":"get_api-search-5769f3316ef291861415451c98c2e33f","parameters":[{"name":"limit","in":"query","description":"Limit the number of results, Defaults to 10","required":false,"schema":{"description":"Limit the number of results, Defaults to 10","type":"integer","format":"int16","minimum":-32768,"maximum":32767,"default":10}},{"name":"ids","in":"query","description":"Search for items with those IDs","required":false,"schema":{"description":"Search for items with those IDs","type":["array","null"],"items":{"type":"string","format":"uuid"},"default":null}},{"name":"collections","in":"query","description":"Search for items belonging to those collections","required":false,"schema":{"description":"Search for items belonging to those collections","type":["array","null"],"items":{"type":"string","format":"uuid"},"default":null}},{"name":"bbox","in":"query","description":"Search for items inside this bounding box","required":false,"schema":{"description":"Search for items inside this bounding box","type":["array","null"],"items":{"type":"number","format":"double"},"default":null}},{"name":"place_position","in":"query","description":"Geographical coordinates (lon,lat) of a place you'd like to have pictures of.\nReturned pictures are either 360° or looking in direction of wanted place.","required":false,"schema":{"description":"Geographical coordinates (lon,lat) of a place you'd like to have pictures of.\nReturned pictures are either 360° or looking in direction of wanted place.","anyOf":[{"$ref":"#/components/schemas/Coord"},{"type":"null"}]}},{"name":"place_distance","in":"query","description":"Distance range (in meters) to search pictures for a particular place (place_position).\nDefault range is 3-15. Only used if place_position parameter is defined.","required":false,"schema":{"description":"Distance range (in meters) to search pictures for a particular place (place_position).\nDefault range is 3-15. Only used if place_position parameter is defined.","$ref":"#/components/schemas/Range"}},{"name":"place_fov_tolerance","in":"query","description":"Tolerance on how much the place should be centered in nearby pictures:\n * A lower value means place have to be at the very center of picture\n * A higher value means place could be more in picture sides\n\nValue is expressed in degrees (from 2 to 180, defaults to 30°), and represents the acceptable field of view relative to picture heading. Only used if place_position parameter is defined.\n\nExample values are:\n\n * <= 30° for place to be in the very center of picture\n * 60° for place to be in recognizable human field of view\n * 180° for place to be anywhere in a wide-angle picture\n\nNote that this parameter is not taken in account for 360° pictures, as by definition a nearby place would be theorically always visible in it.","required":false,"schema":{"description":"Tolerance on how much the place should be centered in nearby pictures:\n * A lower value means place have to be at the very center of picture\n * A higher value means place could be more in picture sides\n\nValue is expressed in degrees (from 2 to 180, defaults to 30°), and represents the acceptable field of view relative to picture heading. Only used if place_position parameter is defined.\n\nExample values are:\n\n * <= 30° for place to be in the very center of picture\n * 60° for place to be in recognizable human field of view\n * 180° for place to be anywhere in a wide-angle picture\n\nNote that this parameter is not taken in account for 360° pictures, as by definition a nearby place would be theorically always visible in it.","type":"integer","format":"uint64","minimum":0,"default":30}},{"name":"filter","in":"query","description":"CQL2 filter for the search\n\nAllowed properties are:\n* field_of_view: field of view in degree.\n* semantics: filter on items based on their semantics. The attributes must either:\n   - start with \"semantics.\" and formated like \"semantics.some_key\"='some_value'.\n   - be \"semantics\" and only with the `IS NOT NULL` operator, to search for any semantics.\n\nTo search for any values of a semantic tag, use `\"semantics.some_key\" IS NOT NULL`` (case matter here).\n\nTo search for items with any semantic tags, use `\"semantics\" IS NOT NULL`.\n\nNote: for semantic:\n  * it's important for the attribute to be quoted (\") and the value to around simple quotes (') to avoid issues with CQL2 parsing.\n  * for the moment only equality (=), list (IN) and \"IS NOT NULL\" filters are supported.\n  * we do not support searching for multiple different tags at once with an AND operator (for example, \"semantics.traffic_sign\"='yes' AND \"semantics.colour\"='red' will not work). We suggest to filter data on your side, after retrieving by the main attribute depending on your interest.\n\nExamples:\n\n   * \"semantics.osm|traffic_sign\"='yes'\n   * \"semantics.osm|traffic_sign\" IS NOT NULL'\n   * \"semantics\" IS NOT NULL'\n   * \"semantics.osm|amenity\" IN ('bench', 'whatever') OR \"semantics.osm|traffic_sign\"='yes'\n   * field_of_view = 360\n\nUsage doc can be found here: https://docs.geoserver.org/2.23.x/en/user/tutorials/cql/cql_tutorial.html","required":false,"schema":{"description":"CQL2 filter for the search\n\nAllowed properties are:\n* field_of_view: field of view in degree.\n* semantics: filter on items based on their semantics. The attributes must either:\n   - start with \"semantics.\" and formated like \"semantics.some_key\"='some_value'.\n   - be \"semantics\" and only with the `IS NOT NULL` operator, to search for any semantics.\n\nTo search for any values of a semantic tag, use `\"semantics.some_key\" IS NOT NULL`` (case matter here).\n\nTo search for items with any semantic tags, use `\"semantics\" IS NOT NULL`.\n\nNote: for semantic:\n  * it's important for the attribute to be quoted (\") and the value to around simple quotes (') to avoid issues with CQL2 parsing.\n  * for the moment only equality (=), list (IN) and \"IS NOT NULL\" filters are supported.\n  * we do not support searching for multiple different tags at once with an AND operator (for example, \"semantics.traffic_sign\"='yes' AND \"semantics.colour\"='red' will not work). We suggest to filter data on your side, after retrieving by the main attribute depending on your interest.\n\nExamples:\n\n   * \"semantics.osm|traffic_sign\"='yes'\n   * \"semantics.osm|traffic_sign\" IS NOT NULL'\n   * \"semantics\" IS NOT NULL'\n   * \"semantics.osm|amenity\" IN ('bench', 'whatever') OR \"semantics.osm|traffic_sign\"='yes'\n   * field_of_view = 360\n\nUsage doc can be found here: https://docs.geoserver.org/2.23.x/en/user/tutorials/cql/cql_tutorial.html","anyOf":[{"$ref":"#/components/schemas/ItemFilter"},{"type":"null"}]}},{"name":"sortby","in":"query","description":"Define the sort order based on given property.\n\nSort order is defined based on preceding '+' (asc) or '-' (desc).\n\nIf there is no prefix, default is ascending order.\n\nAvailable properties is:\n\n  * \"ts\" (capture datetime of the picture)\n  * \"id\" (id of the picture)\n\nNote that, is no sortby parameter is provided, the default sort order is:\n\n* When searching using a bounding box (`bbox`), the distance to the center of this bounding box\n* When searching using a place (`place_distance`), the distance to this place\n* in other cases, by \"ts\" DESC.\n\nThis parameter MUST be urlencoded (%2B instead of '+')","required":false,"schema":{"description":"Define the sort order based on given property.\n\nSort order is defined based on preceding '+' (asc) or '-' (desc).\n\nIf there is no prefix, default is ascending order.\n\nAvailable properties is:\n\n  * \"ts\" (capture datetime of the picture)\n  * \"id\" (id of the picture)\n\nNote that, is no sortby parameter is provided, the default sort order is:\n\n* When searching using a bounding box (`bbox`), the distance to the center of this bounding box\n* When searching using a place (`place_distance`), the distance to this place\n* in other cases, by \"ts\" DESC.\n\nThis parameter MUST be urlencoded (%2B instead of '+')","anyOf":[{"$ref":"#/components/schemas/ItemSortBy"},{"type":"null"}]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Items","$ref":"https://api.stacspec.org/v1.0.0/item-search/openapi.yaml#/components/schemas/itemCollection"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/live":{"get":{"tags":["Status"],"summary":"check if the service is up","operationId":"get_api-live-d1ce5219fd9dc24b7bc22b1cbad1f84e","responses":{"200":{"description":""}},"deprecated":false},"head":{"tags":["Status"],"summary":"check if the service is up","operationId":"head_api-live-d1ce5219fd9dc24b7bc22b1cbad1f84e","responses":{"200":{"description":""}},"deprecated":false}},"/api/status":{"get":{"tags":["Status"],"operationId":"get_api-status-3372e7c31d1eaae32cf561ed2a2ab917","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Status","type":"object","properties":{"last_harvests":{"type":"object","additionalProperties":{"type":"string","format":"date-time"}},"status":{"type":"string"}},"required":["last_harvests","status"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false},"head":{"tags":["Status"],"operationId":"head_api-status-3372e7c31d1eaae32cf561ed2a2ab917","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Status","type":"object","properties":{"last_harvests":{"type":"object","additionalProperties":{"type":"string","format":"date-time"}},"status":{"type":"string"}},"required":["last_harvests","status"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/pictures/{id}/{asset}.jpg":{"get":{"tags":["Items"],"summary":"Redirect to the picture file with its ID","operationId":"get_api-pictures-4605601c1eb8a03cfdfec31f67df6827","parameters":[{"name":"id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}},{"name":"asset","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"string","type":"string"}}],"responses":{"308":{"description":"","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/map/{z}/{x}/{y}.mvt":{"get":{"tags":["Map"],"summary":"Get a MapBox vector tile containing the collections and the items in the tile's geometry","operationId":"get_api-map-a5d78a88ba59e2694fb2b1267cc4449f","parameters":[{"name":"z","in":"path","required":true,"schema":{"description":"Zoom level","type":"integer","format":"uint8","minimum":0,"maximum":255}},{"name":"x","in":"path","required":true,"schema":{"description":"X coordinate","type":"integer","format":"uint32","minimum":0}},{"name":"y","in":"path","required":true,"schema":{"description":"Y coordinate","type":"integer","format":"uint32","minimum":0}},{"name":"provider_id","in":"path","required":true,"schema":{"description":"Get tile for a specific provider","type":["string","null"],"format":"uuid"}}],"responses":{"200":{"description":"\n Layer \"sequences\":\n   - Available on zoom levels >= 6\n   - Available properties:\n     - id (sequence ID)\n     - account_id\n     - model (camera make and model)\n     - type (flat or equirectangular)\n     - date (capture date, as YYYY-MM-DD)\n\n Layer \"pictures\":\n   - Available on zoom levels >= 13\n   - Available properties:\n     - id (picture ID)\n     - account_id\n     - ts (picture date/time)\n     - heading (picture heading in degrees)\n     - sequences (list of sequences ID this pictures belongs to)\n     - type (flat or equirectangular)\n     - model (camera make and model)\n\n Layer \"grid\":\n   - Available on zoom levels 0 to 5 (included)\n   - Available properties:\n     - id\n     - nb_pictures\n     - nb_360_pictures (number of 360° pictures)\n     - nb_flat_pictures (number of flat pictures)\n     - coef (value from 0 to 1, relative quantity of available pictures)\n     - coef_360_pictures (value from 0 to 1, relative quantity of available 360° pictures)\n     - coef_flat_pictures (value from 0 to 1, relative quantity of available flat pictures)\n","content":{"application/vnd.mapbox-vector-tile":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/map/style.json":{"get":{"tags":["Map"],"summary":"Get vector tiles style.","description":"\nThis style file follows MapLibre Style Spec : https://maplibre.org/maplibre-style-spec/","operationId":"get_api-map-style.json-3d5f2021fdb38c0f62084232a3e0c942","responses":{"200":{"description":""}},"deprecated":false}},"/api/users/{provider_id}/map/{z}/{x}/{y}.mvt":{"get":{"tags":["Map"],"summary":"Get a MapBox vector tile containing the collections and the items in the tile's geometry for a given provider","operationId":"get_api-users-48f1bea93d0ecd7788d9623d183ae3b5","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"description":"Zoom level","type":"integer","format":"uint8","minimum":0,"maximum":255}},{"name":"z","in":"path","required":true,"schema":{"description":"X coordinate","type":"integer","format":"uint32","minimum":0}},{"name":"x","in":"path","required":true,"schema":{"description":"Y coordinate","type":"integer","format":"uint32","minimum":0}},{"name":"y","in":"path","required":true,"schema":{"description":"Get tile for a specific provider","type":["string","null"],"format":"uuid"}}],"responses":{"200":{"description":"\n Layer \"sequences\":\n   - Available on zoom levels >= 6\n   - Available properties:\n     - id (sequence ID)\n     - account_id\n     - model (camera make and model)\n     - type (flat or equirectangular)\n     - date (capture date, as YYYY-MM-DD)\n\n Layer \"pictures\":\n   - Available on zoom levels >= 13\n   - Available properties:\n     - id (picture ID)\n     - account_id\n     - ts (picture date/time)\n     - heading (picture heading in degrees)\n     - sequences (list of sequences ID this pictures belongs to)\n     - type (flat or equirectangular)\n     - model (camera make and model)\n\n Layer \"grid\":\n   - Available on zoom levels 0 to 5 (included)\n   - Available properties:\n     - id\n     - nb_pictures\n     - nb_360_pictures (number of 360° pictures)\n     - nb_flat_pictures (number of flat pictures)\n     - coef (value from 0 to 1, relative quantity of available pictures)\n     - coef_360_pictures (value from 0 to 1, relative quantity of available 360° pictures)\n     - coef_flat_pictures (value from 0 to 1, relative quantity of available flat pictures)\n","content":{"application/vnd.mapbox-vector-tile":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/users/{provider_id}/map/style.json":{"get":{"tags":["Map"],"summary":"Get vector tiles style for a given provider.","description":"\nThis style file follows MapLibre Style Spec : https://maplibre.org/maplibre-style-spec/","operationId":"get_api-users-63706061dec20849ba86de3fc5977db3","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}}],"responses":{"200":{"description":""}},"deprecated":false}},"/api/stats":{"get":{"tags":["Stats"],"summary":"Get stats","operationId":"get_api-stats-3f13f4043c2523d6583e96fb23d1bfef","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Metrics","description":"Generic statistics about the data harvested","type":"object","properties":{"generic_stats":{"description":"Number of pictures in the instance","$ref":"#/components/schemas/GenericMetrics"},"stats_by_instance":{"description":"Some disaggregated statistics by instances","type":"object","additionalProperties":{"$ref":"#/components/schemas/GenericMetrics"}},"stats_by_upload_month":{"description":"Some disaggregated statistics by picture upload month and instance","type":"object","additionalProperties":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MetricsByUploadMonthAndInstance"}}}},"required":["generic_stats","stats_by_instance","stats_by_upload_month"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/stats/by_contributor":{"get":{"tags":["Stats"],"summary":"Get stats","operationId":"get_api-stats-by_contributor-0a0b43d70a14c7c450b782d397106b09","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"StatsByContributor","type":"object","properties":{"stats_by_contributor":{"type":"array","items":{"$ref":"#/components/schemas/ContributorStat"}}},"required":["stats_by_contributor"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/stats/queries/by_day":{"get":{"tags":["Stats"],"summary":"Statistics on queries on the IGN and OSM-fr instance, by day.","description":"The endpoint returns a simple CSV, with 3 columns:\n* `instance`\n* `date`\n* nb_pictures_seen (which is a simple approximation, each picture downloaded (be it a full picture, a sd, or a thumbnail) + the filed 360° / 10 (since we download 10 tiles by default, if the users do not turn around).","operationId":"get_api-stats-queries-by_day-dd64cf4ecfb7e08025fabe498b8177f0","responses":{"200":{"description":""},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/users":{"get":{"tags":["Providers"],"summary":"Get all the providers as a STAC catalog","operationId":"get_api-users-5dd78a14d6e453994bd4d5c563f90e04","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Catalog","type":"object","$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/catalog"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/users/search":{"get":{"tags":["Providers"],"summary":"Search for some providers","operationId":"get_api-users-search-690bf8a30f7351b1d5de09207914a958","parameters":[{"name":"limit","in":"query","description":"Limit the number of results, Defaults to 10","required":false,"schema":{"description":"Limit the number of results, Defaults to 10","type":"integer","format":"int16","minimum":-32768,"maximum":32767,"default":10}},{"name":"q","in":"query","description":"Search for providers with those IDs","required":true,"schema":{"description":"Search for providers with those IDs","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Providers","type":"object","properties":{"features":{"type":"array","items":{"$ref":"#/components/schemas/Provider"}}},"required":["features"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/users/{user_id}":{"get":{"tags":["Providers"],"summary":"Get a provider by its ID","operationId":"get_api-users-816b79d21b59c373d6110ccca9a87362","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Uuid","type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Provider","type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"instance_name":{"type":"string"},"label":{"type":"string"},"links":{"$ref":"https://api.stacspec.org/v1.0.0/ogcapi-features/openapi.yaml#/components/schemas/links"}},"required":["id","name","instance_name","label","links"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/reports":{"post":{"tags":["Report"],"summary":"Forward a report to the instance","description":"\nCheck the instance documentation for more information about the response.","operationId":"post_api-reports-59760324c52b23340d7834c5711e9e35","requestBody":{"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Report","type":"object","properties":{"picture_id":{"description":"The ID of the picture (item) concerned by this report. You should either set picture_id or sequence_id.","type":["string","null"],"format":"uuid"},"sequence_id":{"description":"The ID of the sequence (collection) concerned by this report. You should either set picture_id or sequence_id. If no picture_id is set, report will concern the whole sequence.","type":["string","null"],"format":"uuid"},"issue":{"description":"Nature of the issue you want to report. Check the instance documentation for more information.","type":"string"},"reported_email":{"description":"The reporter email, optional but can be useful to get an answer or if precisions are necessary.","type":["string","null"]},"reporter_comments":{"description":"Optional details about the issue.","type":["string","null"]}},"required":["issue"],"additionalProperties":true}}},"required":true},"responses":{"200":{"description":""},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/instances":{"get":{"tags":["Metadata"],"summary":"List of the Panoramax instances harvested","operationId":"get_api-instances-4e1087d89570569d0206f9813bf178f3","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Instances","description":"List of Panoramax instance","type":"object","properties":{"instances":{"type":"array","items":{"$ref":"#/components/schemas/Instance"}}},"required":["instances"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/instances/{name}":{"get":{"tags":["Metadata"],"summary":"Get one Panoramax instance, by its name","operationId":"get_api-instances-86ee173c5bfc445d50a6cc5b74b29b19","parameters":[{"name":"name","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"string","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Instance","description":"Panoramax instance","type":"object","properties":{"id":{"description":"Id of the instance","type":"string","format":"uuid"},"name":{"description":"Name of the instance","type":"string"},"url":{"description":"Url of the instance","type":"string"},"extent":{"$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/extent"},"links":{"description":"Additional links on the instance.","$ref":"https://api.stacspec.org/v1.0.0/ogcapi-features/openapi.yaml#/components/schemas/links"},"last_harvest":{"description":"The last harvest date (the harvest might have failed)","type":["string","null"],"format":"date-time"},"last_succesful_harvest":{"description":"The date of the last harvest that has been succesful","type":["string","null"],"format":"date-time"},"configuration":true},"required":["id","name","url","extent","links"]}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/instances/{name}/logo":{"get":{"tags":["Metadata"],"summary":"Get one Panoramax instance logo, using its name","operationId":"get_api-instances-98baa9c422b5e4fb7a26dc98ed4c944c","parameters":[{"name":"name","in":"path","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"string","type":"string"}}],"responses":{"308":{"description":"","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad Request"},"404":{"description":"Not Found"}},"deprecated":false}},"/api/docs/swagger":{}},"components":{"schemas":{"CollectionSortBy":{"type":"string","pattern":"[+|-]?[A-Za-z_].*"},"CollectionsResponseFormat":{"type":"string","enum":["json","rss"]},"ContributionStats":{"type":"object","properties":{"nb_items":{"description":"Number of pictures contributed","type":"integer","format":"int64"},"km_captured":{"description":"Approximate the number of kilometers done contributing. Computed based on the sequences geometries.","type":"integer","format":"int64"}},"required":["nb_items","km_captured"]},"ContributorStat":{"type":"object","properties":{"name":{"description":"Name of the contributor","type":"string"},"instance_name":{"description":"Name of the instance","type":"string"},"id":{"description":"Id of the contributor","type":"string","format":"uuid"},"nb_items":{"description":"Number of pictures contributed","type":"integer","format":"int64"},"km_captured":{"description":"Approximate the number of kilometers done contributing. Computed based on the sequences geometries.","type":"integer","format":"int64"},"history":{"description":"History of the contribution","type":"object","additionalProperties":{"$ref":"#/components/schemas/ContributionStats"}}},"required":["name","instance_name","id","nb_items","km_captured","history"]},"Coord":{"type":"string","pattern":"-?\\d+\\.\\d+,-?\\d+\\.\\d+"},"GenericMetrics":{"description":"Generic statistics about the data harvested","type":"object","properties":{"nb_pictures":{"description":"Number of pictures","type":"integer","format":"uint64","minimum":0},"pictures_original_size":{"description":"Original size of the picture when uploaded (does not take the derivated pictures into account (the blurred pictures, the small def pictures, the tiles pictures, ...))","type":"integer","format":"uint64","minimum":0},"nb_contributors":{"description":"Number of unique contributors","type":"integer","format":"uint64","minimum":0},"approximated_coverage_km":{"description":"Approximate the coverage of the pictures. Since the pictures are 'points' on a coordinate, we use an heuristics to compute a coverage\nWe consider that each picture covers 20m (seems reasonable), and each pictures are rounded so if there is several pictures less than 20m appart we only count 1 picture\nThis deduplication makes it possible not to increase this metrics if we have lots of pictures of the same road at different time\n\nNote that this field is deprecated because the computation is wrong, and we'll need time to compute it correctly.\nUse `collections_length_km` instead.","type":"integer","format":"uint64","minimum":0,"deprecated":true},"collections_length_km":{"description":"Total length of the collections in km","type":"integer","format":"uint64","minimum":0}},"required":["nb_pictures","pictures_original_size","nb_contributors","approximated_coverage_km","collections_length_km"]},"Instance":{"description":"Panoramax instance","type":"object","properties":{"id":{"description":"Id of the instance","type":"string","format":"uuid"},"name":{"description":"Name of the instance","type":"string"},"url":{"description":"Url of the instance","type":"string"},"extent":{"$ref":"https://api.stacspec.org/v1.0.0/collections/openapi.yaml#/components/schemas/extent"},"links":{"description":"Additional links on the instance.","$ref":"https://api.stacspec.org/v1.0.0/ogcapi-features/openapi.yaml#/components/schemas/links"},"last_harvest":{"description":"The last harvest date (the harvest might have failed)","type":["string","null"],"format":"date-time"},"last_succesful_harvest":{"description":"The date of the last harvest that has been succesful","type":["string","null"],"format":"date-time"},"configuration":true},"required":["id","name","url","extent","links"]},"ItemFilter":{"$ref":"https://schemas.opengis.net/cql2/1.0/cql2.yml#"},"ItemSortBy":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/ItemSortByFields"}}},"required":["fields"]},"ItemSortByFields":{"type":"string","pattern":"[+|-]?[A-Za-z_].*"},"MetricsByUploadMonthAndInstance":{"description":"Broken down statistics by picture upload month and instance","type":"object","properties":{"nb_pictures":{"description":"Number of pictures","type":"integer","format":"uint64","minimum":0},"pictures_original_size":{"description":"Original size of the picture when uploaded (does not take the derivated pictures into account (the blurred pictures, the small def pictures, the tiles pictures, ...))","type":"integer","format":"uint64","minimum":0},"nb_contributors":{"description":"Number of unique contributors","type":"integer","format":"uint64","minimum":0},"approximated_coverage_km":{"description":"Approximate the coverage of the pictures. Since the pictures are 'points' on a coordinate, we use an heuristics to compute a coverage\nWe consider that each picture covers 20m (seems reasonable), and each pictures are rounded so if there is several pictures less than 20m appart we only count 1 picture\nThis deduplication makes it possible not to increase this metrics if we have lots of pictures of the same road at different time\n\nNote that this field is deprecated because the computation is wrong, and we'll need time to compute it correctly.\nUse `collections_length_km` instead.","type":"integer","format":"uint64","minimum":0,"deprecated":true},"collections_length_km":{"description":"Total length of the collections in km","type":"integer","format":"uint64","minimum":0},"nb_active_contributors":{"type":"integer","format":"uint64","minimum":0}},"required":["nb_pictures","pictures_original_size","nb_contributors","approximated_coverage_km","collections_length_km","nb_active_contributors"]},"Provider":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"instance_name":{"type":"string"},"label":{"type":"string"},"links":{"$ref":"https://api.stacspec.org/v1.0.0/ogcapi-features/openapi.yaml#/components/schemas/links"}},"required":["id","name","instance_name","label","links"]},"Range":{"type":"string","pattern":"\\d-\\d"}}},"tags":[{"name":"Collections","description":"STAC collections (also called sequences)"},{"name":"Items","description":"STAC items (references Geolocated images)"},{"name":"Map","description":"Tiles for web map display"},{"name":"Providers","description":"Account management"},{"name":"Metadata","description":"API metadata"},{"name":"Status","description":"Api status"}],"externalDocs":{"description":"Panoramax documentation","url":"https://docs.panoramax.fr/"}}