diff --git a/.github/workflows/sync-upstream-specs.yml b/.github/workflows/sync-upstream-specs.yml new file mode 100644 index 00000000..0fa37eca --- /dev/null +++ b/.github/workflows/sync-upstream-specs.yml @@ -0,0 +1,32 @@ +# Opens or refreshes one PR when a spec served by api.woosmap.com differs from upstream/. +name: Sync upstream specs +on: + schedule: + - cron: "0 6 * * 1" + workflow_dispatch: + +permissions: + contents: read + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4.4.0 + - name: Download upstream specs + run: tools/sync-upstream-specs.sh + # A PAT, so that the branch push runs Build and Test on the PR. + - uses: peter-evans/create-pull-request@v8.1.1 + with: + token: ${{ secrets.WOOSMAP_GH_ACCESS_TOKEN }} + add-paths: upstream + branch: chore/sync-upstream-specs + delete-branch: true + commit-message: "fix(spec): sync upstream OpenAPI specs" + title: "fix(spec): sync upstream OpenAPI specs" + body: | + ## What? + Refreshes `upstream/` from `https://api.woosmap.com//openapi.json`. + + ## Why? + The merged spec only picks up upstream changes through this PR. Check the diff for contract changes that the SDKs need to follow before merging: merging publishes a patch release. diff --git a/README.md b/README.md index a2340eef..f4d55992 100644 --- a/README.md +++ b/README.md @@ -23,17 +23,19 @@ An OpenAPI specification for Woosmap Platform. The repository makes use of [Bazel](https://bazel.build/) to generate outputs from the specification and sample requests. +### Upstream specs + +The APIs that publish their own spec at `https://api.woosmap.com//openapi.json` are vendored in `upstream/` and +merged into `dist/merged-woosmap-openapi3.json`. A weekly workflow refreshes them and opens a PR when they change. +`npm run sync:upstream` does the same refresh locally. + ### Build and test -To be able to build the spec locally, you'll need a github personal access token (mandatory for merging with auto -generated spec such as Woosmap x What3Words). -Generate one with repository access here: . To be able to generate responses, you'll need a woosmap public key and woosmap private key. Once generated, it's convenient to add these environment variables in the file `.bazelrc.user` at the root of the repository like this: ```bash -build --action_env GH_TOKEN=ghp_xxxxxxxxx run --action_env WOOSMAP_PUBLIC_API_KEY=woos-xxxxxxxx run --action_env WOOSMAP_PRIVATE_API_KEY=da4e8e73-xxxxx-xxxx ``` diff --git a/WORKSPACE b/WORKSPACE index a922ae64..827ad348 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,16 +1,10 @@ -# Declares that this directory is the root of a Bazel workspace. -# See https://docs.bazel.build/versions/master/build-ref.html#workspace workspace( name = "openapi-specification", ) -# Install the nodejs "bootstrap" package -# This provides the basic tools for running and packaging nodejs programs in Bazel -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -# Fetch Aspect's rules_js so we can install our npm dependencies -# v2.9.2 (still rules_js 2.x) ships a Node toolchain list that includes -# Node 22.x, required to register a Node >=22.12 toolchain below. +# Needs a Node toolchain list that includes Node >= 22.12, see node_version below. http_archive( name = "aspect_rules_js", sha256 = "1774702556e1d0b83b7f5eb58ec95676afe6481c62596b53f5b96575bacccf73", @@ -18,9 +12,7 @@ http_archive( url = "https://github.com/aspect-build/rules_js/releases/download/v2.9.2/rules_js-v2.9.2.tar.gz", ) -# Fetch Aspect's rules_ts for TypeScript support -# v3.8.10 is the first release whose mirrored version list includes -# typescript 6.0.3 (see ts/private/versions.bzl), keeping the hermetic fetch. +# Oldest release whose mirrored version list includes typescript 6.0.3. http_archive( name = "aspect_rules_ts", sha256 = "06a432998e3f0b4c1057926b3946b51057413c6ffcb19bbc5e2674191a061063", @@ -28,27 +20,21 @@ http_archive( url = "https://github.com/aspect-build/rules_ts/releases/download/v3.8.10/rules_ts-v3.8.10.tar.gz", ) -# Register js dependencies load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies") rules_js_dependencies() -# Register TypeScript dependencies load("@aspect_rules_ts//ts:repositories.bzl", "rules_ts_dependencies") rules_ts_dependencies( - # This keeps the TypeScript version in-sync with the editor ts_version_from = "//:package.json", ) -# Set up toolchains load("@aspect_rules_js//js:toolchains.bzl", "rules_js_register_toolchains") -# Node 22.x (>=22.12) supersedes the EOL Node 18 default and enables require() -# of the now ESM-only remark/unified toolchain used by the doc generator. +# The ESM-only remark/unified toolchain needs require(esm), so Node >= 22.12. rules_js_register_toolchains(node_version = "22.14.0") -# Set up npm load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock") npm_translate_lock( @@ -75,17 +61,3 @@ http_archive( load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies") rules_pkg_dependencies() - -[http_file( - name = name + "_openapi", - downloaded_file_path = name + ".json", - urls = ["https://api.woosmap.com/{}/openapi.json".format(name)], -) for name in [ - "maps", - "what3words", - "indoor", - "transit", - "datasets", - "distance", - "localities", -]] diff --git a/package.json b/package.json index 7c49ac8c..d0c1a8b5 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "responses": "bazel run generator/responses:_responses_bin -- --output `pwd`/specification/responses", "samples": "bazel run generator/requests:_samples_bin -- --output `pwd`/specification/snippets", "publish:postman": "bazel run generator/postman:_postman_bin", + "sync:upstream": "tools/sync-upstream-specs.sh", "test": "bazel test ...", "watch": "ibazel build ...", "watch:test": "ibazel test ..." diff --git a/rules/redocly_cli.bzl b/rules/redocly_cli.bzl index b89ef615..07019362 100644 --- a/rules/redocly_cli.bzl +++ b/rules/redocly_cli.bzl @@ -1,14 +1,12 @@ -load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") -load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_run_binary", "js_test") +load("@aspect_rules_js//js:defs.bzl", "js_run_binary") def bundle(name, entry, data = None, config = None, decorators = None, visibility = ["//visibility:public"], **kwargs): - """Bundle OpenAPI files with redocly CLI.""" + """Bundles entry with redocly, dereferences it to JSON and derives the YAML.""" JSON_FILENAME = "{}.json".format(name) YAML_FILENAME = "{}.yml".format(name) RAW_TARGET = "{}_raw".format(name) - RAW_OUTPUT = "raw_{}.json".format(name) # Give unique name to avoid conflicts + RAW_OUTPUT = "raw_{}.json".format(name) - # Use the entry directly all_srcs = [] if data: all_srcs.extend(data) @@ -19,22 +17,19 @@ def bundle(name, entry, data = None, config = None, decorators = None, visibilit all_srcs.append(entry) - # Bundle raw output - use the redocly_cli binary from the root package js_run_binary( name = RAW_TARGET, - outs = [RAW_OUTPUT], # Use unique name - tool = "//:redocly_cli", # Use the binary from the npm package + outs = [RAW_OUTPUT], + tool = "//:redocly_cli", args = [ "bundle", "toBundle", ] + (["--config", "$(rootpath {})".format(config)] if config else []), srcs = all_srcs, env = {"DEBUG": "true"}, - # Add a progress message that will be displayed during build progress_message = "Bundling OpenAPI spec %{input} into %{output}", ) - # The JSON generation step needs to reference the output from RAW_TARGET properly js_run_binary( name = name + "_json", outs = [JSON_FILENAME], @@ -45,15 +40,12 @@ def bundle(name, entry, data = None, config = None, decorators = None, visibilit "--output", "$(rootpath {})".format(JSON_FILENAME), ], - # The spec sources are needed so dereference can resolve the - # example-value $refs (responses/requests) that redocly v2 leaves - # external in the bundle. + # dereference resolves the example $refs that redocly v2 leaves external, so it needs the sources. srcs = [":" + RAW_TARGET] + all_srcs, visibility = visibility, env = {"BAZEL_BINDIR": "$(BINDIR)"}, ) - # Generate YAML output from the JSON file js_run_binary( name = name + "_yaml", outs = [YAML_FILENAME], @@ -92,37 +84,20 @@ def validate(name, openapi_file = None, config = None, rules = None): ) def bundle_external_specs(name, specs, main_spec = "//:woosmap-openapi3.json", config = None, plugins = None): - """Downloads, bundles and joins multiple OpenAPI specs. - - Args: - name: Target name for the final joined spec - specs: List of spec names to bundle - main_spec: Path to the main OpenAPI spec - config: Path to redocly config file - """ - - # Copy external specs to a directory - copy_to_directory( - name = "downloaded_openapi_specs", - srcs = ["@{}_openapi//file".format(s) for s in specs], - out = "external_specs", - include_external_repositories = ["{}_openapi".format(s) for s in specs], - visibility = ["//visibility:public"], - ) - - # Bundle each spec + """Joins main_spec with the specs vendored in //upstream, then applies the merge decorators.""" bundled_specs = [] for spec in specs: bundle_name = "bundle_{}".format(spec) + spec_file = "//upstream:{}".format(spec) bundled_specs.append(bundle_name) js_run_binary( name = bundle_name, - srcs = [":downloaded_openapi_specs"], + srcs = [spec_file], outs = ["{}-bundled.json".format(spec)], args = [ "bundle", - "$(rootpath :downloaded_openapi_specs)/file/{}.json".format(spec), + "$(rootpath {})".format(spec_file), "--output", "{}-bundled.json".format(spec), "--remove-unused-components", @@ -130,7 +105,6 @@ def bundle_external_specs(name, specs, main_spec = "//:woosmap-openapi3.json", c tool = "//:redocly_cli", ) - # Join specs joined_target = name + "_joined" joined_output = "joined-woosmap-openapi3.json" @@ -151,14 +125,13 @@ def bundle_external_specs(name, specs, main_spec = "//:woosmap-openapi3.json", c visibility = ["//visibility:public"], ) - # Apply decorators to the joined spec final_srcs = [":" + joined_target] if config: final_srcs.append(config) if plugins: final_srcs.extend(plugins) - - # Add specification files (includes snippets and responses) for inject-code-samples decorator + + # The inject-code-samples decorator reads the snippets from the spec sources. final_srcs.append("//specification:openapi3") js_run_binary( diff --git a/tools/sync-upstream-specs.sh b/tools/sync-upstream-specs.sh new file mode 100755 index 00000000..d76677e9 --- /dev/null +++ b/tools/sync-upstream-specs.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Refreshes each upstream/.json from https://api.woosmap.com//openapi.json. +set -euo pipefail + +cd "$(dirname "$0")/../upstream" +for spec in *.json; do + name="${spec%.json}" + curl -sSf --retry 3 "https://api.woosmap.com/${name}/openapi.json" | jq . > "${spec}.tmp" + mv "${spec}.tmp" "${spec}" +done diff --git a/upstream/BUILD.bazel b/upstream/BUILD.bazel new file mode 100644 index 00000000..dbb3f2a1 --- /dev/null +++ b/upstream/BUILD.bazel @@ -0,0 +1,7 @@ +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") + +[copy_to_bin( + name = spec.removesuffix(".json"), + srcs = [spec], + visibility = ["//visibility:public"], +) for spec in glob(["*.json"])] diff --git a/upstream/datasets.json b/upstream/datasets.json new file mode 100644 index 00000000..df2f06e1 --- /dev/null +++ b/upstream/datasets.json @@ -0,0 +1,3084 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Datasets", + "version": "v1.5.23" + }, + "paths": { + "/datasets/{dataset_id}": { + "get": { + "tags": [ + "dataset" + ], + "summary": "Get Dataset", + "description": "Gets dataset details.\n\n**Rate limit**: `1/1s`\n\n**Ratelimit:** 1/1s", + "operationId": "get_dataset_datasets__dataset_id__get", + "security": [ + { + "PrivateKeyWithWrite": [] + }, + { + "PrivateKeyWithWriteHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 1 + }, + "delete": { + "tags": [ + "dataset" + ], + "summary": "Delete Dataset", + "description": "Schedule a dataset for deletion, deletion will happen in 7 days.\n\n\n**Rate limit**: `1/1s`\n\n**Ratelimit:** 1/1s", + "operationId": "delete_dataset_datasets__dataset_id__delete", + "security": [ + { + "PrivateKeyWithWrite": [] + }, + { + "PrivateKeyWithWriteHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Delete Dataset Datasets Dataset Id Delete" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "409": { + "description": "The Dataset was already scheduled for deletion.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 1 + }, + "put": { + "tags": [ + "dataset" + ], + "summary": "Update Dataset", + "description": "Updates a dataset url or name.\n\n**Rate limit**: `1/1s`\n\n**Ratelimit:** 1/1s", + "operationId": "update_dataset_datasets__dataset_id__put", + "security": [ + { + "PrivateKeyWithWrite": [] + }, + { + "PrivateKeyWithWriteHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 1 + } + }, + "/datasets/": { + "get": { + "tags": [ + "dataset" + ], + "summary": "List Datasets", + "description": "Lists datasets.\n\n**Rate limit**: `1/1s`\n\n**Ratelimit:** 1/1s", + "operationId": "list_datasets_datasets__get", + "security": [ + { + "PrivateKeyWithWrite": [] + }, + { + "PrivateKeyWithWriteHeader": [] + } + ], + "parameters": [ + { + "name": "per_page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 20, + "minimum": 1, + "description": "The maximum number of elements to return in a result page.", + "default": 10, + "title": "Per Page" + }, + "description": "The maximum number of elements to return in a result page." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "The result page to fetch.", + "default": 1, + "title": "Page" + }, + "description": "The result page to fetch." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetListResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 1 + }, + "post": { + "tags": [ + "dataset" + ], + "summary": "Create Dataset", + "description": "Creates a dataset.\n\n**Rate limit**: `1/1s`\n\n**Ratelimit:** 1/1s", + "operationId": "create_dataset_datasets__post", + "security": [ + { + "PrivateKeyWithWrite": [] + }, + { + "PrivateKeyWithWriteHeader": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetCreateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 1 + } + }, + "/datasets/{dataset_id}/status": { + "get": { + "tags": [ + "dataset" + ], + "summary": "Get Dataset Status", + "description": "Returns the dataset import status.\n\n**Rate limit**: `1/5s`\n\n**Ratelimit:** 1/5s", + "operationId": "get_dataset_status_datasets__dataset_id__status_get", + "security": [ + { + "PrivateKeyWithWrite": [] + }, + { + "PrivateKeyWithWriteHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetStatusResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 5 + } + }, + "/datasets/{dataset_id}/import": { + "post": { + "tags": [ + "dataset" + ], + "summary": "Trigger Import", + "description": "Trigger the dataset import.\n\n**Rate limit**: `1/90s`\n\n**Ratelimit:** 1/90s", + "operationId": "trigger_import_datasets__dataset_id__import_post", + "security": [ + { + "PrivateKeyWithWrite": [] + }, + { + "PrivateKeyWithWriteHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + } + ], + "responses": { + "202": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 90 + } + }, + "/datasets/hooks/reimport/{reimport_key}": { + "post": { + "tags": [ + "dataset" + ], + "summary": "Reimport Dataset Webhook", + "description": "Triggers the reimport of the dataset linked to the dataset.\n\n**Rate limit**: `1/90s`\n\n**Ratelimit:** 1/90s", + "operationId": "reimport_dataset_webhook_datasets_hooks_reimport__reimport_key__post", + "parameters": [ + { + "name": "reimport_key", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Reimport Key" + } + } + ], + "responses": { + "202": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportResponse" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "402": { + "description": "Payment Required" + }, + "403": { + "description": "Forbidden" + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 1, + "x-ratelimit-window-seconds": 90 + } + }, + "/datasets/{dataset_id}/features/search/": { + "post": { + "tags": [ + "search" + ], + "summary": "Search Features", + "description": "Search for features.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "search_features_datasets__dataset_id__features_search__post", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "geojson", + "wkb" + ], + "type": "string", + "default": "geojson", + "title": "Format" + } + }, + { + "name": "per_page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 20, + "minimum": 1, + "description": "The maximum number of elements to return in a result page.", + "default": 10, + "title": "Per Page" + }, + "description": "The maximum number of elements to return in a result page." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "The result page to fetch.", + "default": 1, + "title": "Page" + }, + "description": "The result page to fetch." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchResultResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/datasets/{dataset_id}/features/nearby/": { + "post": { + "tags": [ + "search" + ], + "summary": "Nearby Features", + "description": "Search for features nearby geometry.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "nearby_features_datasets__dataset_id__features_nearby__post", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "geojson", + "wkb" + ], + "type": "string", + "default": "geojson", + "title": "Format" + } + }, + { + "name": "per_page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 20, + "minimum": 1, + "description": "The maximum number of elements to return in a result page.", + "default": 10, + "title": "Per Page" + }, + "description": "The maximum number of elements to return in a result page." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "The result page to fetch.", + "default": 1, + "title": "Page" + }, + "description": "The result page to fetch." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchRequestWithGeometry" + }, + "examples": { + "point_geojson": { + "summary": "Request with point geojson geometry", + "value": { + "geometry": { + "type": "Point", + "coordinates": [ + 3.883, + 43.6 + ] + } + } + }, + "linestring_geojson": { + "summary": "Request with linestring geojson geometry", + "value": { + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 3.85882, + 43.60912 + ], + [ + 3.86276, + 43.60807 + ], + [ + 3.8649, + 43.60572 + ], + [ + 3.86513, + 43.60412 + ], + [ + 3.86681, + 43.60245 + ], + [ + 3.86822, + 43.60093 + ], + [ + 3.87003, + 43.6 + ] + ] + } + } + }, + "polygon_geojson": { + "summary": "Request with polygon geojson geometry, a 10 meters buffer and a where clause", + "value": { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -10, + -10 + ], + [ + 10, + -10 + ], + [ + 10, + 10 + ], + [ + -10, + 10 + ], + [ + -10, + -10 + ] + ] + ] + }, + "buffer": 10, + "where": "cost:<500" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchResultResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/datasets/{dataset_id}/features/intersects/": { + "post": { + "tags": [ + "search" + ], + "summary": "Intersect Features", + "description": "Returns the features that are intersecting with geometry.\n\n**Rate limit**: `20/1s`\n\n![Intersection](https://postgis.net/workshops/postgis-intro/_images/st_intersects.png)\n\n**Ratelimit:** 20/1s", + "operationId": "intersect_features_datasets__dataset_id__features_intersects__post", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "geojson", + "wkb" + ], + "type": "string", + "default": "geojson", + "title": "Format" + } + }, + { + "name": "per_page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 20, + "minimum": 1, + "description": "The maximum number of elements to return in a result page.", + "default": 10, + "title": "Per Page" + }, + "description": "The maximum number of elements to return in a result page." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "The result page to fetch.", + "default": 1, + "title": "Page" + }, + "description": "The result page to fetch." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchRequestWithGeometry" + }, + "examples": { + "point_geojson": { + "summary": "Request with point geojson geometry", + "value": { + "geometry": { + "type": "Point", + "coordinates": [ + 3.883, + 43.6 + ] + } + } + }, + "linestring_geojson": { + "summary": "Request with linestring geojson geometry", + "value": { + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 3.85882, + 43.60912 + ], + [ + 3.86276, + 43.60807 + ], + [ + 3.8649, + 43.60572 + ], + [ + 3.86513, + 43.60412 + ], + [ + 3.86681, + 43.60245 + ], + [ + 3.86822, + 43.60093 + ], + [ + 3.87003, + 43.6 + ] + ] + } + } + }, + "polygon_geojson": { + "summary": "Request with polygon geojson geometry, a 10 meters buffer and a where clause", + "value": { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -10, + -10 + ], + [ + 10, + -10 + ], + [ + 10, + 10 + ], + [ + -10, + 10 + ], + [ + -10, + -10 + ] + ] + ] + }, + "buffer": 10, + "where": "cost:<500" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchResultResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/datasets/{dataset_id}/features/contains/": { + "post": { + "tags": [ + "search" + ], + "summary": "Contains Features", + "description": "Search for features containing geometry.\n\n**Rate limit**: `20/1s`\n\n![Within](https://postgis.net/workshops/postgis-intro/_images/st_within.png)\n\n**Ratelimit:** 20/1s", + "operationId": "contains_features_datasets__dataset_id__features_contains__post", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "geojson", + "wkb" + ], + "type": "string", + "default": "geojson", + "title": "Format" + } + }, + { + "name": "per_page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 20, + "minimum": 1, + "description": "The maximum number of elements to return in a result page.", + "default": 10, + "title": "Per Page" + }, + "description": "The maximum number of elements to return in a result page." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "The result page to fetch.", + "default": 1, + "title": "Page" + }, + "description": "The result page to fetch." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchRequestWithGeometry" + }, + "examples": { + "point_geojson": { + "summary": "Request with point geojson geometry", + "value": { + "geometry": { + "type": "Point", + "coordinates": [ + 3.883, + 43.6 + ] + } + } + }, + "linestring_geojson": { + "summary": "Request with linestring geojson geometry", + "value": { + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 3.85882, + 43.60912 + ], + [ + 3.86276, + 43.60807 + ], + [ + 3.8649, + 43.60572 + ], + [ + 3.86513, + 43.60412 + ], + [ + 3.86681, + 43.60245 + ], + [ + 3.86822, + 43.60093 + ], + [ + 3.87003, + 43.6 + ] + ] + } + } + }, + "polygon_geojson": { + "summary": "Request with polygon geojson geometry, a 10 meters buffer and a where clause", + "value": { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -10, + -10 + ], + [ + 10, + -10 + ], + [ + 10, + 10 + ], + [ + -10, + 10 + ], + [ + -10, + -10 + ] + ] + ] + }, + "buffer": 10, + "where": "cost:<500" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchResultResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/datasets/{dataset_id}/features/within/": { + "post": { + "tags": [ + "search" + ], + "summary": "Within Features", + "description": "Search for features within geometry.\n\n**Rate limit**: `20/1s`\n\n![Within](https://postgis.net/workshops/postgis-intro/_images/st_within.png)\n\n**Ratelimit:** 20/1s", + "operationId": "within_features_datasets__dataset_id__features_within__post", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "geojson", + "wkb" + ], + "type": "string", + "default": "geojson", + "title": "Format" + } + }, + { + "name": "per_page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 20, + "minimum": 1, + "description": "The maximum number of elements to return in a result page.", + "default": 10, + "title": "Per Page" + }, + "description": "The maximum number of elements to return in a result page." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "The result page to fetch.", + "default": 1, + "title": "Page" + }, + "description": "The result page to fetch." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchRequestWithPolygonGeometry" + }, + "examples": { + "polygon_geojson": { + "summary": "An with polygon geojson geometry, a 10 meters buffer and a where clause", + "value": { + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -10, + -10 + ], + [ + 10, + -10 + ], + [ + 10, + 10 + ], + [ + -10, + 10 + ], + [ + -10, + -10 + ] + ] + ] + }, + "buffer": 10, + "where": "cost:<500" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchResultResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Dataset was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/datasets/{dataset_id}/features/{feature_id}": { + "get": { + "tags": [ + "features" + ], + "summary": "Get Feature", + "description": "Gets a feature from its ID.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "get_feature_datasets__dataset_id__features__feature_id__get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Dataset Id" + } + }, + { + "name": "feature_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Feature Id" + } + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "geojson", + "wkb" + ], + "type": "string", + "default": "geojson", + "title": "Format" + } + }, + { + "name": "X-Field-Mask", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "X-Field-Mask" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FeatureRead" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application_kit__fastapi__responses__HTTPErrorModel" + } + } + } + }, + "404": { + "description": "Feature or Dataset were not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features__internal__responses__HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + } + }, + "components": { + "schemas": { + "AuthenticationErrorResponse": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "AuthenticationErrorResponse", + "description": "AuthenticationErrorResponse is the base authentication error model." + }, + "DatasetCreateRequest": { + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "The friendly name " + }, + "url": { + "type": "string", + "maxLength": 2083, + "minLength": 1, + "format": "uri", + "title": "Url" + }, + "schema_mapping": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/DatasetSchemaMapping" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Schema Mapping" + } + }, + "type": "object", + "required": [ + "name", + "url" + ], + "title": "DatasetCreateRequest", + "description": "DatasetCreateRequest represents the parameters for dataset creation." + }, + "DatasetListResponse": { + "properties": { + "datasets": { + "items": { + "$ref": "#/components/schemas/DatasetSummaryResponse" + }, + "type": "array", + "title": "Datasets" + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" + } + }, + "type": "object", + "required": [ + "datasets", + "pagination" + ], + "title": "DatasetListResponse" + }, + "DatasetLogEntry": { + "properties": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "The date of the log entry." + }, + "detail": { + "type": "string", + "title": "Detail", + "description": "The detail of the log entry." + }, + "level": { + "$ref": "#/components/schemas/LoggerLevel", + "description": "The level of the log entry." + } + }, + "type": "object", + "required": [ + "created_at", + "detail", + "level" + ], + "title": "DatasetLogEntry" + }, + "DatasetResponse": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "url": { + "anyOf": [ + { + "type": "string", + "maxLength": 2083, + "minLength": 1, + "format": "uri" + }, + { + "type": "null" + } + ], + "title": "Url", + "description": "The url of the data to fetch" + }, + "reimport_key": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Reimport Key", + "description": "The reimport key to be used with the reimport hook endpoint." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "The date when the dataset was created." + }, + "updated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Updated At", + "description": "The date when the dataset was last updated." + }, + "scheduled_for_deletion_after": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "Scheduled For Deletion After", + "description": "After this date the dataset will be automatically removed" + } + }, + "type": "object", + "required": [ + "id", + "name", + "created_at", + "updated_at" + ], + "title": "DatasetResponse" + }, + "DatasetSchemaMapping": { + "properties": { + "schema_key": { + "$ref": "#/components/schemas/SchemaKeys" + }, + "data_key": { + "type": "string", + "title": "Data Key" + } + }, + "type": "object", + "required": [ + "schema_key", + "data_key" + ], + "title": "DatasetSchemaMapping", + "description": "DatasetSchemaMapping defines a mapping between `schema_key` and user provided `data_key`." + }, + "DatasetStatusResponse": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "The id of the run, can be used in communication with the support to better identify the run." + }, + "steps": { + "items": { + "$ref": "#/components/schemas/DatasetStatusStep" + }, + "type": "array", + "title": "Steps", + "description": "The steps of the run, ordered by start date." + }, + "status": { + "$ref": "#/components/schemas/Status", + "description": "The status of the import run for the dataset." + } + }, + "type": "object", + "required": [ + "id", + "steps", + "status" + ], + "title": "DatasetStatusResponse", + "examples": [ + { + "id": "832eb97f-266c-4387-991d-52e77366dc99", + "status": "success", + "steps": [ + { + "end": "2024-06-07T09:30:48.356003", + "entries": [ + { + "created_at": "2024-06-07T09:30:36.741569", + "detail": "Fetching https://hostname.com/archive.zip...", + "level": "info" + }, + { + "created_at": "2024-06-07T09:30:48.103825", + "detail": "Loading dataset...", + "level": "info" + }, + { + "created_at": "2024-06-07T09:30:48.351829", + "detail": "Dataset loaded", + "level": "info" + } + ], + "name": "fetch", + "start": "2024-06-07T09:30:36.715881", + "status": "success" + }, + { + "end": "2024-06-07T09:31:18.900746", + "entries": [ + { + "created_at": "2024-06-07T09:30:48.366471", + "detail": "Will import 34867 features.", + "level": "info" + }, + { + "created_at": "2024-06-07T09:31:18.785477", + "detail": "Successfully imported 34867 features.", + "level": "info" + } + ], + "name": "import", + "start": "2024-06-07T09:30:48.358285", + "status": "success" + } + ] + } + ] + }, + "DatasetStatusStep": { + "properties": { + "name": { + "type": "string", + "enum": [ + "fetch", + "import" + ], + "title": "Name", + "description": "The name of the step. Currently can only be `fetch` of `import`" + }, + "start": { + "type": "string", + "format": "date-time", + "title": "Start", + "description": "The date at which the step started." + }, + "end": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "End", + "description": "The date at which the step ended or null if in progress." + }, + "entries": { + "items": { + "$ref": "#/components/schemas/DatasetLogEntry" + }, + "type": "array", + "title": "Entries", + "description": "The log entries for the step." + }, + "status": { + "$ref": "#/components/schemas/Status", + "description": "The status of the step." + } + }, + "type": "object", + "required": [ + "name", + "start", + "end", + "entries", + "status" + ], + "title": "DatasetStatusStep" + }, + "DatasetSummaryResponse": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "The date when the dataset was created." + }, + "updated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Updated At", + "description": "The date when the dataset was last updated." + }, + "scheduled_for_deletion_after": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "Scheduled For Deletion After", + "description": "After this date the dataset will be automatically removed" + } + }, + "type": "object", + "required": [ + "id", + "name", + "created_at" + ], + "title": "DatasetSummaryResponse" + }, + "DatasetUpdate": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "The friendly name " + }, + "url": { + "anyOf": [ + { + "type": "string", + "maxLength": 2083, + "minLength": 1, + "format": "uri" + }, + { + "type": "null" + } + ], + "title": "Url" + } + }, + "type": "object", + "title": "DatasetUpdate" + }, + "FeatureRead": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "geometry": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/PointGeometry" + }, + { + "$ref": "#/components/schemas/LineStringGeometry" + }, + { + "$ref": "#/components/schemas/PolygonGeometry" + }, + { + "$ref": "#/components/schemas/MultiPointGeometry" + }, + { + "$ref": "#/components/schemas/MultiLineStringGeometry" + }, + { + "$ref": "#/components/schemas/MultiPolygonGeometry" + } + ], + "title": "Geometry" + }, + "attributes": { + "additionalProperties": true, + "type": "object", + "title": "Attributes" + } + }, + "type": "object", + "required": [ + "id", + "geometry", + "attributes" + ], + "title": "FeatureRead" + }, + "FeatureSummaryResponse": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id", + "description": "The feature ID." + }, + "geometry": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/PolygonGeometry" + }, + { + "$ref": "#/components/schemas/PointGeometry" + }, + { + "type": "null" + } + ], + "title": "Geometry", + "description": "The geometry WKB base64-encoded" + }, + "attributes": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Attributes", + "description": "The feature attributes" + } + }, + "type": "object", + "required": [ + "id" + ], + "title": "FeatureSummaryResponse", + "description": "FeatureSummaryResponse represents the minimal amount of information to be able to fetch a feature details." + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "ImportResponse": { + "properties": { + "dataset_id": { + "type": "string", + "format": "uuid", + "title": "Dataset Id", + "description": "The dataset id that was scheduled for import." + } + }, + "type": "object", + "required": [ + "dataset_id" + ], + "title": "ImportResponse" + }, + "LineStringGeometry": { + "properties": { + "type": { + "type": "string", + "const": "LineString", + "title": "Type", + "default": "LineString" + }, + "coordinates": { + "items": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array", + "title": "Coordinates" + } + }, + "type": "object", + "required": [ + "coordinates" + ], + "title": "LineStringGeometry" + }, + "LoggerLevel": { + "type": "string", + "enum": [ + "info", + "warning", + "error" + ], + "title": "LoggerLevel" + }, + "MultiLineStringGeometry": { + "properties": { + "type": { + "type": "string", + "const": "MultiLineString", + "title": "Type", + "default": "MultiLineString" + }, + "coordinates": { + "items": { + "items": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array" + }, + "type": "array", + "title": "Coordinates" + } + }, + "type": "object", + "required": [ + "coordinates" + ], + "title": "MultiLineStringGeometry" + }, + "MultiPointGeometry": { + "properties": { + "type": { + "type": "string", + "const": "MultiPoint", + "title": "Type", + "default": "MultiPoint" + }, + "coordinates": { + "items": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array", + "title": "Coordinates" + } + }, + "type": "object", + "required": [ + "coordinates" + ], + "title": "MultiPointGeometry" + }, + "MultiPolygonGeometry": { + "properties": { + "type": { + "type": "string", + "const": "MultiPolygon", + "title": "Type", + "default": "MultiPolygon" + }, + "coordinates": { + "items": { + "items": { + "items": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array" + }, + "type": "array" + }, + "type": "array", + "title": "Coordinates" + } + }, + "type": "object", + "required": [ + "coordinates" + ], + "title": "MultiPolygonGeometry" + }, + "Pagination": { + "properties": { + "prev": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Prev", + "description": "The previous page number if any." + }, + "next": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Next", + "description": "The next page number if any." + }, + "page": { + "type": "integer", + "title": "Page", + "description": "The current page number." + } + }, + "type": "object", + "required": [ + "page" + ], + "title": "Pagination", + "description": "Pagination represents page information." + }, + "PointGeometry": { + "properties": { + "type": { + "type": "string", + "const": "Point", + "title": "Type", + "default": "Point" + }, + "coordinates": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2, + "title": "Coordinates" + } + }, + "type": "object", + "required": [ + "coordinates" + ], + "title": "PointGeometry" + }, + "PolygonGeometry": { + "properties": { + "type": { + "type": "string", + "const": "Polygon", + "title": "Type", + "default": "Polygon" + }, + "coordinates": { + "items": { + "items": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array" + }, + "type": "array", + "title": "Coordinates" + } + }, + "type": "object", + "required": [ + "coordinates" + ], + "title": "PolygonGeometry" + }, + "SchemaKeys": { + "type": "string", + "enum": [ + "title" + ], + "title": "SchemaKeys", + "description": "SchemaKeys are the allowed fields to be mapped." + }, + "SearchRequest": { + "properties": { + "where": { + "type": "string", + "title": "Where", + "description": "Applies a Woosmap filter on feature attributes.", + "examples": [ + "cost_col:>32.3" + ] + } + }, + "type": "object", + "required": [ + "where" + ], + "title": "SearchRequest" + }, + "SearchRequestWithGeometry": { + "properties": { + "geometry": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/PointGeometry" + }, + { + "$ref": "#/components/schemas/LineStringGeometry" + }, + { + "$ref": "#/components/schemas/PolygonGeometry" + } + ], + "title": "Geometry", + "description": "\nA geometry can be passed as:\n- A GeoJSON geometry object, limited to Point, LineString and Polygon see [GeoJSON rfc7946](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1) for more information.\n- A WKT geometry see [Well-known text representation](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry) for more information\n- A google encoded polyline see [Google-encoded polyline](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) for more information\n- A bare point defined as lat,lng\n " + }, + "buffer": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Buffer", + "description": "When set applies a buffer operation to input geometry see [Buffer Analysis](https://en.wikipedia.org/wiki/Buffer_analysis)." + }, + "where": { + "type": "string", + "title": "Where", + "description": "Applies a Woosmap filter on feature attributes.", + "examples": [ + "cost_col:>32.3" + ] + } + }, + "type": "object", + "required": [ + "geometry" + ], + "title": "SearchRequestWithGeometry", + "description": "Subclass with the Point, LineString & Polygon geometry type" + }, + "SearchRequestWithPolygonGeometry": { + "properties": { + "geometry": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/PolygonGeometry" + } + ], + "title": "Geometry", + "description": "\nA geometry can be passed as:\n- A GeoJSON geometry object, limited to Polygon see [GeoJSON rfc7946](https://datatracker.ietf.org/doc/html/rfc7946#section-3.1) for more information.\n- A WKT geometry see [Well-known text representation](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry) for more information\n " + }, + "buffer": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Buffer", + "description": "When set applies a buffer operation to input geometry see [Buffer Analysis](https://en.wikipedia.org/wiki/Buffer_analysis)." + }, + "where": { + "type": "string", + "title": "Where", + "description": "Applies a Woosmap filter on feature attributes.", + "examples": [ + "cost_col:>32.3" + ] + } + }, + "type": "object", + "required": [ + "geometry" + ], + "title": "SearchRequestWithPolygonGeometry", + "description": "Subclass with the Polygon geometry type" + }, + "SearchResultResponse": { + "properties": { + "features": { + "items": { + "$ref": "#/components/schemas/FeatureSummaryResponse" + }, + "type": "array", + "title": "Features", + "description": "The list of FeatureSummaryResponse that matched the search" + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "The pagination information" + } + }, + "type": "object", + "required": [ + "features", + "pagination" + ], + "title": "SearchResultResponse" + }, + "Status": { + "type": "string", + "enum": [ + "success", + "in_progress", + "failed" + ], + "title": "Status" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + }, + "application_kit__fastapi__responses__HTTPErrorModel": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "HTTPErrorModel" + }, + "features__internal__responses__HTTPErrorModel": { + "properties": { + "details": { + "type": "string", + "title": "Details" + } + }, + "type": "object", + "required": [ + "details" + ], + "title": "HTTPErrorModel" + } + }, + "securitySchemes": { + "PrivateKeyWithWrite": { + "type": "apiKey", + "description": "Private key with write permission. Must stay private.", + "in": "query", + "name": "private_key" + }, + "PrivateKeyWithWriteHeader": { + "type": "apiKey", + "description": "Private key with write permission. Must stay private.", + "in": "header", + "name": "X-Api-Key" + }, + "PublicAPIKey": { + "type": "apiKey", + "description": "Public key of the project (starts with `woos-`) or an API key (a UUID).", + "in": "query", + "name": "key" + }, + "PrivateApiKey": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "query", + "name": "private_key" + }, + "PrivateApiKeyHeader": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "header", + "name": "X-Api-Key" + } + } + } +} diff --git a/upstream/distance.json b/upstream/distance.json new file mode 100644 index 00000000..9f05ccef --- /dev/null +++ b/upstream/distance.json @@ -0,0 +1,2910 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Distance", + "description": "\nWoosmap Distance API is a service providing road travel distance and duration calculations, on a Worldwide scale.\n\nSupplying `arrival_time` and `departure_time` parameters where applicable will use traffic data to provide accurate results.\n\nMatrices can be calculated for a large number of origins and destinations. (max 200 elements (origins x destinations) per request)\n\n[Get Started Here](https://developers.woosmap.com/products/distance-api/get-started/)", + "version": "v9.3.3" + }, + "paths": { + "/distance/isochrone/json/": { + "get": { + "tags": [ + "isochrone" + ], + "summary": "Calculate Isochrone", + "description": "Find all destinations that can be reached in a specific amount of time or a maximum travel distance.\n\n**Rate limit**: `10/1s`", + "operationId": "isochrone_distance_isochrone_json__get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "mode", + "in": "query", + "required": false, + "schema": { + "enum": [ + "driving", + "walking", + "cycling" + ], + "type": "string", + "description": "Specifies the mode of transport to use for the calculation.", + "default": "driving", + "title": "Mode" + }, + "description": "Specifies the mode of transport to use for the calculation." + }, + { + "name": "method", + "in": "query", + "required": false, + "schema": { + "enum": [ + "time", + "distance" + ], + "type": "string", + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route", + "default": "time", + "title": "Method" + }, + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route" + }, + { + "name": "units", + "in": "query", + "required": false, + "schema": { + "enum": [ + "metric", + "imperial" + ], + "type": "string", + "description": "Specifies the unit system to use when displaying results.", + "default": "metric", + "title": "Units" + }, + "description": "Specifies the unit system to use when displaying results." + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "enum": [ + "en", + "fr", + "bg", + "ca", + "cs", + "da", + "de", + "el", + "es", + "et", + "fi", + "he", + "hi", + "hu", + "it", + "ja", + "nb", + "nl", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "sv", + "tr", + "uk", + "zh" + ], + "type": "string", + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`.", + "default": "en", + "title": "Language" + }, + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`." + }, + { + "name": "avoid", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character.", + "examples": [ + "tolls", + "tolls|highways|43.3,3.4;42.1,3.5;41.4,3.6" + ], + "title": "Avoid" + }, + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character." + }, + { + "name": "origin", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The starting point. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.709,2.403" + ], + "title": "Origin" + }, + "description": "The starting point. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values." + }, + { + "name": "value", + "in": "query", + "required": true, + "schema": { + "type": "number", + "maximum": 120, + "minimum": 0, + "description": "The value to use for the isochrone contour. \n\nIf you specified `time` for `method` this value should be number of minutes\n\nIf you specified `distance` for `method` this value should be distance in kilometers.", + "title": "Value" + }, + "description": "The value to use for the isochrone contour. \n\nIf you specified `time` for `method` this value should be number of minutes\n\nIf you specified `distance` for `method` this value should be distance in kilometers." + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IsochroneResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "post": { + "tags": [ + "isochrone" + ], + "summary": "Calculate Isochrone", + "description": "Find all destinations that can be reached in a specific amount of time or a maximum travel distance.\n\n**Rate limit**: `10/1s`", + "operationId": "isochrone_post_distance_isochrone_json__post", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IsochroneRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IsochroneResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/distance/tolls/json/": { + "get": { + "tags": [ + "tolls" + ], + "summary": "Find Tolls", + "description": "Get distance, duration and tolls for an origin,destination pair, based on the recommended driving route between those two points.\n\n**Rate limit**: `5/1s`", + "operationId": "tolls_distance_tolls_json__get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "arrival_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Specify your desired arrival time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ], + "title": "Arrival Time" + }, + "description": "Specify your desired arrival time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both." + }, + { + "name": "departure_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Specify your desired departure time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ], + "title": "Departure Time" + }, + "description": "Specify your desired departure time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both." + }, + { + "name": "waypoints", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A list of points by which the route should pass (the route response is divided into legs, one leg corresponding to a route between two waypoints). Waypoints should be separated by | character. \n \nOptionally, you may pass 'optimize:true' as the first argument within the waypoints parameter. This way the provided route is optimized by rearranging the waypoints in a more efficient order based on distance or time according to the method parameter. The route start point and end point order is not changed, their position is considered fixed. \n \n`alternatives` and `waypoints` can not be used at the same time.", + "examples": [ + "optimize:true|48.850077,3.311124|48.850077,3.411124", + "48.850077,3.311124|48.850077,3.411124" + ], + "title": "Waypoints" + }, + "description": "A list of points by which the route should pass (the route response is divided into legs, one leg corresponding to a route between two waypoints). Waypoints should be separated by | character. \n \nOptionally, you may pass 'optimize:true' as the first argument within the waypoints parameter. This way the provided route is optimized by rearranging the waypoints in a more efficient order based on distance or time according to the method parameter. The route start point and end point order is not changed, their position is considered fixed. \n \n`alternatives` and `waypoints` can not be used at the same time." + }, + { + "name": "mode", + "in": "query", + "required": false, + "schema": { + "const": "driving", + "type": "string", + "default": "driving", + "title": "Mode" + } + }, + { + "name": "method", + "in": "query", + "required": false, + "schema": { + "enum": [ + "time", + "distance" + ], + "type": "string", + "default": "time", + "title": "Method" + } + }, + { + "name": "units", + "in": "query", + "required": false, + "schema": { + "enum": [ + "metric", + "imperial" + ], + "type": "string", + "default": "metric", + "title": "Units" + } + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "enum": [ + "en", + "fr", + "bg", + "ca", + "cs", + "da", + "de", + "el", + "es", + "et", + "fi", + "he", + "hi", + "hu", + "it", + "ja", + "nb", + "nl", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "sv", + "tr", + "uk", + "zh" + ], + "type": "string", + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`.", + "default": "en", + "title": "Language" + }, + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`." + }, + { + "name": "origin", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The starting point. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.709,2.403" + ], + "title": "Origin" + }, + "description": "The starting point. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values." + }, + { + "name": "destination", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The ending point for the route. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.768,2.338" + ], + "title": "Destination" + }, + "description": "The ending point for the route. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values." + }, + { + "name": "alternatives", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Specifies if alternative routes should be returned. Depending on the calculated route, alternatives may not be provided. `alternatives` and `waypoints` can not be used at the same time.", + "default": false, + "title": "Alternatives" + }, + "description": "Specifies if alternative routes should be returned. Depending on the calculated route, alternatives may not be provided. `alternatives` and `waypoints` can not be used at the same time." + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TollsResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/distance/route/json/": { + "get": { + "tags": [ + "route" + ], + "summary": "Find Routes", + "description": "Get distance, duration and path (as a polyline) for a pair of origin and destination, based on the recommended route between those two points for a specified travel mode.\n\n**Rate limit**: `10/1s`\n\n**Rate limit with TRAFFIC**: `20/1s`", + "operationId": "route_distance_route_json__get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "waypoints", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A list of points by which the route should pass (the route response is divided into legs, one leg corresponding to a route between two waypoints). Waypoints should be separated by | character. \n \nOptionally, you may pass 'optimize:true' as the first argument within the waypoints parameter. This way the provided route is optimized by rearranging the waypoints in a more efficient order based on distance or time according to the method parameter. The route start point and end point order is not changed, their position is considered fixed. \n \n`alternatives` and `waypoints` can not be used at the same time.", + "examples": [ + "optimize:true|48.850077,3.311124|48.850077,3.411124", + "48.850077,3.311124|48.850077,3.411124" + ], + "title": "Waypoints" + }, + "description": "A list of points by which the route should pass (the route response is divided into legs, one leg corresponding to a route between two waypoints). Waypoints should be separated by | character. \n \nOptionally, you may pass 'optimize:true' as the first argument within the waypoints parameter. This way the provided route is optimized by rearranging the waypoints in a more efficient order based on distance or time according to the method parameter. The route start point and end point order is not changed, their position is considered fixed. \n \n`alternatives` and `waypoints` can not be used at the same time." + }, + { + "name": "mode", + "in": "query", + "required": false, + "schema": { + "enum": [ + "driving", + "walking", + "cycling" + ], + "type": "string", + "description": "Specifies the mode of transport to use for the calculation.", + "default": "driving", + "title": "Mode" + }, + "description": "Specifies the mode of transport to use for the calculation." + }, + { + "name": "method", + "in": "query", + "required": false, + "schema": { + "enum": [ + "time", + "distance" + ], + "type": "string", + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route", + "default": "time", + "title": "Method" + }, + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route" + }, + { + "name": "units", + "in": "query", + "required": false, + "schema": { + "enum": [ + "metric", + "imperial" + ], + "type": "string", + "description": "Specifies the unit system to use when displaying results.", + "default": "metric", + "title": "Units" + }, + "description": "Specifies the unit system to use when displaying results." + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "enum": [ + "en", + "fr", + "bg", + "ca", + "cs", + "da", + "de", + "el", + "es", + "et", + "fi", + "he", + "hi", + "hu", + "it", + "ja", + "nb", + "nl", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "sv", + "tr", + "uk", + "zh" + ], + "type": "string", + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`.", + "default": "en", + "title": "Language" + }, + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`." + }, + { + "name": "avoid", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character.", + "examples": [ + "tolls", + "tolls|highways|43.3,3.4;42.1,3.5;41.4,3.6" + ], + "title": "Avoid" + }, + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character." + }, + { + "name": "arrival_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Specify your desired arrival time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ], + "title": "Arrival Time" + }, + "description": "Specify your desired arrival time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both." + }, + { + "name": "departure_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Specify your desired departure time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ], + "title": "Departure Time" + }, + "description": "Specify your desired departure time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both." + }, + { + "name": "origin", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The starting point. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.709,2.403" + ], + "title": "Origin" + }, + "description": "The starting point. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values." + }, + { + "name": "destination", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The ending point for the route. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.768,2.338" + ], + "title": "Destination" + }, + "description": "The ending point for the route. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values." + }, + { + "name": "alternatives", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Specifies if alternative routes should be returned. Depending on the calculated route, alternatives may not be provided. `alternatives` and `waypoints` can not be used at the same time.", + "default": false, + "title": "Alternatives" + }, + "description": "Specifies if alternative routes should be returned. Depending on the calculated route, alternatives may not be provided. `alternatives` and `waypoints` can not be used at the same time." + }, + { + "name": "details", + "in": "query", + "required": false, + "schema": { + "enum": [ + "full", + "none" + ], + "type": "string", + "description": "Specifies if maneuver instructions should be returned (roadbook)", + "default": "none", + "title": "Details" + }, + "description": "Specifies if maneuver instructions should be returned (roadbook)" + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RouteResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/distance/distancematrix/json/": { + "get": { + "tags": [ + "distancematrix" + ], + "summary": "Calculate Matrix", + "description": "Get distances and durations for a matrix of origins and destinations, based on the recommended route between start and end points for a specified travel mode.\n\n**Rate limit**: `10 requests/1s` GET and POST\n\n**Elements limit**: `1000 elements/1s` GET and POST\n\n**Rate limit with TRAFFIC**: `10 requests/1s` GET and POST\n\n**Elements limit with TRAFFIC**: `1000 elements/1s`GET and POST", + "operationId": "matrix_distance_distancematrix_json__get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "mode", + "in": "query", + "required": false, + "schema": { + "enum": [ + "driving", + "walking", + "cycling" + ], + "type": "string", + "description": "Specifies the mode of transport to use for the calculation.", + "default": "driving", + "title": "Mode" + }, + "description": "Specifies the mode of transport to use for the calculation." + }, + { + "name": "method", + "in": "query", + "required": false, + "schema": { + "enum": [ + "time", + "distance" + ], + "type": "string", + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route", + "default": "time", + "title": "Method" + }, + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route" + }, + { + "name": "units", + "in": "query", + "required": false, + "schema": { + "enum": [ + "metric", + "imperial" + ], + "type": "string", + "description": "Specifies the unit system to use when displaying results.", + "default": "metric", + "title": "Units" + }, + "description": "Specifies the unit system to use when displaying results." + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "enum": [ + "en", + "fr", + "bg", + "ca", + "cs", + "da", + "de", + "el", + "es", + "et", + "fi", + "he", + "hi", + "hu", + "it", + "ja", + "nb", + "nl", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "sv", + "tr", + "uk", + "zh" + ], + "type": "string", + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`.", + "default": "en", + "title": "Language" + }, + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`." + }, + { + "name": "avoid", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character.", + "examples": [ + "tolls", + "tolls|highways|43.3,3.4;42.1,3.5;41.4,3.6" + ], + "title": "Avoid" + }, + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character." + }, + { + "name": "origins", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The starting points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values. \n \nIn order to reduce URL size, [encoded polylines](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) are also supported using `enc::`", + "examples": [ + "48.709,2.403|48.768,2.338", + "enc:_p~iF~ps|U_ulLnnqC_mqNvxq`@:" + ], + "title": "Origins" + }, + "description": "The starting points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values. \n \nIn order to reduce URL size, [encoded polylines](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) are also supported using `enc::`" + }, + { + "name": "destinations", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The ending points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values. \n \nIn order to reduce URL size, [encoded polylines](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) are also supported using `enc::`", + "examples": [ + "48.709,2.403|48.768,2.338", + "enc:_p~iF~ps|U_ulLnnqC_mqNvxq`@:" + ], + "title": "Destinations" + }, + "description": "The ending points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values. \n \nIn order to reduce URL size, [encoded polylines](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) are also supported using `enc::`" + }, + { + "name": "arrival_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Specify your desired arrival time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ], + "title": "Arrival Time" + }, + "description": "Specify your desired arrival time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both." + }, + { + "name": "departure_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Specify your desired departure time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ], + "title": "Departure Time" + }, + "description": "Specify your desired departure time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both." + }, + { + "name": "elements", + "in": "query", + "required": false, + "schema": { + "enum": [ + "distance", + "duration", + "duration_distance" + ], + "type": "string", + "description": "Specifies element values that will be part of the API response (`distance` and/or `duration`).", + "default": "distance", + "title": "Elements" + }, + "description": "Specifies element values that will be part of the API response (`distance` and/or `duration`)." + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatrixResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "post": { + "tags": [ + "distancematrix" + ], + "summary": "Calculate Matrix", + "description": "Get distances and durations for a matrix of origins and destinations, based on the recommended route between start and end points for a specified travel mode.\n\n**Rate limit**: `10 requests/1s` GET and POST\n\n**Elements limit**: `1000 elements/1s` GET and POST\n\n**Rate limit with TRAFFIC**: `10 requests/1s` GET and POST\n\n**Elements limit with TRAFFIC**: `1000 elements/1s` GET and POST", + "operationId": "matrix_post_distance_distancematrix_json__post", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatrixRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatrixResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "AuthenticationErrorResponse": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "AuthenticationErrorResponse", + "description": "AuthenticationErrorResponse is the base authentication error model." + }, + "BaseElementResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "OK", + "NOT_FOUND", + "ZERO_RESULTS", + "ERROR" + ], + "title": "Status", + "description": "The status of each element.\n* `OK` The response contains a valid result.\n* `NOT_FOUND` The origin and/or destination of this pairing could not be matched to the network.\n* `ZERO_RESULTS` No route could be found between the origin and destination." + } + }, + "type": "object", + "required": [ + "status" + ], + "title": "BaseElementResponse" + }, + "Bounds": { + "properties": { + "northeast": { + "$ref": "#/components/schemas/LatLng" + }, + "southwest": { + "$ref": "#/components/schemas/LatLng" + } + }, + "type": "object", + "required": [ + "northeast", + "southwest" + ], + "title": "Bounds" + }, + "DistanceResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "OK", + "NOT_FOUND", + "ZERO_RESULTS", + "ERROR" + ], + "title": "Status", + "description": "The status of each element.\n* `OK` The response contains a valid result.\n* `NOT_FOUND` The origin and/or destination of this pairing could not be matched to the network.\n* `ZERO_RESULTS` No route could be found between the origin and destination." + }, + "distance": { + "$ref": "#/components/schemas/MatrixDistanceDuration", + "description": "Returned when `elements=distance`. The `value` is the distance in meters and the `text` is a human readable representation of the distance." + } + }, + "type": "object", + "required": [ + "status", + "distance" + ], + "title": "DistanceResponse" + }, + "DurationDistanceResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "OK", + "NOT_FOUND", + "ZERO_RESULTS", + "ERROR" + ], + "title": "Status", + "description": "The status of each element.\n* `OK` The response contains a valid result.\n* `NOT_FOUND` The origin and/or destination of this pairing could not be matched to the network.\n* `ZERO_RESULTS` No route could be found between the origin and destination." + }, + "distance": { + "$ref": "#/components/schemas/MatrixDistanceDuration", + "description": "Returned when `elements=duration_distance`. The `value` is the distance in meters and the `text` is a human readable representation of the distance." + }, + "duration": { + "$ref": "#/components/schemas/MatrixDistanceDuration", + "description": "Returned when `elements=duration_distance`. The `value` is the duration in seconds and the `text` is a human readable representation of the duration." + } + }, + "type": "object", + "required": [ + "status", + "distance", + "duration" + ], + "title": "DurationDistanceResponse" + }, + "DurationResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "OK", + "NOT_FOUND", + "ZERO_RESULTS", + "ERROR" + ], + "title": "Status", + "description": "The status of each element.\n* `OK` The response contains a valid result.\n* `NOT_FOUND` The origin and/or destination of this pairing could not be matched to the network.\n* `ZERO_RESULTS` No route could be found between the origin and destination." + }, + "duration": { + "$ref": "#/components/schemas/MatrixDistanceDuration", + "description": "Returned when `elements=duration`. The `value` is the duration in seconds and the `text` is a human readable representation of the duration." + } + }, + "type": "object", + "required": [ + "status", + "duration" + ], + "title": "DurationResponse" + }, + "HTTPErrorModel": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "HTTPErrorModel" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "IsochroneRequest": { + "properties": { + "mode": { + "type": "string", + "enum": [ + "driving", + "walking", + "cycling" + ], + "title": "Mode", + "description": "Specifies the mode of transport to use for the calculation.", + "default": "driving" + }, + "method": { + "type": "string", + "enum": [ + "time", + "distance" + ], + "title": "Method", + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route", + "default": "time" + }, + "units": { + "type": "string", + "enum": [ + "metric", + "imperial" + ], + "title": "Units", + "description": "Specifies the unit system to use when displaying results.", + "default": "metric" + }, + "language": { + "type": "string", + "enum": [ + "en", + "fr", + "bg", + "ca", + "cs", + "da", + "de", + "el", + "es", + "et", + "fi", + "he", + "hi", + "hu", + "it", + "ja", + "nb", + "nl", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "sv", + "tr", + "uk", + "zh" + ], + "title": "Language", + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`.", + "default": "en" + }, + "avoid": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Avoid", + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character.", + "examples": [ + "tolls", + "tolls|highways|43.3,3.4;42.1,3.5;41.4,3.6" + ] + }, + "origin": { + "type": "string", + "title": "Origin", + "description": "The starting point. It should be supplied in the form of `latitude,longitude` coordinates. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.709,2.403" + ] + }, + "value": { + "type": "number", + "maximum": 120.0, + "minimum": 0.0, + "title": "Value", + "description": "The value to use for the isochrone contour. \n\nIf you specified `time` for `method` this value should be number of minutes\n\nIf you specified `distance` for `method` this value should be distance in kilometers." + } + }, + "type": "object", + "required": [ + "origin", + "value" + ], + "title": "IsochroneRequest" + }, + "IsochroneResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "OK", + "INVALID_REQUEST", + "MAX_ELEMENTS_EXCEEDED", + "MAX_ROUTE_LENGTH_EXCEEDED", + "REQUEST_DENIED", + "BACKEND_ERROR", + "OVER_QUERY_LIMIT", + "ZERO_RESULTS" + ], + "title": "Status", + "description": "The status of the response\n* `OK`: The response contains a valid result.\n* `INVALID_REQUEST`: The request could not be processed.\n* `MAX_ELEMENTS_EXCEEDED`: The product of origins and destinations exceeds the per-query limit (fixed at 200 elts/query).\n* `MAX_ROUTE_LENGTH_EXCEEDED`: One of requested routes is too long and the matrix/route cannot be processed (The limit is 500km).\n* `REQUEST_DENIED`: The API key provided is invalid or does not allow access to this service etc..\n* `BACKEND_ERROR`: The server encountered an unexpected error.\n* `OVER_QUERY_LIMIT`: The request was denied due to the rate limit (see [Usage Limits](https://developers.woosmap.com/products/distance-api/distance-matrix-endpoint/#usage-limits)).\n* `ZERO_RESULTS`: No route could be found between the origin and destination.\n ", + "default": "OK" + }, + "isoline": { + "anyOf": [ + { + "$ref": "#/components/schemas/IsolineResponseTime" + }, + { + "$ref": "#/components/schemas/IsolineResponseDistance" + } + ], + "title": "Isoline" + } + }, + "type": "object", + "required": [ + "isoline" + ], + "title": "IsochroneResponse", + "examples": [ + { + "isoline": { + "distance": { + "text": "1 km", + "value": 1 + }, + "geometry": "s|ihHouuMZ`GdClCsA~QhCnQmBhEpCfF|HxGpBtFfEnBnHqJpH}AF_EeCcB@sBnEiEYiGmVyFaG{G[eFoCw@gAiIkDYg@_DwA@", + "origin": { + "lat": 48.709, + "lng": 2.403 + } + }, + "status": "OK" + } + ] + }, + "IsochroneTimeDistance": { + "properties": { + "value": { + "type": "integer", + "title": "Value" + }, + "text": { + "type": "string", + "title": "Text" + } + }, + "type": "object", + "required": [ + "value", + "text" + ], + "title": "IsochroneTimeDistance" + }, + "IsolineResponseDistance": { + "properties": { + "origin": { + "$ref": "#/components/schemas/LatLng", + "description": "The origin point of the isochrone contour." + }, + "geometry": { + "type": "string", + "title": "Geometry", + "description": "The polyline of the isoline (encoded with the [poyline algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm))." + }, + "distance": { + "$ref": "#/components/schemas/IsochroneTimeDistance", + "description": "Returned when `method=distance`. The `value` is the distance in kilometers and the `text` is a human readable representation of the distance in kilometers." + } + }, + "type": "object", + "required": [ + "origin", + "geometry", + "distance" + ], + "title": "IsolineResponseDistance" + }, + "IsolineResponseTime": { + "properties": { + "origin": { + "$ref": "#/components/schemas/LatLng", + "description": "The origin point of the isochrone contour." + }, + "geometry": { + "type": "string", + "title": "Geometry", + "description": "The polyline of the isoline (encoded with the [poyline algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm))." + }, + "time": { + "$ref": "#/components/schemas/IsochroneTimeDistance", + "description": "Returned by default or when `method=time`. The `value` is the time in minutes and the `text` is a human readable representation of the time in minutes." + } + }, + "type": "object", + "required": [ + "origin", + "geometry", + "time" + ], + "title": "IsolineResponseTime" + }, + "LatLng": { + "properties": { + "lat": { + "type": "number", + "title": "Lat", + "description": "The latitude of the point in decimal degrees, range is [-90, 90]." + }, + "lng": { + "type": "number", + "title": "Lng", + "description": "The longitude of the point in decimal degrees, range is [-180, 180]." + } + }, + "type": "object", + "required": [ + "lat", + "lng" + ], + "title": "LatLng" + }, + "MatrixDistanceDuration": { + "properties": { + "value": { + "type": "integer", + "title": "Value" + }, + "text": { + "type": "string", + "title": "Text" + } + }, + "type": "object", + "required": [ + "value", + "text" + ], + "title": "MatrixDistanceDuration" + }, + "MatrixRequest": { + "properties": { + "mode": { + "type": "string", + "enum": [ + "driving", + "walking", + "cycling" + ], + "title": "Mode", + "description": "Specifies the mode of transport to use for the calculation.", + "default": "driving" + }, + "method": { + "type": "string", + "enum": [ + "time", + "distance" + ], + "title": "Method", + "description": "Specifies how to compute the route between the start point and the end point:\n* `time`: fastest route \n* `distance`: shortest route", + "default": "time" + }, + "units": { + "type": "string", + "enum": [ + "metric", + "imperial" + ], + "title": "Units", + "description": "Specifies the unit system to use when displaying results.", + "default": "metric" + }, + "language": { + "type": "string", + "enum": [ + "en", + "fr", + "bg", + "ca", + "cs", + "da", + "de", + "el", + "es", + "et", + "fi", + "he", + "hi", + "hu", + "it", + "ja", + "nb", + "nl", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "sv", + "tr", + "uk", + "zh" + ], + "title": "Language", + "description": "The language code, indicating in the language the response should be in. \n \nIf not defined the header `Accept-Language` of the request will be checked before defaulting to `en`.", + "default": "en" + }, + "avoid": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Avoid", + "description": "A list of features that you want to avoid. Valid values are `tolls`, `highways`, `ferries` or polygons coordinates whose vertex latlng are separated by a semicolon `;`. \n \nTo add multiple features, separate them with the pipe `|` character.", + "examples": [ + "tolls", + "tolls|highways|43.3,3.4;42.1,3.5;41.4,3.6" + ] + }, + "origins": { + "type": "string", + "title": "Origins", + "description": "The starting points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values. \n \nIn order to reduce URL size, [encoded polylines](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) are also supported using `enc::`", + "examples": [ + "48.709,2.403|48.768,2.338", + "enc:_p~iF~ps|U_ulLnnqC_mqNvxq`@:" + ] + }, + "destinations": { + "type": "string", + "title": "Destinations", + "description": "The ending points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values. \n \nIn order to reduce URL size, [encoded polylines](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) are also supported using `enc::`", + "examples": [ + "48.709,2.403|48.768,2.338", + "enc:_p~iF~ps|U_ulLnnqC_mqNvxq`@:" + ] + }, + "arrival_time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Arrival Time", + "description": "Specify your desired arrival time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ] + }, + "departure_time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Departure Time", + "description": "Specify your desired departure time.\n\nBy using this parameter, Distance will calculate the duration with **traffic**. Valid values are a UNIX timestamp (e.g. `1600799173` for the date: `22/09/2020 20:26:13`) or `now`. \n\nUse either `arrival_time` or `departure_time`, not both.", + "examples": [ + "1600799173", + "now" + ] + }, + "elements": { + "type": "string", + "enum": [ + "distance", + "duration", + "duration_distance" + ], + "title": "Elements", + "description": "Specifies element values that will be part of the API response (`distance` and/or `duration`).", + "default": "distance" + } + }, + "type": "object", + "required": [ + "origins", + "destinations" + ], + "title": "MatrixRequest" + }, + "MatrixResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "OK", + "INVALID_REQUEST", + "MAX_ELEMENTS_EXCEEDED", + "MAX_ROUTE_LENGTH_EXCEEDED", + "REQUEST_DENIED", + "BACKEND_ERROR", + "OVER_QUERY_LIMIT", + "ZERO_RESULTS" + ], + "title": "Status", + "description": "The status of the response\n* `OK`: The response contains a valid result.\n* `INVALID_REQUEST`: The request could not be processed.\n* `MAX_ELEMENTS_EXCEEDED`: The product of origins and destinations exceeds the per-query limit (fixed at 200 elts/query).\n* `MAX_ROUTE_LENGTH_EXCEEDED`: One of requested routes is too long and the matrix/route cannot be processed (The limit is 500km).\n* `REQUEST_DENIED`: The API key provided is invalid or does not allow access to this service etc..\n* `BACKEND_ERROR`: The server encountered an unexpected error.\n* `OVER_QUERY_LIMIT`: The request was denied due to the rate limit (see [Usage Limits](https://developers.woosmap.com/products/distance-api/distance-matrix-endpoint/#usage-limits)).\n* `ZERO_RESULTS`: No route could be found between the origin and destination.\n ", + "default": "OK" + }, + "rows": { + "items": { + "$ref": "#/components/schemas/MatrixRowsResponse" + }, + "type": "array", + "title": "Rows", + "description": "Contains an array of elements for each pair of origin and destination" + } + }, + "type": "object", + "required": [ + "rows" + ], + "title": "MatrixResponse", + "examples": [ + { + "rows": [ + { + "elements": [ + { + "distance": { + "text": "10.8 km", + "value": 10797 + }, + "duration": { + "text": "16 mins", + "value": 986 + }, + "status": "OK" + }, + { + "distance": { + "text": "10.3 km", + "value": 10334 + }, + "duration": { + "text": "15 mins", + "value": 928 + }, + "status": "OK" + } + ] + } + ], + "status": "OK" + } + ] + }, + "MatrixRowsResponse": { + "properties": { + "elements": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/DistanceResponse" + }, + { + "$ref": "#/components/schemas/DurationResponse" + }, + { + "$ref": "#/components/schemas/DurationDistanceResponse" + }, + { + "$ref": "#/components/schemas/BaseElementResponse" + } + ] + }, + "type": "array", + "title": "Elements", + "description": "An array of each route element." + } + }, + "type": "object", + "required": [ + "elements" + ], + "title": "MatrixRowsResponse" + }, + "Polyline": { + "properties": { + "points": { + "type": "string", + "title": "Points" + } + }, + "type": "object", + "required": [ + "points" + ], + "title": "Polyline" + }, + "RouteDistanceDuration": { + "properties": { + "value": { + "type": "integer", + "title": "Value" + }, + "text": { + "type": "string", + "title": "Text" + } + }, + "type": "object", + "required": [ + "value", + "text" + ], + "title": "RouteDistanceDuration" + }, + "RouteInstruction": { + "properties": { + "action": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Action", + "description": "The action to take for the current step (turn left, merge, straight, etc.). See [list of available actions](https://developers.woosmap.com/products/distance-api/route-endpoint/#instructions)." + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Summary", + "description": "Written maneuver instruction." + }, + "verbal_alert": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Verbal Alert", + "description": "The transition alert instruction will prepare the user for the forthcoming transition." + }, + "verbal_succint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Verbal Succint", + "description": "Text suitable for use as a verbal alert in a navigation application." + }, + "verbal_before": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Verbal Before", + "description": "Text suitable for use as a verbal message immediately prior to the maneuver transition." + }, + "verbal_after": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Verbal After", + "description": "Text suitable for use as a verbal message immediately after the maneuver transition." + } + }, + "type": "object", + "title": "RouteInstruction" + }, + "RouteLeg": { + "properties": { + "distance": { + "$ref": "#/components/schemas/RouteDistanceDuration", + "description": "The total distance of this leg expressed in meters (value) and as text. The textual value uses the unit system specified with the `units` parameter." + }, + "duration": { + "$ref": "#/components/schemas/RouteDistanceDuration", + "description": "The total duration of this leg expressed in seconds (value) and as text. The textual value uses `lang` parameter if the langauge is available." + }, + "duration_without_traffic": { + "anyOf": [ + { + "$ref": "#/components/schemas/RouteDistanceDuration" + }, + { + "type": "null" + } + ] + }, + "start_location": { + "$ref": "#/components/schemas/LatLng", + "description": "The starting location of this leg." + }, + "end_location": { + "$ref": "#/components/schemas/LatLng", + "description": "The ending location of this leg." + }, + "start_waypoint": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Start Waypoint", + "description": "The index of the waypoint that is the starting point of this leg." + }, + "end_waypoint": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "End Waypoint", + "description": "The index of the waypoint that is the ending point of this leg." + }, + "start_address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Start Address", + "description": "The address of the starting point of this leg." + }, + "end_address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "End Address", + "description": "The address of the ending point of this leg." + }, + "steps": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/RouteStep" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Steps", + "description": "List of steps steps for this leg.\nSteps are returned when `details=full`. A step is the most atomic unit of a route, containing a single step describing a specific, single instruction on the journey. The step not only describes the instruction but also contains distance and duration information relating to how this step relates to the following step.\n " + } + }, + "type": "object", + "required": [ + "distance", + "duration", + "start_location", + "end_location" + ], + "title": "RouteLeg" + }, + "RouteOption": { + "properties": { + "overview_polyline": { + "$ref": "#/components/schemas/Polyline", + "description": "The polyline of the route (encoded with the [poyline algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm))." + }, + "bounds": { + "$ref": "#/components/schemas/Bounds", + "description": "A rectangle in geographical coordinates from points at the southwest and northeast corners." + }, + "notice": { + "type": "string", + "title": "Notice", + "description": "Some noticeable information about the route." + }, + "legs": { + "items": { + "$ref": "#/components/schemas/RouteLeg" + }, + "type": "array", + "title": "Legs", + "description": "Contains an array of sections of the route." + }, + "main_route_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Main Route Name", + "description": "The main route name based on the longest step length to differentiate routes when alternates are returned." + }, + "recommended": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Recommended", + "description": "Only present and set to true when the route is the recommended route." + } + }, + "type": "object", + "required": [ + "overview_polyline", + "bounds", + "notice", + "legs" + ], + "title": "RouteOption" + }, + "RouteResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "OK", + "INVALID_REQUEST", + "MAX_ELEMENTS_EXCEEDED", + "MAX_ROUTE_LENGTH_EXCEEDED", + "REQUEST_DENIED", + "BACKEND_ERROR", + "OVER_QUERY_LIMIT", + "ZERO_RESULTS" + ], + "title": "Status", + "description": "The status of the response\n* `OK`: The response contains a valid result.\n* `INVALID_REQUEST`: The request could not be processed.\n* `MAX_ELEMENTS_EXCEEDED`: The product of origins and destinations exceeds the per-query limit (fixed at 200 elts/query).\n* `MAX_ROUTE_LENGTH_EXCEEDED`: One of requested routes is too long and the matrix/route cannot be processed (The limit is 500km).\n* `REQUEST_DENIED`: The API key provided is invalid or does not allow access to this service etc..\n* `BACKEND_ERROR`: The server encountered an unexpected error.\n* `OVER_QUERY_LIMIT`: The request was denied due to the rate limit (see [Usage Limits](https://developers.woosmap.com/products/distance-api/distance-matrix-endpoint/#usage-limits)).\n* `ZERO_RESULTS`: No route could be found between the origin and destination.\n ", + "default": "OK" + }, + "routes": { + "items": { + "$ref": "#/components/schemas/RouteOption" + }, + "type": "array", + "title": "Routes", + "description": "Contains an array of route options if `alternatives=true` else a single route." + } + }, + "type": "object", + "required": [ + "routes" + ], + "title": "RouteResponse", + "examples": [ + { + "routes": [ + { + "bounds": { + "northeast": { + "lat": 49.315678, + "lng": 4.15292 + }, + "southwest": { + "lat": 49.31073, + "lng": 4.145162 + } + }, + "legs": [ + { + "distance": { + "text": "1 km", + "value": 1038 + }, + "duration": { + "text": "1 min", + "value": 75 + }, + "end_address": "D 30", + "end_location": { + "lat": 49.31344, + "lng": 4.15293 + }, + "end_waypoint": 1, + "start_address": "D 151", + "start_location": { + "lat": 49.31067, + "lng": 4.14525 + }, + "start_waypoint": 0, + "steps": [ + { + "distance": "676 m", + "duration": "1 min", + "end_location": { + "lat": 49.315679, + "lng": 4.149621 + }, + "instructions": { + "action": 2, + "summary": "Drive northeast on D 151.", + "verbal_after": "Continue for 700 meters.", + "verbal_before": "Drive northeast on D 151. Then Enter the roundabout and take the 2nd exit onto D 30.", + "verbal_succint": "Drive northeast. Then Enter the roundabout and take the 2nd exit onto D 30." + }, + "polyline": "a_~kHgrhXu@yAe@y@c@q@e@q@c@o@e@m@y@eAa@g@a@c@Y[UUQQYUQOSOQKSKOKQISIWKSEUEMCQAa@CeA@[E}@EUAOEOGKKIOM[I]Ea@A[?Q", + "start_location": { + "lat": 49.31073, + "lng": 4.145163 + }, + "travel_mode": "DRIVING" + }, + { + "distance": "22 m", + "duration": "1 min", + "end_location": { + "lat": 49.31563, + "lng": 4.149905 + }, + "instructions": { + "action": 26, + "summary": "Enter the roundabout and take the 2nd exit onto D 30.", + "verbal_alert": "Enter the roundabout and take the 2nd exit onto D 30.", + "verbal_before": "Enter the roundabout and take the 2nd exit onto D 30.", + "verbal_succint": "Enter the roundabout and take the 2nd exit." + }, + "polyline": "}}~kHcniXBIBU?W", + "start_location": { + "lat": 49.315679, + "lng": 4.149621 + }, + "travel_mode": "DRIVING" + }, + { + "distance": "198 m", + "duration": "1 min", + "end_location": { + "lat": 49.314292, + "lng": 4.151623 + }, + "instructions": { + "action": 27, + "summary": "Exit the roundabout onto D 30.", + "verbal_after": "Continue for 200 meters.", + "verbal_before": "Exit the roundabout onto D 30.", + "verbal_succint": "Exit the roundabout." + }, + "polyline": "u}~kH{oiXFWDOLUP[P]j@y@^g@`@i@NUNONMJKJIFELC", + "start_location": { + "lat": 49.31563, + "lng": 4.149905 + }, + "travel_mode": "DRIVING" + }, + { + "distance": "46 m", + "duration": "1 min", + "end_location": { + "lat": 49.314041, + "lng": 4.151976 + }, + "instructions": { + "action": 26, + "summary": "Enter the roundabout and take the 1st exit onto D 30.", + "verbal_alert": "Enter the roundabout and take the 1st exit onto D 30.", + "verbal_before": "Enter the roundabout and take the 1st exit onto D 30.", + "verbal_succint": "Enter the roundabout and take the 1st exit." + }, + "polyline": "iu~kHsziXJBJAHGFIDMBSAS", + "start_location": { + "lat": 49.314292, + "lng": 4.151623 + }, + "travel_mode": "DRIVING" + }, + { + "distance": "96 m", + "duration": "1 min", + "end_location": { + "lat": 49.313434, + "lng": 4.152921 + }, + "instructions": { + "action": 27, + "summary": "Exit the roundabout onto D 30.", + "verbal_after": "Continue for 100 meters.", + "verbal_before": "Exit the roundabout onto D 30. Then, in 100 meters, You will arrive at your destination.", + "verbal_succint": "Exit the roundabout. Then, in 100 meters, You will arrive at your destination." + }, + "polyline": "ws~kHy|iXBKDILURa@LWt@eAHQ", + "start_location": { + "lat": 49.314041, + "lng": 4.151976 + }, + "travel_mode": "DRIVING" + }, + { + "distance": "1 m", + "duration": "1 min", + "end_location": { + "lat": 49.313434, + "lng": 4.152921 + }, + "instructions": { + "action": 4, + "summary": "You have arrived at your destination.", + "verbal_alert": "You will arrive at your destination.", + "verbal_before": "You have arrived at your destination." + }, + "polyline": "}o~kHwbjX", + "start_location": { + "lat": 49.313434, + "lng": 4.152921 + }, + "travel_mode": "DRIVING" + } + ] + } + ], + "notice": "", + "overview_polyline": { + "points": "a_~kHgrhXu@yAe@y@c@q@e@q@c@o@e@m@y@eAa@g@a@c@Y[UUQQYUQOSOQKSKOKQISIWKSEUEMCQAa@CeA@[E}@EUAOEOGKKIOM[I]Ea@A[?QBIBU?WFWDOLUP[P]j@y@^g@`@i@NUNONMJKJIFELCJBJAHGFIDMBSASBKDILURa@LWt@eAHQ" + } + } + ], + "status": "OK" + } + ] + }, + "RouteStep": { + "properties": { + "distance": { + "type": "string", + "title": "Distance", + "description": "The distance as text covered by this step until the next step." + }, + "duration": { + "type": "string", + "title": "Duration", + "description": "The typical time as text required until the next step." + }, + "polyline": { + "type": "string", + "title": "Polyline", + "description": "The polyline of the step (encoded with the [poyline algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm))." + }, + "start_location": { + "$ref": "#/components/schemas/LatLng", + "description": "The starting location of this step." + }, + "end_location": { + "$ref": "#/components/schemas/LatLng", + "description": "The ending location of this step." + }, + "travel_mode": { + "type": "string", + "title": "Travel Mode", + "description": "The travel mode of this step." + }, + "instructions": { + "anyOf": [ + { + "$ref": "#/components/schemas/RouteInstruction" + }, + { + "type": "null" + } + ], + "description": "The maneuver instructions for this step." + } + }, + "type": "object", + "required": [ + "distance", + "duration", + "polyline", + "start_location", + "end_location", + "travel_mode" + ], + "title": "RouteStep" + }, + "TollLeg": { + "properties": { + "distance": { + "$ref": "#/components/schemas/RouteDistanceDuration" + }, + "duration": { + "$ref": "#/components/schemas/RouteDistanceDuration" + }, + "start_location": { + "$ref": "#/components/schemas/LatLng" + }, + "end_location": { + "$ref": "#/components/schemas/LatLng" + }, + "tolls": { + "items": { + "$ref": "#/components/schemas/TollStep" + }, + "type": "array", + "title": "Tolls" + }, + "tollSystems": { + "items": { + "$ref": "#/components/schemas/TollSystem" + }, + "type": "array", + "title": "Tollsystems" + } + }, + "type": "object", + "required": [ + "distance", + "duration", + "start_location", + "end_location", + "tolls", + "tollSystems" + ], + "title": "TollLeg" + }, + "TollStep": { + "properties": {}, + "additionalProperties": true, + "type": "object", + "title": "TollStep" + }, + "TollSystem": { + "properties": {}, + "additionalProperties": true, + "type": "object", + "title": "TollSystem" + }, + "TollsResponse": { + "properties": { + "status": { + "type": "string", + "title": "Status" + }, + "routes": { + "items": { + "$ref": "#/components/schemas/TollsRoute" + }, + "type": "array", + "title": "Routes" + } + }, + "type": "object", + "required": [ + "status", + "routes" + ], + "title": "TollsResponse", + "examples": [ + { + "routes": [ + { + "bounds": { + "northeast": { + "lat": 45.72083, + "lng": 4.89669 + }, + "southwest": { + "lat": 43.7022, + "lng": 4.11696 + } + }, + "legs": [ + { + "distance": { + "text": "272 km", + "value": 272038 + }, + "duration": { + "text": "2 hours 27 mins", + "value": 8793 + }, + "end_location": { + "lat": 45.7196995, + "lng": 4.848819 + }, + "start_location": { + "lat": 43.7037977, + "lng": 4.121733 + }, + "tollSystems": [ + { + "id": 7607, + "name": "ASF" + } + ], + "tolls": [ + { + "countryCode": "FRA", + "fares": [ + { + "id": "50d47ca7-59a3-4efd-b009-7a374aec7b21", + "name": "ASF", + "paymentMethods": [ + "cash", + "bankCard", + "creditCard", + "transponder", + "travelCard" + ], + "price": { + "currency": "EUR", + "type": "value", + "value": 28.7 + }, + "reason": "toll", + "transponders": [ + { + "system": "BipandGo" + }, + { + "system": "BipandGo" + }, + { + "system": "BipandGo IDVROOM carpoorling" + }, + { + "system": "Cito30" + }, + { + "system": "Easytrip pass" + }, + { + "system": "Liane 30" + }, + { + "system": "Liber-t" + }, + { + "system": "Liber-t mobilitis" + }, + { + "system": "Pass Pont-Pont" + }, + { + "system": "Progressivi'T Maurienne" + }, + { + "system": "TopEurop" + }, + { + "system": "Tunnel Pass+" + }, + { + "system": "Ulys" + }, + { + "system": "Ulys Europe" + }, + { + "system": "VIA-T" + }, + { + "system": "Viaduc-t 30" + } + ] + } + ], + "tollCollectionLocations": [ + { + "location": { + "lat": 43.70283, + "lng": 4.11987 + }, + "name": "MONTPELLIER (M.EST)" + }, + { + "location": { + "lat": 45.4761, + "lng": 4.83378 + }, + "name": "VIENNE" + } + ], + "tollSystem": "ASF", + "tollSystemRef": 0, + "tollSystems": [ + 0 + ] + } + ] + } + ], + "overview_polyline": { + "points": "u{viGy_dXDAFGDEDIBMBO@U?QAQAIGWEIIKKGIAQ?I?ODGFKLEHETCZ@Z@JBNHLDDJHJDF@L@J?LBHBJBNLPVXh@Pd@|@dDNd@Jb@HTV~@t@lCD\\DRFXDVDVBV@T?VARAPEZGTKRKNIJIFKDIBI@I@M?MCQISOQOSQ]_@]WqBqCeAwAe@o@Ya@s@cAoBkCgA}AkBoCeCyDw@sA}CkFoA{BeBaD[m@iAuByAmCk@eA_@s@{@aBk@gAmA_C_AkBkC_FiAwBe@{@}HiO_EyHsB_Ea@w@c@y@iBkDiAwBsFkKa@y@_@u@c@{@a@w@]q@Yk@[o@_@u@_@w@a@{@[q@]w@]y@_@}@]{@[y@[{@[}@[_AY{@Y}@Y_AUw@W}@W}@U_AQu@Qu@Qw@S_AOq@Ow@UkAQaAOw@QgAIc@U}AMaAOiAMeAMgAKaAGm@I}@IaAIcAIgAG}@Eq@GiAGoAEcACo@Cu@EwAEcBCaBCkCAmBAkBCaIAuIAiCAeBAeAA}@AcAC_BC}AEkBE_BEyAEsAGaBG{AGsAGoAGmAGkAGgAIuAGcAG_AG}@IiAIgAIaAKmAMsAMsAk@mGK}@i@yEKu@_@uCAKWgBU}ASoAUwAWaBgAkGUsAWuAWoA]wA[kAMe@Mc@Qm@Ss@Oc@Uq@Si@Oe@Oa@Qc@Qc@O]eAaCoAcCmAuBc@s@}A}BsAcB}@eAu@w@i@i@q@m@kB}AUQk@a@{@m@q@a@u@c@aAg@u@]s@[w@[}Bu@aA[oBi@sBq@mDeA_Cy@gCgA_Aa@iAk@cAi@aBaAmAw@eAs@c@Ws@i@sBcByAsAUUsAoAwB_CiBwBqCwDoAiB_A{Am@eAa@q@gAqBoBgEqAyCmA_DiAcDgAeDW}@K]EOc@}AGSe@qBOk@Qw@]aBQ}@Ow@Oy@Ic@Ii@Km@Ig@U{AM}@Iq@Gg@Is@MmAKgAI_AIaAEi@Em@Eo@IuAGmAIcBEgAEyAEaBC_BA_B?q@?uA?cA@yA?i@@oAB_BFoBBu@Bs@D_ADw@H{AFcAHqAF_ADo@Fu@Di@Fy@HkAJwATiDTsCb@kGTaDJwA\\uE^kFTaD`@uFh@uH\\aFX_Ef@cHZqENkCHkBBy@@_@@q@BqB@_B?oAA{ACuACcAG{ACk@Ew@Ci@IoAIaAMkAKaAQuAQqA]uBOy@G[Os@Os@Oo@a@}AWaAQo@e@}Aa@mAi@wAq@aBg@iAm@qAWe@}@}AMUQYw@iAgBcC{@eASUq@s@mAkA{@y@eDwCwCkC][i@e@_BsAw@q@w@q@mC_CqBgBqBeBgB}AkAeA_CsBwC_CqBuAaBiAsAw@kAs@mBcAoAq@}BqAeBkAwBcByAqAq@o@a@e@{@aAm@u@o@y@q@aAc@q@k@_Am@eAk@gAYk@g@eA_@{@]y@Ws@Uo@[cAYaAOi@Qo@W_ASo@Qo@K][gA[iAc@}A_@oA[cA[aAc@qAm@gBi@yAe@qAe@kAe@eAk@qAi@iAm@mAg@cA{@_Bc@s@_@o@q@iAk@y@u@kA{@mAu@cAw@cAy@cA]a@SUs@w@aAcAi@i@o@k@a@c@w@s@mAgAy@q@e@a@oC_CwDcDaBwAu@s@cAeAe@e@oAyA{AeBq@{@q@{@q@}@g@s@eA}AYc@k@_AcAcBy@yAk@cAo@iA_CeEm@eAk@_AgAcBWc@W_@]e@a@i@a@i@_@e@c@i@e@k@c@e@e@i@k@o@e@g@iAkA_GiG_DcDwD}DmBmBsAuAs@o@o@m@aByAm@i@cA}@s@k@o@i@mByAgDeCoBwAqBwAYSuAeAm@i@_@_@i@g@c@a@YY{@_AiAsAe@o@[c@w@kA}@{Au@uAw@_Bq@}Aq@gB]_Aa@oA_@sAi@qBm@sCUkAKk@Mw@OaAUiB[mCMiASsBEa@g@{EEe@K_AGk@y@uHYeCGe@cAiIYyB[yBMw@OaAYkBUuAYcB[iBa@yBWuAa@sBuC_Na@iBi@{BmBaI_AyDqBcIkAaF}@_EuAmGo@sCo@mDo@kDG]Ie@E]]cBSkAWwAEW[yBM{@EUc@qCIa@e@mCi@uDm@qDk@qDIe@c@gCk@mD[iBKu@G[c@gCIi@Ig@c@_Co@mDSkASeA[cBSgAq@eDCMm@aDmA_Gu@iDs@cDw@oDQw@GY]uAw@eDy@iDyAwFe@kBqAwEw@sCy@sCw@oCm@qBUu@{@qC}@uCgAiDeAcDgAcDmAiDkAcDy@}Bs@kBc@kAc@iAm@}Ak@}As@iBi@qAk@wA[u@_@{@Ui@eAkCeAcC_CsFaFeL}CeHmAqC}@qBeAaCcA}BkAoCmAsCoAuCwAiDu@iB}A{DmA{CeAqCgAsCkAaDc@kASk@Sk@cAuCsB}FcCgHkDgKaByEWu@Ws@Uo@ISIUM[Oa@[w@a@aAi@mAi@kAo@sAs@uAi@_Au@sAq@gAw@iAiAaBe@m@g@o@m@s@e@k@k@m@aAaAu@u@o@k@q@o@e@a@a@]e@_@c@]o@e@WQ]UYQw@e@u@a@q@a@g@WYOi@YoAm@oAq@WMUK[MYM]OSIKEMGIEECIEICMI]QcAe@s@[sDeBq@[s@]k@Yk@[k@[o@]m@a@c@Yi@_@m@c@g@_@{@q@w@o@_Aw@}@w@oBeBwCiCwAoA[[mC_CcB{A{AsAgB_B_Ay@WSkBcBa@]_BuAsEcEw@o@{@y@u@q@gBaB_@]oAiAqBcBgB{AmBeBmBcBkAgAs@m@OM_@[k@g@cA}@oBeBkBcBaByAyBoBcA}@yAsAg@e@w@u@i@g@s@s@aAaAg@i@g@i@k@m@g@m@e@k@a@g@e@m@k@u@m@w@m@w@k@{@i@w@i@y@e@s@e@w@e@w@c@w@g@}@a@u@a@w@a@u@_@w@[o@_@y@Wk@[s@Ys@Ys@[w@Wq@Yu@a@gAgA{CmAqDoA_EaA{CkAwDmAyDeAcDq@uBY_AcBkFy@iCu@aCs@_Ce@wAw@gC]eAm@kBi@gBwAwEi@iB]oAu@uCq@qC[yA[{AWsAYcBa@}CYuBUgBW_CUaCOmBO{BO{CSaFK}DEkBEqBIyDGgEGiCMeEKqCKcCI}AIqAGy@Ei@Ei@Go@I_AKmAMwAKmAO{AKcAOsAOoAM}@K}@K{@OiAKu@QqA_@mCe@_Di@kDSgA]oBUsAUkAWsAWsA]cB_@gB_@eBm@oC_@cBaA{Dy@cD_AmDgAyDaAeDcAcDoAyDeA{CoAmDgAuCmAcDsA_Dy@mBo@yAmAmC{AcDg@eAYm@wAsCg@aAm@iAa@u@g@}@_@o@_@q@c@u@e@w@q@eAy@sAw@oAy@oA_AyAyAyBeBiCeBiCiBsCYc@Yc@c@s@Ua@i@_AwAkCe@aAcAuBkAqCi@sAe@sAu@yBe@yAs@cC[iAc@eB{@qDg@aCWqAm@iDKm@QeAQkAIk@UaBa@gD]wD]gDWcDK{AEk@OsBIsAG_Ai@}IIuAIaBQuC[{E_@cH]eGGoAU{DSuDGaAWiEOaCGmAOsCWmEa@iHIuAEs@e@wHQgC_@iFWcD_@sEUyBKaAIu@Is@Is@MaAMaAOeAYkBWaBUuAW{AQaAOw@UkA]gBEQOs@Ke@{@oDkAsEiA_Eu@cCs@uBWu@]aAmAsD{AaEuAiDk@{ASg@Yk@kDkHkCkFq@mAwAgCcBuCkAmBQUmB{CsB}CeEaGaHwJ{@mAmAcBqB{Cs@cA_A}AoA{BkBgDoA}BuAcCy@{AcEsHk@eAq@mA[k@q@mAmCaFgB_DiAuByAoCcB{CoA}B_@s@OWk@aAc@y@s@oAkAwBuAgC_AcBkBeDmCqE}A_Cq@aAqBqCuBkCuBcC{BcCaAeA}BcCa@c@c@e@s@w@Y[_AeAiBaCe@k@c@o@_@i@g@u@_@k@e@s@Wc@_@o@_@q@]o@_@s@a@w@]q@Yk@We@Ui@k@mA[q@i@iA}AoD}BcFIQ_AsBs@{A_@w@i@eAyAoCw@wAq@mA}AsCaAgBq@oAqAaCsAcCgAqByAkCMUg@y@cAiB_A_BO[{@}AiAqBs@mAYe@sAuBoAcByAeBk@m@iBiB_Aw@uAcAeBeA{BoAu@c@s@_@_Ag@mAm@e@Ws@_@{Ay@{A{@i@_@y@i@qA}@y@o@q@g@k@e@q@k@o@k@oCiCmAmAeAgAs@s@iBqBo@q@iBwBs@y@w@aAo@w@w@aAu@aAs@_As@_As@_AiBgCw@kA}@sAc@q@q@eAm@aAo@eAm@aAk@_Ao@iAm@eAa@s@_@q@We@_@o@u@yAmA}BuAgCuAoCQ_@[k@g@aAg@aAm@oAe@}@q@mAYi@y@}A}@aBa@s@m@aAi@}@cAaBa@u@mAmBaBgCyA}B_@i@Ya@e@s@q@aAm@y@s@cA{AuBqBsCgAaBm@}@a@m@c@q@}AgCYc@aAeBeBcDg@aAq@uAi@kAiAgCw@iBi@qAg@qAi@uAmAaDi@uAsAuDe@qAoAcDm@wAi@uAg@mAyAcD_AqB[q@[o@a@}@]s@[o@o@qAy@cB{@iBc@_Aa@}@_@y@e@eAc@eAo@}A]w@Ys@]_AcAmCi@yAa@eAg@{A_@gAc@uAe@wAi@gBc@wAkBoGaBwFoAeEgAmDiAmDw@{B{@aCm@aBe@mAiAuCyAmDw@gBaAyB{CsGq@uA}AyCq@sA_ByCqA_CqBmDgAiBqAuBuBeDmAkBkBuC_AsAu@eA]i@m@y@qAeBw@eA{@kAm@{@w@gAq@_A_B_CiAeBk@}@_BkCm@eAm@gA}@eB_@w@Wi@kAyB{@gBc@aAmAuCk@wAu@kBeAmCo@_BaAcCm@{Aw@mBm@yA]w@Ue@k@oA_AkBg@eA}AqCgB}CgCaEs@eAcBaCs@}@qCqDkByBeDsDkAoAiCsCmDwDsCkDmBgCi@s@yAuBeBoCw@mA{BsDg@y@g@_Au@qA{@_BgAuBk@gAYi@cAyB_AuBy@wB}@mCq@_CWeAg@}BUkAO{@[oBQqAMy@[eCSaBUaBi@oDO{@Q}@SaAe@yBi@qBc@sAy@{Bq@eBe@eAsAmCc@w@e@w@aBgCmAaBoCwDwAeBu@aAcB_CU[m@{@e@o@gAaBgDmFiAgBg@}@}@}Ai@aAcAkBiAyBoB}D}B}E}AoDaA_Ca@eAoAcDsAoDc@mAg@uAqBeGiAwDe@{Aa@uAiA}D}@cDa@{Ae@cBy@{CeAwDc@{Aa@qAgAcDi@yAe@oAk@sAg@gAm@qAi@aAs@qAo@cAu@eAs@aAyAoBoAwAqBqBaA{@w@m@aAs@QMm@a@}@k@aAi@aAg@cAe@cAa@cA[gA[gAWcASgAQkAOcAIgAEmAEeA?gADa@?e@BmAHgALcAHiCZkBRSBgBPg@D_@Bi@BU@kAD_@@kAB}@CaAEeAK{@KiASmAYk@SMEw@W]Me@QaAc@c@Qe@Wy@_@i@YoAo@}BkAgBw@}Aq@o@SmAWcAUcAO{AMw@Iu@C{A?m@?kAD_AFcALy@HeAR{@TgAZeCx@cAb@s@VkAf@u@Z_A`@gA^eA\\kAZy@TcARkAPmANw@FmADeA@gA?}@CcAGiAIqAQ{@OcAUiCs@aC}@m@U{@]cBq@o@WsAm@iGgCsDyAsB}@WKi@S{@a@}CqAcCeAeCeAmBy@u@[wAs@gCoAuBeA_CsAqD_CeCeB}BgB_CmBeB_BUUMMwAqAWWQQSQSWa@e@W[cAiA]_@Y]e@i@_@g@[]_AoA}AqBoAcByAmB_CcDsBqC{BwC_BqBa@e@_@e@UY{BiCwBaCw@y@_@a@k@g@sBgBuAgAs@i@y@k@o@c@yA_A}BoAiAi@aBw@kAe@kAc@qAc@u@UQGy@ScAYsAYu@Qy@Om@Ky@My@MsAQqC]cAMcAIkBQy@Iw@IiAGeAIs@CgAIgAGs@EuAG}@Eo@?q@?m@?aA?s@?sABm@@aAFo@Dy@F_AHu@Hm@HcAN_BXkATiAVkAZ}@RmAb@y@PqBd@m@Ns@NaARo@LYBYDc@Fa@Di@FWDc@@y@Bw@@u@@}@?_AA{@Ei@Eo@EKCq@Ii@Io@Kk@Mi@M_@Kc@Mk@Q_@My@[mAg@cAc@w@_@q@[k@Yg@WaAg@wAs@mB_AmB_AoBy@q@WcC_AcA]y@Ww@U{@UwA]eAUu@Oe@Ig@Ik@G}@M_AKk@Ec@CwAE_A?{@Bi@Bi@Fk@Ju@Ps@Rk@Ri@Vo@ZOJ]Pu@j@]Tk@f@e@f@e@l@a@h@gA~Aa@p@e@|@_@r@qAfC_@v@k@nAg@hAk@nAc@`AcBhDg@dAq@rAcAjBs@hAW`@U\\OTMRKPSZo@bA}@fAg@j@_@b@yAxAYXo@j@k@d@s@l@a@Zg@^s@f@}@l@cBbA{@f@gBdAwAx@w@b@qAr@yBnAaB`AkBfAiBfAs@`@c@VcAh@k@X}@`@_A`@q@X_A\\wAj@sAn@{@Zm@VIBsBx@yBz@o@TgBp@a@NcBf@c@TcBr@eDrAcA\\mBr@aE~AmBt@kAb@w@ZeA^aA^iBp@cC~@uBx@_A^mAh@aBv@q@^cAl@mBlAgAp@g@\\e@\\eAt@qBnAmBpAmBlAmBpAmBnA}@l@k@`@cBdAsBtAw@f@s@d@kBnA{@h@{DhCeFfDeAp@g@ZSLc@XcC`BsE|CuBxA{DhC[TcBfAiD|BkBlAcC~AsBvAeIjF{E~C}@l@gBjAiBlAiAv@{FtDiBpA{CzByBdBoB~AgA`A_DtCg@f@cB`BoAnAiBnBaBjBoB`CoA~AeArA{@hAw@fAu@dA}@pAkAfBqApBgAhBw@nAu@pAm@dAaCnEIN}A|C}@jBeA~B{AhDuElLqBjFk@zAeApCaAfCo@~A{@rBqArCy@bBcApBq@nAeAdBcA|Aa@h@iAzAmAvAeAfAkAdAaAx@eAv@q@`@_Ah@mAn@gAf@{@\\_A\\y@Vq@Pq@N}@PgAPgALaAHoAHiAB_B@kC?kCEmEGkA@_ADyADwBNkAL_ANoATe@Jq@N{@Ro@P]JaAZoAf@kBx@cAh@w@b@sAx@}@l@yAdAwAhAmAfAeC`CmAnAaAbAiBrB}AfBcJzKuCfDsD|DkBhBiAdA{@r@uAhAaBnAuAbAiBnAiBhAoAr@}Ax@uCtAgD|AmJdEqCjAWJ}Ap@oAf@{Aj@}@Z{Ad@gAX_ARsAVsATeBNiAJiADc@@qADcA?qBEq@CyAIqBOuBSyDc@yI}@iBSiHu@eBUgAQuAYeBa@wBm@sBs@eAa@uAq@kBcAmAu@eEmCaGyDkTwNoH{E_C}AoEuCwCoB_@W_C}AaDwB}E_DyDiCgMkIqRgM_KyGsZkSsE_DeCgBsFcEcG_F{FiFyBuBaD_DkBkBeAeA{@}@{@}@eAgAcBcBiBoBkBmBm@m@}@_AkHqH{GaHqFqFu@q@aA}@mAaAm@c@_@WWSo@c@q@c@_@U]S]S[Qm@[o@[oAk@uAi@kAe@aA[gAYqBe@yA[eAOuBYgBOaFUiAEoBGaAAoAEa@Ae@Aw@Ac@Ac@?kBG}AEw@CkCE{LWiCCmC@eBFoBHqALwAPeBZwAVwA^iA\\wAf@eBp@aBt@sDfBeDdB}BlAsAt@iB|@qCvAoFjCmD|AmBt@iBp@mA^_Bf@sA^cBb@_B`@iB\\eBZgBXs@Lm@Hy@Hw@Hs@H[Ba@FoDZkAFuAHmBNyBPeJl@aEVaF\\oCTmCPgBJ{BLu@DyBJuET_FRoDJs@DcCDoAFsABmBBuADoDDwA@uA@wDDiC@gB?cC?c@?eB?cA?cB?mA?iC?aA?oAA{A?}AAiC@kE@uB?oABm@DkA@uCDiCFsBFa@BiADeCLcDTmBLsBN}D^}CZiD`@mDd@kAP_AN}B`@gAP}AX}@P{Bd@}Bd@wDv@{M|CgKxBoEv@uDl@uEn@_CVqBRuANsE`@{OpAaIn@{E`@aF`@kBPs@DoAJmDXmD\\oNjAyPtAcCTeCR}@Fk@Dk@F_BLsAJ{AL_AJy@DyCTq@FaAH{@HkF\\o@FoAFk@DuDPoCNo@B{@BeBDgB@q@@gCB}BCkA?uAAm@As@A}@C{@C_@A]Aq@EeAE_AEs@AsAKk@E}@Gm@Ek@Eo@G{@Iu@Gw@IgCY}ASmBYuAQiEs@kAUk@Ki@Ke@I]IaB[k@Mm@Qy@S}@Ug@Ms@Ss@SkA[_AUm@SoA_@cA[m@So@Ui@Se@Qa@M]M]M[Ma@Q]Mc@Qe@Sc@Qq@Yo@Yq@Wg@Wk@Wi@Wa@SYOYM]Si@Yi@Yo@]e@Wy@e@e@We@[c@We@YsAy@m@[[U_@S]WUM_@Y_@WYSc@[y@m@UQWSi@a@q@m@o@i@c@_@q@i@a@]]Yk@g@q@m@_CuBw@s@g@i@m@m@a@a@g@g@e@e@WWWWWW]a@]_@WYY[Y[a@e@m@o@qA{AkC{C}@iAe@k@k@q@}@cAaBmBi@m@]_@UUk@k@o@q@_A}@s@u@i@g@o@i@m@m@_@]q@k@gA}@m@e@m@e@k@c@aBkAu@i@QM_Am@y@i@s@c@{@g@s@a@_@SqAq@g@Wk@Yk@Wq@[_Aa@cAa@wAi@mBq@_A[iA]cAYuAa@sA[y@S_AQo@Mk@Mq@My@UmASuCk@w@QiAQw@Se@GgDs@_B_@mAWq@Mq@Qq@Om@Og@Mo@Oo@Mu@Uu@Sy@U_AWi@Oc@M_@K_AYUGqAa@_Bg@uAe@y@YgA_@_@Me@O]M]Ke@Qg@U}CmAeBs@cBq@oB}@mAk@eBu@aCmAiB_Ak@[gCsA_EwB_B}@kC{A_E{BmC}AaBaAu@_@s@a@gAk@cAg@uAq@cAe@mAi@_A_@mAe@kAa@mAc@yAe@mA_@eAYw@Qu@Sw@Q}A[cASy@O_AOu@KiAOcAM{@K{@IeAIoAIqAIsAGg@CuAEwAEa@AuBA}CCoII]?eCCaCE]AkGIiAAoDGI?i@AqDC{DC{FIkBCiACaCEiCCoBCoAAkAC_CCsEGaAAmACm@CiAEw@Cw@Ce@Cg@Aq@Gu@EaAKu@Gk@G}@KeAOm@Ic@Gi@Ie@Ie@Ia@Gm@Oo@Mi@KkAWs@U_@Ki@O]Kc@Ma@Mq@Uu@Uk@Se@Qo@Uw@Ys@We@Uc@Sq@Wc@U_@Qk@Ya@Qc@We@W[QYMWQ_@Sc@Wm@]yA_Aq@c@k@a@w@k@c@Y]Ye@]WU[WYSYW]Y_@[i@e@s@m@k@i@m@k@k@k@]]YYUUWWa@c@[[o@u@oAwAs@_Aa@g@u@aAg@q@k@s@_@k@_AsAo@aAc@q@e@s@g@{@c@s@k@_A_@o@s@kAo@mAa@u@}@_Bc@y@a@s@a@w@]q@o@mAUc@We@_@w@i@aAg@aAk@kAg@aAS_@_@s@[k@We@a@w@a@y@s@wAu@uAWg@_@q@_AaB}CqFaBmCq@eAs@iAc@q@}@sA[e@y@iAu@cAgAyAkA}Ae@m@k@s@o@w@i@o@q@w@o@s@m@o@g@m@q@s@u@y@w@y@g@g@k@k@q@q@k@i@g@e@qAiAkAeAi@i@}@s@i@e@i@c@g@a@}@s@{@m@m@e@_@Yg@]mCkB{AaAcAo@}A_AsAw@wAy@m@]g@Yo@]}@c@}@c@kB}@cAe@_A_@gAg@w@YYMWKqAg@_C_ASI_Bq@eDmAuBu@oBs@mBo@iBq@kC}@qAc@mAa@sBo@sAe@w@Wu@U{E{AsBq@QGYIuAc@uHyBm@Q]KaD}@iBg@gBe@oA]aBa@oA[w@S}@SeASiASaAOuAWs@KmAOq@IaAKkAKwAK{AIcAEsAEo@A_DGeD?kB@kBDmCD}BHiCJ{BLiBH{AL{BNsALwANmCVeALmAL}@HcAL_BTqBX_BVgBZsATaAPgAR}@PaARwCl@mBb@eCn@yCt@uCx@oBj@uC|@eErAgFhBwGzBeKlDqE~AqBr@cDhA_Bj@WHq@V}Bv@eHbCeBn@oBp@]Jg@PuAh@kAb@kBt@u@Xo@Xs@Vg@R_Ab@oAh@{@\\u@ZwAp@s@Zk@VcAb@y@`@s@Z_@Ni@Xi@VkAj@gAh@k@VIDwAp@wCrA_@P{B`AgAd@{DzAuBv@s@V}@Zw@VaAZu@TaAX{Bl@sDz@g@LcAVaAV}@PcAR{AZyATsATgAPsBZqBVsAN_BRyCZgBNsAJ{ALeBLkAHwAHwAF}AHeBF_CHwDHcEDmIBcHAoNCS?M?}IAwBA}B@aCBaDBeDBiBBmBBoCDyBDeBFcBBaDHiDLiELcCJcBFmBFiBHuDRiCLkCNmAF{AFwADoAFiAB{@BmAD_@?c@@wEBw@?aCAgBCcBEmAEgAEmAEeBMmBMkHs@_@CwB[iC]}Ba@}AYiAUeAS_B_@SESC{Bi@OGyD_A_Ci@gAUqA[iAWmAYw@Oy@Sm@M_@Gi@Mw@Ow@Oi@Kg@Ks@Me@Ik@Ke@Ig@Io@I_AQs@Ki@Go@Ii@Gk@Ie@GcAMs@IaBOcCQoBQuCWaEU_DQs@AsCQ_CIgCUaAGq@EYAY?W?I?wC?mCMmGWaH[oAGs@Ck@AuBIaBC}BMcBIcBGgAE{@CcACgACmBC}B?iA@oABgADu@DmAH{@Fo@Fu@Ho@H{@Lw@Ly@NwAX}A\\q@Po@Pg@N_AZ_AZs@Xy@Xs@Xs@ZmAj@yAt@cAj@iAn@e@Xk@\\uA~@aBdAkAv@aEpC{@h@u@h@c@Vw@h@g@ZuCbB}@f@kE~B[N_@PwCrA}@^y@\\m@To@T_Cv@wBr@YH[LeAZ_AV_AR}@TcATcATaATs@LcARgATcANcAPmATwARcBXwATiBZ_BXgBZcDh@{GjAy@LkC\\w@Jo@HmDb@gD\\cAJYDi@BcEVs@DoDPq@B_GHqABcB?qA?gBCaBCqBEsAC{BIkAI_ACw@GwCOcCQoDUmDWqBO{@GaAI_BMuAKkAKw@Go@Gk@G{@Ka@Ea@Go@Ig@Im@M]G[Eo@Me@M]IWGe@Mu@S_@Kq@Oq@UoA_@cEoAeF}AuAc@y@S{@Uy@QaAW{@QoAUaAQ_AO{@MaAK_@Eg@Eg@CUE]C]C]Cg@Ci@A}@Es@Cu@A{@A}@?gA?u@?y@BgABy@Dw@DeAFsAHuAHwAJYDi@Bc@D{AJs@Dq@DgAFcAFeADmADkAB}@By@?cA?y@?m@Cq@Ag@Ak@AcACu@Gu@E}@GUCOAI?k@I}@K}@MgAOy@My@Mq@My@S_B_@oA[kA[sBo@q@U_A[{@_@aA_@y@]m@WaAa@iAg@_Bo@kB}@iAg@kAi@w@]yBcAwBaAkAg@yBaAeAc@u@[uAq@_CgA_CeAmCkAqAm@eCiAy@[wB_AsCqAwAo@gAe@QK[O_CiAaBw@eCkAm@[aAe@{@e@{CaBUM[Qy@a@]USMUMe@YqAy@{@k@_@WmAw@}@m@oA}@m@e@s@i@a@[s@i@u@q@a@]y@s@{@w@c@_@}@}@c@c@MMgAiAc@g@WYaAgA[a@o@w@m@w@m@{@_AqAa@m@q@cAQWwA_CcAgBk@cAWg@Wg@Yk@Uc@Ue@c@aAm@wAm@uAa@aAYu@Sk@Wq@Ws@Qg@GOIWQi@a@qAOe@Sq@c@{AQk@]oASy@WeAQs@]{AOo@Q{@a@sBWsAMq@WwA]qBW}ASqA]}BYiBQiAU}AU}AU}ASqAk@sDa@cCYaBWwAWsAScAWqAS_AUaASy@YgASs@YcA]kASo@Uw@Qi@Qi@Sm@Oc@Qg@Si@k@yAYs@[u@s@_BaAwBYk@Yi@Wi@Yi@e@{@e@y@g@}@g@y@e@s@i@y@e@q@c@k@c@o@a@i@}AmBY]]a@iAmAo@q@m@k@q@q@][_Ay@i@e@{@u@i@e@}@u@y@q@{@s@}@s@q@i@{@q@{@q@q@i@i@c@s@k@k@e@cAy@}@s@y@o@m@e@a@[YUIEwBgBoB_BcBuAkCwBmB_B}AmAmAaA{AmAiB{AcBsAy@o@k@e@_As@eAy@}@s@aAw@s@k@cAw@o@e@{@o@s@i@m@c@s@e@s@e@m@c@k@_@s@c@m@_@}@i@cAo@w@c@i@]q@_@w@c@kAm@qAo@_Ae@kAi@o@[eAe@a@QwAm@sAi@cA]{@]iAa@gA]gAa@gA]gBk@kAa@}@YaAY}Ag@kA_@gBi@uCy@eBi@sAa@eAYy@Sw@U_AScBc@wA[mAWu@OoAWaAQs@MoAWgAQyAWgBYaAOqASiAQmB[kAQcDe@}F_A{Eu@{Dk@cEq@yCc@{Es@oF}@aC]qEq@uEs@iFw@wASgBW{@MoAOmB[aBUeFs@}B[kBWoBWwCa@_BUqC_@mEm@wBYsC_@gBW_BU_AMqAOeBWiAOkBWwASaAMm@Iy@K}AScAMoBUeBSiBQ{@Io@Gg@Em@Es@Gq@Ey@Cy@Go@Au@E{@CeACo@?w@Cs@AkA?eA@y@B}@?}@@aAB{@Bm@Bw@DeAFe@BS@YBkE\\eBPg@F_CZqANqAPkAPwBZeBVqBZaAPaBRsAPm@Hs@H_AJy@HiALg@B}@Ho@Be@DsADoAF_@?}AB{B?aB?_BCyAGcAE}@E}@GcAI{@I_AKcAKiAOkAQaAOcAQy@Oq@M_AQsA[YKUGiF{Ae@OkC{@gBm@gBo@_FeBg@QsE_BkG{BiEyAoCaAkDkAuCeA_EwAoE}AmG{ByCcA_A[s@Ww@Yq@UmAa@cA]mC_AgA[s@Qm@SyAc@uEmAyDaAsDo@y@Os@Mg@Gs@MkDe@cBWMC_AMa@Ie@Gu@Iq@IoB[e@Iq@K{B]m@I{@MqB[sB[eC]gBUwAQcAK}@K_BOy@GoAGkAIy@CeAGaAC}@AiCCmBBaCBaCDwDL{G^}CLoCHsA?aA?_ACgAEq@Iu@Gu@IoASu@MaAQiAWkA[aA[eA_@m@Ug@SYM[MmAo@k@[g@[{@i@kAw@y@i@yBcBiCsBiByAi@_@iCsB_CiB]Y]WuAgAoEkDcBoA]YQOuBoBw@w@s@y@eByBY_@wAeBm@o@k@i@w@s@]WYWw@k@sC}AeAk@y@]k@Se@Oc@Ma@Ka@Ka@I_@Go@Ii@Ga@EYCg@CeAEyBK{AGw@CgBIgAGg@Cc@CeBKo@Eu@I]Ea@GgASq@Oi@Mu@Og@M}@ScASo@M}@Mc@C]E_@Ag@A_@?Y?a@@[@c@D]@WB]F_@D]Fc@L_@Ha@Lc@Nc@P]N]R_@P_@To@^s@b@o@Zc@Rc@P]La@L]L[Fa@J[H[FUDYF]B]DeAJ{@HkALaAJmAL_AJ}BTcAHoANOBy@Fs@Hi@Hw@Lq@Lw@NkAXmAV{A\\gB`@_B`@s@Nw@TeAVg@Ps@RyAh@aA`@aAb@m@Xi@Ve@TUL[Pk@Zo@^i@Te@Rg@Pa@Le@Lk@Li@Je@Fa@Dk@Fo@@g@@k@?]?}AKq@E_AIiAUcASgBa@sEaAuA[oAU_B[s@MkB]y@KeAImACu@CM?[?U@Q?a@@_@BW?_@BYBk@F[Da@F_@Fc@H_@HWF[H]HYHUJYH_@PSF]Lu@\\yB|@mAf@aCbAaC`AqAf@mAd@sBr@QD[H}@Xm@L]HYF[Hk@Hm@La@D_@F_@Fe@Fi@Fo@Hc@Fa@BYB]Da@@g@Bm@Bg@ByA@{CBiDBuEH_@@[@QBQ?[Ba@D_@D]FaALi@Fe@Hc@Hc@Hq@Pk@L_@Hi@Pa@La@J_@Li@Rc@Rg@Pe@Rc@Rc@T[Nc@Tg@Xi@\\k@Zm@Zm@\\o@\\a@Tc@Xg@V]Ra@Tc@T_@Rg@Vm@Z_@P[Ne@Tc@Ra@Pg@Tm@VYLWL[HcA`@}Ah@k@PmDdAoAZw@Nq@Nw@Nq@L]FYDwATsAReAPkALgAHoALkAFcAFm@BW@W@m@B}@@mABgA@_B?yAAoACuBEwBEiCCeDIwDIqDGoEIiBCqBEwBCcA?cA?uA@eABmAFw@@q@Fq@Bg@BeEVaCLcDPkCNiEVyAFaCLkBJmCL}@B_ABsCFsA@yB@}@?wA?o@AuAAeAAg@Aa@CUAyGUqCUyDY{Eg@yEk@{B_@qCe@mFkAaFeAe@KuGyAwDs@wB]iAOyAQy@IeAKy@GqBKiAGwBGuACkAAiA?iA@mBF_CDkADoAFoBJeDTkDPgCNkG\\kG\\cCNsAH_ETqAHgEVaBHUBK?iBL}@H}@HkAPsANoAReB\\eARqAZmAZs@Tq@Pw@Vy@XiA`@s@XaA`@{@^oAl@_Ad@o@^}@d@iAn@aCzAWPg@\\YRg@^k@b@k@d@k@h@_@Zk@f@[XWPi@d@k@f@w@t@oAjA{@z@{@t@[RiAx@_@Tm@\\WLWL]Pq@^y@X{@XoAVyAZ_ALcAHqAFmADqCIcACmAQqAQc@KIC{@SqA_@_A_@GCUK{Aw@m@]w@g@c@[o@e@c@]yAuAuA{AcBuBcB{Be@m@m@{@Ya@a@i@]e@}@oAg@m@_BgB_@e@k@m@oCcCWUoAeAkBsAkAs@]S]UkAo@mAm@{B_AqBq@cBk@yAa@wA[{AWgBUeEa@cCOeCIcCBeBJkD^oARcBb@eCh@yCr@_BPmANyALyABsBAgBG}AKmAOeBW}Ac@sA_@}Ak@qAi@{Ay@mAq@iCkBmA{@qB{AiCsByC}BuAgAk@c@_As@mAaAoAaAiA}@gAy@_Au@}@q@q@i@u@k@_@Yi@a@{EwDy@m@u@o@g@_@k@i@m@i@g@e@a@a@_@_@g@i@a@c@g@k@a@e@[_@k@q@mAyA{@eAkAyAiA{Am@u@aAmAy@cAs@{@s@y@]_@k@m@i@i@i@e@o@m@k@e@k@e@q@g@o@c@m@_@w@i@mAs@QKSKQIeAc@qAi@{B{@kA[oA[wB]_Ca@kBMmBMkBEyA@eA@yAJyBNkBVyBZkBb@wCn@}KhCgPrDaCj@gGtAeFjA{G|AyDdA}Af@s@Xe@Nc@Pq@Xi@Ti@X[L[Na@T_@Pi@X_@Re@Ve@VaAj@{@f@m@\\gAl@k@Zs@\\w@^a@P_@N[L]Li@Pe@N[J_AVg@Le@J[Hc@F]F[FYDa@Fg@F]De@De@Da@DY?g@B]@m@B}@?sB?kB?g@Co@C_BAcDIaDIyCGkBGqACeAAqCGk@AiGO{BGcAAi@Ak@CsAE{CGO?Y?[C{HOiNY_DEuDMsDI}ACcBC}BAuB?oA@}AD{@D_AFs@Fu@H{@JkANwAToAVi@Lo@P_AVcAZy@V_A\\y@Zs@X{@^k@XaAd@{@f@yAz@aBfAsA~@iBzAOLKJUR{@r@a@^gA|@URmAbAs@h@k@^g@\\a@Vi@Zu@^s@Zo@Za@Ls@V[Fq@Rg@Hk@J_AN{@J[DYBcANy@Pg@Hi@L_AViA^m@TYLUJ[Na@R_@Rc@V_@To@b@c@Z_@Xa@\\s@l@m@j@}@x@y@t@s@n@}@z@w@t@k@h@i@f@[Xc@^i@b@g@`@i@`@[T]V[P[P[R[L_@Pa@R_@Le@P]Lo@Rm@Pk@Lk@L{@L}@Hu@FoBHwA@yBK_AGu@MgB[mBe@wBs@y@[}Ae@uBi@}AYw@Ks@ImAGw@CgBBu@@e@B{@FqBVkATq@Rm@Na@LWJm@RYLYLc@Ra@Rk@Z]Rg@ZYR]Vu@j@u@p@[Xi@h@[\\]`@q@z@q@~@_@h@e@r@W`@[l@[j@Yj@Yn@Sd@O\\Qb@Qb@M\\Qh@Qh@Od@Y~@St@St@UdAS~@S~@I\\I\\Kd@K^I\\Mf@Md@K`@K\\Op@GRENGRGPKXKXKVIRITGLQ`@Sd@Qb@OZUd@Yj@Yh@o@dAo@~@m@x@k@r@q@t@w@x@w@r@w@p@q@h@{@h@u@d@a@Re@V_@Ng@Ti@RWJ[J[JWJc@LYHUDcAX{@VK@k@NyF~AgElA{Af@aA\\w@Xe@Pa@P_@L]NYL]Ng@Vc@Pg@Tm@Xg@Vs@^k@Zg@Xc@X]Pc@Vc@Vg@Zg@Zw@h@m@`@a@Vw@j@m@b@k@b@_@Za@ZSPWVWRYXWV[ZWX[\\YZQRUZ_@d@[^w@dA_AnA{@jAw@fAc@l@[`@_@f@_@d@WZWVo@r@e@f@]\\c@`@[XYV[Vc@^_@Z_@VUPUPOJ_@Va@X]P]R[P_@RYP]NWLm@Xw@\\{Ap@oAh@_Br@g@Pa@Rm@Ts@Xi@TgAd@eAb@aBp@cA`@cAb@s@Zq@Zk@Xi@Xg@ZQHa@X{@h@_Ar@u@l@u@r@k@l@u@|@m@r@_@h@UZi@x@]j@Yd@Yf@[l@Wh@_AnB{@`Bo@lAg@~@o@fAc@p@U^W^UZ_@b@[b@mArA_A`Au@r@u@n@kA`ASLq@d@g@^e@X[Re@TYNy@`@m@Xa@N_@Nm@R_@L[L[H[Hu@P_@Ha@J[Ha@Hc@Dm@Hw@Ji@B{@HgA@cABaAAi@Ak@AgAGi@Ci@Ey@GgAKw@IkBOyAMqBS}AMmIs@gFe@{AMkAIw@GkCMuAEgAAaAAiA@y@B{@By@DsAJs@Du@Fm@Hc@Fo@Jw@Lg@Jg@JaARk@Na@Jc@LcA\\e@Li@Pk@Rs@Xw@Zk@Vk@X]P_@R[Pe@Ve@X]PcAn@gAr@eBrAk@^a@Za@Zk@d@sBfBcBxAuBjBqAhAWVa@Ze@`@[Xg@d@o@f@y@p@_Ax@iCzB}BnBgDtCq@n@eDtCkGjFaAz@eB|AsAfAiA~@SLq@d@_@VOJu@b@q@\\w@\\u@Zy@Xw@Tq@Pw@Ps@Lo@Hy@Hy@Fu@B}@BeAAu@Cm@Ek@Em@GmBYaCi@oBc@mCs@wBm@sBi@yA_@wA]yA[{@Sy@O}@MeAIQA}@Cs@Cg@?e@Bg@?u@B{@Hq@Dy@Jm@Jo@Li@L]Hs@Rs@T}@\\k@Vi@Vi@Zc@To@`@k@`@c@Zi@b@s@n@g@h@m@l@k@n@q@x@a@h@g@r@i@x@iAfB_FlHoBxCsAnBy@hAo@x@k@p@c@f@e@h@q@p@q@n@iAdAy@r@}@p@sA~@_@Xm@\\s@b@_@PULQHo@Zq@ZqAd@}Ah@eAZ{A^aBZ{@LcALmALqAJ]@u@Dc@?c@?kA?eCEcCG{DQeACoLe@iIQ}CIUAQ?SAOAk@?yB@qD?aFF}HHQ?S?}@Bo@BmCJwAFi@BS@iCN_BHkBL_DVe@DgBNiAJw@Hq@JqALaALsAPkCZu@J_ALqATwBZkBZmAVqB\\oEv@{AXwGjA{B`@_APu@JyE|@}AZu@LiARmB^uDn@mLtBgBZcCb@sCh@sCd@iB\\mB`@]Hk@JgFbAcHfAwAT}@LeALkAJeAJsBHoADyA@aA?aAAi@Aw@Ck@Cg@Cc@Am@Ge@E}AMoBW_AKiD]wC_@kFm@s@I}B[aBW}AWa@Kw@OwCo@gAUYGaE}@mGuAeB[oBc@m@K[Ec@Ea@EYAq@A}@@i@Bg@F[Dw@L_@H[JYFy@Xg@Rg@Xu@`@c@Zg@`@g@f@[Z_A`AsBtBg@d@k@d@c@Zi@\\]Ra@Ra@P_@Pe@LUHWDg@Ja@H_@B[Bq@DaA?]Cc@Co@Ei@Ey@McC]oBWaAO}Cc@sAOaAMyAQ{B[qBQo@Ey@CgBIqAAsAAmA@aBDiAFeAFcBHqABcA?cAAoAE}@EUA_@Ci@Ce@G_AKm@GkASYEgASyA[aBe@}Bo@aA[}@[w@[aAc@}@a@q@]q@]m@[g@[c@Wk@_@qA{@w@k@k@a@{AmAo@i@YYo@m@o@m@sFeFo@k@wAsAgAeAyBqB}AwAuCmCeAcAuDiD_ByAYWs@q@yBsB{AuAi@i@mAiAgAcA}@w@yAwAkBeB_A}@_@]aA{@gAgA_A}@sCmCg@e@_FsEeHsGcA_AqBkBy@u@k@i@g@e@y@o@u@i@g@]}@k@k@c@qAo@kAi@cAc@{@[s@UyBm@}@Qy@Ok@Go@Ko@GoAKiAG{@?sA?kA@u@Bk@DiAF}@Jk@Ho@J_AP}@RcAVmA`@kBt@mAh@_A`@c@Tk@V_@PUJw@\\qAj@iBx@mBx@qAj@s@Zq@VcA\\[JaAZ{@Tw@PWFSDg@J{@Ns@Jq@Hu@JwAH_@BY@c@@k@@}@BgA?iAGqAK_BM_BQoASqEy@gAW}Bi@gCi@wA[eB]wIkBuFmAsAY}A]gB]mEaA}Be@}Cm@}@UeAUcB]yBe@uCm@}@S_AU}@Sa@I}@Qa@Ik@MuBe@kBa@u@O{@QeAUaAQgAWgDs@}@Qs@Qw@Q_ASaDq@_B]sCm@oCi@e@Ie@Mk@Mk@Me@IqA[}@UkCi@_@IcDo@qCe@qFw@_Ee@}AOiEYeDWe@Cw@EwBGqCM{BIuAAyA?kAAo@?q@@o@@q@@g@?e@@U@q@B}@B]@e@@uAD_@@_@@}@C_@?[Cw@C{CKkAAUAMAOMUOOMc@I[Ge@Es@Go@EWCQ?WBS?YBWDYBUD}@PUBWDWDYDWD]D]FW@WBc@@W?gCCmAAY?_@A_AGa@C_@E_@Gc@Ic@Ke@Me@Mc@MkA_@{Bs@i@Qi@Qi@Oi@Mi@Mk@Ke@Eg@Gk@Ck@?e@@c@Be@Dc@Fc@Hc@Je@Ne@Pc@Rk@X{EdCq@\\s@\\q@Zm@Vi@Rg@Pg@He@Fe@De@Be@@e@?i@Ag@Gc@Ec@Ka@Kc@Me@Qa@Qa@Sc@We@[a@[c@_@e@c@c@e@e@i@e@k@e@m@qBqCsBwCq@_A]e@y@kAa@k@W]U[_@g@YY_@c@MMQQUSUQ]WYQQIc@Qa@OQGWIYI]IMCOCOC[E_AIMCeAC}ABkBFgEReDFQ@q@BoBDu@AaAGm@Cc@IeASkAg@s@]SKm@a@m@e@_@_@EEEEg@m@g@o@e@q@]m@c@}@Se@KUQa@Si@[_Ak@_BWu@Qe@Uk@Yo@Ym@Yi@Q[Q[S[QWOSW[]_@_@c@g@g@c@c@gAaA_D_DeC{Bk@g@m@i@i@m@u@cA]i@g@_Ac@}@_@}@[y@_@gAq@yBw@oCc@{ASq@]uAc@wA}@}Cg@cBu@gC[}@a@eAYq@_@y@g@_Ai@{@a@i@i@q@k@m@o@q@e@a@s@e@k@a@{@c@s@]s@Uy@W_@I}@OkAIIAeBGgAGu@Ai@CYCa@Cm@E_@Ga@Gc@G_@Ke@Ms@Sq@Um@Uw@[k@Uy@[w@[u@W}@_@iBs@e@Qm@Se@Om@Qw@Qm@Mu@Mg@Ks@Ii@Em@E]Ao@Aw@?yA@_AFiALS@k@JuATs@Ri@Lk@Re@PSHa@Pk@V_@POHULQLm@\\c@Xc@Zs@h@q@h@cAx@oBdB_Ar@m@h@g@^g@\\_@Tg@Zg@X_@R]Rk@Vg@Rm@T]L{@ZyAh@aBh@_AZk@Rc@P{HhCkAb@kA^i@Rc@TUJi@Xk@^a@Z[XYX]`@Y^Y`@QZ]n@Wf@Wj@Ul@Sn@Qp@Ol@Qx@Kp@EVE\\Iz@Gx@Cb@ARCz@Cr@?v@@|@BdADhAF`BBj@Dz@DdAB|@@d@@l@?h@?|@Ah@AZAVCb@ARALCVCTEd@Gh@M|@Mz@UrAMl@g@~Bk@|Be@hBUz@]lAY`Aa@jAu@rB]`A[x@]z@q@bBKXKR}AtDa@x@{@hBu@vA]n@_@r@GHeAjBeAfBc@r@q@dA}@rAy@jAgDtEsAdBcApAkAxAs@z@_AhAkApAcAhA}@`A{@~@cAdAgAfAkDjDoAlAcC~BcB|AqBhB_BvAyH|Ga@Z{AlA{AlA{AlAsAdAwCzBaBlAyAdAw@j@gAt@gAr@iAr@y@d@w@d@m@ZgAh@u@ZaA\\sAf@oAf@{@^o@Zy@b@{@d@u@d@q@b@m@b@s@h@cAx@o@j@k@h@s@r@y@z@o@r@e@h@o@v@_@d@g@r@q@`Am@`Am@bAg@~@c@x@e@~@[p@]v@a@`A[v@i@tAiA`Dg@tA]~@Yr@[r@[n@Ub@Wd@[h@c@r@k@z@o@z@s@~@Y^]\\YXML]\\QNe@`@c@\\e@\\e@\\e@Zc@V_@Rc@Ti@Vg@VsDjBmEvBwAr@sHbDk@Ti@Rk@Vm@Vo@Vk@Ti@Vg@Pe@Pa@Rq@Tw@Ze@RYHq@VuBt@u@Vk@R[LmBn@eA^_@L}@VaAZ}@XoAZs@RSBg@LiD|@QDqE`AoB^g@Jk@HgG~@iEj@{AP_Ed@c@Di@DoAHK@s@DmCPkCL{@?iA@cBIkAKm@G{@Qy@Q}@Wq@Wo@We@Um@]a@U_@W_@WkAaAa@_@u@s@i@i@e@e@o@s@_BiBm@u@{AoB{AuBiBkC_EaGaC}CwAiBy@cAwBeCwCaDcCcCgCcC}@w@aA{@yBgBcBoAa@YiAu@iBoAkBiA_FuCsGmDwGcDeEqBuCoAyFyBsGaCiBs@kJkDsIaDeBq@cBs@_Aa@kIuDgB{@eAi@gFkCiBcAs@_@qAw@cEcCkAs@kBqA_C_B}CyB_CoB{@q@i@c@s@m@WUaCqB}AuAq@o@iBgB{@y@qBsBkDuD}@cAsAyAeDsDk@k@i@m@_EeEw@w@qCwCk@i@eAcAcAaAi@e@u@s@w@w@a@a@OMo@k@w@s@QOk@i@_Aw@cA}@oAeAkBaBaBuAwD}Cm@e@y@o@m@c@k@c@g@]mBuAc@[UOYS_Am@u@e@i@[w@e@iAm@s@_@{@c@g@Uc@U_@Oi@Wo@Yi@Sq@[g@Sk@Uo@Uk@So@Su@YeA]gA[_AWcAY{@Uo@QuDeA}@WaBg@gFaBkHgCmBs@mCeAwCmAaL_FeF}B_Bo@kBs@mA_@eAWyBi@{Bc@aCa@e@G_AKo@CWEqCMy@Ei@AmBC{ABu@@w@Be@BcEVs@FO@_Ih@gAHkHf@{BPeBLoBNc@FmAJy@Js@HqBV_Fr@o@Jy@LoC`@qJvAcBXu@LQBe@BWBY@[DSD_@L_@L_@L_@PMDYLoAd@oAZoB`@eANcAHs@BY@kAAs@G_@Eq@Mm@Qa@MyAg@qAc@e@OcA]q@Ma@Ig@Gk@Iq@GSAe@Ce@Ce@Ac@?u@?y@De@@_@Ba@Fq@Fa@FmAT[Dg@L[HYJi@NUJ}ChAwAf@aBb@c@L_@Dc@HYF_@Bc@D_@DiADoAFmFTqADaHXiCHu@Dm@BiCPoAHi@DgAD{@D}BFoADcA?m@@[@oA?KHM@c@@u@@eABk@Bo@Dk@FOB_@Hg@D[Fi@HWB}BZ]HaANYDODW@k@?WFWDUBk@Fk@Dk@Fm@@k@BWBk@Bk@?Y?Mq@XErCKlBG|@An@A?iAAWCuBCkCEeCAg@EwBEqBEgCA_AAg@CaACu@Co@AM?MA_@Cg@MDkAZQD" + } + } + ], + "status": "OK" + } + ] + }, + "TollsRoute": { + "properties": { + "overview_polyline": { + "$ref": "#/components/schemas/Polyline" + }, + "bounds": { + "$ref": "#/components/schemas/Bounds" + }, + "legs": { + "items": { + "$ref": "#/components/schemas/TollLeg" + }, + "type": "array", + "title": "Legs" + } + }, + "type": "object", + "required": [ + "overview_polyline", + "bounds", + "legs" + ], + "title": "TollsRoute" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + } + }, + "securitySchemes": { + "PublicAPIKey": { + "type": "apiKey", + "description": "Public key of the project (starts with `woos-`) or an API key (a UUID).", + "in": "query", + "name": "key" + }, + "PrivateApiKey": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "query", + "name": "private_key" + }, + "PrivateApiKeyHeader": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "header", + "name": "X-Api-Key" + } + } + } +} diff --git a/upstream/indoor.json b/upstream/indoor.json new file mode 100644 index 00000000..f490395d --- /dev/null +++ b/upstream/indoor.json @@ -0,0 +1,3917 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Indoor API", + "version": "v8.31.2", + "description": "The Indoor Map API enables you to display plans of your private space.\nThe Indoor Search API is a dedicated search engine for your own indoor data, allowing you to search for points of interest (POI) in your venue by their characteristics or through autocompletion.\nWith the Indoor Distance API, you can calculate the shortest route between two indoor locations, complete with a polyline and roadbook instructions for turn-by-turn navigation with POI. Additionally, you can apply routing profiles to your venue network for specific user groups such as premium customers, staff, or security, and utilize them through the Indoor Distance API." + }, + "paths": { + "/indoor/venues/{venue_id}": { + "get": { + "operationId": "api_routers_indoor_get_venue_by_key", + "summary": "Get Venue By Key", + "parameters": [ + { + "in": "path", + "name": "venue_id", + "schema": { + "description": "ID of the Venue to retrieve.", + "title": "Venue Id", + "type": "string" + }, + "required": true, + "description": "ID of the Venue to retrieve." + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VenueSchema" + } + } + } + } + }, + "description": "Returns a Venue based on the ID given.\n\n**Rate limit**: `20/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/indoor/venues/west_pal?key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/indoor/venues/west_pal?key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/indoor/venues/west_pal?key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ] + } + }, + "/indoor/venues": { + "get": { + "operationId": "api_routers_indoor_get_venues_by_key", + "summary": "Get Venues By Key", + "parameters": [ + { + "in": "query", + "name": "sort_by", + "schema": { + "allOf": [ + { + "enum": [ + "created_at", + "updated_at", + "name" + ], + "title": "SortingInputSchema", + "type": "string" + } + ], + "description": "The order in which the venues should be retrieved" + }, + "required": false, + "description": "The order in which the venues should be retrieved" + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/VenueListSchema" + }, + "title": "Response", + "type": "array" + } + } + } + } + }, + "description": "Returns a list of Venues associated with the project of the key used to authenticate the request.\n\n**Rate limit**: `20/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/indoor/venues?key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/indoor/venues?key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/indoor/venues?key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ] + } + }, + "/indoor/style": { + "get": { + "operationId": "api_routers_indoor_get_indoor_style", + "summary": "Get Indoor Style", + "parameters": [ + { + "in": "query", + "name": "theme", + "schema": { + "description": "The theme to apply to customize the style", + "example": "woosmap_default", + "title": "Theme", + "type": "string" + }, + "required": false, + "description": "The theme to apply to customize the style", + "example": "woosmap_default" + }, + { + "in": "query", + "name": "language", + "schema": { + "default": "en", + "description": "A supported language as an ISO 639-1 2 letter code.", + "title": "Language", + "type": "string" + }, + "required": false, + "description": "A supported language as an ISO 639-1 2 letter code." + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "title": "Response", + "type": "object" + } + } + } + } + }, + "description": "Returns the style layers.\n\n**Rate limit**: `20/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/indoor/style?language=en&theme=woosmap_default&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/indoor/style?language=en&theme=woosmap_default&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/indoor/style?language=en&theme=woosmap_default&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ] + } + }, + "/indoor/distancematrix/{venue_id}": { + "get": { + "operationId": "api_routers_indoor_distance_matrix", + "summary": "Distance Matrix", + "parameters": [ + { + "in": "path", + "name": "venue_id", + "schema": { + "description": "ID of the venue", + "title": "Venue Id", + "type": "string" + }, + "required": true, + "description": "ID of the venue" + }, + { + "in": "query", + "name": "origins", + "schema": { + "description": "A string with a list of origins seperated by `|`. Origins can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "1.2,2.1,1|exit_1|1.3,3.1,2|ref:main_exit", + "title": "Origins", + "type": "string" + }, + "required": true, + "description": "A string with a list of origins seperated by `|`. Origins can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "1.2,2.1,1|exit_1|1.3,3.1,2|ref:main_exit" + }, + { + "in": "query", + "name": "destinations", + "schema": { + "description": "A string with a list of destinations seperated by `|`. Destinations can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "1.2,2.1,1|exit_1|1.3,3.1,2|ref:main_exit", + "title": "Destinations", + "type": "string" + }, + "required": true, + "description": "A string with a list of destinations seperated by `|`. Destinations can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "1.2,2.1,1|exit_1|1.3,3.1,2|ref:main_exit" + }, + { + "in": "query", + "name": "language", + "schema": { + "default": "en", + "description": "A supported language as an ISO 639-1, 2 letter code.", + "title": "Language", + "type": "string" + }, + "required": false, + "description": "A supported language as an ISO 639-1, 2 letter code." + }, + { + "in": "query", + "name": "routing_profile", + "schema": { + "default": "", + "description": "The routing profile to use to calculate the path (depends on the modes which were used to digitize the venue)", + "title": "Routing Profile", + "type": "string" + }, + "required": false, + "description": "The routing profile to use to calculate the path (depends on the modes which were used to digitize the venue)" + }, + { + "in": "query", + "name": "units", + "schema": { + "allOf": [ + { + "enum": [ + "metric", + "imperial" + ], + "title": "UnitSystem", + "type": "string" + } + ], + "default": "metric", + "description": "Unit System to use for response" + }, + "required": false, + "description": "Unit System to use for response" + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DistanceMatrixCollection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + } + }, + "description": "Get distances and durations for a matrix of origins and destinations, based on the recommended route between start and end points for a specified travel mode.\nThe API returns information consisting of rows containing distance and duration values for each pair of start and end point.\nThe returned distances are designed to be used to find and sort multiple assets by road distance.\nDuration values are provided as complementary info.\n\n**Rate limit**: `20/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ] + } + }, + "/indoor/directions/{venue_id}": { + "get": { + "operationId": "api_routers_indoor_directions", + "summary": "Directions", + "parameters": [ + { + "in": "path", + "name": "venue_id", + "schema": { + "description": "ID of the Venue", + "title": "Venue Id", + "type": "string" + }, + "required": true, + "description": "ID of the Venue" + }, + { + "in": "query", + "name": "origin", + "schema": { + "description": "A string defining the origin of the route, in the format of `lat,lng,level`, `poi_id` (identifier of a POI), or `ref:poi_ref` (ref of a POI starting with 'ref:').\n\nExamples:\n- `lat,lng,level`: `48.8818546,2.3572283,0`\n- `poi`: `123456`\n- `ref`: `ref:entrance`", + "example": "48.8818546,2.3572283,0", + "title": "Origin", + "type": "string" + }, + "required": true, + "description": "A string defining the origin of the route, in the format of `lat,lng,level`, `poi_id` (identifier of a POI), or `ref:poi_ref` (ref of a POI starting with 'ref:').\n\nExamples:\n- `lat,lng,level`: `48.8818546,2.3572283,0`\n- `poi`: `123456`\n- `ref`: `ref:entrance`", + "example": "48.8818546,2.3572283,0" + }, + { + "in": "query", + "name": "destination", + "schema": { + "description": "A string defining the destination of the route, in the format of `lat,lng,level`, `poi_id` (identifier of a POI), or `ref:poi_ref` (ref of a POI starting with 'ref:').\n\nExamples:\n- `lat,lng,level`: `48.8818546,2.3572283,0`\n- `poi`: `123456`\n- `ref`: `ref:entrance`", + "example": "123456", + "title": "Destination", + "type": "string" + }, + "required": true, + "description": "A string defining the destination of the route, in the format of `lat,lng,level`, `poi_id` (identifier of a POI), or `ref:poi_ref` (ref of a POI starting with 'ref:').\n\nExamples:\n- `lat,lng,level`: `48.8818546,2.3572283,0`\n- `poi`: `123456`\n- `ref`: `ref:entrance`", + "example": "123456" + }, + { + "in": "query", + "name": "language", + "schema": { + "default": "en", + "description": "A supported language as an ISO 639-1 2 letter code.", + "title": "Language", + "type": "string" + }, + "required": false, + "description": "A supported language as an ISO 639-1 2 letter code." + }, + { + "in": "query", + "name": "units", + "schema": { + "allOf": [ + { + "enum": [ + "metric", + "imperial" + ], + "title": "UnitSystem", + "type": "string" + } + ], + "default": "metric", + "description": "Unit System to use for response" + }, + "required": false, + "description": "Unit System to use for response" + }, + { + "in": "query", + "name": "waypoints", + "schema": { + "default": "", + "description": "A list of points by which the route should pass seperated by `|`. Waypoints can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "48.8818546,2.3572283,0|123456|48.8818546,2.3572283,0|ref:main_exit", + "title": "Waypoints", + "type": "string" + }, + "required": false, + "description": "A list of points by which the route should pass seperated by `|`. Waypoints can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "48.8818546,2.3572283,0|123456|48.8818546,2.3572283,0|ref:main_exit" + }, + { + "in": "query", + "name": "optimize", + "schema": { + "default": false, + "description": "If true and set with the waypoints parameter. The provided route is optimized by rearranging the waypoints in a more efficient order", + "title": "Optimize", + "type": "boolean" + }, + "required": false, + "description": "If true and set with the waypoints parameter. The provided route is optimized by rearranging the waypoints in a more efficient order" + }, + { + "in": "query", + "name": "mode", + "schema": { + "description": "The mode to use to calculate the path (depends on the modes which were used to digitize the venue)", + "title": "Mode", + "type": "string" + }, + "required": false, + "description": "The mode to use to calculate the path (depends on the modes which were used to digitize the venue)" + }, + { + "in": "query", + "name": "avoid_in", + "schema": { + "description": "A list of Bounding Boxes which the routing should avoid seperated by `|`. A Bounding Box has a format of `level;lat,lng;lat,lng;lat,lng;lat,lng;`", + "example": "1;48.8818546,2.3572283;48.8818547,2.3572282;48.8818548,2.3572281;48.8818549,2.3572280", + "title": "Avoid In", + "type": "string" + }, + "required": false, + "description": "A list of Bounding Boxes which the routing should avoid seperated by `|`. A Bounding Box has a format of `level;lat,lng;lat,lng;lat,lng;lat,lng;`", + "example": "1;48.8818546,2.3572283;48.8818547,2.3572282;48.8818548,2.3572281;48.8818549,2.3572280" + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RouteCollection" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + } + }, + "description": "Returns the directions to go from an Origin to a Destination.\nRouting Configuration must be done before this endpoint will work.\n\n**Rate limit**: `20/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/indoor/directions/west_pal?language=en&units=metric&origin=3623024&destination=3625106&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/indoor/directions/west_pal?language=en&units=metric&origin=3623024&destination=3625106&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/indoor/directions/west_pal?language=en&units=metric&origin=3623024&destination=3625106&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ] + } + }, + "/indoor/venues/{venue_id}/pois/search": { + "get": { + "operationId": "api_routers_indoor_search_venue_pois_by_key", + "summary": "Search Venue Pois By Key", + "parameters": [ + { + "in": "path", + "name": "venue_id", + "schema": { + "description": "ID of the Venue", + "title": "Venue Id", + "type": "string" + }, + "required": true, + "description": "ID of the Venue" + }, + { + "in": "query", + "name": "items_by_page", + "schema": { + "default": 0, + "description": "Number of items per page. A value of 0 means no pagination.", + "title": "Items By Page", + "type": "integer" + }, + "required": false, + "description": "Number of items per page. A value of 0 means no pagination." + }, + { + "in": "query", + "name": "page", + "schema": { + "default": 0, + "description": "Page number. 0 being the first page.", + "title": "Page", + "type": "integer" + }, + "required": false, + "description": "Page number. 0 being the first page." + }, + { + "in": "query", + "name": "from_location", + "schema": { + "description": "A string with the format lat,lng,level", + "example": "48.8818546,2.3572283,0", + "title": "From Location", + "type": "string" + }, + "required": false, + "description": "A string with the format lat,lng,level", + "example": "48.8818546,2.3572283,0" + }, + { + "in": "query", + "name": "q", + "schema": { + "description": "Search string. If not passed then all features will be listed alphabetically", + "title": "Q", + "type": "string" + }, + "required": false, + "description": "Search string. If not passed then all features will be listed alphabetically" + }, + { + "in": "query", + "name": "extended", + "schema": { + "description": "Option to search even not searchable pois (extended=full)", + "example": "full", + "title": "Extended", + "type": "string" + }, + "required": false, + "description": "Option to search even not searchable pois (extended=full)", + "example": "full" + }, + { + "in": "query", + "name": "level", + "schema": { + "description": "Filter by level.", + "title": "Level", + "type": "integer" + }, + "required": false, + "description": "Filter by level." + }, + { + "in": "query", + "name": "building", + "schema": { + "description": "Filter by building (use `undefined` to find POIs not associated with a building.).", + "title": "Building", + "type": "string" + }, + "required": false, + "description": "Filter by building (use `undefined` to find POIs not associated with a building.)." + }, + { + "in": "query", + "name": "category", + "schema": { + "description": "Filter by category.", + "title": "Category", + "type": "string" + }, + "required": false, + "description": "Filter by category." + }, + { + "in": "query", + "name": "ref", + "schema": { + "description": "Filter by a comma seperated list of POI Refs.", + "example": "ref:main_entrance,ref:side_entrance", + "title": "Ref", + "type": "string" + }, + "required": false, + "description": "Filter by a comma seperated list of POI Refs.", + "example": "ref:main_entrance,ref:side_entrance" + }, + { + "in": "query", + "name": "language", + "schema": { + "default": "en", + "description": "A supported language as an ISO 639-1 2 letter code.", + "title": "Language", + "type": "string" + }, + "required": false, + "description": "A supported language as an ISO 639-1 2 letter code." + }, + { + "in": "query", + "name": "advanced_filter", + "schema": { + "description": "Filter by complex queries on properties (ex: indoor:=\"room\" OR door:=\"yes\").", + "title": "Advanced Filter", + "type": "string" + }, + "required": false, + "description": "Filter by complex queries on properties (ex: indoor:=\"room\" OR door:=\"yes\")." + }, + { + "in": "query", + "name": "id", + "schema": { + "description": "Filter by a comma seperated list of POI IDs.", + "example": "1234,4321,9876", + "title": "Id", + "type": "string" + }, + "required": false, + "description": "Filter by a comma seperated list of POI IDs.", + "example": "1234,4321,9876" + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchPagination" + } + } + } + } + }, + "description": "Full text search of the features of a venue using name or description\n\n**Rate limit**: `30/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/indoor/venues/west_pal/pois/search?id=3623459&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/indoor/venues/west_pal/pois/search?id=3623459&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/indoor/venues/west_pal/pois/search?id=3623459&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ] + } + }, + "/indoor/venues/{venue_id}/pois/autocomplete": { + "get": { + "operationId": "api_routers_indoor_autocomplete_venue_pois_by_key", + "summary": "Autocomplete Venue Pois By Key", + "parameters": [ + { + "in": "path", + "name": "venue_id", + "schema": { + "description": "ID of the venue", + "title": "Venue Id", + "type": "string" + }, + "required": true, + "description": "ID of the venue" + }, + { + "in": "query", + "name": "items_by_page", + "schema": { + "default": 0, + "description": "Number of items per page. A value of 0 means no pagination.", + "title": "Items By Page", + "type": "integer" + }, + "required": false, + "description": "Number of items per page. A value of 0 means no pagination." + }, + { + "in": "query", + "name": "page", + "schema": { + "default": 0, + "description": "Page number. 0 being the first page.", + "title": "Page", + "type": "integer" + }, + "required": false, + "description": "Page number. 0 being the first page." + }, + { + "in": "query", + "name": "from_location", + "schema": { + "description": "A string with the format lat,lng,level", + "example": "48.8818546,2.3572283,0", + "title": "From Location", + "type": "string" + }, + "required": false, + "description": "A string with the format lat,lng,level", + "example": "48.8818546,2.3572283,0" + }, + { + "in": "query", + "name": "q", + "schema": { + "description": "Search string. If not passed then all features will be listed alphabetically", + "title": "Q", + "type": "string" + }, + "required": false, + "description": "Search string. If not passed then all features will be listed alphabetically" + }, + { + "in": "query", + "name": "extended", + "schema": { + "description": "Option to search even not searchable pois (extended=full)", + "example": "full", + "title": "Extended", + "type": "string" + }, + "required": false, + "description": "Option to search even not searchable pois (extended=full)", + "example": "full" + }, + { + "in": "query", + "name": "level", + "schema": { + "description": "Filter by level.", + "title": "Level", + "type": "integer" + }, + "required": false, + "description": "Filter by level." + }, + { + "in": "query", + "name": "building", + "schema": { + "description": "Filter by building (use `undefined` to find POIs not associated with a building.).", + "title": "Building", + "type": "string" + }, + "required": false, + "description": "Filter by building (use `undefined` to find POIs not associated with a building.)." + }, + { + "in": "query", + "name": "category", + "schema": { + "description": "Filter by category.", + "title": "Category", + "type": "string" + }, + "required": false, + "description": "Filter by category." + }, + { + "in": "query", + "name": "ref", + "schema": { + "description": "Filter by a comma seperated list of POI Refs.", + "example": "ref:main_entrance,ref:side_entrance", + "title": "Ref", + "type": "string" + }, + "required": false, + "description": "Filter by a comma seperated list of POI Refs.", + "example": "ref:main_entrance,ref:side_entrance" + }, + { + "in": "query", + "name": "language", + "schema": { + "default": "en", + "description": "A supported language as an ISO 639-1 2 letter code.", + "title": "Language", + "type": "string" + }, + "required": false, + "description": "A supported language as an ISO 639-1 2 letter code." + }, + { + "in": "query", + "name": "advanced_filter", + "schema": { + "description": "Filter by complex queries on properties (ex: indoor:=\"room\" OR door:=\"yes\").", + "title": "Advanced Filter", + "type": "string" + }, + "required": false, + "description": "Filter by complex queries on properties (ex: indoor:=\"room\" OR door:=\"yes\")." + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutocompletePagination" + } + } + } + } + }, + "description": "Autocomplete text search of the features of a venue using a name or description\n\n**Rate limit**: `20/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/indoor/venues/west_pal/pois/autocomplete?q=cham&language=en&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/indoor/venues/west_pal/pois/autocomplete?q=cham&language=en&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/indoor/venues/west_pal/pois/autocomplete?q=cham&language=en&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ] + } + }, + "/indoor/venues/{venue_id}/features/{feature_id}": { + "get": { + "operationId": "api_routers_indoor_get_feature_by_key", + "summary": "Get Feature By Key", + "parameters": [ + { + "in": "path", + "name": "venue_id", + "schema": { + "description": "ID of the venue", + "title": "Venue Id", + "type": "string" + }, + "required": true, + "description": "ID of the venue" + }, + { + "in": "path", + "name": "feature_id", + "schema": { + "description": "ID of the feature", + "title": "Feature Id", + "type": "integer" + }, + "required": true, + "description": "ID of the feature" + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponseSchema" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SingleIndoorFeatureSchema" + } + } + } + } + }, + "description": "Returns a single feature using its ID.\n\n**Rate limit**: `20/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ], + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/indoor/venues/west_pal/features/3623459?key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/indoor/venues/west_pal/features/3623459?key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/indoor/venues/west_pal/features/3623459?key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ] + } + }, + "/indoor/venues/{venue_id}/tiles/{z}/{x}/{y}.pbf": { + "get": { + "operationId": "api_routers_indoor_tiles_by_key", + "summary": "Tiles By Key", + "parameters": [ + { + "in": "path", + "name": "venue_id", + "schema": { + "description": "ID of the venue", + "title": "Venue Id", + "type": "string" + }, + "required": true, + "description": "ID of the venue" + }, + { + "in": "path", + "name": "x", + "schema": { + "description": "X coordinate of the tile", + "title": "X", + "type": "integer" + }, + "required": true, + "description": "X coordinate of the tile" + }, + { + "in": "path", + "name": "y", + "schema": { + "description": "Y coordinate of the tile", + "title": "Y", + "type": "integer" + }, + "required": true, + "description": "Y coordinate of the tile" + }, + { + "in": "path", + "name": "z", + "schema": { + "description": "Zoom level", + "title": "Z", + "type": "integer" + }, + "required": true, + "description": "Zoom level" + }, + { + "in": "query", + "name": "advanced_filter", + "schema": { + "description": "Filter POI labels by advanced filter.", + "title": "Advanced Filter", + "type": "string" + }, + "required": false, + "description": "Filter POI labels by advanced filter." + }, + { + "in": "query", + "name": "disable_zoom_min", + "schema": { + "default": false, + "description": "Disable the zoom_min for POIs.", + "title": "Disable Zoom Min", + "type": "boolean" + }, + "required": false, + "description": "Disable the zoom_min for POIs." + } + ], + "responses": { + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "402": { + "description": "Payment Required", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "description": "A more detailed explanation on what went wrong.", + "title": "Detail", + "type": "string" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/json": { + "schema": { + "properties": { + "detail": { + "description": "The validation errors.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Detail", + "type": "array" + }, + "context": { + "additionalProperties": true, + "description": "Context", + "title": "Context", + "type": "object" + } + }, + "required": [ + "detail", + "context" + ], + "title": "ValidationErrorSchema", + "type": "object" + } + } + } + }, + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "format": "binary", + "title": "Response", + "type": "string" + } + } + } + } + }, + "description": "Returns a tile for the venue.\n\n**Rate limit**: `50/1s`", + "tags": [ + "Indoor API" + ], + "security": [ + { + "PrivateKeyAuth": [] + }, + { + "PrivateKeyHeaderAuth": [] + }, + { + "PublicKeyAuth": [] + } + ] + } + } + }, + "components": { + "schemas": { + "ErrorResponseSchema": { + "properties": { + "detail": { + "title": "Detail", + "type": "string" + } + }, + "required": [ + "detail" + ], + "title": "ErrorResponseSchema", + "type": "object" + }, + "Building": { + "properties": { + "ref": { + "description": "Reference to identify Building", + "title": "Ref", + "type": "string" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Name of the Building", + "title": "Name" + }, + "localized_name": { + "additionalProperties": { + "type": "string" + }, + "default": {}, + "description": "Translated names of the Building", + "title": "Localized Name", + "type": "object" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Building Description", + "title": "Description" + }, + "opening_hours": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Building Opening Hours", + "title": "Opening Hours" + }, + "logo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "", + "title": "Logo" + }, + "cover": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "", + "title": "Cover" + }, + "levels": { + "description": "Levels associated with the Building", + "items": { + "$ref": "#/components/schemas/Level" + }, + "title": "Levels", + "type": "array" + } + }, + "required": [ + "ref", + "levels" + ], + "title": "Building", + "type": "object" + }, + "Level": { + "properties": { + "level": { + "description": "Floor level as a number", + "title": "Level", + "type": "integer" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Name of the floor level", + "title": "Name" + }, + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Reference to identify floor level", + "title": "Ref" + }, + "bbox": { + "description": "Bounding Box of floor level", + "items": { + "type": "number" + }, + "title": "Bbox", + "type": "array" + } + }, + "required": [ + "level", + "bbox" + ], + "title": "Level", + "type": "object" + }, + "VenueSchema": { + "example": { + "bbox": [ + -0.1258015, + 51.4981306, + -0.1236527, + 51.5008191 + ], + "buildings": [ + { + "cover": null, + "description": null, + "levels": [ + { + "bbox": [ + -0.1258015, + 51.4981306, + -0.1236527, + 51.5008191 + ], + "level": 1, + "name": "Palace of Westminster", + "ref": "Ground" + } + ], + "localized_name": {}, + "logo": null, + "name": "Palace of Westminster", + "opening_hours": null, + "ref": "Palace of Westminster" + } + ], + "categories": [], + "languages": [], + "levels": [ + { + "bbox": [ + -0.1258015, + 51.4981306, + -0.1236527, + 51.5008191 + ], + "level": 1, + "name": "Palace of Westminster", + "ref": "Ground" + } + ], + "name": "Westminster palace", + "routing_profiles": [], + "updated_at": "2023-07-17T13:11:32.267Z", + "venue_id": "west_pal" + }, + "properties": { + "venue_id": { + "description": "ID of the Venue", + "title": "Venue Id", + "type": "string" + }, + "name": { + "description": "Name of the Venue", + "title": "Name", + "type": "string" + }, + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Bounding Box of Venue", + "title": "Bbox" + }, + "levels": { + "default": [], + "description": "Information on each level of the venue", + "items": { + "$ref": "#/components/schemas/Level" + }, + "title": "Levels", + "type": "array" + }, + "routing_profiles": { + "default": [], + "description": "Available routing profiles for the venue", + "items": { + "type": "string" + }, + "title": "Routing Profiles", + "type": "array" + }, + "categories": { + "default": [], + "description": "", + "items": { + "type": "string" + }, + "title": "Categories", + "type": "array" + }, + "buildings": { + "default": [], + "description": "Buildings present at the venue", + "items": { + "$ref": "#/components/schemas/Building" + }, + "title": "Buildings", + "type": "array" + }, + "languages": { + "description": "Language translations available for the venue", + "items": { + "type": "string" + }, + "title": "Languages", + "type": "array" + }, + "updated_at": { + "description": "When this venue was last updated", + "format": "date-time", + "title": "Updated At", + "type": "string" + } + }, + "required": [ + "venue_id", + "name", + "bbox", + "languages", + "updated_at" + ], + "title": "VenueSchema", + "type": "object" + }, + "SortingInputSchema": { + "enum": [ + "created_at", + "updated_at", + "name" + ], + "title": "SortingInputSchema", + "type": "string" + }, + "VenueListSchema": { + "example": [ + { + "bbox": [ + -0.1258015, + 51.4981306, + -0.1236527, + 51.5008191 + ], + "name": "Westminster palace", + "venue_id": "west_pal" + }, + { + "bbox": [ + 3.9215275, + 43.6062712, + 3.922097, + 43.606972 + ], + "name": "Woosmap HQ", + "venue_id": "woosmap_wgs_office" + }, + { + "bbox": [ + 2.3537419, + 48.87969358511, + 2.3584085, + 48.8831854 + ], + "name": "Gare Du Nord", + "venue_id": "woosmap_gdn" + } + ], + "properties": { + "venue_id": { + "description": "ID of the Venue", + "title": "Venue Id", + "type": "string" + }, + "name": { + "description": "Name of the Venue", + "title": "Name", + "type": "string" + }, + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Bounding Box of Venue", + "title": "Bbox" + } + }, + "required": [ + "venue_id", + "name", + "bbox" + ], + "title": "VenueListSchema", + "type": "object" + }, + "DistanceMatrixDirectionsIn": { + "properties": { + "origins": { + "description": "A string with a list of origins seperated by `|`. Origins can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "1.2,2.1,1|exit_1|1.3,3.1,2|ref:main_exit", + "title": "Origins", + "type": "string" + }, + "destinations": { + "description": "A string with a list of destinations seperated by `|`. Destinations can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "1.2,2.1,1|exit_1|1.3,3.1,2|ref:main_exit", + "title": "Destinations", + "type": "string" + } + }, + "required": [ + "origins", + "destinations" + ], + "title": "DistanceMatrixDirectionsIn", + "type": "object" + }, + "UnitSystem": { + "enum": [ + "metric", + "imperial" + ], + "title": "UnitSystem", + "type": "string" + }, + "Distance": { + "properties": { + "value": { + "description": "Distance in metres", + "title": "Value", + "type": "number" + }, + "text": { + "description": "Distance as text based response with unit type", + "title": "Text", + "type": "string" + } + }, + "required": [ + "value", + "text" + ], + "title": "Distance", + "type": "object" + }, + "DistanceMatrixCollection": { + "example": { + "rows": [], + "status": "OK" + }, + "properties": { + "status": { + "description": "A string to indicate the success of the request", + "title": "Status", + "type": "string" + }, + "rows": { + "items": { + "$ref": "#/components/schemas/DistanceMatrixRow" + }, + "title": "Rows", + "type": "array" + } + }, + "required": [ + "status", + "rows" + ], + "title": "DistanceMatrixCollection", + "type": "object" + }, + "DistanceMatrixElement": { + "properties": { + "status": { + "description": "A string to indicate if a path was found or not", + "title": "Status", + "type": "string" + }, + "duration": { + "$ref": "#/components/schemas/Duration" + }, + "distance": { + "$ref": "#/components/schemas/Distance" + } + }, + "required": [ + "status", + "duration", + "distance" + ], + "title": "DistanceMatrixElement", + "type": "object" + }, + "DistanceMatrixRow": { + "properties": { + "elements": { + "items": { + "$ref": "#/components/schemas/DistanceMatrixElement" + }, + "title": "Elements", + "type": "array" + } + }, + "required": [ + "elements" + ], + "title": "DistanceMatrixRow", + "type": "object" + }, + "Duration": { + "properties": { + "value": { + "description": "Duration in seconds", + "title": "Value", + "type": "number" + }, + "text": { + "description": "Duration as text based response with unit type", + "title": "Text", + "type": "string" + } + }, + "required": [ + "value", + "text" + ], + "title": "Duration", + "type": "object" + }, + "DirectionsIn": { + "properties": { + "origin": { + "description": "A string defining the origin of the route, in the format of `lat,lng,level`, `poi_id` (identifier of a POI), or `ref:poi_ref` (ref of a POI starting with 'ref:').\n\nExamples:\n- `lat,lng,level`: `48.8818546,2.3572283,0`\n- `poi`: `123456`\n- `ref`: `ref:entrance`", + "example": "48.8818546,2.3572283,0", + "title": "Origin", + "type": "string" + }, + "destination": { + "description": "A string defining the destination of the route, in the format of `lat,lng,level`, `poi_id` (identifier of a POI), or `ref:poi_ref` (ref of a POI starting with 'ref:').\n\nExamples:\n- `lat,lng,level`: `48.8818546,2.3572283,0`\n- `poi`: `123456`\n- `ref`: `ref:entrance`", + "example": "123456", + "title": "Destination", + "type": "string" + } + }, + "required": [ + "origin", + "destination" + ], + "title": "DirectionsIn", + "type": "object" + }, + "WaypointsIn": { + "properties": { + "waypoints": { + "default": "", + "description": "A list of points by which the route should pass seperated by `|`. Waypoints can be of the format: `lat,lng,level`, `poi_id`, `ref:poi_ref`", + "example": "48.8818546,2.3572283,0|123456|48.8818546,2.3572283,0|ref:main_exit", + "title": "Waypoints", + "type": "string" + } + }, + "title": "WaypointsIn", + "type": "object" + }, + "Instruction": { + "properties": { + "summary": { + "title": "Summary", + "type": "string" + }, + "instruction_type": { + "title": "Instruction Type", + "type": "string" + } + }, + "required": [ + "summary", + "instruction_type" + ], + "title": "Instruction", + "type": "object" + }, + "LatLngLevel": { + "properties": { + "lat": { + "title": "Lat", + "type": "number" + }, + "lng": { + "title": "Lng", + "type": "number" + }, + "level": { + "title": "Level", + "type": "integer" + } + }, + "required": [ + "lat", + "lng", + "level" + ], + "title": "LatLngLevel", + "type": "object" + }, + "Leg": { + "properties": { + "distance": { + "$ref": "#/components/schemas/Distance", + "description": "Distance of this Leg" + }, + "duration": { + "$ref": "#/components/schemas/Duration", + "description": "Duration of this Leg" + }, + "start_location": { + "$ref": "#/components/schemas/LatLngLevel", + "description": "Starting Location of this Leg, as a Lat,Lng pair with a floor level number." + }, + "end_location": { + "$ref": "#/components/schemas/LatLngLevel", + "description": "End Location of this Leg, as a Lat,Lng pair with a floor level number." + }, + "steps": { + "description": "List of different steps of this Leg", + "items": { + "$ref": "#/components/schemas/Step" + }, + "title": "Steps", + "type": "array" + }, + "waypoint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "If waypoints were provided, this gives the input waypoint for this leg.", + "title": "Waypoint" + } + }, + "required": [ + "distance", + "duration", + "start_location", + "end_location", + "steps" + ], + "title": "Leg", + "type": "object" + }, + "Route": { + "properties": { + "bounds": { + "description": "Bounding box of the route", + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "title": "Bounds", + "type": "array" + }, + "legs": { + "description": "List of different legs of the journey", + "items": { + "$ref": "#/components/schemas/Leg" + }, + "title": "Legs", + "type": "array" + } + }, + "required": [ + "bounds", + "legs" + ], + "title": "Route", + "type": "object" + }, + "RouteCollection": { + "example": { + "routes": [ + { + "bounds": [ + -0.12493997331, + 51.498230882255, + -0.12456220772511746, + 51.49992534993494 + ], + "legs": [ + { + "distance": { + "text": "217 meters", + "value": 217.48 + }, + "duration": { + "text": "218 seconds", + "value": 218 + }, + "end_location": { + "lat": 51.499924944345, + "level": 1, + "lng": -0.12461392044974706 + }, + "start_location": { + "lat": 51.498230882255, + "level": 1, + "lng": -0.12456220772511746 + }, + "steps": [ + { + "bearing_end": -84.2851734177303, + "bearing_start": -84.2851734177303, + "distance": { + "text": "2 meters", + "value": 2.07 + }, + "duration": { + "text": "2 seconds", + "value": 2 + }, + "end_location": { + "lat": 51.4982349155, + "level": 1, + "lng": -0.12461111274 + }, + "instruction": { + "instruction_type": "walk_straight_walk_past", + "summary": "Walk straight past Toilets" + }, + "poi_id": 3623024, + "polyline": [ + [ + -0.12458141958, + 51.49823306561 + ], + [ + -0.12461111274, + 51.4982349155 + ] + ], + "routing_profiles": [], + "start_location": { + "lat": 51.49823306561, + "level": 1, + "lng": -0.12458141958 + } + }, + { + "bearing_end": -81.48387948754326, + "bearing_start": -84.28520875361633, + "distance": { + "text": "1 meters", + "value": 1.47 + }, + "duration": { + "text": "2 seconds", + "value": 2 + }, + "end_location": { + "lat": 51.49823646981, + "level": 1, + "lng": -0.12463215818 + }, + "instruction": { + "instruction_type": "walk_straight_walk_past", + "summary": "Walk straight past Lord Chamberlain's Private Office" + }, + "poi_id": 3624060, + "polyline": [ + [ + -0.12461111274, + 51.4982349155 + ], + [ + -0.12462429286, + 51.49823573662 + ], + [ + -0.12463215818, + 51.49823646981 + ] + ], + "routing_profiles": [], + "start_location": { + "lat": 51.4982349155, + "level": 1, + "lng": -0.12461111274 + } + } + ] + } + ] + } + ], + "status": "ok" + }, + "properties": { + "status": { + "const": "ok", + "default": "ok", + "title": "Status", + "type": "string" + }, + "routes": { + "items": { + "$ref": "#/components/schemas/Route" + }, + "title": "Routes", + "type": "array" + } + }, + "required": [ + "routes" + ], + "title": "RouteCollection", + "type": "object" + }, + "Step": { + "properties": { + "distance": { + "$ref": "#/components/schemas/Distance", + "description": "Distance of this Step" + }, + "duration": { + "$ref": "#/components/schemas/Duration", + "description": "Duration of this Step" + }, + "poi_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "If a POI exists, its ID is given.", + "title": "Poi Id" + }, + "bearing_start": { + "description": "TODO", + "title": "Bearing Start", + "type": "number" + }, + "bearing_end": { + "description": "TODO", + "title": "Bearing End", + "type": "number" + }, + "start_location": { + "$ref": "#/components/schemas/LatLngLevel", + "description": "Starting Location of this Step, as a Lat,Lng pair with a floor level number." + }, + "end_location": { + "$ref": "#/components/schemas/LatLngLevel", + "description": "End Location of this Step, as a Lat,Lng pair with a floor level number." + }, + "polyline": { + "description": "TODO", + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "title": "Polyline", + "type": "array" + }, + "instruction": { + "anyOf": [ + { + "$ref": "#/components/schemas/Instruction" + }, + { + "type": "null" + } + ], + "description": "A text based instruction for this step" + }, + "routing_profiles": { + "default": [], + "items": { + "type": "string" + }, + "title": "Routing Profiles", + "type": "array" + } + }, + "required": [ + "distance", + "duration", + "bearing_start", + "bearing_end", + "start_location", + "end_location", + "polyline" + ], + "title": "Step", + "type": "object" + }, + "SearchKeyInputSchema": { + "properties": { + "items_by_page": { + "default": 0, + "description": "Number of items per page. A value of 0 means no pagination.", + "title": "Items By Page", + "type": "integer" + }, + "page": { + "default": 0, + "description": "Page number. 0 being the first page.", + "title": "Page", + "type": "integer" + }, + "from_location": { + "description": "A string with the format lat,lng,level", + "example": "48.8818546,2.3572283,0", + "title": "From Location", + "type": "string" + }, + "q": { + "description": "Search string. If not passed then all features will be listed alphabetically", + "title": "Q", + "type": "string" + }, + "extended": { + "description": "Option to search even not searchable pois (extended=full)", + "example": "full", + "title": "Extended", + "type": "string" + }, + "level": { + "description": "Filter by level.", + "title": "Level", + "type": "integer" + }, + "building": { + "description": "Filter by building (use `undefined` to find POIs not associated with a building.).", + "title": "Building", + "type": "string" + }, + "category": { + "description": "Filter by category.", + "title": "Category", + "type": "string" + }, + "ref": { + "description": "Filter by a comma seperated list of POI Refs.", + "example": "ref:main_entrance,ref:side_entrance", + "title": "Ref", + "type": "string" + }, + "language": { + "default": "en", + "description": "A supported language as an ISO 639-1 2 letter code.", + "title": "Language", + "type": "string" + }, + "advanced_filter": { + "description": "Filter by complex queries on properties (ex: indoor:=\"room\" OR door:=\"yes\").", + "title": "Advanced Filter", + "type": "string" + }, + "id": { + "description": "Filter by a comma seperated list of POI IDs.", + "example": "1234,4321,9876", + "title": "Id", + "type": "string" + } + }, + "title": "SearchKeyInputSchema", + "type": "object" + }, + "GeometryCollection": { + "description": "GeometryCollection Model", + "properties": { + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "maxItems": 6, + "minItems": 6, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Bbox" + }, + "type": { + "const": "GeometryCollection", + "title": "Type", + "type": "string" + }, + "geometries": { + "items": { + "discriminator": { + "mapping": { + "GeometryCollection": "#/components/schemas/GeometryCollection", + "LineString": "#/components/schemas/LineString", + "MultiLineString": "#/components/schemas/MultiLineString", + "MultiPoint": "#/components/schemas/MultiPoint", + "MultiPolygon": "#/components/schemas/MultiPolygon", + "Point": "#/components/schemas/Point", + "Polygon": "#/components/schemas/Polygon" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/Point" + }, + { + "$ref": "#/components/schemas/MultiPoint" + }, + { + "$ref": "#/components/schemas/LineString" + }, + { + "$ref": "#/components/schemas/MultiLineString" + }, + { + "$ref": "#/components/schemas/Polygon" + }, + { + "$ref": "#/components/schemas/MultiPolygon" + }, + { + "$ref": "#/components/schemas/GeometryCollection" + } + ] + }, + "title": "Geometries", + "type": "array" + } + }, + "required": [ + "type", + "geometries" + ], + "title": "GeometryCollection", + "type": "object" + }, + "IndoorFeatureSchema": { + "properties": { + "properties": { + "type": "object", + "additionalProperties": true, + "description": "Additional properties associated with this feature", + "title": "Properties" + }, + "type": { + "const": "Feature", + "default": "Feature", + "title": "Type", + "type": "string" + }, + "geometry": { + "anyOf": [ + { + "discriminator": { + "mapping": { + "GeometryCollection": "#/components/schemas/GeometryCollection", + "LineString": "#/components/schemas/LineString", + "MultiLineString": "#/components/schemas/MultiLineString", + "MultiPoint": "#/components/schemas/MultiPoint", + "MultiPolygon": "#/components/schemas/MultiPolygon", + "Point": "#/components/schemas/Point", + "Polygon": "#/components/schemas/Polygon" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/Point" + }, + { + "$ref": "#/components/schemas/MultiPoint" + }, + { + "$ref": "#/components/schemas/LineString" + }, + { + "$ref": "#/components/schemas/MultiLineString" + }, + { + "$ref": "#/components/schemas/Polygon" + }, + { + "$ref": "#/components/schemas/MultiPolygon" + }, + { + "$ref": "#/components/schemas/GeometryCollection" + } + ] + }, + { + "$ref": "#/components/schemas/GeometryCollection" + } + ], + "description": "GeoJSON Geometry or Geometry Collection", + "title": "Geometry" + }, + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "distance": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Distance" + }, + "duration": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Duration" + } + }, + "required": [ + "properties", + "geometry" + ], + "title": "IndoorFeatureSchema", + "type": "object" + }, + "LineString": { + "description": "LineString Model", + "properties": { + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "maxItems": 6, + "minItems": 6, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Bbox" + }, + "type": { + "const": "LineString", + "title": "Type", + "type": "string" + }, + "coordinates": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/Position2D" + }, + { + "$ref": "#/components/schemas/Position3D" + } + ] + }, + "minItems": 2, + "title": "Coordinates", + "type": "array" + } + }, + "required": [ + "type", + "coordinates" + ], + "title": "LineString", + "type": "object" + }, + "MultiLineString": { + "description": "MultiLineString Model", + "properties": { + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "maxItems": 6, + "minItems": 6, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Bbox" + }, + "type": { + "const": "MultiLineString", + "title": "Type", + "type": "string" + }, + "coordinates": { + "items": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/Position2D" + }, + { + "$ref": "#/components/schemas/Position3D" + } + ] + }, + "minItems": 2, + "type": "array" + }, + "title": "Coordinates", + "type": "array" + } + }, + "required": [ + "type", + "coordinates" + ], + "title": "MultiLineString", + "type": "object" + }, + "MultiPoint": { + "description": "MultiPoint Model", + "properties": { + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "maxItems": 6, + "minItems": 6, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Bbox" + }, + "type": { + "const": "MultiPoint", + "title": "Type", + "type": "string" + }, + "coordinates": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/Position2D" + }, + { + "$ref": "#/components/schemas/Position3D" + } + ] + }, + "title": "Coordinates", + "type": "array" + } + }, + "required": [ + "type", + "coordinates" + ], + "title": "MultiPoint", + "type": "object" + }, + "MultiPolygon": { + "description": "MultiPolygon Model", + "properties": { + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "maxItems": 6, + "minItems": 6, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Bbox" + }, + "type": { + "const": "MultiPolygon", + "title": "Type", + "type": "string" + }, + "coordinates": { + "items": { + "items": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/Position2D" + }, + { + "$ref": "#/components/schemas/Position3D" + } + ] + }, + "minItems": 4, + "type": "array" + }, + "type": "array" + }, + "title": "Coordinates", + "type": "array" + } + }, + "required": [ + "type", + "coordinates" + ], + "title": "MultiPolygon", + "type": "object" + }, + "PaginationSchema": { + "properties": { + "page": { + "description": "Current page number", + "title": "Page", + "type": "integer" + }, + "page_count": { + "description": "Total number of pages", + "title": "Page Count", + "type": "integer" + }, + "total": { + "description": "Total number of items", + "title": "Total", + "type": "integer" + }, + "per_page": { + "description": "Number of items per page", + "title": "Per Page", + "type": "integer" + } + }, + "required": [ + "page", + "page_count", + "total", + "per_page" + ], + "title": "PaginationSchema", + "type": "object" + }, + "Point": { + "description": "Point Model", + "properties": { + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "maxItems": 6, + "minItems": 6, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Bbox" + }, + "type": { + "const": "Point", + "title": "Type", + "type": "string" + }, + "coordinates": { + "anyOf": [ + { + "$ref": "#/components/schemas/Position2D" + }, + { + "$ref": "#/components/schemas/Position3D" + } + ], + "title": "Coordinates" + } + }, + "required": [ + "type", + "coordinates" + ], + "title": "Point", + "type": "object" + }, + "Polygon": { + "description": "Polygon Model", + "properties": { + "bbox": { + "anyOf": [ + { + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "maxItems": 6, + "minItems": 6, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Bbox" + }, + "type": { + "const": "Polygon", + "title": "Type", + "type": "string" + }, + "coordinates": { + "items": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/Position2D" + }, + { + "$ref": "#/components/schemas/Position3D" + } + ] + }, + "minItems": 4, + "type": "array" + }, + "title": "Coordinates", + "type": "array" + } + }, + "required": [ + "type", + "coordinates" + ], + "title": "Polygon", + "type": "object" + }, + "Position2D": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "title": "Longitude", + "type": "number" + }, + { + "title": "Latitude", + "type": "number" + } + ], + "type": "array" + }, + "Position3D": { + "maxItems": 3, + "minItems": 3, + "prefixItems": [ + { + "title": "Longitude", + "type": "number" + }, + { + "title": "Latitude", + "type": "number" + }, + { + "title": "Altitude", + "type": "number" + } + ], + "type": "array" + }, + "SearchPagination": { + "example": { + "features": [ + { + "distance": null, + "duration": null, + "geometry": { + "bbox": null, + "coordinates": [ + [ + [ + -0.12419943632, + 51.49927414881 + ], + [ + -0.12419342215, + 51.49930532278 + ], + [ + -0.12419141597, + 51.49931625597 + ], + [ + -0.12419943632, + 51.49927414881 + ] + ] + ], + "type": "Polygon" + }, + "id": 3623459, + "properties": { + "name": "Painted Chamber", + "room": "office", + "level": "1", + "indoor": "area", + "building:ref": "Palace of Westminster", + "woosmap:logo": "https://woosmap-indoor-img.s3.amazonaws.com/Westminster/logo.png", + "woosmap:cover": "https://woosmap-indoor-img.s3.amazonaws.com/Westminster/paintedchamber.png", + "woosmap:label_id": 3623458, + "woosmap:zoom_icon_min": "16", + "woosmap:zoom_polygon_min": "16" + }, + "type": "Feature" + } + ], + "pagination": { + "page": 0, + "page_count": 1, + "per_page": 0, + "total": 1 + } + }, + "properties": { + "pagination": { + "$ref": "#/components/schemas/PaginationSchema", + "description": "Pagination Information" + }, + "features": { + "default": [], + "description": "List of Indoor features", + "items": { + "$ref": "#/components/schemas/IndoorFeatureSchema" + }, + "title": "Features", + "type": "array" + } + }, + "required": [ + "pagination" + ], + "title": "SearchPagination", + "type": "object" + }, + "AutocompleteInput": { + "properties": { + "items_by_page": { + "default": 0, + "description": "Number of items per page. A value of 0 means no pagination.", + "title": "Items By Page", + "type": "integer" + }, + "page": { + "default": 0, + "description": "Page number. 0 being the first page.", + "title": "Page", + "type": "integer" + }, + "from_location": { + "description": "A string with the format lat,lng,level", + "example": "48.8818546,2.3572283,0", + "title": "From Location", + "type": "string" + }, + "q": { + "description": "Search string. If not passed then all features will be listed alphabetically", + "title": "Q", + "type": "string" + }, + "extended": { + "description": "Option to search even not searchable pois (extended=full)", + "example": "full", + "title": "Extended", + "type": "string" + }, + "level": { + "description": "Filter by level.", + "title": "Level", + "type": "integer" + }, + "building": { + "description": "Filter by building (use `undefined` to find POIs not associated with a building.).", + "title": "Building", + "type": "string" + }, + "category": { + "description": "Filter by category.", + "title": "Category", + "type": "string" + }, + "ref": { + "description": "Filter by a comma seperated list of POI Refs.", + "example": "ref:main_entrance,ref:side_entrance", + "title": "Ref", + "type": "string" + }, + "language": { + "default": "en", + "description": "A supported language as an ISO 639-1 2 letter code.", + "title": "Language", + "type": "string" + }, + "advanced_filter": { + "description": "Filter by complex queries on properties (ex: indoor:=\"room\" OR door:=\"yes\").", + "title": "Advanced Filter", + "type": "string" + } + }, + "title": "AutocompleteInput", + "type": "object" + }, + "AutocompletePagination": { + "example": { + "pagination": { + "page": 1, + "page_count": 1, + "per_page": 2, + "total": 2 + }, + "predictions": [ + { + "building": "Palace of Westminster", + "category": null, + "distance": null, + "duration": null, + "id": 3623459, + "level": "1", + "name": "Painted Chamber", + "ref": null + }, + { + "building": "Palace of Westminster", + "category": null, + "distance": null, + "duration": null, + "id": 3624060, + "level": "1", + "name": "Lord Chamberlain's Private Office", + "ref": null + } + ] + }, + "properties": { + "pagination": { + "$ref": "#/components/schemas/PaginationSchema", + "description": "Pagination Information" + }, + "predictions": { + "default": [], + "description": "List of Indoor features", + "items": { + "$ref": "#/components/schemas/PredictionSchema" + }, + "title": "Predictions", + "type": "array" + } + }, + "required": [ + "pagination" + ], + "title": "AutocompletePagination", + "type": "object" + }, + "PredictionSchema": { + "properties": { + "id": { + "description": "ID of the Feature", + "title": "Id", + "type": "integer" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Name of the Feature", + "title": "Name" + }, + "distance": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "If from location provided, is the distance in metres from that location", + "title": "Distance" + }, + "duration": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "If from location provided, is the duration in seconds from that location", + "title": "Duration" + }, + "level": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Level of the Feature", + "title": "Level" + }, + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Reference of the Feature", + "title": "Ref" + }, + "building": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Building the Feature is in", + "title": "Building" + }, + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Catagory of the Feature", + "title": "Category" + } + }, + "required": [ + "id" + ], + "title": "PredictionSchema", + "type": "object" + }, + "SingleIndoorFeatureSchema": { + "example": { + "distance": null, + "duration": null, + "geometry": { + "bbox": null, + "coordinates": [ + [ + [ + -0.12419943632, + 51.49927414881 + ], + [ + -0.12419342215, + 51.49930532278 + ], + [ + -0.12419141597, + 51.49931625597 + ], + [ + -0.12419943632, + 51.49927414881 + ] + ] + ], + "type": "Polygon" + }, + "id": 3623459, + "properties": { + "name": "Painted Chamber", + "room": "office", + "level": "1", + "indoor": "area", + "building:ref": "Palace of Westminster", + "woosmap:logo": "https://woosmap-indoor-img.s3.amazonaws.com/Westminster/logo.png", + "woosmap:cover": "https://woosmap-indoor-img.s3.amazonaws.com/Westminster/paintedchamber.png", + "woosmap:label_id": 3623458, + "woosmap:zoom_icon_min": "16", + "woosmap:zoom_polygon_min": "16" + }, + "type": "Feature" + }, + "properties": { + "properties": { + "type": "object", + "additionalProperties": true, + "description": "Additional properties associated with this feature", + "title": "Properties" + }, + "type": { + "const": "Feature", + "default": "Feature", + "title": "Type", + "type": "string" + }, + "geometry": { + "anyOf": [ + { + "discriminator": { + "mapping": { + "GeometryCollection": "#/components/schemas/GeometryCollection", + "LineString": "#/components/schemas/LineString", + "MultiLineString": "#/components/schemas/MultiLineString", + "MultiPoint": "#/components/schemas/MultiPoint", + "MultiPolygon": "#/components/schemas/MultiPolygon", + "Point": "#/components/schemas/Point", + "Polygon": "#/components/schemas/Polygon" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/Point" + }, + { + "$ref": "#/components/schemas/MultiPoint" + }, + { + "$ref": "#/components/schemas/LineString" + }, + { + "$ref": "#/components/schemas/MultiLineString" + }, + { + "$ref": "#/components/schemas/Polygon" + }, + { + "$ref": "#/components/schemas/MultiPolygon" + }, + { + "$ref": "#/components/schemas/GeometryCollection" + } + ] + }, + { + "$ref": "#/components/schemas/GeometryCollection" + } + ], + "description": "GeoJSON Geometry or Geometry Collection", + "title": "Geometry" + }, + "id": { + "description": "ID of the feature", + "title": "Id", + "type": "integer" + } + }, + "required": [ + "properties", + "geometry", + "id" + ], + "title": "SingleIndoorFeatureSchema", + "type": "object" + } + }, + "securitySchemes": { + "PrivateKeyAuth": { + "type": "apiKey", + "in": "query", + "name": "private_key" + }, + "PrivateKeyHeaderAuth": { + "type": "apiKey", + "in": "header", + "name": "X-Api-Key" + }, + "PublicKeyAuth": { + "type": "apiKey", + "in": "query", + "name": "key" + } + } + }, + "servers": [ + { + "description": "Woosmap", + "url": "https://api.woosmap.com" + } + ] +} diff --git a/upstream/localities.json b/upstream/localities.json new file mode 100644 index 00000000..67cfd9c6 --- /dev/null +++ b/upstream/localities.json @@ -0,0 +1,2831 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Localities", + "version": "v25.8.3" + }, + "servers": [ + { + "url": "https://api.woosmap.com", + "description": "Production" + } + ], + "paths": { + "/localities/autocomplete": { + "get": { + "tags": [ + "Localities API" + ], + "summary": "Autocomplete", + "description": "Returns worldwide place suggestions for a text query, matching on whole words or substrings. Designed for as-you-type input: addresses, cities, postal codes, suburbs, and more.\n\n**Ratelimit:** 50/1s", + "operationId": "autocomplete_localities_autocomplete_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Language code (ISO 639-1, two letters) for the response.\n\nResolution order:\n1. `language` (this parameter)\n2. The request's `Accept-Language` header\n3. locale default\n4. English (when neither is recognised)\n\nOnly part of the address components are translated; not required for postal-code requests.", + "examples": [ + "en" + ], + "default": "", + "title": "Language" + }, + "description": "Language code (ISO 639-1, two letters) for the response.\n\nResolution order:\n1. `language` (this parameter)\n2. The request's `Accept-Language` header\n3. locale default\n4. English (when neither is recognised)\n\nOnly part of the address components are translated; not required for postal-code requests." + }, + { + "name": "data", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/DatasetMode", + "description": "Selects the postal-code dataset. `advanced` extends the default Western-Europe coverage to worldwide postal codes.\n\n***Requires a dedicated license option subject to specific billing — please contact us.***", + "examples": [ + "advanced" + ], + "default": "standard" + }, + "description": "Selects the postal-code dataset. `advanced` extends the default Western-Europe coverage to worldwide postal codes.\n\n***Requires a dedicated license option subject to specific billing — please contact us.***" + }, + { + "name": "components", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restricts results to one or more countries. Pass each country as a `country:` filter. Use `|` to provide multiple values.", + "examples": [ + "country:gb", + "country:fr|country:es" + ], + "title": "Components" + }, + "description": "Restricts results to one or more countries. Pass each country as a `country:` filter. Use `|` to provide multiple values." + }, + { + "name": "types", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesTypes" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoiAlias" + } + ], + "description": "Restricts results to one or more types. Use `|` to provide multiple values.", + "examples": [ + "address", + "locality|airport|admin_level" + ], + "default": "locality|postal_code", + "title": "Types" + }, + "description": "Restricts results to one or more types. Use `|` to provide multiple values." + }, + { + "name": "excluded_types", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesTypes" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoiAlias" + } + ], + "description": "Restricts results by excluding one or more types. Use `|` to provide multiple values.", + "examples": [ + "suburb|quarter|neighbourhood" + ], + "title": "Excluded Types" + }, + "description": "Restricts results by excluding one or more types. Use `|` to provide multiple values." + }, + { + "name": "input", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/LocalitiesInput", + "maxLength": 150, + "description": "Text to search for. Predictions are matched on this string and ordered by relevance.\n\nOnly the first 20 tokens (within 150 characters) are processed. \n\nWill return a 400 error when containing more than 3 special characters (! # $ % & * : ; < = > ? @ [ ] ° ™ { }) . \n\nWill be ignored (empty result) when composed of 70% of punctuation symbols (which Unicode general category starts with P (punctuation) or S (symbol).", + "examples": [ + "London" + ] + }, + "description": "Text to search for. Predictions are matched on this string and ordered by relevance.\n\nOnly the first 20 tokens (within 150 characters) are processed. \n\nWill return a 400 error when containing more than 3 special characters (! # $ % & * : ; < = > ? @ [ ] ° ™ { }) . \n\nWill be ignored (empty result) when composed of 70% of punctuation symbols (which Unicode general category starts with P (punctuation) or S (symbol)." + }, + { + "name": "custom_description", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Overrides the suggestion description format per type. Available fields depend on the type. Use `|` to provide multiple values.", + "examples": [ + "locality:\"{name} - {administrative_area_level_0}\"|postal_code:\"{name} ({administrative_area_level_1})\"" + ], + "title": "Custom Description" + }, + "description": "Overrides the suggestion description format per type. Available fields depend on the type. Use `|` to provide multiple values." + }, + { + "name": "extended", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Allows a refined search over locality names sharing the same leading postal_code. Suggestion descriptions switch to `name (postal code), admin_1, admin_0`. Avoid combining with the `postal_code` type to prevent duplicate locations.\n\nSupported countries: France, Monaco, Italy, Spain, Belgium, Switzerland, Luxembourg.", + "examples": [ + "postal_code" + ], + "enum": [ + "postal_code" + ], + "title": "Extended" + }, + "description": "Allows a refined search over locality names sharing the same leading postal_code. Suggestion descriptions switch to `name (postal code), admin_1, admin_0`. Avoid combining with the `postal_code` type to prevent duplicate locations.\n\nSupported countries: France, Monaco, Italy, Spain, Belgium, Switzerland, Luxembourg." + }, + { + "name": "location", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Biases results toward a point, specified as `latitude,longitude`. Pair with `radius`.", + "examples": [ + "52.479699,-1.902691" + ], + "title": "Location" + }, + "description": "Biases results toward a point, specified as `latitude,longitude`. Pair with `radius`." + }, + { + "name": "radius", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 10, + "description": "Radius in meters around `location` to prioritise results. Results outside this radius may still appear.", + "examples": [ + 200000 + ], + "default": 100000, + "title": "Radius" + }, + "description": "Radius in meters around `location` to prioritise results. Results outside this radius may still appear." + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutocompleteResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 50, + "x-ratelimit-window-seconds": 1 + } + }, + "/localities/details": { + "get": { + "tags": [ + "Localities API" + ], + "summary": "Details", + "description": "Returns the full details of a suggestion, looked up by its `public_id`.\n\n**Ratelimit:** 50/1s", + "operationId": "details_localities_details_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "fields", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "enum": [ + "geometry", + "address_components", + "shape" + ] + } + ], + "description": "Restricts the response to a subset of fields. Use `|` to provide multiple values.", + "examples": [ + "shape" + ], + "default": "geometry|address_components", + "title": "Fields" + }, + "description": "Restricts the response to a subset of fields. Use `|` to provide multiple values." + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Language code (ISO 639-1, two letters) for the response.\n\nResolution order:\n1. `language` (this parameter)\n2. The request's `Accept-Language` header\n3. locale default\n4. English (when neither is recognised)\n\nOnly part of the address components are translated; not required for postal-code requests.", + "examples": [ + "en" + ], + "default": "", + "title": "Language" + }, + "description": "Language code (ISO 639-1, two letters) for the response.\n\nResolution order:\n1. `language` (this parameter)\n2. The request's `Accept-Language` header\n3. locale default\n4. English (when neither is recognised)\n\nOnly part of the address components are translated; not required for postal-code requests." + }, + { + "name": "cc_format", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/CountryCodeFormat" + }, + { + "type": "null" + } + ], + "description": "Format of the country code returned in `address_components`. When unset, mirrors the format used in `components`, or `alpha2` if `components` is not provided.", + "examples": [ + "alpha3" + ], + "title": "Cc Format" + }, + "description": "Format of the country code returned in `address_components`. When unset, mirrors the format used in `components`, or `alpha2` if `components` is not provided." + }, + { + "name": "public_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "Identifier of the place to retrieve details for. Use the `public_id` returned by the [Autocomplete](https://developers.woosmap.com/products/localities/autocomplete/) endpoint.", + "examples": [ + "cG9zdGFsX2NvZGU6Z2I6OmNDN0N0ZUF2MW9YRi9KLzlnS2cremJndktFaz0=" + ], + "title": "Public Id" + }, + "description": "Identifier of the place to retrieve details for. Use the `public_id` returned by the [Autocomplete](https://developers.woosmap.com/products/localities/autocomplete/) endpoint." + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DetailsResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 50, + "x-ratelimit-window-seconds": 1 + } + }, + "/localities/geocode": { + "get": { + "tags": [ + "Localities API" + ], + "summary": "Geocode", + "description": "Geocodes an `address` into coordinates, or reverse geocodes a `latlng` position into an address. Provide exactly one of `address` or `latlng`.\n\n**Ratelimit:** 50/1s", + "operationId": "geocode_localities_geocode_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "fields", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "enum": [ + "geometry", + "address_components", + "shape" + ] + } + ], + "description": "Restricts the response to a subset of fields. Use `|` to provide multiple values.", + "examples": [ + "shape" + ], + "default": "geometry|address_components", + "title": "Fields" + }, + "description": "Restricts the response to a subset of fields. Use `|` to provide multiple values." + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Language code (ISO 639-1, two letters) for the response.\n\nResolution order:\n1. `language` (this parameter)\n2. The request's `Accept-Language` header\n3. locale default\n4. English (when neither is recognised)\n\nOnly part of the address components are translated; not required for postal-code requests.", + "examples": [ + "en" + ], + "default": "", + "title": "Language" + }, + "description": "Language code (ISO 639-1, two letters) for the response.\n\nResolution order:\n1. `language` (this parameter)\n2. The request's `Accept-Language` header\n3. locale default\n4. English (when neither is recognised)\n\nOnly part of the address components are translated; not required for postal-code requests." + }, + { + "name": "cc_format", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/CountryCodeFormat" + }, + { + "type": "null" + } + ], + "description": "Format of the country code returned in `address_components`. When unset, mirrors the format used in `components`, or `alpha2` if `components` is not provided.", + "examples": [ + "alpha3" + ], + "title": "Cc Format" + }, + "description": "Format of the country code returned in `address_components`. When unset, mirrors the format used in `components`, or `alpha2` if `components` is not provided." + }, + { + "name": "data", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/DatasetMode", + "description": "Selects the postal-code dataset. `advanced` extends the default Western-Europe coverage to worldwide postal codes.\n\n***Requires a dedicated license option subject to specific billing — please contact us.***", + "examples": [ + "advanced" + ], + "default": "standard" + }, + "description": "Selects the postal-code dataset. `advanced` extends the default Western-Europe coverage to worldwide postal codes.\n\n***Requires a dedicated license option subject to specific billing — please contact us.***" + }, + { + "name": "components", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restricts results to one or more countries. Pass each country as a `country:` filter. Use `|` to provide multiple values.", + "examples": [ + "country:gb", + "country:fr|country:es" + ], + "title": "Components" + }, + "description": "Restricts results to one or more countries. Pass each country as a `country:` filter. Use `|` to provide multiple values." + }, + { + "name": "types", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesTypes" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoiAlias" + } + ], + "description": "Restricts results to one or more types. Use `|` to provide multiple values. Ignored when `latlng` is set.", + "examples": [ + "address", + "locality|admin_level" + ], + "default": "locality|postal_code|address", + "title": "Types" + }, + "description": "Restricts results to one or more types. Use `|` to provide multiple values. Ignored when `latlng` is set." + }, + { + "name": "excluded_types", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesTypes" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoiAlias" + } + ], + "description": "Restricts results by excluding one or more types. Use `|` to provide multiple values.", + "examples": [ + "suburb|quarter|neighbourhood" + ], + "title": "Excluded Types" + }, + "description": "Restricts results by excluding one or more types. Use `|` to provide multiple values." + }, + { + "name": "address", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesInput", + "maxLength": 150 + }, + { + "type": "null" + } + ], + "description": "Address, street, locality, or postal code to geocode.\n\nOnly the first 20 tokens (within 150 characters) are processed.\n\nWill return a 400 Error when containing more than 3 special characters (! # $ % & * : ; < = > ? @ [ ] ° ™ { }) . \n\nWill be ignored (empty result) when composed of 70% of punctuation symbols (which Unicode general category starts with P (punctuation) or S (symbol).", + "examples": [ + "224%20Rue%20de%20Rivoli%2C%20Paris" + ], + "title": "Address" + }, + "description": "Address, street, locality, or postal code to geocode.\n\nOnly the first 20 tokens (within 150 characters) are processed.\n\nWill return a 400 Error when containing more than 3 special characters (! # $ % & * : ; < = > ? @ [ ] ° ™ { }) . \n\nWill be ignored (empty result) when composed of 70% of punctuation symbols (which Unicode general category starts with P (punctuation) or S (symbol)." + }, + { + "name": "latlng", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Point to reverse geocode, required if the `address` parameter is missing.", + "examples": [ + "52.479699,-1.902691" + ], + "title": "Latlng" + }, + "description": "Point to reverse geocode, required if the `address` parameter is missing." + }, + { + "name": "list_sub_buildings", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Returns all addresses sharing the same street number or building in a `sub_buildings` field. Reverse geocoding only.", + "examples": [ + true + ], + "default": false, + "title": "List Sub Buildings" + }, + "description": "Returns all addresses sharing the same street number or building in a `sub_buildings` field. Reverse geocoding only." + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/GeocodeResponse" + }, + { + "$ref": "#/components/schemas/ReverseGeocodeResponse" + } + ], + "title": "Response Geocode Localities Geocode Get" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 50, + "x-ratelimit-window-seconds": 1 + } + }, + "/localities/nearby": { + "get": { + "tags": [ + "Localities API" + ], + "summary": "Nearby", + "description": "Returns worldwide points of interest around a `location`, sorted by distance. Filter with `types` and `excluded_types`.\n\n**Ratelimit:** 50/1s", + "operationId": "poi_nearby_localities_nearby_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "cc_format", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/CountryCodeFormat" + }, + { + "type": "null" + } + ], + "description": "Format of the country code returned in `address_components`. When unset, mirrors the format used in `components`, or `alpha2` if `components` is not provided.", + "examples": [ + "alpha3" + ], + "title": "Cc Format" + }, + "description": "Format of the country code returned in `address_components`. When unset, mirrors the format used in `components`, or `alpha2` if `components` is not provided." + }, + { + "name": "location", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "Center of the search circle.", + "examples": [ + "40.71399,-74.00499" + ], + "title": "Location" + }, + "description": "Center of the search circle." + }, + { + "name": "radius", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 50000, + "minimum": 10, + "description": "Radius of the search circle, in meters.", + "examples": [ + 3000 + ], + "default": 1000, + "title": "Radius" + }, + "description": "Radius of the search circle, in meters." + }, + { + "name": "types", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "Restricts results to one or more types of points of interest. Use `|` to provide multiple values.", + "examples": [ + "point_of_interest", + "business.shop" + ], + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + } + ], + "title": "Types" + }, + "description": "Restricts results to one or more types of points of interest. Use `|` to provide multiple values." + }, + { + "name": "excluded_types", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + } + ], + "description": "Restricts results by excluding one or more types of points of interest. Use `|` to provide multiple values.", + "examples": [ + "business.food_and_drinks.fast_food|business.food_and_drinks.pub" + ], + "title": "Excluded Types" + }, + "description": "Restricts results by excluding one or more types of points of interest. Use `|` to provide multiple values." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Selects which page of paginated results to return.", + "examples": [ + 7 + ], + "default": 1, + "title": "Page" + }, + "description": "Selects which page of paginated results to return." + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 30, + "minimum": 1, + "description": "Defines how many results should be included in a page.", + "examples": [ + 15 + ], + "default": 10, + "title": "Limit" + }, + "description": "Defines how many results should be included in a page." + }, + { + "name": "accept-language", + "in": "header", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Accept-Language" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NearbyResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 50, + "x-ratelimit-window-seconds": 1 + } + } + }, + "components": { + "schemas": { + "AddressComponent": { + "properties": { + "types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Types" + }, + "long_name": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Long Name" + }, + "short_name": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "title": "Short Name" + } + }, + "type": "object", + "required": [ + "types", + "long_name", + "short_name" + ], + "title": "AddressComponent" + }, + "AddressSummary": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id", + "description": "The public_id of the address can be used to gather details on that specific address" + }, + "description": { + "type": "string", + "title": "Description", + "description": "A human readable description of the address" + } + }, + "type": "object", + "required": [ + "public_id", + "description" + ], + "title": "AddressSummary", + "description": "A short description of an address" + }, + "AuthenticationErrorResponse": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "AuthenticationErrorResponse", + "description": "AuthenticationErrorResponse is the base authentication error model." + }, + "AutocompleteResponse": { + "properties": { + "localities": { + "items": { + "$ref": "#/components/schemas/AutocompleteResult" + }, + "type": "array", + "title": "Localities" + } + }, + "type": "object", + "required": [ + "localities" + ], + "title": "AutocompleteResponse", + "description": "Localities Collection Response containing Localities", + "examples": [ + { + "localities": [ + { + "description": "London, City of London, United Kingdom", + "matched_substrings": { + "description": [ + { + "length": 4, + "offset": 0 + } + ] + }, + "public_id": "Ch6qA8cLmvyvEEoFy6nYeFcEdNU=", + "type": "locality", + "types": [ + "locality", + "city" + ] + }, + { + "description": "Derry/Londonderry, Derry City and Strabane, United Kingdom", + "matched_substrings": { + "description": [ + { + "length": 4, + "offset": 6 + } + ] + }, + "public_id": "m/T2C4YI2LgszkKXrELBC+9dfC8=", + "type": "locality", + "types": [ + "locality", + "city" + ] + }, + { + "description": "London Colney, Hertfordshire, United Kingdom", + "matched_substrings": { + "description": [ + { + "length": 4, + "offset": 0 + } + ] + }, + "public_id": "J6eISGMjjvQwPkao8rsByB3aVwM=", + "type": "locality", + "types": [ + "locality", + "village" + ] + }, + { + "description": "London Apprentice, Cornwall, United Kingdom", + "matched_substrings": { + "description": [ + { + "length": 4, + "offset": 0 + } + ] + }, + "public_id": "52MnrbHVWH21CLWH8VY/YWKhqeM=", + "type": "locality", + "types": [ + "locality", + "village" + ] + }, + { + "description": "City of London, United Kingdom", + "matched_substrings": { + "description": [ + { + "length": 4, + "offset": 8 + } + ] + }, + "public_id": "S/5AkUmMBhX35qVI2jR38+dALwk=", + "type": "locality", + "types": [ + "locality", + "city" + ] + } + ] + } + ] + }, + "AutocompleteResult": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id", + "description": "Unique identifier for this place. Pass it to the `/details` endpoint to retrieve the full record." + }, + "type": { + "type": "string", + "title": "Type", + "description": "This field might be removed in the future, please use the `types` field which is more exhaustive.", + "deprecated": true + }, + "types": { + "items": { + "$ref": "#/components/schemas/LocalityTypeAll" + }, + "type": "array", + "title": "Types", + "description": "An array containing the types of the result" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Concatenation of `name`, `admin_1`, `admin_0` to be used as suggestion in drop-down list if needed. The description can vary depending on the type requested." + }, + "matched_substrings": { + "anyOf": [ + { + "$ref": "#/components/schemas/MatchedSubstrings" + }, + { + "type": "null" + } + ], + "description": "Contains a set of substrings in the `description` field that match elements in the `input`. It can be used to highlight those substrings. Each substring is identified by an `offset` and a `length`." + }, + "has_addresses": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Has Addresses", + "description": "Indicates whether a postal code has addresses you can drill into. Returned for postal codes in some territories (e.g. United Kingdom, Ireland). When `true`, call `/details` with this suggestion's `public_id` will list the addresses; each address carries its own `public_id` for a further `/details` lookup." + }, + "related": { + "anyOf": [ + { + "$ref": "#/components/schemas/Related" + }, + { + "type": "null" + } + ], + "description": "Contains a set of related elements to the locality suggestion." + } + }, + "type": "object", + "required": [ + "public_id", + "type", + "types", + "description" + ], + "title": "AutocompleteResult" + }, + "CountryCodeFormat": { + "type": "string", + "enum": [ + "alpha2", + "alpha3" + ], + "title": "CountryCodeFormat" + }, + "DatasetMode": { + "type": "string", + "enum": [ + "advanced", + "standard" + ], + "title": "DatasetMode" + }, + "DetailsGeometry": { + "properties": { + "location": { + "anyOf": [ + { + "$ref": "#/components/schemas/Location" + }, + { + "type": "null" + } + ] + }, + "viewport": { + "anyOf": [ + { + "$ref": "#/components/schemas/Viewport" + }, + { + "type": "null" + } + ] + }, + "shape": { + "anyOf": [ + { + "$ref": "#/components/schemas/Shape" + }, + { + "type": "null" + } + ] + }, + "accuracy": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocationTypeStr" + }, + { + "type": "null" + } + ], + "description": "This accuracy represents the type of address returned - `DISTRICT` and `POSTAL_CODE` are for UK only." + } + }, + "type": "object", + "title": "DetailsGeometry" + }, + "DetailsResponse": { + "properties": { + "result": { + "$ref": "#/components/schemas/DetailsResult" + } + }, + "type": "object", + "required": [ + "result" + ], + "title": "DetailsResponse", + "description": "Attributes describing a locality. Not all attributes are available for all locality types.", + "examples": [ + { + "result": { + "address_components": [ + { + "long_name": "United Kingdom", + "short_name": "GB", + "types": [ + "country", + "administrative_area_level_0", + "division_level_0" + ] + }, + { + "long_name": "England", + "short_name": "England", + "types": [ + "state", + "division_level_1" + ] + }, + { + "long_name": "City of London", + "short_name": "City of London", + "types": [ + "administrative_area_level_1", + "county", + "division_level_2" + ] + }, + { + "long_name": "Westminster", + "short_name": "Westminster", + "types": [ + "district", + "division_level_3" + ] + }, + { + "long_name": "London", + "short_name": "London", + "types": [ + "locality" + ] + }, + { + "long_name": "SW1A 0AA", + "short_name": "SW1A 0AA", + "types": [ + "postal_codes" + ] + }, + { + "long_name": "Houses Of Parliament", + "short_name": "Houses Of Parliament", + "types": [ + "premise" + ] + }, + { + "long_name": "House Of Commons", + "short_name": "House Of Commons", + "types": [ + "organisation" + ] + } + ], + "formatted_address": "House Of Commons, Houses Of Parliament, London, SW1A 0AA", + "geometry": { + "accuracy": "ROOFTOP", + "location": { + "lat": 51.4998415, + "lng": -0.1246375 + } + }, + "public_id": "TVZaV0JmR1pRbkFRbjlKdEU5Q0paamdlQjRRPV9fTVZaV0JmR1pRbkFRbjlKdEU5Q0paamdlQjRRPQ==", + "types": [ + "address" + ] + } + }, + { + "result": { + "address_components": [ + { + "long_name": "United Kingdom", + "short_name": "GB", + "types": [ + "country", + "administrative_area_level_0", + "division_level_0" + ] + }, + { + "long_name": "England", + "short_name": "England", + "types": [ + "state", + "division_level_1" + ] + }, + { + "long_name": "City of London", + "short_name": "City of London", + "types": [ + "locality" + ] + }, + { + "long_name": "SW1A 0AA", + "short_name": "SW1A 0AA", + "types": [ + "postal_codes" + ] + } + ], + "formatted_address": "SW1A 0AA, City of London", + "geometry": { + "accuracy": "POSTAL_CODE", + "location": { + "lat": 51.49984, + "lng": -0.124663 + } + }, + "name": "SW1A 0AA", + "public_id": "cG9zdGFsX2NvZGU6Z2I6OmNDN0N0ZUF2MW9YRi9KLzlnS2cremJndktFaz0=", + "types": [ + "postal_code" + ] + } + } + ] + }, + "DetailsResult": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id", + "description": "Unique identifier for this place." + }, + "types": { + "items": { + "$ref": "#/components/schemas/LocalityTypeAll" + }, + "type": "array", + "title": "Types", + "description": "Available localities types." + }, + "formatted_address": { + "type": "string", + "title": "Formatted Address", + "description": "Contains the readable text description of the result." + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "The postal code name if result is a postal code." + }, + "administrative_area_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Administrative Area Label", + "description": "Only available for `admin_level` suggestions, this contains the local english name of the administration level (\"department\" for France or \"federal_state\" for Germany)." + }, + "status": { + "anyOf": [ + { + "type": "string", + "const": "not_yet_built" + }, + { + "type": "null" + } + ], + "title": "Status", + "description": "This optional field is only available for UK addresses referenced as not yet built by Royal Mail. Only one value yet." + }, + "geometry": { + "anyOf": [ + { + "$ref": "#/components/schemas/DetailsGeometry" + }, + { + "type": "null" + } + ], + "description": "The location of the PostalCode, in latitude and longitude, eventually associated with a Viewport and a shape." + }, + "address_components": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AddressComponent" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Address Components" + }, + "categories": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Categories" + }, + "addresses": { + "anyOf": [ + { + "$ref": "#/components/schemas/PostalCodeAddresses" + }, + { + "type": "null" + } + ], + "description": "For the UK only. When a postal code is returned, this field contains a list of addresses associated with this postal code." + } + }, + "type": "object", + "required": [ + "public_id", + "types", + "formatted_address" + ], + "title": "DetailsResult", + "description": "The Root Node for Localities Details" + }, + "GeocodeGeometry": { + "properties": { + "location": { + "anyOf": [ + { + "$ref": "#/components/schemas/Location" + }, + { + "type": "null" + } + ] + }, + "viewport": { + "anyOf": [ + { + "$ref": "#/components/schemas/Viewport" + }, + { + "type": "null" + } + ] + }, + "shape": { + "anyOf": [ + { + "$ref": "#/components/schemas/Shape" + }, + { + "type": "null" + } + ] + }, + "location_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocationTypeStr" + }, + { + "type": "null" + } + ], + "description": "Specifies additional data about the geocoded location. The following values are currently supported: \n - `ROOFTOP` result is a precise geocode for which we have location information accurate down to street address precision.\n - `RANGE_INTERPOLATED` result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address.\n - `GEOMETRIC_CENTER` result is the geometric center of a result such as a polyline (for example, a street) or polygon (city, region, …).\n - `APPROXIMATE` result is approximate (usually when no other above value applies)\n - `POSTAL_CODE` Address has inherited from the location of the postal code it is part of (for NYB addresses)\n - `DISTRICT` Address has inherited from the location of the district it is part of (for NYB addresses)", + "default": "GEOMETRIC_CENTER" + } + }, + "type": "object", + "title": "GeocodeGeometry", + "description": "The location of the result, in latitude and longitude. Accuracy is also provided." + }, + "GeocodeResponse": { + "properties": { + "results": { + "items": { + "$ref": "#/components/schemas/GeocodeResult" + }, + "type": "array", + "title": "Results" + } + }, + "type": "object", + "required": [ + "results" + ], + "title": "GeocodeResponse", + "description": "Localities Geocode Collection Response. Contains one or more detailed Localities or\nAddresses in FR or in the UK, with coordinates (default to one result for reverse geocoding)", + "examples": [ + { + "results": [ + { + "address_components": [ + { + "long_name": "France", + "short_name": "FR", + "types": [ + "country", + "administrative_area_level_0", + "division_level_0" + ] + }, + { + "long_name": "Île-de-France", + "short_name": "Île-de-France", + "types": [ + "state", + "division_level_1" + ] + }, + { + "long_name": "Paris", + "short_name": "Paris", + "types": [ + "administrative_area_level_1", + "county", + "division_level_2" + ] + }, + { + "long_name": "Paris", + "short_name": "Paris", + "types": [ + "locality" + ] + }, + { + "long_name": "75013", + "short_name": "75013", + "types": [ + "postal_codes" + ] + }, + { + "long_name": "Place Jeanne D'Arc", + "short_name": "Place Jeanne D'Arc", + "types": [ + "route" + ] + } + ], + "formatted_address": "Place Jeanne D'Arc, 75013, Paris", + "geometry": { + "location": { + "lat": 48.829405, + "lng": 2.367944 + }, + "location_type": "GEOMETRIC_CENTER" + }, + "public_id": "0+FTYd/1MsiBSxLAKq+/Fiyy+uM=", + "scores_per_components": { + "street_name": 1 + }, + "types": [ + "address", + "route" + ] + } + ] + } + ] + }, + "GeocodeResult": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id", + "description": "Unique identifier for this place." + }, + "types": { + "items": { + "$ref": "#/components/schemas/LocalityTypeAll" + }, + "type": "array", + "title": "Types", + "description": "An array containing the types of the result" + }, + "formatted_address": { + "type": "string", + "title": "Formatted Address", + "description": "Contains the readable text description of the result." + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "Name of the result when available" + }, + "address_components": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AddressComponent" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Address Components" + }, + "administrative_area_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Administrative Area Label", + "description": "Only available for `admin_level` suggestions, this contains the local english name of the administration level (\"department\" for France or \"federal_state\" for Germany)." + }, + "status": { + "anyOf": [ + { + "type": "string", + "const": "not_yet_built" + }, + { + "type": "null" + } + ], + "title": "Status", + "description": "This optional field is only available for UK addresses referenced as not yet built by Royal Mail." + }, + "geometry": { + "anyOf": [ + { + "$ref": "#/components/schemas/GeocodeGeometry" + }, + { + "type": "null" + } + ] + }, + "scores_per_components": { + "anyOf": [ + { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Scores Per Components", + "description": "For each component (street_name, postal_code, and locality), it indicates the degree of correspondence with the original query. This value ranges from 0 to 1, with 0 indicating no match with the original query, and enables you to assess the quality of the Geocode's result." + } + }, + "type": "object", + "required": [ + "public_id", + "types", + "formatted_address" + ], + "title": "GeocodeResult", + "description": "Attributes describing a locality. Not all attributes will be available for all locality types." + }, + "Geometry": { + "properties": { + "location": { + "anyOf": [ + { + "$ref": "#/components/schemas/Location" + }, + { + "type": "null" + } + ] + }, + "viewport": { + "anyOf": [ + { + "$ref": "#/components/schemas/Viewport" + }, + { + "type": "null" + } + ] + }, + "shape": { + "anyOf": [ + { + "$ref": "#/components/schemas/Shape" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "title": "Geometry" + }, + "HTTPErrorModel": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "HTTPErrorModel" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "LocalitiesInput": { + "type": "string", + "maxLength": 150 + }, + "LocalitiesTypes": { + "type": "string", + "enum": [ + "country", + "admin_level", + "admin_level_1", + "admin_level_2", + "admin_level_3", + "postal_code", + "address", + "route", + "locality", + "city", + "town", + "village", + "hamlet", + "borough", + "suburb", + "quarter", + "neighbourhood" + ], + "title": "LocalitiesTypes" + }, + "LocalitiesTypesPoi": { + "type": "string", + "enum": [ + "point_of_interest", + "beach", + "government", + "park", + "park.national", + "place_of_worship", + "police", + "post_office", + "sports", + "sports.golf", + "sports.winter", + "transit", + "transit.station", + "transit.station.airport", + "transit.station.rail", + "transit.station.rail.subway", + "transit.station.rail.train", + "transit.station.rail.light_rail", + "transit.station.rail.monorail", + "transit.station.rail.funicular", + "transit.station.rail.tram", + "business", + "business.car_repair", + "business.car_rental", + "business.cinema", + "business.conference_centre", + "business.exhibition_centre", + "business.theatre", + "business.nightclub", + "business.finance", + "business.finance.bank", + "business.fuel", + "business.parking", + "business.mall", + "business.food_and_drinks", + "business.food_and_drinks.bar", + "business.food_and_drinks.biergarten", + "business.food_and_drinks.cafe", + "business.food_and_drinks.fast_food", + "business.food_and_drinks.pub", + "business.food_and_drinks.restaurant", + "business.food_and_drinks.food_court", + "business.shop", + "business.shop.mall", + "business.shop.bakery", + "business.shop.butcher", + "business.shop.library", + "business.shop.grocery", + "business.shop.sports", + "business.shop.toys", + "business.shop.clothes", + "business.shop.furniture", + "business.shop.electronics", + "business.shop.doityourself", + "business.shop.craft", + "education", + "education.school", + "education.kindergarten", + "education.university", + "education.college", + "education.library", + "hospitality", + "hospitality.hotel", + "hospitality.hostel", + "hospitality.guest_house", + "hospitality.bed_and_breakfast", + "hospitality.motel", + "medical", + "medical.hospital", + "medical.pharmacy", + "medical.clinic", + "tourism", + "tourism.art_gallery", + "tourism.attraction", + "tourism.attraction.amusement_park", + "tourism.attraction.zoo", + "tourism.attraction.aquarium", + "tourism.monument", + "tourism.monument.castle", + "tourism.museum" + ], + "title": "LocalitiesTypesPoi" + }, + "LocalitiesTypesPoiAlias": { + "type": "string", + "enum": [ + "airport", + "train_station", + "metro_station", + "shopping", + "museum", + "zoo", + "amusement_park", + "art_gallery", + "tourist_attraction" + ], + "title": "LocalitiesTypesPoiAlias" + }, + "LocalityTypeAll": { + "anyOf": [ + { + "$ref": "#/components/schemas/LocalitiesTypes" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + { + "$ref": "#/components/schemas/LocalitiesTypesPoiAlias" + } + ] + }, + "Location": { + "properties": { + "lat": { + "type": "number", + "title": "Lat" + }, + "lng": { + "type": "number", + "title": "Lng" + } + }, + "type": "object", + "required": [ + "lat", + "lng" + ], + "title": "Location" + }, + "LocationTypeStr": { + "type": "string", + "enum": [ + "ROOFTOP", + "APPROXIMATE", + "RANGE_INTERPOLATED", + "GEOMETRIC_CENTER", + "POSTAL_CODE", + "DISTRICT" + ] + }, + "MatchedPosition": { + "properties": { + "offset": { + "type": "integer", + "title": "Offset" + }, + "length": { + "type": "integer", + "title": "Length" + } + }, + "type": "object", + "required": [ + "offset", + "length" + ], + "title": "MatchedPosition" + }, + "MatchedSubstrings": { + "properties": { + "description": { + "items": { + "$ref": "#/components/schemas/MatchedPosition" + }, + "type": "array", + "title": "Description", + "description": "Substrings of `description` that match the `input`, each given as an `offset` and `length`." + } + }, + "type": "object", + "required": [ + "description" + ], + "title": "MatchedSubstrings" + }, + "NearbyResponse": { + "properties": { + "results": { + "items": { + "$ref": "#/components/schemas/NearbyResult" + }, + "type": "array", + "title": "Results", + "description": "The array of nearby points of interest." + }, + "pagination": { + "$ref": "#/components/schemas/Pagination", + "description": "Helps to navigate through paginated results." + } + }, + "type": "object", + "required": [ + "results", + "pagination" + ], + "title": "NearbyResponse", + "description": "Collection of nearby points of interest.", + "examples": [ + { + "pagination": { + "next_page": 4, + "previous_page": 2 + }, + "results": [ + { + "address_components": [ + { + "long_name": "United States", + "short_name": "US", + "types": [ + "country", + "administrative_area_level_0", + "division_level_0" + ] + }, + { + "long_name": "New York", + "short_name": "New York", + "types": [ + "locality" + ] + }, + { + "long_name": "Broadway", + "short_name": "Broadway", + "types": [ + "route" + ] + } + ], + "categories": [ + "business.food_and_drinks.fast_food" + ], + "formatted_address": "Broadway, New York", + "geometry": { + "location": { + "lat": 40.715905992166256, + "lng": -74.00508673226767 + } + }, + "name": "Pret A Manger", + "public_id": "cG9pOnVzOmJ1c2luZXNzLmZvb2RfYW5kX2RyaW5rcy5mYXN0X2Zvb2Q6ZTc2ZDA1YzBiM2M0M2NmNmVkNTJjNGQyZDFiZDE3Nzc0OTZkNjlmOA==", + "types": [ + "point_of_interest", + "business.food_and_drinks.fast_food" + ] + }, + { + "address_components": [ + { + "long_name": "United States", + "short_name": "US", + "types": [ + "country", + "administrative_area_level_0", + "division_level_0" + ] + }, + { + "long_name": "New York", + "short_name": "New York", + "types": [ + "locality" + ] + }, + { + "long_name": "Thomas Street", + "short_name": "Thomas Street", + "types": [ + "route" + ] + } + ], + "categories": [ + "business.theatre" + ], + "formatted_address": "Thomas Street, New York", + "geometry": { + "location": { + "lat": 40.71609349534023, + "lng": -74.00589281989586 + } + }, + "name": "The Flea", + "public_id": "cG9pOnVzOmJ1c2luZXNzLnRoZWF0cmU6MTU1Yjk5YmEwY2FiYzIzZjYxYWYyYTViYzI0ZDViYTVlNmVmZTAwNA==", + "types": [ + "point_of_interest", + "business.theatre" + ] + } + ] + } + ] + }, + "NearbyResult": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id", + "description": "Unique identifier for this place." + }, + "types": { + "items": { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + "type": "array", + "title": "Types", + "description": "An array containing the types of the result." + }, + "categories": { + "items": { + "$ref": "#/components/schemas/LocalitiesTypesPoi" + }, + "type": "array", + "title": "Categories", + "description": "An array containing the categories of the result. This information is now available in the `types` field and will be removed.", + "deprecated": true + }, + "name": { + "type": "string", + "title": "Name", + "description": "The name of the result." + }, + "formatted_address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Formatted Address", + "description": "Contains the readable text description of the result." + }, + "geometry": { + "anyOf": [ + { + "$ref": "#/components/schemas/Geometry" + }, + { + "type": "null" + } + ], + "description": "The location of the result, in latitude and longitude, eventually associated with a Viewport." + }, + "address_components": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AddressComponent" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Address Components" + } + }, + "type": "object", + "required": [ + "public_id", + "types", + "categories", + "name" + ], + "title": "NearbyResult", + "description": "Attributes describing a point of interest." + }, + "Pagination": { + "properties": { + "previous_page": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Previous Page", + "description": "If previous results are available, this will contain the value to pass to the `page` parameter to get the previous page" + }, + "next_page": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Next Page", + "description": "If more results are available, this will contain the value to pass to the `page` parameter to get the next page" + } + }, + "type": "object", + "required": [ + "previous_page", + "next_page" + ], + "title": "Pagination" + }, + "PostalCodeAddressPagination": { + "properties": { + "page": { + "type": "integer", + "title": "Page", + "description": "the request page", + "deprecated": true + }, + "page_count": { + "type": "integer", + "title": "Page Count", + "description": "the number of available pages", + "deprecated": true + }, + "addresses_per_page": { + "type": "integer", + "title": "Addresses Per Page", + "description": "the number of available addresses per page", + "deprecated": true + }, + "address_count": { + "type": "integer", + "title": "Address Count", + "description": "the number of available addresses", + "deprecated": true + } + }, + "type": "object", + "required": [ + "page", + "page_count", + "addresses_per_page", + "address_count" + ], + "title": "PostalCodeAddressPagination" + }, + "PostalCodeAddresses": { + "properties": { + "pagination": { + "$ref": "#/components/schemas/PostalCodeAddressPagination", + "description": "The pagination part of the response is deprecated as all the addresses are now automatically returned in the response. It will be turned off at some point. From now on, the pagination will systematically return `page=1`, `page_count=1`, `addresses_per_page=total addresses count` and `address_count=total addresses count`.", + "deprecated": true + }, + "list": { + "items": { + "$ref": "#/components/schemas/AddressSummary" + }, + "type": "array", + "title": "List", + "description": "List of addresses" + } + }, + "type": "object", + "required": [ + "pagination", + "list" + ], + "title": "PostalCodeAddresses" + }, + "Related": { + "properties": { + "postal_codes": { + "items": { + "$ref": "#/components/schemas/RelatedPostalCode" + }, + "type": "array", + "title": "Postal Codes", + "description": "Postal codes related to the locality suggestion." + } + }, + "type": "object", + "required": [ + "postal_codes" + ], + "title": "Related" + }, + "RelatedPostalCode": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id" + }, + "description": { + "type": "string", + "title": "Description" + } + }, + "type": "object", + "required": [ + "public_id", + "description" + ], + "title": "RelatedPostalCode" + }, + "ReverseGeocodeResponse": { + "properties": { + "results": { + "items": { + "$ref": "#/components/schemas/ReverseGeocodeResult" + }, + "type": "array", + "title": "Results" + } + }, + "type": "object", + "required": [ + "results" + ], + "title": "ReverseGeocodeResponse", + "description": "Localities Geocode Collection Response. Contains one or more detailed Localities or\nAddresses in FR or in the UK, with coordinates (default to one result for reverse geocoding)", + "examples": [ + { + "results": [ + { + "address_components": [ + { + "long_name": "United Kingdom", + "short_name": "GB", + "types": [ + "country", + "administrative_area_level_0", + "division_level_0" + ] + }, + { + "long_name": "England", + "short_name": "England", + "types": [ + "state", + "division_level_1" + ] + }, + { + "long_name": "City of London", + "short_name": "City of London", + "types": [ + "administrative_area_level_1", + "county", + "division_level_2" + ] + }, + { + "long_name": "Westminster", + "short_name": "Westminster", + "types": [ + "district", + "division_level_3" + ] + }, + { + "long_name": "London", + "short_name": "London", + "types": [ + "locality" + ] + }, + { + "long_name": "W2 5ER", + "short_name": "W2 5ER", + "types": [ + "postal_codes" + ] + }, + { + "long_name": "Alfred Road", + "short_name": "Alfred Road", + "types": [ + "route" + ] + }, + { + "long_name": "Radway House", + "short_name": "Radway House", + "types": [ + "premise" + ] + } + ], + "distance": 28.62347934634507, + "formatted_address": "Radway House, Alfred Road, London, W2 5ER", + "geometry": { + "location": { + "lat": 51.5211258, + "lng": -0.1956346 + }, + "location_type": "ROOFTOP" + }, + "public_id": "", + "sub_buildings": [ + { + "description": "Flat 1, Radway House, Alfred Road, London, W2 5ER", + "public_id": "Nmp0K1VVUFQ4eFI3S1BuaDZEZVVJVWhYY3A4PV9faitia1pNNURnOWYvQmRjMUdweXl5SjdLZUZnPQ==" + }, + { + "description": "Flat 2, Radway House, Alfred Road, London, W2 5ER", + "public_id": "Nmp0K1VVUFQ4eFI3S1BuaDZEZVVJVWhYY3A4PV9fbTRoZVpxYkhBYVVXSytqek04UGtGQ1VLTVI0PQ==" + }, + { + "description": "Flat 3, Radway House, Alfred Road, London, W2 5ER", + "public_id": "Nmp0K1VVUFQ4eFI3S1BuaDZEZVVJVWhYY3A4PV9fcmY1MHV6aE5kVytLWWZLV3JabzFzR2lnbThzPQ==" + } + ], + "types": [ + "address" + ] + } + ] + } + ] + }, + "ReverseGeocodeResult": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id", + "description": "Unique identifier for this place." + }, + "types": { + "items": { + "$ref": "#/components/schemas/LocalityTypeAll" + }, + "type": "array", + "title": "Types", + "description": "An array containing the types of the result" + }, + "formatted_address": { + "type": "string", + "title": "Formatted Address", + "description": "Contains the readable text description of the result." + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "Name of the result when available" + }, + "address_components": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AddressComponent" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Address Components" + }, + "administrative_area_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Administrative Area Label", + "description": "Only available for `admin_level` suggestions, this contains the local english name of the administration level (\"department\" for France or \"federal_state\" for Germany)." + }, + "status": { + "anyOf": [ + { + "type": "string", + "const": "not_yet_built" + }, + { + "type": "null" + } + ], + "title": "Status", + "description": "This optional field is only available for UK addresses referenced as not yet built by Royal Mail." + }, + "geometry": { + "anyOf": [ + { + "$ref": "#/components/schemas/GeocodeGeometry" + }, + { + "type": "null" + } + ] + }, + "distance": { + "type": "number", + "title": "Distance", + "description": "When reverse geocoding, this field represents the distance (in meter) to the requested latlng" + }, + "sub_buildings": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AddressSummary" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sub Buildings", + "description": "When reverse geocoding with `list_sub_buildings=true`, this field will contain a list of precise addresses that can be found at that location, i.e. all flats within a building." + } + }, + "type": "object", + "required": [ + "public_id", + "types", + "formatted_address", + "distance" + ], + "title": "ReverseGeocodeResult", + "description": "Attributes describing a locality. Not all attributes will be available for all locality types." + }, + "Shape": { + "properties": { + "type": { + "type": "string", + "enum": [ + "Polygon", + "MultiPolygon" + ], + "title": "Type" + }, + "coordinates": { + "anyOf": [ + { + "items": { + "items": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array" + }, + "type": "array" + }, + { + "items": { + "items": { + "items": { + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "array" + }, + "type": "array" + }, + "type": "array" + } + ], + "title": "Coordinates" + } + }, + "type": "object", + "required": [ + "type", + "coordinates" + ], + "title": "Shape" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + }, + "Viewport": { + "properties": { + "northeast": { + "$ref": "#/components/schemas/Location" + }, + "southwest": { + "$ref": "#/components/schemas/Location" + } + }, + "type": "object", + "required": [ + "northeast", + "southwest" + ], + "title": "Viewport" + } + }, + "securitySchemes": { + "PublicAPIKey": { + "type": "apiKey", + "description": "Public key of the project (starts with `woos-`) or an API key (a UUID).", + "in": "query", + "name": "key" + }, + "PrivateApiKey": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "query", + "name": "private_key" + }, + "PrivateApiKeyHeader": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "header", + "name": "X-Api-Key" + } + } + }, + "tags": [ + { + "name": "Localities API", + "description": "Worldwide address, locality, postal code and POI search: autocomplete, geocode, details and nearby." + } + ] +} diff --git a/upstream/maps.json b/upstream/maps.json new file mode 100644 index 00000000..1b323a44 --- /dev/null +++ b/upstream/maps.json @@ -0,0 +1,661 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Maps", + "description": "Maps API can provide style.json and map tiles.\n\n> Note: this API requires the `MAP` product to be activated on the project.", + "version": "v6.1.32" + }, + "paths": { + "/maps/static": { + "get": { + "tags": [ + "static" + ], + "summary": "Get Static Map", + "description": "Retrieve a static map\n\n**Ratelimit:** 20/1s", + "operationId": "get_static_map_maps_static_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Language" + } + }, + { + "name": "lat", + "in": "query", + "required": true, + "schema": { + "type": "number", + "maximum": 90.0, + "minimum": -90.0, + "title": "Lat" + }, + "examples": { + "default": { + "value": 43.6 + } + } + }, + { + "name": "lng", + "in": "query", + "required": true, + "schema": { + "type": "number", + "maximum": 180.0, + "minimum": -180.0, + "title": "Lng" + }, + "examples": { + "default": { + "value": 3.883 + } + } + }, + { + "name": "zoom", + "in": "query", + "required": true, + "schema": { + "type": "number", + "maximum": 24, + "minimum": 0, + "description": "The zoom", + "title": "Zoom" + }, + "description": "The zoom", + "examples": { + "default": { + "value": 11 + } + } + }, + { + "name": "width", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "maximum": 1280, + "minimum": 40, + "description": "Width in pixels. width * height must not exceed 409,600.", + "title": "Width" + }, + "description": "Width in pixels. width * height must not exceed 409,600.", + "examples": { + "default": { + "value": 400 + } + } + }, + { + "name": "height", + "in": "query", + "required": true, + "schema": { + "type": "integer", + "maximum": 1280, + "minimum": 40, + "description": "Height in pixels. width * height must not exceed 409,600.", + "title": "Height" + }, + "description": "Height in pixels. width * height must not exceed 409,600.", + "examples": { + "default": { + "value": 400 + } + } + }, + { + "name": "markers", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "contentMediaType": "application/json", + "contentSchema": { + "$ref": "#/components/schemas/MarkerWithUrlOptions" + }, + "type": "string" + }, + "description": "Adds a marker.\n\nThe images are by default are considered to be non retina images (pixel resolution=1)\n\nIf the image name contains @2x or the query parameter retina=yes are found in the marker url the image will be considered to be retina (pixel resolution=2).\n\n> Note: the image size in bytes cannot exceed 65535 bytes.\n\n ", + "title": "Markers" + }, + "description": "Adds a marker.\n\nThe images are by default are considered to be non retina images (pixel resolution=1)\n\nIf the image name contains @2x or the query parameter retina=yes are found in the marker url the image will be considered to be retina (pixel resolution=2).\n\n> Note: the image size in bytes cannot exceed 65535 bytes.\n\n ", + "examples": { + "default": { + "value": [ + "{\"lat\": 43.6, \"lng\": 3.883, \"url\": \"https://webapp.woosmap.com/img/geolocated_marker.png?retina=yes\"}" + ] + } + } + }, + { + "name": "polylines", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "contentMediaType": "application/json", + "contentSchema": { + "$ref": "#/components/schemas/PolylineOptions" + }, + "type": "string" + }, + "description": "Add a polyline.\n\n> Note: enc should be a google encoded polyline see [Google-encoded polyline](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) for more information\n\n ", + "title": "Polylines" + }, + "description": "Add a polyline.\n\n> Note: enc should be a google encoded polyline see [Google-encoded polyline](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) for more information\n\n ", + "examples": { + "default": { + "value": [ + "{\"enc\": \"ydjiG_}jVjn@cjAf`AycBnc@mqCp\\\\ewBrQmlBzrAeuCreBw_C\", \"color\": \"magenta\", \"weight\": 4}" + ] + } + } + }, + { + "name": "polygons", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "contentMediaType": "application/json", + "contentSchema": { + "$ref": "#/components/schemas/PolygonOptions" + }, + "type": "string" + }, + "description": "Adds a polygon.\n\n> Note: shape should be a google encoded polyline see [Google-encoded polyline](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) for more information\n ", + "title": "Polygons" + }, + "description": "Adds a polygon.\n\n> Note: shape should be a google encoded polyline see [Google-encoded polyline](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) for more information\n ", + "examples": { + "default": { + "value": [ + "{\"shape\": \"ymgiGm|rV~uAtaB|dAefCqeBwuFu~@njC??\", \"fill_color\": \"rgba(255, 20, 147, 0.5)\", \"color\": \"rgba(199, 21, 133, 0.7)\"}" + ] + } + } + }, + { + "name": "retina", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Retina" + } + }, + { + "name": "stylers", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "contentMediaType": "application/json", + "contentSchema": { + "items": { + "$ref": "#/components/schemas/MapStyle" + }, + "type": "array" + }, + "type": "string", + "title": "Stylers" + }, + "examples": { + "default": { + "value": "[{\"featureType\": \"points_of_interest.business\", \"stylers\":[{\"visibility\": \"off\"}]}]" + } + } + }, + { + "name": "visual_refresh", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Opt in or out of the refreshed street style. Omitted, the server default and the grandfathered organizations decide.", + "title": "Visual Refresh" + }, + "description": "Opt in or out of the refreshed street style. Omitted, the server default and the grandfathered organizations decide." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "image/webp": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + } + }, + "components": { + "schemas": { + "AuthenticationErrorResponse": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "AuthenticationErrorResponse", + "description": "AuthenticationErrorResponse is the base authentication error model." + }, + "HTTPErrorModel": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "HTTPErrorModel" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + }, + "MarkerWithUrlOptions": { + "example": { + "lat": 43.6, + "lng": 3.883, + "url": "https://webapp.woosmap.com/img/geolocated_marker.png?retina=yes" + }, + "properties": { + "lat": { + "title": "Lat", + "type": "number" + }, + "lng": { + "title": "Lng", + "type": "number" + }, + "url": { + "anyOf": [ + { + "format": "uri", + "maxLength": 2083, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url" + } + }, + "required": [ + "lat", + "lng" + ], + "title": "MarkerWithUrlOptions", + "type": "object" + }, + "PolylineOptions": { + "example": { + "color": "magenta", + "enc": "ydjiG_}jVjn@cjAf`AycBnc@mqCp\\ewBrQmlBzrAeuCreBw_C", + "weight": 4 + }, + "properties": { + "enc": { + "title": "Enc", + "type": "string" + }, + "color": { + "default": "rgb(65, 176, 246)", + "title": "Color", + "type": "string" + }, + "weight": { + "default": 1.0, + "title": "Weight", + "type": "number" + } + }, + "required": [ + "enc" + ], + "title": "PolylineOptions", + "type": "object" + }, + "PolygonOptions": { + "example": { + "color": "rgba(199, 21, 133, 0.7)", + "fill_color": "rgba(255, 20, 147, 0.5)", + "shape": "ymgiGm|rV~uAtaB|dAefCqeBwuFu~@njC??" + }, + "properties": { + "shape": { + "title": "Shape", + "type": "string" + }, + "color": { + "default": "rgb(65, 176, 246)", + "title": "Color", + "type": "string" + }, + "fill_color": { + "default": "rgba(65, 176, 246, 0.5)", + "title": "Fill Color", + "type": "string" + }, + "weight": { + "default": 1.0, + "title": "Weight", + "type": "number" + } + }, + "required": [ + "shape" + ], + "title": "PolygonOptions", + "type": "object" + }, + "MapStyle": { + "properties": { + "featureType": { + "title": "Featuretype", + "type": "string" + }, + "elementType": { + "default": "all", + "title": "Elementtype", + "type": "string" + }, + "stylers": { + "items": { + "$ref": "#/components/schemas/MapStyler" + }, + "title": "Stylers", + "type": "array" + } + }, + "required": [ + "featureType", + "stylers" + ], + "title": "MapStyle", + "type": "object" + }, + "MapStyler": { + "properties": { + "visibility": { + "anyOf": [ + { + "enum": [ + "on", + "off" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Visibility" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + }, + "hue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hue" + }, + "saturation": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Saturation" + }, + "gamma": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Gamma" + }, + "lightness": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Lightness" + } + }, + "title": "MapStyler", + "type": "object" + }, + "MarkerOptions": { + "properties": { + "lat": { + "title": "Lat", + "type": "number" + }, + "lng": { + "title": "Lng", + "type": "number" + } + }, + "required": [ + "lat", + "lng" + ], + "title": "MarkerOptions", + "type": "object" + } + }, + "securitySchemes": { + "PublicAPIKey": { + "type": "apiKey", + "description": "Public key of the project (starts with `woos-`) or an API key (a UUID).", + "in": "query", + "name": "key" + }, + "PrivateApiKey": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "query", + "name": "private_key" + }, + "PrivateApiKeyHeader": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "header", + "name": "X-Api-Key" + } + } + } +} diff --git a/upstream/transit.json b/upstream/transit.json new file mode 100644 index 00000000..f631e16d --- /dev/null +++ b/upstream/transit.json @@ -0,0 +1,986 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "External-api-wrapper", + "summary": "Public Transportation Routing and Async Matrices", + "description": "Calculate routes using public transporatation (trains, busses, etc.). Also calculate large (10k x 10k) matrices of routes if you are travelling by car or HGV.", + "version": "v6.0.48" + }, + "paths": { + "/distance/matrix/async/": { + "post": { + "tags": [ + "Distance Matrix Async" + ], + "summary": "Start Matrix Calculation", + "description": "Start an asynchronous matrix calculation.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "start_async_matrix_distance_matrix_async__post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatrixRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatrixResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/distance/matrix/async/{matrix_id}/status": { + "get": { + "tags": [ + "Distance Matrix Async" + ], + "summary": "Check Matrix Calculation Status", + "description": "Check on the progress of an asynchronous matrix calculation.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "async_matrix_status_distance_matrix_async__matrix_id__status_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "matrix_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the matrix you want to check the status of.", + "title": "Matrix Id" + }, + "description": "The ID of the matrix you want to check the status of." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatrixCheckResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/distance/matrix/async/{matrix_id}": { + "get": { + "tags": [ + "Distance Matrix Async" + ], + "summary": "Get Matrix Calculation Result", + "description": "Get the results of an asynchronous matrix calculation.\n\nYou should confirm using the `/matrix/{matrix_id}/status` endpoint that the calculation is `completed` before calling this endpoint.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "async_matrix_distance_matrix_async__matrix_id__get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "matrix_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The ID of the matrix you want to get the result of", + "title": "Matrix Id" + }, + "description": "The ID of the matrix you want to get the result of" + } + ], + "responses": { + "303": { + "description": "Redirect to the result of the matrix calculation.", + "content": { + "application/json": { + "schema": {} + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/transit/route": { + "get": { + "tags": [ + "transit" + ], + "summary": "Transit Route", + "description": "**Rate limit**: `10/1s`\n\n**Ratelimit:** 10/1s", + "operationId": "transit_route_transit_route_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "departure_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Departure Time", + "description": "DateTime with or without timezone, if not set the default datetime is the current one", + "examples": [ + "2024-01-01T12:00:00%2B01:00" + ] + }, + "description": "DateTime with or without timezone, if not set the default datetime is the current one" + }, + { + "name": "arrival_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Arrival Time", + "description": "DateTime with or without timezone, if departure_time is defined this parameter is ignored", + "examples": [ + "2024-01-01T14:00:00%2B01:00" + ] + }, + "description": "DateTime with or without timezone, if departure_time is defined this parameter is ignored" + }, + { + "name": "origin", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Position", + "description": "WGS84 coordinates as format lat,lng", + "examples": [ + "lat,lng" + ] + }, + "description": "WGS84 coordinates as format lat,lng" + }, + { + "name": "destination", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Position", + "description": "WGS84 coordinates as format lat,lng", + "examples": [ + "lat,lng" + ] + }, + "description": "WGS84 coordinates as format lat,lng" + }, + { + "name": "modes", + "in": "query", + "required": false, + "schema": { + "type": "string", + "title": "Array of Modes (string) or Excluded modes (string) (TransitModesFilter)", + "description": "Transit mode filter used to determine which modes of transit to include in the response. \n By default, all supported transit modes are permitted. Supported modes: `highSpeedTrain` `intercityTrain` `interRegionalTrain` `regionalTrain` `cityTrain` `bus` `ferry` `subway` `lightRail` `privateBus` `inclined` `aerial` `busRapid` `monorail` `flight` `spaceship` This parameter also support an exclusion list: It's sufficient to specify each mode to exclude by prefixing it with `-`. \n Mixing of inclusive and exclusive transit modes is not allowed.", + "examples": [ + "subway,bus", + "-subway,-bus" + ] + }, + "description": "Transit mode filter used to determine which modes of transit to include in the response. \n By default, all supported transit modes are permitted. Supported modes: `highSpeedTrain` `intercityTrain` `interRegionalTrain` `regionalTrain` `cityTrain` `bus` `ferry` `subway` `lightRail` `privateBus` `inclined` `aerial` `busRapid` `monorail` `flight` `spaceship` This parameter also support an exclusion list: It's sufficient to specify each mode to exclude by prefixing it with `-`. \n Mixing of inclusive and exclusive transit modes is not allowed." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Transit" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/transit/route?origin=48.73534,2.368308&destination=48.83534,2.368308&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/transit/route?origin=48.73534,2.368308&destination=48.83534,2.368308&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/transit/route?origin=48.73534,2.368308&destination=48.83534,2.368308&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ], + "x-ratelimit-limit": 10, + "x-ratelimit-window-seconds": 1 + } + } + }, + "components": { + "schemas": { + "AuthenticationErrorResponse": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "AuthenticationErrorResponse", + "description": "AuthenticationErrorResponse is the base authentication error model." + }, + "HTTPErrorModel": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "HTTPErrorModel" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "MatrixCheckResponse": { + "properties": { + "status": { + "type": "string", + "enum": [ + "accepted", + "inProgress", + "completed", + "timeout", + "error" + ], + "title": "Status", + "description": "Status of the matrix calculation" + } + }, + "type": "object", + "required": [ + "status" + ], + "title": "MatrixCheckResponse" + }, + "MatrixRequest": { + "properties": { + "origins": { + "type": "string", + "title": "Origins", + "description": "The starting points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.709,2.403|48.768,2.338" + ] + }, + "destinations": { + "type": "string", + "title": "Destinations", + "description": "The ending points. You can supply one or more locations, in the form of `latitude,longitude` coordinates, separated by the pipe character `|`. Ensure that no space exists between the latitude and longitude values.", + "examples": [ + "48.709,2.403|48.768,2.338" + ] + }, + "mode": { + "type": "string", + "enum": [ + "driving", + "truck" + ], + "title": "Mode", + "description": "Specifies the mode of transport to use when calculating distance", + "default": "driving", + "examples": [ + "driving" + ] + } + }, + "type": "object", + "required": [ + "origins", + "destinations" + ], + "title": "MatrixRequest" + }, + "MatrixResponse": { + "properties": { + "matrix_id": { + "type": "string", + "title": "Matrix Id", + "description": "Unique identifier for the matrix requested, this will be used to check the status and retrieve the completed calculation." + }, + "status": { + "type": "string", + "enum": [ + "accepted", + "inProgress", + "completed", + "timeout", + "error" + ], + "title": "Status", + "description": "Status of the matrix calculation" + } + }, + "type": "object", + "required": [ + "matrix_id", + "status" + ], + "title": "MatrixResponse" + }, + "Transit": { + "properties": { + "status": { + "type": "string", + "title": "Status" + }, + "routes": { + "items": { + "$ref": "#/components/schemas/TransitRoute" + }, + "type": "array", + "title": "Routes", + "default": [] + } + }, + "type": "object", + "required": [ + "status" + ], + "title": "Transit" + }, + "TransitAttributions": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "href": { + "type": "string", + "title": "Href" + }, + "text": { + "type": "string", + "title": "Text" + }, + "type": { + "type": "string", + "title": "Type" + } + }, + "type": "object", + "required": [ + "id", + "href", + "text", + "type" + ], + "title": "TransitAttributions" + }, + "TransitLeg": { + "properties": { + "travel_mode": { + "type": "string", + "title": "Travel Mode" + }, + "duration": { + "type": "integer", + "title": "Duration" + }, + "distance": { + "type": "number", + "title": "Distance" + }, + "polyline": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Polyline" + }, + "start_location": { + "$ref": "#/components/schemas/TransitPlace" + }, + "end_location": { + "$ref": "#/components/schemas/TransitPlace" + }, + "transport": { + "anyOf": [ + { + "$ref": "#/components/schemas/TransitTransport" + }, + { + "type": "null" + } + ] + }, + "attributions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/TransitAttributions" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Attributions" + } + }, + "type": "object", + "required": [ + "travel_mode", + "duration", + "distance", + "polyline", + "start_location", + "end_location" + ], + "title": "TransitLeg" + }, + "TransitPlace": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "type": { + "type": "string", + "title": "Type" + }, + "location": { + "$ref": "#/components/schemas/TransitPosition" + } + }, + "type": "object", + "required": [ + "type", + "location" + ], + "title": "TransitPlace" + }, + "TransitPosition": { + "properties": { + "lat": { + "anyOf": [ + { + "type": "number", + "maximum": 90.0, + "minimum": -90.0 + }, + { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" + } + ], + "title": "Lat" + }, + "lng": { + "anyOf": [ + { + "type": "number", + "maximum": 180.0, + "minimum": -180.0 + }, + { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" + } + ], + "title": "Lng" + } + }, + "type": "object", + "required": [ + "lat", + "lng" + ], + "title": "TransitPosition" + }, + "TransitRoute": { + "properties": { + "notice": { + "type": "string", + "title": "Notice", + "default": "" + }, + "duration": { + "type": "integer", + "title": "Duration" + }, + "legs": { + "items": { + "$ref": "#/components/schemas/TransitLeg" + }, + "type": "array", + "title": "Legs", + "default": [] + } + }, + "type": "object", + "required": [ + "duration" + ], + "title": "TransitRoute" + }, + "TransitTransport": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "mode": { + "type": "string", + "title": "Mode" + }, + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Category" + }, + "headsign": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Headsign" + }, + "short_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Short Name" + }, + "long_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Long Name" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Color" + }, + "text_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Text Color" + } + }, + "type": "object", + "required": [ + "mode" + ], + "title": "TransitTransport" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + } + }, + "securitySchemes": { + "PublicAPIKey": { + "type": "apiKey", + "description": "Public key of the project (starts with `woos-`) or an API key (a UUID).", + "in": "query", + "name": "key" + }, + "PrivateApiKey": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "query", + "name": "private_key" + }, + "PrivateApiKeyHeader": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "header", + "name": "X-Api-Key" + } + } + }, + "tags": [ + { + "name": "Transit & Matrix Async", + "description": "\n Get distance, duration and path (as a polyline and transports details) for a pair of origin and destination, based on the recommended route between those two points and by using public transportations.\n Also calculate large (10k x 10k) matrices of routes if you are travelling by car or HGV.\n " + } + ] +} diff --git a/upstream/what3words.json b/upstream/what3words.json new file mode 100644 index 00000000..d5ab31b5 --- /dev/null +++ b/upstream/what3words.json @@ -0,0 +1,1214 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "External-api-wrapper_what3words", + "summary": "Add What3Words capabilities to your address search", + "description": "Add What3Words capabilities to your address search", + "version": "v6.0.48" + }, + "paths": { + "/what3words/convert-to-3wa": { + "get": { + "tags": [ + "what3words" + ], + "summary": "Convert To What 3 Words", + "description": "This function will convert a latitude and longitude to a 3 word address, in the language of your choice.\nIt also returns country, the bounds of the grid square,\na nearby place (such as a local town) and a link to the what3words map site.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "convert_to_what_3_words_what3words_convert_to_3wa_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "coordinates", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "Coordinates as a comma separated string of latitude and longitude", + "examples": [ + "48.858304,2.294514" + ], + "title": "Coordinates" + }, + "description": "Coordinates as a comma separated string of latitude and longitude" + }, + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "enum": [ + "json", + "geojson" + ], + "type": "string", + "description": "Return data format type; can be either json or geojson", + "default": "json", + "title": "Format" + }, + "description": "Return data format type; can be either json or geojson" + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "A supported address language as an ISO 639-1 2 letter code.", + "default": "en", + "title": "Language" + }, + "description": "A supported address language as an ISO 639-1 2 letter code." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/JsonCoordinatesResponse" + }, + { + "$ref": "#/components/schemas/GeoJsonCoordinatesResponse" + } + ], + "title": "Response Convert To What 3 Words What3Words Convert To 3Wa Get" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/what3words/convert-to-3wa?coordinates=48.858304,2.294514&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/what3words/convert-to-3wa?coordinates=48.858304,2.294514&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/what3words/convert-to-3wa?coordinates=48.858304,2.294514&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ], + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/what3words/convert-to-address": { + "get": { + "tags": [ + "what3words" + ], + "summary": "Convert To Address", + "description": "This function converts a 3 word address to a list of address.\nIt will return at most the 5 closest addresses to the what3words provided.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "convert_to_address_what3words_convert_to_address_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "words", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "A 3 word address as a string. It must be three words separated with dots or a japanese middle dot character (・). Words separated by spaces will be rejected. Optionally, the 3 word address can be prefixed with /// (which would be encoded as %2F%2F%2F)", + "examples": [ + "couch.spotted.amended" + ], + "title": "Words" + }, + "description": "A 3 word address as a string. It must be three words separated with dots or a japanese middle dot character (・). Words separated by spaces will be rejected. Optionally, the 3 word address can be prefixed with /// (which would be encoded as %2F%2F%2F)" + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "A supported address language as an ISO 639-1 2 letter code.", + "default": "en", + "title": "Language" + }, + "description": "A supported address language as an ISO 639-1 2 letter code." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LiteAddressResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/what3words/convert-to-address?words=couch.spotted.amended&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/what3words/convert-to-address?words=couch.spotted.amended&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/what3words/convert-to-address?words=couch.spotted.amended&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ], + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + }, + "/what3words/autosuggest": { + "get": { + "tags": [ + "what3words" + ], + "summary": "Autosuggest", + "description": "AutoSuggest can take a slightly incorrect 3 word address and suggest a list of valid 3 word addresses.\nIt has powerful features that can, for example, optionally limit results to a country or area,\nand prioritise results that are near the user.\n\n**Rate limit**: `20/1s`\n\n**Ratelimit:** 20/1s", + "operationId": "autosuggest_what3words_autosuggest_get", + "security": [ + { + "PublicAPIKey": [] + }, + { + "PrivateApiKey": [] + }, + { + "PrivateApiKeyHeader": [] + } + ], + "parameters": [ + { + "name": "input", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "The full or partial 3 word address to obtain suggestions for. At minimum this must be the first two complete words plus at least one character from the third word.", + "examples": [ + "couch.spotted.a" + ], + "title": "Input" + }, + "description": "The full or partial 3 word address to obtain suggestions for. At minimum this must be the first two complete words plus at least one character from the third word." + }, + { + "name": "focus", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "This is a location, specified as latitude,longitude (often where the user making the query is). If specified, the results will be weighted to give preference to those near the focus.", + "examples": [ + "48.861026,2.335853" + ], + "title": "Focus" + }, + "description": "This is a location, specified as latitude,longitude (often where the user making the query is). If specified, the results will be weighted to give preference to those near the focus." + }, + { + "name": "clip-to-country", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restricts AutoSuggest to only return results inside the countries specified by comma-separated list of ISO 3166-1 alpha-2 country codes.", + "examples": [ + "FR" + ], + "title": "Clip-To-Country" + }, + "description": "Restricts AutoSuggest to only return results inside the countries specified by comma-separated list of ISO 3166-1 alpha-2 country codes." + }, + { + "name": "clip-to-bounding-box", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restrict AutoSuggest results to a bounding box, specified by coordinates.south_lat,west_lng,north_lat,east_lng, where: south_lat less than or equal to north_lat, west_lng less than or equal to east_lng.", + "examples": [ + "48.624314,1.804429,49.058148,2.908555" + ], + "title": "Clip-To-Bounding-Box" + }, + "description": "Restrict AutoSuggest results to a bounding box, specified by coordinates.south_lat,west_lng,north_lat,east_lng, where: south_lat less than or equal to north_lat, west_lng less than or equal to east_lng." + }, + { + "name": "clip-to-circle", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restrict AutoSuggest results to a circle, specified by lat, lng, kilometres, where kilometres is the radius of the circle.", + "examples": [ + "48.839701,2.291878,20" + ], + "title": "Clip-To-Circle" + }, + "description": "Restrict AutoSuggest results to a circle, specified by lat, lng, kilometres, where kilometres is the radius of the circle." + }, + { + "name": "clip-to-polygon", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restrict AutoSuggest results to a polygon, specified by a comma-separated list of lat, lng pairs. The polygon should be closed, i.e. the first element should be repeated as the last element; also the list should contain at least 4 pairs. The API is currently limited to accepting up to 25 pairs.", + "examples": [ + "48.823547,2.199174,48.823547,2.199174,48.922216,2.328709,48.888626,2.473673,48.819279,2.445513,48.784865,2.330668,48.823547,2.199174" + ], + "title": "Clip-To-Polygon" + }, + "description": "Restrict AutoSuggest results to a polygon, specified by a comma-separated list of lat, lng pairs. The polygon should be closed, i.e. the first element should be repeated as the last element; also the list should contain at least 4 pairs. The API is currently limited to accepting up to 25 pairs." + }, + { + "name": "input-type", + "in": "query", + "required": false, + "schema": { + "enum": [ + "text", + "vocon-hybrid", + "nmdp-asr", + "generic-voice" + ], + "type": "string", + "description": "For power users, used to specify voice input mode.", + "default": "text", + "title": "Input-Type" + }, + "description": "For power users, used to specify voice input mode." + }, + { + "name": "prefer-land", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Makes AutoSuggest prefer results on land to those in the sea.", + "default": true, + "title": "Prefer-Land" + }, + "description": "Makes AutoSuggest prefer results on land to those in the sea." + }, + { + "name": "language", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "For normal text input, specifies a fallback language, which will help guide AutoSuggest if the input is particularly messy. A supported address language as an ISO 639-1 2 letter code.", + "examples": [ + "fr" + ], + "title": "Language" + }, + "description": "For normal text input, specifies a fallback language, which will help guide AutoSuggest if the input is particularly messy. A supported address language as an ISO 639-1 2 letter code." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoSuggestResponse" + } + } + } + }, + "401": { + "description": "Unable to locate credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "402": { + "description": "Out of free quota.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "403": { + "description": "Credentials found, but not matching.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationErrorResponse" + } + } + } + }, + "429": { + "description": "Rate limit reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPErrorModel" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "curl", + "label": "cURL", + "source": "curl -L -X GET 'https://api.woosmap.com/what3words/autosuggest?input=couch.spotted.am&clip-to-country=fr&key=YOUR_PUBLIC_API_KEY' \\\n-H 'Referer: http://localhost'" + }, + { + "lang": "python", + "label": "Python", + "source": "import requests\n\nurl = \"https://api.woosmap.com/what3words/autosuggest?input=couch.spotted.am&clip-to-country=fr&key=YOUR_PUBLIC_API_KEY\"\n\npayload={}\nheaders = {\n 'Referer': 'http://localhost'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n" + }, + { + "lang": "javascript", + "label": "JavaScript", + "source": "var requestOptions = {\n method: 'GET',\n redirect: 'follow'\n};\n\nfetch(\"https://api.woosmap.com/what3words/autosuggest?input=couch.spotted.am&clip-to-country=fr&key=YOUR_PUBLIC_API_KEY\", requestOptions)\n .then(response => response.text())\n .then(result => console.log(result))\n .catch(error => console.log('error', error));" + } + ], + "x-ratelimit-limit": 20, + "x-ratelimit-window-seconds": 1 + } + } + }, + "components": { + "schemas": { + "AddressSummary": { + "properties": { + "public_id": { + "type": "string", + "title": "Public Id", + "description": "Public ID of address listed as sub_building" + }, + "description": { + "type": "string", + "title": "Description", + "description": "Human readable address" + } + }, + "type": "object", + "required": [ + "public_id", + "description" + ], + "title": "AddressSummary" + }, + "AuthenticationErrorResponse": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "AuthenticationErrorResponse", + "description": "AuthenticationErrorResponse is the base authentication error model." + }, + "AutoSuggestResponse": { + "properties": { + "suggestions": { + "items": { + "$ref": "#/components/schemas/AutoSuggestions" + }, + "type": "array", + "title": "Suggestions" + } + }, + "type": "object", + "required": [ + "suggestions" + ], + "title": "AutoSuggestResponse", + "example": { + "suggestions": [ + { + "country": "FR", + "distanceToFocusKm": 4, + "language": "en", + "nearestPlace": "Paris", + "rank": 1, + "words": "couches.spotted.alas" + }, + { + "country": "FR", + "distanceToFocusKm": 8, + "language": "en", + "nearestPlace": "Paris", + "rank": 2, + "words": "couches.spotted.atom" + }, + { + "country": "FR", + "distanceToFocusKm": 30, + "language": "en", + "nearestPlace": "Pontcarré, Seine-et-Marne", + "rank": 3, + "words": "couch.spotted.boat" + }, + { + "country": "FR", + "distanceToFocusKm": 27, + "language": "en", + "nearestPlace": "Triel-sur-Seine, Yvelines", + "rank": 4, + "words": "vouch.spotted.dare" + } + ] + } + }, + "AutoSuggestions": { + "properties": { + "country": { + "type": "string", + "title": "Country", + "description": "Country Code" + }, + "nearestPlace": { + "type": "string", + "title": "Nearestplace", + "description": "Nearest Place" + }, + "words": { + "type": "string", + "title": "Words", + "description": "The what3words address" + }, + "distanceToFocusKm": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Distancetofocuskm", + "description": "Distance to the Lat Lng focus (if provided)" + }, + "rank": { + "type": "integer", + "title": "Rank", + "description": "Suggestion Rank" + }, + "language": { + "type": "string", + "title": "Language", + "description": "Language Code" + } + }, + "type": "object", + "required": [ + "country", + "nearestPlace", + "words", + "rank", + "language" + ], + "title": "AutoSuggestions" + }, + "Coordinates": { + "properties": { + "lng": { + "type": "number", + "title": "Lng", + "description": "Longitude" + }, + "lat": { + "type": "number", + "title": "Lat", + "description": "Latitude" + } + }, + "type": "object", + "required": [ + "lng", + "lat" + ], + "title": "Coordinates" + }, + "GeoJsonCoordinatesResponse": { + "properties": { + "features": { + "items": { + "$ref": "#/components/schemas/GeoJsonFeature" + }, + "type": "array", + "title": "Features", + "description": "GeoJSON Features" + }, + "type": { + "type": "string", + "title": "Type", + "description": "GeoJSON Type" + } + }, + "type": "object", + "required": [ + "features", + "type" + ], + "title": "GeoJsonCoordinatesResponse", + "example": { + "features": [ + { + "bbox": [ + 2.294494, + 48.85829, + 2.294535, + 48.858317 + ], + "geometry": { + "coordinates": [ + 2.294514, + 48.858304 + ], + "type": "Point" + }, + "properties": { + "country": "FR", + "nearestPlace": "Paris", + "words": "couch.spotted.amended", + "language": "en", + "map": "https://w3w.co/couch.spotted.amended" + }, + "type": "Feature" + } + ], + "type": "FeatureCollection" + } + }, + "GeoJsonFeature": { + "properties": { + "bbox": { + "items": { + "type": "number" + }, + "type": "array", + "maxItems": 4, + "minItems": 4, + "title": "Bbox", + "description": "Bounding Box" + }, + "geometry": { + "additionalProperties": true, + "type": "object", + "title": "Geometry", + "description": "Geometry" + }, + "type": { + "type": "string", + "title": "Type", + "description": "GeoJSON type" + }, + "properties": { + "$ref": "#/components/schemas/Properties", + "description": "Feature Properties" + } + }, + "type": "object", + "required": [ + "bbox", + "geometry", + "type", + "properties" + ], + "title": "GeoJsonFeature" + }, + "HTTPErrorModel": { + "properties": { + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "HTTPErrorModel" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "JsonCoordinatesResponse": { + "properties": { + "country": { + "type": "string", + "title": "Country", + "description": "Country Code" + }, + "nearestPlace": { + "type": "string", + "title": "Nearestplace", + "description": "Nearest Place" + }, + "words": { + "type": "string", + "title": "Words", + "description": "The what3words address" + }, + "language": { + "type": "string", + "title": "Language", + "description": "Language Code" + }, + "locale": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Locale", + "description": "Language Locale" + }, + "map": { + "type": "string", + "title": "Map", + "description": "Link to what3words address on a map" + }, + "square": { + "$ref": "#/components/schemas/Square", + "description": "Lat Lng coordinate Square" + }, + "coordinates": { + "$ref": "#/components/schemas/Coordinates", + "description": "Lat Lng coordinate" + } + }, + "type": "object", + "required": [ + "country", + "nearestPlace", + "words", + "language", + "map", + "square", + "coordinates" + ], + "title": "JsonCoordinatesResponse", + "example": { + "coordinates": { + "lat": 48.858304, + "lng": 2.294514 + }, + "country": "FR", + "language": "en", + "map": "https://w3w.co/couch.spotted.amended", + "nearestPlace": "Paris", + "square": { + "northeast": { + "lat": 48.858317, + "lng": 2.294535 + }, + "southwest": { + "lat": 48.85829, + "lng": 2.294494 + } + }, + "words": "couch.spotted.amended" + } + }, + "LiteAddressResponse": { + "properties": { + "results": { + "items": { + "$ref": "#/components/schemas/LiteAddressResult" + }, + "type": "array", + "title": "Results", + "description": "Results" + } + }, + "type": "object", + "required": [ + "results" + ], + "title": "LiteAddressResponse", + "example": { + "results": [ + { + "description": "Radway House, Alfred Road, London, W2 5ER", + "public_id": "", + "sub_buildings": [ + { + "description": "Flat 1, Radway House, Alfred Road, London, W2 5ER", + "public_id": "Nmp0K1VVUFQ4eFI3S1BuaDZEZVVJVWhYY3A4PV9faitia1pNNURnOWYvQmRjMUdweXl5SjdLZUZnPQ==" + }, + { + "description": "Flat 2, Radway House, Alfred Road, London, W2 5ER", + "public_id": "Nmp0K1VVUFQ4eFI3S1BuaDZEZVVJVWhYY3A4PV9fbTRoZVpxYkhBYVVXSytqek04UGtGQ1VLTVI0PQ==" + } + ], + "types": [ + "address" + ] + }, + { + "description": "Astley House, Alfred Road, London, W2 5EX", + "public_id": "", + "status": "not_yet_built", + "sub_buildings": [ + { + "description": "Flat 1, Astley House, Alfred Road, London, W2 5EX", + "public_id": "N3VCclhUODduWjJxd2NCSUdFclJ6SnRseGxrPV9fSTBKM1YxOFBBWEJjRVNKb1J0T3hNTFNiLzhFPQ==" + }, + { + "description": "Flat 2, Astley House, Alfred Road, London, W2 5EX", + "public_id": "N3VCclhUODduWjJxd2NCSUdFclJ6SnRseGxrPV9fN3VCclhUODduWjJxd2NCSUdFclJ6SnRseGxrPQ==" + } + ], + "types": [ + "address" + ] + }, + { + "description": "65 Alfred Road, London, W2 5EU", + "public_id": "", + "sub_buildings": [ + { + "description": "Blaiz Ltd, 65 Alfred Road, London, W2 5EU", + "public_id": "MUVBZWttTlo4OUYxL2dQWmJteDdFV2VidmVvPV9fMUVBZWttTlo4OUYxL2dQWmJteDdFV2VidmVvPQ==" + }, + { + "description": "Carnot Ltd, 65 Alfred Road, London, W2 5EU", + "public_id": "MUVBZWttTlo4OUYxL2dQWmJteDdFV2VidmVvPV9fRDRPb0VLd0UvNEZYMlpLR21EMC9xRGQvMUZJPQ==" + } + ], + "types": [ + "address" + ] + } + ] + } + }, + "LiteAddressResult": { + "properties": { + "types": { + "items": { + "anyOf": [ + { + "type": "string", + "enum": [ + "address", + "route", + "named_place", + "locality", + "city", + "town", + "village", + "hamlet", + "borough", + "suburb", + "quarter", + "neighbourhood", + "postal_code", + "admin_level", + "admin_level_1", + "admin_level_2", + "admin_level_3" + ] + }, + { + "type": "string" + } + ] + }, + "type": "array", + "title": "Types", + "description": "Address Types" + }, + "formatted_address": { + "type": "string", + "title": "Formatted Address", + "description": "Human readable address" + }, + "public_id": { + "type": "string", + "title": "Public Id", + "description": "Public ID of the POI" + }, + "status": { + "anyOf": [ + { + "type": "string", + "const": "not_yet_built" + }, + { + "type": "null" + } + ], + "title": "Status", + "description": "Address Status" + }, + "sub_buildings": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AddressSummary" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sub Buildings", + "description": "list of specific addresses at that location" + } + }, + "type": "object", + "required": [ + "types", + "formatted_address", + "public_id" + ], + "title": "LiteAddressResult" + }, + "Properties": { + "properties": { + "country": { + "type": "string", + "title": "Country", + "description": "Country Code" + }, + "nearestPlace": { + "type": "string", + "title": "Nearestplace", + "description": "Nearest Place" + }, + "words": { + "type": "string", + "title": "Words", + "description": "The what3words address" + }, + "language": { + "type": "string", + "title": "Language", + "description": "Language Code" + }, + "locale": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Locale", + "description": "Language Locale" + }, + "map": { + "type": "string", + "title": "Map", + "description": "Link to what3words address on a map" + } + }, + "type": "object", + "required": [ + "country", + "nearestPlace", + "words", + "language", + "map" + ], + "title": "Properties" + }, + "Square": { + "properties": { + "southwest": { + "$ref": "#/components/schemas/Coordinates", + "description": "Lat Lng coordinate" + }, + "northeast": { + "$ref": "#/components/schemas/Coordinates", + "description": "Lat Lng coordinate" + } + }, + "type": "object", + "required": [ + "southwest", + "northeast" + ], + "title": "Square" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + } + }, + "securitySchemes": { + "PublicAPIKey": { + "type": "apiKey", + "description": "Public key of the project (starts with `woos-`) or an API key (a UUID).", + "in": "query", + "name": "key" + }, + "PrivateApiKey": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "query", + "name": "private_key" + }, + "PrivateApiKeyHeader": { + "type": "apiKey", + "description": "Private key with or without write permission.", + "in": "header", + "name": "X-Api-Key" + } + } + }, + "tags": [ + { + "name": "Woosmap for what3words API", + "description": "Add What3Words capabilities to your address search." + } + ] +}