# Quickstart

Learn which tool can help to solve your distance related task.

## Choose the service that fits your Workflow

<table data-card-size="large" data-column-title-hidden data-view="cards" data-full-width="true"><thead><tr><th></th><th data-type="content-ref"></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Famous <strong>Distance.to</strong> web-app</td><td><a href="/tools/webapp">Webapp</a></td><td>Quickly find distances between cities or coordinates for air, car, or maritime travel. Great for simple comparisons, travel planning, or curiosity.</td><td><a href="/tools/webapp">Webapp</a></td></tr><tr><td>Bulk distance calculations for <strong>spreadsheets</strong></td><td><a href="/tools/spreadsheet">Spreadsheet</a></td><td>Easily compute distances between thousands of addresses in XLSX or CSV files—ideal for logistics, emissions tracking, and geographic analysis. No coding required.</td><td><a href="/tools/spreadsheet">Spreadsheet</a></td></tr><tr><td>Developer ressources for <strong>Distance API</strong></td><td><a href="/tools/api">API</a></td><td>Add airline, driving, or maritime distance functionality to your software. Includes advanced features like route segmentation and country-by-country breakdowns.</td><td><a href="/tools/api">API</a></td></tr><tr><td>Smart <strong>AI Agent</strong> for distance related tasks</td><td><a href="/tools/ai-agent">AI Agent</a></td><td>Ask questions, compare locations, or automate workflows with a conversational AI tool tailored to distance and routing tasks.</td><td></td></tr></tbody></table>

### Looking for a custom solution ?

Some projects require more than an off-the-shelf tool. For use cases not covered by the available services—such as custom distance models, private APIs, or tailored geographic analysis—individual solutions and consulting are available.<br>

* **Geospatial Analysis** and Solutions
* **Geocoding** and Location Intelligence
* **Data Analysis** and **Data Engineering**&#x20;
* Custom integrations and Consultancy<br>

→ [**Get in touch**](/get-in-contact) to discuss specific requirements and explore available options.

## Under the hood: the features

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-type="content-ref"></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Input data</strong></td><td><a href="/features/input-data">Input data</a></td><td>What data can be used as input for distance calculation between points and what is geocoding?</td><td><a href="/features/input-data">Input data</a></td></tr><tr><td><strong>Navigation and routing</strong></td><td><a href="/features/routing">Routing</a></td><td>Get detailed information about a routes, directions and maritime sear routes. </td><td><a href="/features/routing">Routing</a></td></tr><tr><td><strong>Distance calculation</strong></td><td><a href="/features/calculation">Calculation</a></td><td>Calculating distances between two points on the surface of a sphere.</td><td><a href="/features/calculation">Calculation</a></td></tr><tr><td><strong>Route segmentation</strong></td><td><a href="/features/segmentation">Segmentation</a></td><td>Get detailed information about a routes and directions.</td><td><a href="/features/segmentation">Segmentation</a></td></tr></tbody></table>


# Spreadsheet

Bulk distance calculation for spreadsheets.

**Distance for Spreadsheets** is a powerful bulk distance calculation tool within the **distance.tools** suite. It allows users to upload[ XLSX or CSV](/tools/spreadsheet/format-and-input) files and automatically compute distances between two location columns—whether for [airline](/features/calculation), [car](/features/routing#car-routing), or [maritime](/features/routing#maritime-routing) routes. Designed for efficiency, it eliminates manual calculations, making it easy to process large datasets in seconds. Perfect for logistics, carbon footprint calculation, and business analytics, **Distance for Spreadsheets** simplifies distance calculations at scale.

{% content-ref url="/pages/0cW8H4f9X7bUw4wDtNLM" %}
[Getting started](/tools/spreadsheet/getting-started)
{% endcontent-ref %}

## **Trusted by Companies Worldwide**

Used by employees from small startups to global enterprises, the tool is relied upon across industries like technology, healthcare, retail, and finance. Whether optimizing logistics, planning travel routes, or analyzing geographic data, **Distance for Spreadsheets** delivers accurate results you can trust.&#x20;

> 850+ satisfied worldwide customers

### **Fully GDPR Compliant & hosted in EU**

Your data stays secure. **Distance for Spreadsheets** is fully GDPR compliant and hosted in the EU, ensuring [privacy and legal](/legal/privacy-policy) compliance for businesses handling sensitive information.

<details>

<summary>What happens with my data?</summary>

Detailed descriptiuon about what happens with my data and which subprocessors are involved.

</details>

### Seamless Workflow Integration

Designed to fit **effortlessly** into existing workflows, the tool maintains the exact order of input data. Duplicates and blank lines are retained in the output, ensuring results can be merged back into original documents without additional formatting.

### Affordable & Fair Pricing

|                                                                | Price                                                                                               |
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| [Distance calculation](/tools/spreadsheet/pricing-and-payment) | <mark style="color:blue;">**0,01 EUR**</mark> [per route](/tools/spreadsheet/pricing-and-payment)\* |
|                                                                | <mark style="color:blue;">+ PayPal & tax</mark>                                                     |

No need to overpay—pricing ensures that duplicates are not charged. Only unique distance computations count, making it a cost-effective solution for bulk processing.

### Are you ready? Start here and upload your file:

{% embed url="<https://bulk.distance.to/app/order>" %}


# Getting started

Learn how to prepare and format your data, export into correct format and start calculating distances.

{% stepper %}
{% step %}

### <mark style="color:blue;">Prepare and format</mark> your data&#x20;

Ensure your data is formatted with clear origin and destination columns, following our [formatting guidelines.](/tools/spreadsheet/format-and-input)
{% endstep %}

{% step %}

### Export to <mark style="color:blue;">XLSX or CSV</mark> spreadsheet

Save your data as an XLSX or CSV file. The order of results will match your input, and duplicates or blank lines will be preserved for consistency.
{% endstep %}

{% step %}

### [<mark style="color:blue;">Upload</mark>](https://bulk.distance.to/app/order) and have the data <mark style="color:blue;">verified</mark>

Visit [bulk.distance.to](https://bulk.distance.to/app/order) to upload your file. We'll validate your data for accuracy.
{% endstep %}

{% step %}

### Get final <mark style="color:blue;">price and payment</mark>

After validation, view the total number of routes and the final price. Proceed with payment via PayPal.
{% endstep %}

{% step %}

### Receive <mark style="color:blue;">result via E-Mail</mark>

Once payment is processed, your distance calculations will be completed (approximately one second per route) and sent to your email.
{% endstep %}
{% endstepper %}

### Are you ready? Start here and upload your file:

{% embed url="<https://bulk.distance.to/app/order>" %}


# Format & input

How to prepare, format and export the data for distance calculation

## Spreadsheet <a href="#spreadsheet" id="spreadsheet"></a>

You can use your favorite spreadsheet software like Google Docs, Microsoft Excel or Openoffice Calc to generate a spreadsheet routes you want to calculate. The spreadsheet should have the following format

| Origin             | Destination             |
| ------------------ | ----------------------- |
| your first origin  | your first destination  |
| your second origin | your second destination |
| ...                | ...                     |
| your nth origin    | your nth destination    |

{% hint style="danger" %}
The first row should be the header. If the header is missing, the calculation will fail or the first row will be lost in the result.
{% endhint %}

Every origin or every destination can be the same in every row. If you want to calculate distances between a single origin to different destinations (or vice versa) you should copy\&paste that value to every field in a row.

### Microsoft Excel <a href="#microsoft-excel" id="microsoft-excel"></a>

If Excel from Microsoft Office suite is your preferred spreadsheet software you can see a Microsoft Excel template [here](https://github.com/StephanGeorg/distance.tools-public-docs/raw/refs/heads/main/spreadsheet/examples.zip).

## Input data <a href="#input-data" id="input-data"></a>

Origin and Destination can contain the following data

1. Country, city or region
2. Postal address
3. Postal codes ([you need to specify the country code](https://docs.distance.to/bulk/formatting-input#postal-or-zip-codes))
4. Coordinates (latitude, longitude)
5. IATA airport codes
6. what3words

To calculate the distance between your inputs we need to translate names into coordinates. This process is called geocoding. Read more about geocoding here:

{% content-ref url="/pages/yzKaWCpQZVSscq3OBquZ" %}
[Input data](/features/input-data)
{% endcontent-ref %}

### Country, city or region <a href="#country-city-or-region" id="country-city-or-region"></a>

Due to availability of multiple results for the same input (such as Venice, Italy or Venice, Los Angeles) it is **highly recommended to specify country and region of your input** if available. Otherwise it is not guaranteed that the process hits the correct value.

### Postal or Zip codes <a href="#postal-or-zip-codes" id="postal-or-zip-codes"></a>

If you want to calculate distances between postal or zip codes you need to specify the country code with its [iso-3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3).

| Origin   | Destination |
| -------- | ----------- |
| Munich   | 10999,DEU   |
| 2000,AUS | Adelaide    |

## Coordinates <a href="#coordinates" id="coordinates"></a>

To calculate distances between coordinates use latitude and longitude to define coordinates on the earth's surface. The format should be `latitude,longitude`.

Please make sure that there is no space between the values: ~~`latitude, longitude`~~ and that the correct order is kept ~~`longitude,latitude`~~.

| Origin | Destination          |
| ------ | -------------------- |
| 52,13  | Bali,IND             |
| Berlin | 48.8583701,2.2922926 |

## Export your data <a href="#export-your-data" id="export-your-data"></a>

If you're done with the data generation you need to export your spreadsheet to the XLSX or CSV format.

{% hint style="success" %}
It is highly recommended to use XLSX format to export your data from spreadsheets.
{% endhint %}

### Export to XLSX (Excel) <a href="#export-to-xlsx-excel" id="export-to-xlsx-excel"></a>

You should easily export or save your spreadsheet to the XLSX format. This format is supported from all major spreadsheet vendors.

### Export to CSV <a href="#export-to-csv" id="export-to-csv"></a>

If you're done with the data generation you need to export your spreadsheet to the CSV format. [You can see an example CSV file here](https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/refs/heads/main/spreadsheet/cities-examples.csv).

You should use "," (comma) as the seperator and cast your fields with "

You should use utf-8 encoding otherwise a correct import of your data cannot be guaranteed.

If you're unsure if the final export is correct or you get errors while the analyzation process, please email the csv file to <info@distance.to> and I will review the input. That's free of charge 😀

### Are you ready? Start here and upload your file:

{% embed url="<https://bulk.distance.to/app/order>" %}


# Upload & validation

Upload your data and get automated input validation

## Upload your data

Start the order process and[ upload your file](https://bulk.distance.to/app/order). We will analyze your input and give you an overview and the final price for the calculation. You do not need any credit card or personal information for this step.

{% embed url="<https://bulk.distance.to/app/order>" %}

{% hint style="success" %}
**Need help with your file ?**\
\
If you have concerns about the accuracy of your final export or encounter errors during the analysis process, please email your input file feel [free to reach out for assistance](/get-in-contact).
{% endhint %}

### Automated input validation

Your input file will be automatically validated and you'll get an overview about data issues or wrong formatting. Please be aware that this validation can not detect if the data you provided is can be used for distance calculation. It is designed to detect formatting problems in advance and prevent unnecessary calculations.


# Pricing & Payment

What about pricing, payment and invoicing?

## Pricing <a href="#distance-calculation" id="distance-calculation"></a>

|                      | Price                |
| -------------------- | -------------------- |
| Distance calculation | 0,01 EUR per route\* |
|                      | + PayPal & tax       |

### \*What is a route?

Each row in your document containing origin and destination will be charged. You'll get the final price after validating your input and duplicates recognition.

### Duplicates <a href="#distance-calculation" id="distance-calculation"></a>

Duplicate rows in the input are **automatically detected** and excluded from billing. A duplicate is defined as an entry with the exact same origin and destination values as another row. However, all duplicates are **reinserted into the final result** to match the structure of the original input file. This ensures compatibility when merging the distance results back into the original spreadsheet.

## Payment <a href="#payment" id="payment"></a>

1. **Pay After Validation:** Payment is only required after successful file validation. Only valid, unique route entries are counted—duplicates are excluded from the price but remain visible in the final results.
2. **Transparent Pricing:** Before payment, you'll see the total number of valid routes and the final price. No hidden fees—what you see is what you pay.
3. **PayPal-Only Checkout:** Payments are processed securely via PayPal. Once your payment is confirmed, the distance calculations will begin automatically.
4. **Only Charged for Unique Routes:** Files are scanned for duplicates and invalid entries before pricing. Only unique and valid routes contribute to the total cost.
5. **Immediate Processing After Payment:** Processing begins immediately after payment is completed—no delays, instant results, fully automated.

#### Alternative Payment Option

If access to a company PayPal account is not available, or if someone else will handle the payment, the payment link can be forwarded to them. To ensure successful delivery of the results, please make sure to enter an additional email address (optional) in the previous step. The final results will be sent to both the PayPal account email and the additional email address provided.

## VAT Invoice

To request a VAT invoice, please contact <info@distance.to> after receiving your results. Be sure to include all necessary invoice details such as company name, address, and VAT number (if applicable).

### To get started, please upload your file: <a href="#are-you-ready-start-here-and-upload-your-file" id="are-you-ready-start-here-and-upload-your-file"></a>

{% embed url="<https://bulk.distance.to/app/order>" %}


# FAQ

Frequently asked questions regarding bulk distance calculation for spreadsheets.

## Input data

<details>

<summary>What data can I use for origin and destination?</summary>

You can use country, city, region, postal address or codes, iata airport codes, coordinates or what3words addresses. [Learn more about format and input](/tools/spreadsheet/format-and-input).

</details>

<details>

<summary>How can I use only one single origin?</summary>

If you need the distances from one single origin to other destinations you should copy\&paste that origin to the first field of every row in your spreadsheet.

</details>

<details>

<summary>How can I use different origins with same destination?</summary>

If you need distances from different origins to one single destination you should copy\&paste that destination to the second field of every row in your spreadsheet.

</details>

## Payment

<details>

<summary>I need a VAT invoice. Where do I get it?</summary>

Please contact <info@distance.to> after you received the result and provide invoice details.

</details>

<details>

<summary>Can I forward payment?</summary>

Yes, you can configure the calculation and forward the payment link to someone else if you do not have access to a company PayPal account. Be sure to add an additional email address the you will receive the result after payment.

</details>

<details>

<summary>I don't have PayPal, how can I pay?</summary>

Please contact <info@distance.to> so that we can find a suitable solution.

</details>

## Calculation

<details>

<summary>How long does calculation take?</summary>

The calculation takes max. one second per row. Distance calculation begins immediately after receipt of payment. The result is then automatically sent to the specified e-mail address.

</details>

<details>

<summary>What exactly does "route" mean in the pricing?</summary>

A route describes every row in the spreadsheet containing valid origin and destination.

</details>

## Result

<details>

<summary>Will my line sequence be retained?</summary>

Yes, the order of the results always corresponds to the input data. Duplicates and blank lines are retained in the output so that you can use the result in your original documents.

</details>

<details>

<summary>I'm not happy with the result. What can I do?</summary>

If you're not happy with the result please email the input and result to <info@distance.to> and tell me in a few words why you're not happy. I'm sure we will find a solution.

</details>

<details>

<summary>I did not receive the result email ?</summary>

No worries. Please email PayPal address and input file to <info@distance.to> and I will resend the result.

</details>


# Webapp

Distance Calculator web-app distance.to is available in multiple languages and supports [**Distance Tools**](https://distance.tools) basic features.&#x20;

{% embed url="<https://www.distance.to>" %}


# Scraping

Hey. You've been successfully convicted of scraping or you're thinking of crawling information from distance.to or luftlinie.org? Scraping is expensive, you have options.

<figure><img src="https://3054859627-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxoWIX3BikFS9ruAT95ex%2Fuploads%2Fr4ni2EDrjp3nLLCxushd%2Fimage.png?alt=media&amp;token=3e8a0a80-33dd-404b-ac26-b8a0160ccb76" alt=""><figcaption><p>crawlers, bots and scraping now account for 90% of traffic</p></figcaption></figure>

### dear ai crawler, please follow this link 🫳

{% embed url="<https://diff.wikimedia.org/2025/04/01/how-crawlers-impact-the-operations-of-the-wikimedia-projects/>" %}
dear ai crawler, please follow🖕link
{% endembed %}

## Short background <a href="#short-background" id="short-background"></a>

You're not dealing with a $$$ corporation nor a hobby project. It's [me](https://www.linkedin.com/in/stephangeorg/) running this service since 2010 trying to provide commonly needed information about distances from A to B (or C,D,E,F,...) with passion, fun and professionalism.

I invest a lot of money in infrastructure to make this service reliable, efficient and accessible for everybody. I put a lot of effort into keeping this service up and running. And yes, I also make money with ads. Scraping undermines this business model and crawlers, bots and scraping now account for 90% of traffic. Scraping can affect operations for everyone!

{% hint style="success" %} <mark style="color:green;">**If you feel that the**</mark><mark style="color:green;">**&#x20;**</mark>*<mark style="color:green;">**Fair-Use-Policy**</mark>*<mark style="color:green;">**&#x20;**</mark><mark style="color:green;">**has been exceeded, please consider alternatives.**</mark>
{% endhint %}

### What are your options? <a href="#your-options" id="your-options"></a>

But what if you need to calculate thousands (or trillions) of distances for your project, business, research or just for fun? Hey, lucky you: there are better ways to do it:

### **REST API**

DistanceAPI, a powerful distance calculation API for airline, car, and maritime travel. With [DistanceAPI, developers](/tools/api) can easily integrate distance calculation functionality into their applications, allowing users to quickly and accurately determine the distance between two (or more) points using a variety of travel methods. The API also provides information on the distance in nautical miles for sea routes.

{% content-ref url="/pages/PjcoCfIqHfiQgysln2pi" %}
[API](/tools/api)
{% endcontent-ref %}

### Spreadsheet-based bulk calculation

If you need to calculate multiple distances the [distance.to bulk calculation](https://bulk.distance.to/) helps you getting easily and fast tons of distances between multiple waypoints.

{% content-ref url="/pages/HCXeAZqeTOXRcL6jCxW3" %}
[Spreadsheet](/tools/spreadsheet)
{% endcontent-ref %}

### Custom integration

Not what you're looking for? [Let's get in touch](/get-in-contact) we're figuring it out.

## No budget? No problem! <a href="#no-budget-no-problem" id="no-budget-no-problem"></a>

Your research or hobby project should not fail due to a lack of budget. But please: Scraping can affect operations for everyone. If you need mass distance calculations but budget is tight (or zero) please [contact me](/get-in-contact) before you start your script or pay money for a scraping service. I assure you, we will find a solution.


# Advertisers

Distance.to helps millions of users worldwide calculate distances between places. We offer targeted display advertising for brands looking to reach a global, travel-savvy audience.

## **Display Advertising on distance.to or luftlinie.org**

If you have any questions about advertising opportunities on **distance.to or luftlinie.org**, please contact our marketing partner directly:

**symplr.**\
mso digital GmbH & Co. KG\
Erich-Maria-Remarque-Ring 14\
49074 Osnabrück, Germany

**Contact person:** Annika Korte\
**Email:** <deals@symplr.de>\
**Phone:** +49 541 / 343 717 70


# Web Map

Showing a map on a web site and its limitations.

A **web map** is an interactive digital map that is accessed and used through a web browser or web application. Unlike static paper maps, web maps are dynamic and allow users to zoom, pan, search, and interact with spatial data in real time.

### Why do distances on the map look "wrong" ?

You may notice that some distances — such as from Moscow to Kamchatka versus West Africa to Eastern Europe—look incorrect when visualized on the map. This is a common source of confusion, and it's caused by how maps represent the curved surface of the Earth.

#### The earth is round — Maps are flat

The Earth is (roughly) a sphere, but maps are 2D. To display a globe on a flat screen, we use a map projection. Every map projection introduces some kind of distortion—either in size, shape, direction, or distance.

One of the most widely used [**map projections**](https://en.wikipedia.org/wiki/Map_projection) is the [**Web Mercator projection**](https://en.wikipedia.org/wiki/Web_Mercator_projection), which is great for navigation and widely supported in web maps—but it distorts size and distance, especially near the poles. For example:

{% hint style="info" %}
Russia looks much larger than Africa, but in reality, Africa is bigger.
{% endhint %}

Eastern Russia looks extremely "stretched" horizontally, so the Moscow–Kamchatka distance looks longer than it actually is.

Distances near the equator appear more accurate than those near the poles.

### What distance.to actually measures

Our service calculates **real distances along the Earth's surface**, either:

* as the [**shortest path**](/features/calculation) for airline routes, or
* as [**real-world driving distances**](/features/routing) where available.

These numbers are accurate and **not based on map visualization**. So even if a route *looks* longer on the map, the distance reported is correct.

### **Visuals vs Reality**

It's completely normal that:

* A shorter airline route *looks longer* on the map if it's farther north or south.
* Longitudinal lines appear "stretched" in higher latitudes.
* Russia looks much bigger than it really is compared to countries near the equator.

### Resources

{% embed url="<https://www.nature.com/nature-index/news/data-visualisation-animated-map-mercater-projection-true-size-countries>" %}

{% embed url="<https://thetruesize.com/>" %}
the true sizes on countries visualized
{% endembed %}


# FAQ

Help and support for distance.to and luftlinie.org related questions.

## Web Map

<details>

<summary>Why do distances on the map look "wrong" ?</summary>

The map may look confusing—but the numbers are right. The problem isn't the software or manipulation—it's the way flat maps distort geography. [Learn more about the web maps](/tools/webapp/web-map).

</details>

## Usage

<details>

<summary>Is scraping allowed?</summary>

Nope. [Lern more about why and options](/tools/webapp/scraping).

</details>


# API

Getting started with the Distance API.

Distance API, a powerful distance calculation API for **airline**, **car**, and **maritime** travel. With Distance API, developers can easily integrate **distance calculation functionality** into their applications, allowing users to quickly and accurately determine the distance between waypoints using a variety of travel methods. The API detailed routing information, route segmentation and Country-wise distance breakdown.

{% content-ref url="/pages/YNbyBJ3mUx7aXsXZgmE1" %}
[API Reference](/tools/api/api-reference)
{% endcontent-ref %}

## Account, billing and payment

To access and make requests to Distance API, you must first create an account at [developers.distance.tools](https://developers.distance.tools). We use a white-label solution called **Nadles** to manage account creation, subscription handling, usage tracking, and rate limiting.

{% content-ref url="/pages/EGuYdcsQtVMtn5Jgpsrv" %}
[Getting started](/tools/api/getting-started)
{% endcontent-ref %}

All payments for API access are processed through **Paddle** (paddle.com), our third-party payment provider. Paddle is responsible for handling transactions, including taxes and invoicing. As a result, API customers will receive invoices directly from Paddle when making a purchase. For any payment-related inquiries, please refer to Paddle’s buyer support at [paddle.com/legal-buyers/](https://paddle.com/legal-buyers/).

{% content-ref url="/pages/TofypYaJ3Ai1nYglFiZL" %}
[Privacy policy](/legal/privacy-policy)
{% endcontent-ref %}

## Migration

If you require assistance migrating from RapidAPI to our platform, we have prepared a comprehensive migration guide available at [faq/migration](/tools/api/faq/migration-guide). This guide provides step-by-step instructions to ensure a smooth transition and addresses common questions you might have during the migration process.

{% content-ref url="/pages/rEa82YXutHusY4O0wTiY" %}
[Migration guide](/tools/api/faq/migration-guide)
{% endcontent-ref %}

## Are you ready? Create your developer acount: <a href="#are-you-ready-create-your-developer-acount" id="are-you-ready-create-your-developer-acount"></a>

{% embed url="<https://developers.distance.tools/>" %}


# Getting started

Learn how to subscribe to a Distance API plan and get API credentials to make requests.

{% stepper %}
{% step %}

### create a [<mark style="color:blue;">developer account</mark>](https://developers.distance.tools)

Go to [developers.distance.tools](https://developers.distance.tools) and create a developer account. Developer portal is managed by Nadles. Learn more about [privacy policy.](/legal/privacy-policy#api-purchases)
{% endstep %}

{% step %}

### [<mark style="color:blue;">pick a plan</mark>](https://developers.distance.tools/pricing/) that fits your needs

See the [pricing page](https://developers.distance.tools/pricing/) and pick a [plan](https://developers.distance.tools/pricing/) that fits your needs. Payments and subscriptions are processed by Paddle. Learn more about [privacy policy](/legal/privacy-policy#api-purchases).
{% endstep %}

{% step %}

### create an <mark style="color:blue;">API key</mark>

Once you have created your [subscription](https://developers.distance.tools/pricing/subscriptions) click on an active subscription and scroll down to **Access keys** to show/edit/add/delete api keys.
{% endstep %}

{% step %}

### test & make <mark style="color:blue;">API requests</mark> &#x20;

Use the API [playground](/tools/api/api-reference) with your credentials to make [API requests](/tools/api/api-reference) and see example code.&#x20;

{% hint style="success" %}
Send your api key (available after [subscription](https://developers.distance.tools/pricing/subscriptions)) in the `X-Billing-Token` header with each API call.
{% endhint %}
{% endstep %}
{% endstepper %}

### Are you ready? Create your developer acount:

{% embed url="<https://developers.distance.tools>" %}


# API Reference

How to make requests against Distance API v2 endpoints

## Authentication

Follow the [getting-started guide](/tools/api/getting-started) how to setup your [developer account](/tools/api/getting-started) and get your API credentials.

### **Headers**

| Name              | Value            |
| ----------------- | ---------------- |
| `X-Billing-Token` | `<your API key>` |

## OpenAPI definition

{% embed url="<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>" %}

## Status codes

| Code                                       | Description                                                                                            |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| <mark style="color:green;">**200**</mark>  | Valid request and all locations or waypoints could be geocoded.                                        |
| <mark style="color:orange;">**400**</mark> | Invalid request with information about validation.                                                     |
| <mark style="color:orange;">**404**</mark> | Valid request but not all locations or waypoints could be geocoded.                                    |
| <mark style="color:orange;">**429**</mark> | Load balancer rejected the request because too many request in parallel or your usage limits exceeded. |

## Units <a href="#units" id="units"></a>

All distances are given in **kilometers**. To convert distances into miles, they must be multiplied by 0.621371. Maritime distances are also given in **nautical miles**.

The travel duration for car routing is given in **seconds.** For maritime routes, which are given in **hours** `duration` is calculated with a speed of 20 knots. 20 knots = 20 NM / hour.


# distance/route

Calculate distance (airline, car routing) between points

{% openapi src="<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>" path="/distance/route" method="post" %}
<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>
{% endopenapi %}

### **Request Body**

The `route` object defines a route with all its waypoints and has a minimum of two [waypoints](#waypoint) and a maximum of **75** [waypoints](#waypoint).

```json
{
  "route": [{
    "name": "Berlin",  // Required: Any input text or lat,lng
    "country": "DEU"   // Optional: ISO 3166-1 alpha-3 country code
  },{
    "name": "Hamburg", // Required: Any input text or lat,lng
    "country": "DEU"   // Optional: ISO 3166-1 alpha-3 country code
  },{
    "name": "52.5162,13.37795"
  },{
    ...
  }]
}
```

#### Waypoint <a href="#waypoint" id="waypoint"></a>

A waypoint describes each step of a route and is defined as its required `name` field and an optional `country` field to specify its specific location.

```json
{
    "name": "Berlin",  // Required: Any input text or lat,lng
    "country": "DEU"   // Optional: ISO 3166-1 alpha-3 country code
}
```

The `name` field can contain any textual information about the location like postal address, city or region, postal code, IATA code, what3words or a coordinate in the format `latitude,longitude`. If using coordinate or what3words you do not need to specify the `country`. [Learn more about input and geocoding](/features/input-data).

***

### Response

A Distance API response consists of 3 main parts. `route` contains summarized info about route between all waypoints. `points` array contains additional information about the waypoints of the requested route. `steps` array describes distance, duration and travel information for the ways between each waypoints.

```json
{
  "route": { ... }, // Contains summarized info about route between all waypoints
  "points": [...],  // Contains geocoding & geographical information of waypoints
  "steps": [...]    // Contains routing information of each step of a route
}
```

#### Route <a href="#route" id="route"></a>

The route object contains summarized information about the route between all waypoints. This object is available in responses from all endpoints returning route information.

**Airline distance**

```json
{
  "route": {
    "vincenty": 709.63,                // airline distance in Kilometer 
    "haversine": 708.6068727785872,    // airline distance in Kilometer
    "greatCircle": 708.6068950233187,  // airline distance in Kilometer  
  }
}
```

Learn more about [airline distance calculation](/features/calculation).

**Car routing distance**

```json
{
  "route": {
    "car": {
      "distance": 812.1059,  // car routing distance in Kilometer
      "duration": 39012.7,   // car routing duration in Seconds
      "status": "found"      // Status weather a round was "found" or "not found"
    }
  }
}
```

You'll get a HTTP status code **`200`** with waypoint information even if there could no car routing distance found. `status` flag indicates a car route was `found` or `not found`. If one of the waypoints could not be found and [geocoded](/features/input-data) a **`404`** is returned. [Learn more about response statuses](/tools/api/api-reference#status-codes).

#### &#x20; <a href="#distance-route-detailed" id="distance-route-detailed"></a>


# distance/route/detailed

Calculate detailed car routing distance with country breakdown

{% openapi src="<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>" path="/distance/route/detailed" method="post" %}
<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>
{% endopenapi %}


# distance/route/maritime

Calculate maritime sea route distances between points

{% openapi src="<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>" path="/distance/route/maritime" method="post" %}
<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>
{% endopenapi %}

## Units

The travel duration for car routing is given in **seconds.** For maritime routes, which are given in **hours** `duration` is calculated with a speed of 20 knots. 20 knots = 20 NM / hour.


# distance/point

Get geocoding and information about a geographical point

{% openapi src="<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>" path="/distance/point" method="post" %}
<https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/api/openapi.yaml>
{% endopenapi %}


# routing/car

Get high-performance car routing providing fast route calculations

## Get car routing information

> Get high-performance car route calculations

```json
{"openapi":"3.0.0","info":{"title":"Distance API","version":"2.0.0"},"servers":[{"url":"https://api.distance.tools/api/v2"}],"security":[{"XBillingToken":[]}],"components":{"securitySchemes":{"XBillingToken":{"type":"apiKey","in":"header","name":"X-Billing-Token","description":"Authentication token for billing. Get your token at https://developers.distance.tools."}},"schemas":{"RouteResponse":{"allOf":[{"$ref":"#/components/schemas/ApiResponse"},{"type":"object","properties":{"waypoints":{"type":"array","items":{"$ref":"#/components/schemas/Waypoint"}},"routes":{"type":"array","items":{"$ref":"#/components/schemas/Route"}}}}]},"ApiResponse":{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["Ok","InvalidUrl","InvalidService","InvalidVersion","InvalidOptions","InvalidQuery","InvalidValue","NoSegment","TooBig","NoRoute","NoTable","NotImplemented","NoTrips"]},"message":{"type":"string"},"data_version":{"type":"string","format":"date-time"}}},"Waypoint":{"type":"object","properties":{"name":{"type":"string"},"location":{"type":"array","items":{"type":"number","format":"float"}},"distance":{"type":"number","format":"float"},"hint":{"type":"string"}}},"Route":{"type":"object","properties":{"distance":{"type":"number","format":"float","description":"The distance traveled by the route, in float meters."},"duration":{"type":"number","format":"float","description":"The estimated travel time, in float number of seconds."},"geometry":{"type":"object"},"weight":{"type":"number","format":"float"},"weight_name":{"type":"string"},"legs":{"type":"array","items":{"$ref":"#/components/schemas/RouteLeg"}}}},"RouteLeg":{"type":"object","properties":{"distance":{"type":"number","format":"float","description":"The distance traveled by the route, in float meters."},"duration":{"type":"number","format":"float","description":"The estimated travel time, in float number of seconds."},"weight":{"type":"number","format":"float"},"summary":{"type":"string"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/RouteStep"}},"annotation":{"$ref":"#/components/schemas/Annotation"}}},"RouteStep":{"type":"object","properties":{"distance":{"type":"number","format":"float","description":"The distance traveled by the route, in float meters."},"duration":{"type":"number","format":"float","description":"The estimated travel time, in float number of seconds."},"geometry":{"type":"object"},"weight":{"type":"number","format":"float"},"name":{"type":"string"},"ref":{"type":"string"},"pronunciation":{"type":"string"},"destinations":{"type":"object"},"exits":{"type":"object"},"mode":{"type":"string"},"maneuver":{"$ref":"#/components/schemas/StepManeuver"},"intersections":{"type":"array","items":{"$ref":"#/components/schemas/Intersection"}},"rotary_name":{"type":"string"},"rotary_pronunciation":{"type":"string"},"driving_side":{"type":"string","enum":["left","right"]}}},"StepManeuver":{"type":"object","properties":{"location":{"type":"array","items":{"type":"number","format":"float"}},"bearing_before":{"type":"integer"},"bearing_after":{"type":"integer"},"type":{"type":"string"},"modifier":{"type":"string"},"exit":{"type":"integer"}}},"Intersection":{"type":"object","properties":{"location":{"type":"array","items":{"type":"number","format":"float"}},"bearings":{"type":"array","items":{"type":"integer"}},"classes":{"type":"array","items":{"type":"string"}},"entry":{"type":"array","items":{"type":"boolean"}},"in":{"type":"integer"},"out":{"type":"integer"},"lanes":{"type":"array","items":{"$ref":"#/components/schemas/Lane"}}}},"Lane":{"type":"object","properties":{"indications":{"type":"array","items":{"type":"string"}},"valid":{"type":"boolean"}}},"Annotation":{"type":"object","properties":{"distance":{"type":"array","items":{"type":"integer"},"description":"The distance, in metres, between each pair of coordinates"},"duration":{"type":"array","items":{"type":"integer"},"description":"The duration between each pair of coordinates, in seconds"},"datasources":{"type":"array","items":{"type":"integer"}},"nodes":{"type":"array","items":{"type":"integer"}},"weight":{"type":"array","items":{"type":"integer"}},"speed":{"type":"array","items":{"type":"number","format":"float"}},"metadata":{"type":"object","properties":{"datasource_names":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/routing/car":{"post":{"summary":"Get car routing information","description":"Get high-performance car route calculations","parameters":[{"in":"query","name":"alternatives","schema":{"type":"boolean","default":false},"description":"Search for alternative routes and return as well."},{"in":"query","name":"geometries","schema":{"type":"string","enum":["polyline","polyline6","geojson"],"default":"polyline"},"description":"Returned route geometry format (influences overview and per step)"},{"in":"query","name":"overview","schema":{"type":"string","enum":["full","simplified",false],"default":"simplified"},"description":"Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all"},{"in":"query","name":"steps","schema":{"type":"boolean","default":false},"description":"Return route steps for each route leg"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["route"],"properties":{"route":{"type":"array","minItems":2,"maxItems":75,"items":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number","format":"double","description":"Latitude coordinate","minimum":-90,"maximum":90},"lng":{"type":"number","format":"double","description":"Longitude coordinate","minimum":-180,"maximum":180}}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteResponse"}}}},"400":{"description":"Bad Request - Invalid request"},"404":{"description":"Not Found - Valid request but location not found"}}}}}}
```

{% content-ref url="/pages/tbn8QASvAmEVnaDr1McG" %}
[routing/car](/tools/api/api-reference/routing-car)
{% endcontent-ref %}


# routing/maritime

Calculate maritime sea routes between ports or coordinates

## Get maritime sea routes

> Calculate maritime sea routes between ports or coordinates.

```json
{"openapi":"3.0.0","info":{"title":"Distance API","version":"2.0.0"},"tags":[{"name":"Routing","description":"High-performance routing endpoints for car and maritime routes. Powered by OSRM-style responses, suitable for turn-by-turn navigation, ETA estimation, and logistics optimization.\n"}],"servers":[{"url":"https://api.distance.tools/api/v2"}],"security":[{"XBillingToken":[]}],"components":{"securitySchemes":{"XBillingToken":{"type":"apiKey","in":"header","name":"X-Billing-Token","description":"Authentication token for billing. Get your token at https://developers.distance.tools."}}},"paths":{"/routing/maritime":{"post":{"tags":["Routing"],"summary":"Get maritime sea routes","description":"Calculate maritime sea routes between ports or coordinates.","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["route"],"properties":{"route":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number","format":"double","description":"Latitude coordinate","minimum":-90,"maximum":90},"lng":{"type":"number","format":"double","description":"Longitude coordinate","minimum":-180,"maximum":180}}}}}}}}},"responses":{"200":{"description":"Valid request and route was found"},"400":{"description":"Bad Request - Invalid request"},"404":{"description":"Not Found - Valid request but location not found"}}}}}}
```

{% content-ref url="/pages/NPQIcztl3mXnilGRpmZj" %}
[routing/maritime](/tools/api/api-reference/routing-maritime)
{% endcontent-ref %}


# FAQ

Frequently asked question about API requests or responses

## General API related questions

<details>

<summary>I used RapidAPI before. How can I migrate to the new platform?</summary>

If you require assistance migrating from **RapidAPI** to our platform, we have prepared a comprehensive migration guide available at [faq/migration](/tools/api/faq/migration-guide). This guide provides step-by-step instructions to ensure a smooth transition and addresses common questions you might have during the migration process.

</details>

<details>

<summary>Where do I find my API key?</summary>

Log in to the [developer portal](https://developers.distance.tools/) and got to your [subscriptions](https://developers.distance.tools/pricing/subscriptions). Click on an active subscription and scroll down to **Access keys** to show/edit/add/delete api keys. You can also go to the [step-by-step guide to learn more about authentication](/tools/api/getting-started).

</details>

<details>

<summary>Where can I find examples to make API request?</summary>

You'll find code snippets in the [endpoint definitions](/tools/api/api-reference).

</details>

## Car routing and navigation

<details>

<summary>Do you use Google Maps for car routing?</summary>

Not yet. Currently routing supports only routing based on OpenStreetMap data. Soon you will be able to choose a provider for you car routing data.

</details>

<details>

<summary>Does it show the shortest or the fastest route?</summary>

Car routing typically uses the fastest route by default.

</details>

## Geocoding

<details>

<summary>Do you use Google Maps for geocoding?</summary>

Not yet.&#x20;

</details>

## Payment & billing

<details>

<summary>What is Paddle?</summary>

Paddle serves as the Merchant of Record (MoR) for all transactions, handling payment processing, tax compliance, and invoicing. This arrangement allows us to focus on delivering quality services while Paddle manages the complexities of global payments and regulations.

</details>

<details>

<summary>Do I get a VAT invoice ?</summary>

Yes, a valid EU VAT invoice is provided for your purchase. You have the option to include your VAT identification number during the payment process. This information will be reflected on your invoice, which complies with EU VAT invoicing requirements. \
\
Post purchase invoices can be found in [Paddle Customer Portal](< https://customer-portal.paddle.com/login/cpl_01jngzrrn7cetfqzqqtx9pr7y3>).

</details>


# Migration guide

Learn how to migrate from RapidAPI

## Migration Guide: Moving from RapidAPI to new Platform

### Overview

This guide outlines the necessary steps to migrate from **RapidAPI** to our new [**API platform**](https://developers.distance.tools/). The migration primarily involves changes to the request URL and authentication headers. The response payload format remains unchanged, ensuring a seamless transition with no required modifications to response handling.

{% hint style="success" %}
Migrating from **RapidAPI** to the new platform requires some changes on how you request endpoints. However, the **response payload remains unchanged**, so no modifications to response handling are necessary.
{% endhint %}

## Changes

### What Has Changed?

#### API Base URL Update

#### **Old Base URL:**

```
https://distance.p.rapidapi.com/
```

**New Base URL:**

```
https://api.distance.tools/api/v2/
```

#### Authentication Header Change

**Old Header:**

```
X-RapidAPI-Key: <your old RapidAPI API key>
```

**New Header:**

```
X-Billing-Token: <your new API key>
```

#### Host Header Removal

RapidAPI required the `X-RapidAPI-Host` header, but our new platform does not require this header. Simply remove it from your requests.

### Migration Steps

#### Updating Your Requests

**Old Request Format**

```sh
curl -L \
  --request POST \
  --url 'https://distanceto.p.rapidapi.com/distance/route' \
  --header 'X-RapidAPI-Host: distanceto.p.rapidapi.com' \
  --header 'X-RapidAPI-Key: <your old RapidAPI API key>' \
  --header 'Content-Type: application/json' \
  --data '{"route": [{"name": "Berlin","country": "DEU"}, {"name": "Hamburg","country": "DEU"}]}'
```

**New Request Format**

```sh
curl -L \
  --request POST \
  --url 'https://api.distance.tools/api/v2/distance/route' \
  --header 'X-Billing-Token: <your new API key>' \
  --header 'Content-Type: application/json' \
  --data '{"route": [{"name": "Berlin","country": "DEU"}, {"name": "Hamburg","country": "DEU"}]}'
```

### Additional Considerations

* **Rate Limits:** Ensure that your new API key has the appropriate rate limits for your usage.
* **Testing:** Before fully switching, test your integration using the new API key to confirm that requests function as expected.
* **Deprecation Timeline:** If RapidAPI access is being phased out, check the deprecation schedule and transition before the cutoff date to avoid service disruptions.

### Need Help?

If you have any issues during migration, refer to our [API documentation](/tools/api) or [get in touch](/get-in-contact).


# AI Agent

Your companion for distance related task and questions is coming soon.

The Distance AI Agent is your intelligent companion that supports you with distance-related tasks and questions. Will be available soon.&#x20;

### Playground

{% embed url="<https://bsky.app/profile/distance.bot>" %}


# Input data

What data can be used as input for distance calculation between points?

## Names to coordinates <a href="#names-to-coordinates" id="names-to-coordinates"></a>

Geocoding is the process of [transforming a physical address description to a coordinate](https://en.wikipedia.org/wiki/Geocoding). Every of your input such as postal address, city or postal code is transformed into a latitude and a longitude representing the location on the earth's surface.

### Accuracy <a href="#accuracy" id="accuracy"></a>

Based on your input type there are different level of accuracies. Country, city or regions are represented as a [geographical center](https://en.wikipedia.org/wiki/Geographical_centre) of that area. Postal addresses are often represented as the coordinate of the point of the entry, as roof top coordinates or as street coordinates.

## Sources and Input <a href="#sources-and-input" id="sources-and-input"></a>

The following input data can be used to calculate distances and of course each input type can be combined with any other source, input or type.

### Country, City or Regions <a href="#country-city-or-regions" id="country-city-or-regions"></a>

Due to availability of multiple results for the same input (such as Venice, Italy or Venice, Los Angeles) it is **highly recommended to specify country and region of your input** if available. All country, city or regions data is geocoded with the [geonames.org](http://geonames.org/) database or OpenStreetMap data.

### Postal codes or Zip codes

If you want to calculate distances between postal or zip codes you need to specify  the country code with its [iso-3166-1 alpha-3 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) and the geographical centroid of the postal code is used. Postal codes are geocoded with the data from [geonames.org](http://geonames.org) database and [OpenStreetMap](https://osm.org).&#x20;

| Origin   | Destination |
| -------- | ----------- |
| Munich   | 10999,DEU   |
| 2000,AUS | Adelaide    |

### Postal addresses <a href="#postal-addresses" id="postal-addresses"></a>

Postal addresses serve as structured locational identifiers, facilitating the delivery of mail and parcels. Typically consisting of recipient names, street addresses, city or locality names, postal or ZIP codes, and often additional elements like country names, postal addresses provide a standardized format for efficient mail routing. Postal address are geocoded with the awesome [Opencage](https://opencagedata.com/) geocoder.

### Airports and IATA codes <a href="#airports-and-iata-codes" id="airports-and-iata-codes"></a>

The International Air Transport Association (IATA) assigns three-letter codes to airports worldwide. These codes are widely used in the airline industry for ticketing, baggage handling, and flight operations, among other purposes. Each code is unique to a specific airport and helps streamline communication and logistics within the aviation sector. Iata codes and airports are geocoded with the [openflights.org](http://openflights.org/) database.

### Coordinates <a href="#coordinates" id="coordinates"></a>

To calculate distances between coordinates use latitude and longitude to define coordinates on the earth's surface. The format should be `latitude,longitude`.

Please make sure that there is no space between the values: ~~`latitude, longitude`~~ and that the correct order is kept ~~`longitude,latitude`~~.

| Origin | Destination          |
| ------ | -------------------- |
| 52,13  | Bali,IND             |
| Berlin | 48.8583701,2.2922926 |

#### what3words <a href="#what3words" id="what3words"></a>

What3Words addresses are geocoded with the [what3words](http://what3words.com/) API.


# Routing

Get detailed information about a routes and directions.

## Car routing <a href="#car-routing" id="car-routing"></a>

Precise car routing based on high quality data delivered in ms. Distance API currently uses OSRM routing engine with OpenStreetMap data to calculate route distance and duration. Soon you will be able to choose also other providers like Google Maps and Mapbox for car routing as well as other routing profiles like Truck, Walk or Bike.

{% content-ref url="/pages/tbn8QASvAmEVnaDr1McG" %}
[routing/car](/tools/api/api-reference/routing-car)
{% endcontent-ref %}

### **Example result**

```json
{
  "route": {
  "car": {
    "distance": 466.1034, // car routing distance in Kilometer 
    "duration": 18095.3   // car routing duration in Seconds 
}
```

### **Under the hood**

{% embed url="<https://project-osrm.org/>" %}
[OSRM](/legal/credits#open-source-routing-machine-osrm) routing engine for [OSM](/legal/credits#openstreetmap-osm) based car routing
{% endembed %}

* Soon: More profiles like bike, walk and truck

***

## Maritime routing <a href="#maritime-routing" id="maritime-routing"></a>

Maritime Route feature employs advanced geospatial algorithms to facilitate efficient routing and distance computation between sea ports. The maritime route distance API can also snap arbitrary locations to the nearest sea route vertex.

{% content-ref url="/pages/NPQIcztl3mXnilGRpmZj" %}
[routing/maritime](/tools/api/api-reference/routing-maritime)
{% endcontent-ref %}

Maritime sea routing based on Eurostat data combined with modern geospatial algorithms empowering the Maritime routing API.

### **Example data**

```json
  "route": {
    "sea": {
      "distanceNM": 268.131303044648, // maritime route distance in Nautical miles
      "distance": 496.5789924839348,  // maritime route distance in Kilometer
      "duration": 13.4065651522324    // maritime travel time in Hours
     }
   }
}
```

Flatbush, the really fast **static spatial index** helps to snap any input location to the nearest sea routes vertex. This helps you to calculate maritime routes even if your input data does not reflect ports or maritime locations.

### **Under the hood**

{% embed url="<https://github.com/StephanGeorg/searoutes-api>" %}

* Eurostat maritime data
* Dijkstra's algorithm
* Flatbush spatial index


# Maritime routing

Realistic sea routing for Panamax, VLCC, and ULCV vessels, reflecting global chokepoints, canal limits, and fallback cape routes for accurate distance calculations.

Maritime routing is one of the cornerstones of international trade. More than 80% of global goods are transported by sea, and understanding how vessels move across the oceans is critical for logistics, planning, and distance calculations.

Unlike roads or airways, sea routes are not unlimited open space: large vessels must navigate through **specific passages, straits, and canals** that connect oceans and seas. These chokepoints can become bottlenecks due to **draft limits, geopolitical risks, congestion, or seasonal ice**.

**Distance Tools** models these maritime passages in order to provide **realistic distance calculations for different** [**vessel classes**](#vessel-classes). This ensures that when you compute a route for a container ship or an oil tanker, the distances reflect the actual navigable routes these vessels use in practice.

By modeling real-world maritime constraints, **Distance Tools** can:

* Produce **realistic sea distances** for container and tanker routes.
* Adapt to **closures and risks** (e.g. Suez blocked, Panama drought).
* Support multiple **vessel profiles** for flexible planning.
* Reflect both **global arteries** (Suez, Panama, Malacca) and **fallback routes** (Capes, Lombok, Makassar).

This ensures that when you request maritime distances via the Distance API, the numbers reflect **how ships actually sail**, not just straight-line great-circle distances.

### Vessel classes

Different vessels have different constraints. A small Panamax ship can transit most man-made canals, while the largest oil tankers ([VLCC](#routing-profiled)) or container ships ([ULCV](#routing-profiled)) are too deep or wide for some passages.

Distance Tools currently models three major vessel classes:

* **Panamax** → smaller bulk carriers and container ships designed to fit the original Panama Canal.
* **VLCC (Very Large Crude Carrier)** → huge oil tankers, some of the deepest draft vessels in the world.
* **ULCV (Ultra Large Container Vessel)** → the largest container ships used on Asia–Europe trade lanes.

### **Vessel restrictions**

| Vessel Class                                         | Specifications               | Restricted Passages                                                                                          | Forbidden Passages                                                                                                                                                          |
| ---------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**Panamax**](https://en.wikipedia.org/wiki/Panamax) | ≤80k DWT, \~12m draft        | Kiel Canal (draft-limited), Magellan Strait (difficult weather), Torres Strait (shallow)                     | Bering Strait, Northwest Passage, Northeast Passage, Corinth Canal                                                                                                          |
| **VLCC**                                             | 200–320k DWT, \~20–22m draft | Malacca Strait (Malaccamax limit), Magellan Strait (navigable but impractical)                               | Suez Canal (too deep fully laden), Panama Canal, Sunda Strait, Kiel Canal, Corinth Canal, Bosphorus & Dardanelles (too narrow), Torres Strait, Arctic routes (NW/NE/Bering) |
| **ULCV**                                             | 14–24k TEU, \~14–16m draft   | Malacca Strait (draft/size limit), Panama Canal (≤14k TEU only), Magellan Strait (navigable but impractical) | Sunda Strait, Kiel Canal, Corinth Canal, Bosphorus & Dardanelles, Torres Strait, Arctic routes (NW/NE/Bering)                                                               |

### Routing profiles

The table below summarizes the major global chokepoints and whether each vessel class can use them.

| Passage / Route          | Panamax                       | VLCC                                  | ULCV                                   | Notes                                                                           |
| ------------------------ | ----------------------------- | ------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------- |
| **Suez Canal**           | ✅ Allowed                     | ❌ Forbidden                           | ✅ Allowed                              | Core Asia–Europe artery; VLCC must lighter                                      |
| **Panama Canal**         | ✅ Allowed (old locks)         | ❌ Forbidden                           | ⚠️ Restricted (≤14k TEU, Neopanamax)   | Drought can restrict further                                                    |
| **Malacca Strait**       | ✅ Allowed                     | ⚠️ Restricted (Malaccamax \~200k DWT) | ⚠️ Restricted (ULCV near draft limits) | Heavy congestion                                                                |
| **Sunda Strait**         | ✅ Allowed (regional)          | ❌ Forbidden                           | ❌ Forbidden                            | Too shallow/narrow for VLCC/ULCV                                                |
| **Gibraltar Strait**     | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Deep water, universal                                                           |
| **Dover Strait**         | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Dense [TSS](https://en.wikipedia.org/wiki/Traffic_separation_scheme) but usable |
| **Bering Strait**        | ❌ Forbidden                   | ❌ Forbidden                           | ❌ Forbidden                            | Arctic only, no commerce                                                        |
| **Magellan Strait**      | ⚠️ Restricted                 | ⚠️ Restricted                         | ⚠️ Restricted                          | Navigable but impractical; Cape Horn preferred                                  |
| **Bab el-Mandeb Strait** | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Strategic; conflict/piracy risks                                                |
| **Kiel Canal**           | ⚠️ Restricted (draft-limited) | ❌ Forbidden                           | ❌ Forbidden                            | Max draft \~9.5m                                                                |
| **Corinth Canal**        | ❌ Forbidden                   | ❌ Forbidden                           | ❌ Forbidden                            | Very small ships only                                                           |
| **Northwest Passage**    | ❌ Forbidden                   | ❌ Forbidden                           | ❌ Forbidden                            | Not commercially viable                                                         |
| **Northeast Passage**    | ❌ Forbidden                   | ❌ Forbidden                           | ❌ Forbidden                            | Not commercially viable                                                         |
| **Bosphorus Strait**     | ✅ Allowed (small Panamax)     | ❌ Forbidden                           | ❌ Forbidden                            | Narrow, pilotage; Black Sea access only                                         |
| **Dardanelles Strait**   | ✅ Allowed (small Panamax)     | ❌ Forbidden                           | ❌ Forbidden                            | Companion to Bosphorus                                                          |
| **Strait of Hormuz**     | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Vital for oil, geopolitical risk                                                |
| **Lombok Strait**        | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Deep alternative to Malacca                                                     |
| **Makassar Strait**      | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Used with Lombok for bypass                                                     |
| **Torres Strait**        | ⚠️ Restricted (draft-limited) | ❌ Forbidden                           | ❌ Forbidden                            | Very shallow, regional trades                                                   |
| **Cape of Good Hope**    | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Fallback route for Suez closures                                                |
| **Cape Horn**            | ✅ Allowed                     | ✅ Allowed                             | ✅ Allowed                              | Harsh conditions, fallback for Panama oversize                                  |

{% hint style="success" %}
When using the **default** *profile*, Distance Tools applies **no restrictions** — all passages are treated as open, regardless of vessel size.
{% endhint %}

### Open-Source Routing Engine

{% embed url="<https://github.com/StephanGeorg/searoutes>" %}

Maritime routing in **Distance Tools** is powered by the open-source library [**searoutes**](https://github.com/StephanGeorg/searoutes). This library builds realistic sea networks from authoritative datasets and applies the vessel class restrictions shown above. By relying on open data and open technology, we ensure transparency in how routes are calculated and give developers confidence in both the methods and results.


# Calculation

Determination of geodesic distances between two points on a spherical or spheroidal reference surface.

## Airline distance calculation <a href="#airline-distance-calculation" id="airline-distance-calculation"></a>

Calculating accurate distances between two points on the Earth's surface is essential for applications like routing and mapping. Common methods include the [Haversine formula](#haversine-formula) and [Great-circle distance](#great-circle-distance-method) for fast [spherical approximations](#spherical-earth-model), and[ Vincenty's formulae](#vincentys-formulae) and [Karney's algorithm](#karneys-algorithm) for precise geodesic distances on an [ellipsoidal Earth model](#ellipsoidal-earth-model).

### Spherical Earth Model

The **Spherical Earth Model** is a simplified way of representing the Earth as a **perfect sphere** with a constant radius (usually around **6371 km**).

#### **Haversine Formula** <a href="#haversine-formula" id="haversine-formula"></a>

* **Simplicity:** The Haversine formula is simpler and computationally less intensive than Vincenty's formulae, making it easier to implement.
* **Accuracy:** While accurate for short distances, the Haversine formula may exhibit limitations for long distances, as it assumes a spherical Earth model and does not account for the Earth's ellipsoidal shape.
* **Popular Use:** The Haversine formula is commonly used in applications where simplicity and speed are prioritized over extreme precision, such as in web and mobile applications.

{% embed url="<https://en.wikipedia.org/wiki/Haversine_formula>" %}

#### **Great-circle Distance Method** <a href="#great-circle-distance-method" id="great-circle-distance-method"></a>

* **Concept:** The Great-circle distance method calculates the shortest distance between two points on the surface of a sphere, traveling along the surface of the sphere.
* **Accuracy:** It provides good accuracy for most practical purposes, especially for shorter distances.
* **Applicability:** The Great-circle distance method assumes a spherical Earth model, which simplifies calculations. It is suitable for applications where a balance between accuracy and computational efficiency is required.

{% embed url="<https://en.wikipedia.org/wiki/Great-circle_distance>" %}

### Ellipsoidal Earth Model

The **Ellipsoidal Earth Model** represents the Earth as an **oblate spheroid** — slightly flattened at the poles and bulging at the equator. It is **more accurate** than the spherical model.

#### **Vincenty's Formulae** <a href="#vincentys-formulae" id="vincentys-formulae"></a>

* **Accuracy:** Vincenty's formulae are known for their higher accuracy compared to the Haversine formula, especially for long distances and over ellipsoidal surfaces.
* **Applicability:** Vincenty's formulae are suitable for calculating distances on an ellipsoidal Earth model, making them more precise for geodetic calculations.
* **Complexity:** These formulae are more complex mathematically than the Haversine formula.

{% embed url="<https://en.wikipedia.org/wiki/Vincenty's_formulae>" %}

#### **Karney’s Algorithm**

* **Accuracy**: Karney’s algorithm offers even higher accuracy than Vincenty's formulae, achieving sub-millimeter precision by using exact solutions on the ellipsoidal Earth model. It is highly reliable even for edge cases like antipodal points.
* **Applicability**: This algorithm is ideal for precise geodetic calculations, particularly in global navigation, GIS, and surveying, where robustness and accuracy are critical.
* **Complexity**: Karney’s method involves advanced series expansions and geodesic integrals, making it more mathematically sophisticated, but it is implemented efficiently in libraries like GeographicLib.

{% embed url="<https://link.springer.com/article/10.1007/s00190-012-0578-z>" %}


# Segmentation

Detailed distance information for routes

Leveraging advanced geospatial algorithms and comprehensive data, the Road-Type Analysis provides granular insights into route distances based on diverse road categories, enhancing navigation precision. Simultaneously, the Country-wise Breakdown feature utilizes real-time geopolitical data to furnish a detailed spatial distribution of distances across individual countries.

## Route segmentation <a href="#route-segmentation" id="route-segmentation"></a>

### **Country-wise Distance Breakdown** <a href="#country-wise-distance-breakdown" id="country-wise-distance-breakdown"></a>

The "Country-wise Distance Breakdown" feature delivers a comprehensive breakdown of route distances based on individual **countries traversed**. Utilizing real-time geopolitical data and advanced geospatial analysis, this functionality offers developers a powerful tool for route optimization, compliance assessment, and logistical planning. It seamlessly integrates into applications, providing users with insights into the spatial distribution of **distances across different countries along a specified route**.

#### **Example response for&#x20;**<mark style="background-color:green;">**Oslo,NOR to Berlin,DEU**</mark>

```json
{
  "route": {
    "car": {
      "distance": 812.1059,      // distance in kilometers of entire route
      "duration": 39012.7,       // duration in seconds of entire travel time 
      "countries": [{
        "country": "NO",
	"distance": 169.1616589, // distance in kilometers driven through Norway
	"duration": 8126.34541   // duration in seconds driven through Norway
      }, {
	"country": "DK",         
	"distance": 379.65950825,// distance in kilometers driven through Danmark 
	"duration": 18238.43725  // duration in seconds driven through Danmark
      }, {
        "country": "DE",  
        "distance": 157.87338696, // distance in kilometers driven through Germany
        "duration": 7584.068879   // duration in seconds driven through Germany
      }]
    }
  }
}
```

### **Road-Type Segmented Distance Analysis** <a href="#road-type-segmented-distance-analysis" id="road-type-segmented-distance-analysis"></a>

offering detailed insights into route distances segmented by various road types. Leveraging advanced geospatial algorithms and comprehensive road network data, this functionality breaks down the total distance of a specified route, providing a granular analysis of residential roads, highways, and speed conditions.

* Granular breakdown of route distances by road types.
* Integration of comprehensive road network data.
* Seamless incorporation into applications for enhanced route planning.

### Midpoint calculation <a href="#midpoint-calculation" id="midpoint-calculation"></a>

Get the midpoint of a route and all midpoints of each route step. See where you are halfway through a journey or where you can meet someone in the middle.


# Terms of Service

* [Terms of Service for **Distance for spreadsheets**](#terms-of-service-for-distance-for-spreadsheets)
* [Terms of Service for **Distance API**](#terms-of-service-for-distance-api)
* [Terms of Service for **Distance calculator Web-app**](#terms-of-service-for-distance-api-1)

***

These Terms of Service ("Terms") govern your access to and use of all **Distance Tools** provided by **Stephan Georg** ("Company", "we", "our", "us"). By using these tools, you agree to comply with these Terms. If you do not agree, you may not use any of the tools.

## **Terms of Service for** Distance for spreadsheets

### 1. Warranties and Liability

All data provided by this service is offered on an **"as is"** basis. No warranties or guarantees are given regarding the accuracy, completeness, or suitability of the results for any particular purpose.

By using the service, you acknowledge and accept that **Distance Tools** is not responsible for any consequences, damages, or losses resulting from the use of information provided by the service.

It is also your responsibility to review the documentation at <https://docs.distance.tools/tools/spreadsheet> prior to using the service. **Distance Tools** assumes no liability for issues arising from incorrectly formatted input files or the use of non-unique entries. Input data is not validated during processing, and all entries submitted will be processed and billed accordingly.

### 2. Payment and Pricing

The service charges **0.01 EUR per unique route**. Each route consists of an origin and a destination. If both values are present, the route will be geocoded and included in the calculation.

* Duplicate entries (identical origin-destination pairs) will only be charged once.
* Every origin and destination value is geocoded, and this process is billed even if no result can be found.

Pricing may change in the future, but any such changes will be communicated in advance.

### 3. Data Protection

Data privacy and protection are taken seriously. The service is fully GDPR-compliant and hosted in the European Union. For detailed information on how personal and location data is collected, processed, and stored, please refer to the Privacy Policy.

### 4. Changes to the Terms

These Terms of Service may be updated at any time without prior notice. Continued use of the service constitutes acceptance of the current version of the terms.

### 5. Refund Policy

Refunds are offered in the event of a **service error or major technical outage** that prevents the proper functioning of the tool.

Please note:

* The service **does not validate input files for content suitability**. If the data provided is incomplete, misformatted, or otherwise unsuitable for distance calculations, it may still be processed and charged.
* Errors caused by incorrect input formatting are **not automatically grounds for a refund**, but individual cases can be discussed directly. In such situations, contact support to review the issue.

### 6. Jurisdiction

These terms are governed by the laws of the **Federal Republic of Germany**. Any disputes arising from or relating to the use of this service shall fall under the exclusive jurisdiction of the courts in **Berlin, Germany**.

***

## **Terms of Service for Distance API** <a href="#terms-of-service-for-distance-api" id="terms-of-service-for-distance-api"></a>

**Last Updated: 14 November 2025**

### **1. Introduction** <a href="#id-1.-introduction" id="id-1.-introduction"></a>

Welcome to Distance API (the "API"). These Terms of Service ("Terms") govern your access to and use of the API provided by **Stephan Georg** ("Company", "we", "our", "us"). By using the API, you agree to comply with these Terms. If you do not agree, you may not use the API.

### **2. License & Usage** <a href="#id-2.-license-and-usage" id="id-2.-license-and-usage"></a>

* We grant you a limited, non-exclusive, non-transferable, revocable license to use the API for your application.
* You may not resell, distribute, or sublicense the API or its output without our prior written permission.
* You must not use the API for any illegal, fraudulent, or abusive purposes.

### **3. Account & API Key** <a href="#id-3.-account-and-api-key" id="id-3.-account-and-api-key"></a>

* To access the API, you must register for an API key.
* You are responsible for maintaining the confidentiality of your API key and all activity under your account.
* We reserve the right to suspend or terminate accounts that violate these Terms.
* Creating multiple accounts, subscriptions, or API keys for the purpose of bypassing rate limits, pricing, or subscription tiers—including creating multiple free accounts for use within the same product, organization, customer, or workflow—is strictly prohibited. One free-tier subscription is allowed per organization or end-user entity unless explicitly approved in writing.

### **4. Pricing & Payments** <a href="#id-4.-pricing-and-payments" id="id-4.-pricing-and-payments"></a>

* API access may be subject to usage fees as outlined on our [pricing page](https://rapidapi.com/Distance.to/api/distance/pricing).
* Payments are due **monthly** in accordance with the selected plan.
* We reserve the right to change pricing with **120** days' notice.

### **5. Refund Policy** <a href="#id-5.-refund-policy" id="id-5.-refund-policy"></a>

We strive to ensure a great experience with our API, but we understand that issues may arise.

* **No Refunds for Used Services**:
  * Since our API is a digital service, we do not offer refunds for API requests that have already been processed.
  * If you have used the API within a billing cycle, no refunds will be issued for that period.
* **Refunds for Billing Errors**:
  * If you were charged incorrectly due to a billing error, you may request a refund by contacting us within **30 days** of the charge.
* **Subscription Cancellations**:
  * You may cancel your subscription at any time. Your API access will remain active until the end of the current billing cycle.
  * No prorated refunds will be issued for unused portions of a subscription period.
* **Service Downtime Compensation**:
  * If the API experiences **significant downtime** due to our failure to maintain service (excluding scheduled maintenance or force majeure events), we may, at our discretion, issue **credits** toward your next billing cycle instead of a monetary refund.

To request a refund, please contact **<info@distance.to>**. Refund requests will be evaluated on a case-by-case basis.

### **6. Rate Limits & Fair Use** <a href="#id-6.-rate-limits-and-fair-use" id="id-6.-rate-limits-and-fair-use"></a>

* We impose rate limits to ensure fair access for all users. Exceeding these limits may result in throttling or suspension.
* Abuse or misuse of the API (e.g., excessive requests, scraping, or circumventing rate limits) is prohibited.

### **7. Data & Privacy** <a href="#id-7.-data-and-privacy" id="id-7.-data-and-privacy"></a>

* We collect and process data in accordance with our [Privacy Policy](https://docs.distance.to/legal/privacy-policy).
* You must not store or share any personally identifiable information (PII) obtained through the API without user consent.

### **8. Service Availability & Support** <a href="#id-8.-service-availability-and-support" id="id-8.-service-availability-and-support"></a>

* We strive for high availability but do not guarantee uninterrupted service.
* Maintenance and downtime notices will be communicated in advance when possible.
* Support is available via **email** and response times depend on your plan.

### **9. Disclaimer of Warranties** <a href="#id-9.-disclaimer-of-warranties" id="id-9.-disclaimer-of-warranties"></a>

* The API is provided "as is" without warranties of any kind.
* We do not guarantee accuracy, reliability, or fitness for any particular purpose.

### **10. Limitation of Liability** <a href="#id-10.-limitation-of-liability" id="id-10.-limitation-of-liability"></a>

* We are not liable for indirect, incidental, or consequential damages arising from API use.
* Our total liability for any claims is limited to the fees paid by you in the last \[3/6/12] months.

### **11. Termination** <a href="#id-11.-termination" id="id-11.-termination"></a>

* We may suspend or terminate access for violating these Terms.
* Users may discontinue API use at any time. No refunds will be issued for prepaid fees.

### **12. Changes to These Terms** <a href="#id-12.-changes-to-these-terms" id="id-12.-changes-to-these-terms"></a>

* We may update these Terms at any time. Continued use of the API after changes implies acceptance.

### **13. Governing Law & Disputes** <a href="#id-13.-governing-law-and-disputes" id="id-13.-governing-law-and-disputes"></a>

* These Terms are governed by the laws of Berlin, Germany.
* Disputes will be resolved through court jurisdiction.

***

## **Terms of Service for Distance calculator web-app** <a href="#terms-of-service-for-distance-api" id="terms-of-service-for-distance-api"></a>

### 1. Usage Restrictions and Fair Use Policy

The **distance.to and luftlinie.org** web-app is intended for individual, interactive use through a standard web browser. Use of the service must comply with the following fair use and access restrictions:

* **Scraping, crawling, or automated downloading** of content or results from the website is strictly prohibited.
* **Direct access to internal APIs** or endpoints used by the webapp, bypassing the user interface, is not allowed.
* The service may not be used in any automated system, bot, or bulk-processing script outside of the designated bulk calculation feature (see: [Distance for Spreadsheets](/tools/spreadsheet)).

**Fair Use Policy**

A reasonable number of calculations per user is permitted for personal or business use. Excessive or abusive usage—including behavior that significantly exceeds typical usage patterns or impacts the performance of the service for other users—may result in temporary or permanent access restrictions.

**Distance.to** reserves the right to monitor usage patterns and take appropriate measures, including rate limiting, blocking, or legal action in cases of misuse.


# Privacy policy

This page outlines a commitment to data protection and ensures full transparency regarding the data from users collected, stored and processed.

## Website and documentation

### GitBook (GitBook Inc.)

* **GitBook** Privacy policy <https://policies.gitbook.com/privacy-and-security/statement/cookies>

## Purchases

### **API Purchases**

All purchases of API access made through our Website are processed by our third-party payment provider, Paddle ([paddle.com](https://paddle.com)). When completing a purchase, Paddle may request personal and/or non-personal information, including your name, address, email address, credit card details, or other personal data. **Paddle’s privacy policy** ([paddle.com/legal-buyers/](https://paddle.com/legal-buyers/)) outlines how they collect and use this information. We do not control Paddle’s data collection or processing practices, and any questions regarding their policies should be directed to Paddle.

Paddle provides us with limited non-personal information about API purchases made on our Website. This includes details such as the transaction date, amount paid, and product purchased. This purchase information may be associated with the email address you provide to us, but Paddle does not share any other personal details with us, such as your name, physical address, or payment details.

## **Subscription & usage**

### 🇪🇺 Nadles (Leotech s.r.o) [nadles.com](https://www.nadles.com)

Nadles is a platform used to **manage subscriptions**, **track usage limits**, and **enforce rate limiting** for our services. Nadles collects, stores, and processes necessary information to monitor and control user access and resource usage. All data handled by Nadles is processed in accordance with their privacy practices, which can be reviewed separately.

* **Nadles.com** Privacy Policy: <https://www.nadles.com/privacy-policy.html>
* **Nadles.com** Terms of Service: <https://www.nadles.com/terms-of-service.html>&#x20;

## Infrastructure

### 🇪🇺 Hetzner Online GmbH [hetzner.com](https://www.hetzner.com/)

Hetzner Online is a **web hosting** and **cloud services provider** offering dedicated servers, virtual private servers (**VPS**), and cloud solutions. Known for its high-performance infrastructure, Hetzner provides reliable hosting services with a focus on scalability, security, and cost-effectiveness for businesses and developers.

* **Hetzner** Privacy Policy: <https://www.hetzner.com/legal/privacy-policy/>
* **Hetzner** Data Processing Agreement in Accordance with Article 28 of the General Data Protection Regulation (**GDPR**): [dpa-2025-03-18.pdf](https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/legal/dpa-2025-03-18.pdf)
* **Hetzner** DPA Audit: [dpa-tuev-audit-en.pdf](https://raw.githubusercontent.com/StephanGeorg/distance.tools-public-docs/main/legal/dpa-tuev-audit-en.pdf)

### 🇺🇸 Cloudflare Inc. [cloudflare.com](https://cloudflare.com)

Cloudflare is a **content delivery network** (CDN) and **security service** that helps improve the **performance** and **security** of websites. It is used to optimize loading times, **protect against cyber threats**, and ensure the availability of our services. Cloudflare processes data related to website traffic as part of its services, in accordance with its privacy practices.

* **Cloudflare** Terms of Use: <https://www.cloudflare.com/website-terms/>
* **Cloudflare** Data Processing Addendum (DPA): [Cloudflare\_Customer\_DPA\_v6.2\_Nov\_9\_2023.pdf](https://cf-assets.www.cloudflare.com/slt3lc6tev37/33zd4ZHJyP8tADGLBSUGB7/8cb20da3929645487342eed96bedd898/Cloudflare_Customer_DPA_v6.2_Nov_9_2023.pdf)

## API

### Data provider

#### 🇪🇺 OpenCage Geocoder (OpenCage GmbH) [opencagedata.com](https://opencagedata.com/)

OpenCage Geocoder is a **geolocation service** that provides accurate and reliable **geocoding**, converting addresses into geographic coordinates and vice versa. It is used to transform your input into geographic coordinates, while ensuring the privacy and security of location data in accordance with their privacy practices.&#x20;

{% hint style="success" %}
To ensure that your data is not stored or logged the `no_record` [parameter](https://opencagedata.com/api#no_record-param) is used.&#x20;
{% endhint %}

* **OpenCage** Privacy Policy: <https://opencagedata.com/gdpr>
* **OpenCage** Terms & Conditions: <https://opencagedata.com/terms>

### **Server log files**

The API provider automatically collects and stores information that your browser automatically transmits to us in "server log files". These are:

* Browser type and browser version
* Operating system used
* Referrer URL
* Host name of the accessing computer
* Time of the server request
* IP address

These data will not be combined with data from other sources. The basis for data processing is Art. 6 (1) (f) DSGVO, which allows the processing of data to fulfill a contract or for measures preliminary to a contract.

## Spreadsheet

## Webapp

### Data provider

#### 🇺🇸 Esri **ArcGIS online** [**arcgis.com**](https://www.arcgis.com)

When you are using the search field, we make a request to the ESRI ArcGIS API to fetch suggestions for places and addresses. To show you the most relevant places in your nearby area we add your geolocation (if available) to that request.&#x20;

* Esri ArcGIS online EU Privacy: <https://trust.arcgis.com/en/privacy/eu-privacy.htm>
* Esri Legal overview: <https://www.esri.com/en-us/legal/overview>

#### 🇪🇺 what3words Limited [what3words.com](https://what3words.com)

The Webapp also uses what3words as alternative addressing. When using the search field, we fetch suggestions for what3words addresses. To show you the most relevant places in your nearby area we add your geolocation (if available) to that request.&#x20;

* **what3words** Privacy Policy: <http://what3words.com/privacy/>
* **what3words** Terms and Conditions: <https://what3words.com/terms>

### Analytics & Advertising

The webapp uses 3rd party advertiser to monetize the traffic. You can accept, reject and edit all relevant settings with the [privacy manager](https://cdn.privacy-mgmt.com/privacy-manager/index.html?message_id=207076\&pmTab=vendors\&hasCsp=true\&mms_origin=https%3A%2F%2Fcdn.privacy-mgmt.com%2Fmms%2Fv2\&site_id=7399\&concatenatedUUID=de4a6836-c3bc-44d6-9a01-95e87b2e144f~~\&consent_origin=https%3A%2F%2Fcdn.privacy-mgmt.com%2Fconsent%2Ftcfv2\&consentUUID=de4a6836-c3bc-44d6-9a01-95e87b2e144f\&includeCustomVendorsRes=1).

### **Cookies**

Some of our web pages use cookies. Cookies do not harm your computer and do not contain any viruses. Cookies help make our website more user-friendly, efficient, and secure. Cookies are small text files that are stored on your computer and saved by your browser.

Most of the cookies we use are so-called "session cookies." They are automatically deleted after your visit. Other cookies remain in your device's memory until you delete them. These cookies make it possible to recognize your browser when you next visit the site.

You can configure your browser to inform you about the use of cookies so that you can decide on a case-by-case basis whether to accept or reject a cookie. Alternatively, your browser can be configured to automatically accept cookies under certain conditions or to always reject them, or to automatically delete cookies when closing your browser. Disabling cookies may limit the functionality of this website.

Cookies which are necessary to allow electronic communications or to provide certain functions you wish to use (such as the selected language) are stored pursuant to Art. 6 paragraph 1, letter f of DSGVO. The website operator has a legitimate interest in the storage of cookies to ensure an optimized service provided free of technical errors. If other cookies (such as those used to analyze your surfing behavior) are also stored, they will be treated separately in this privacy policy.

### **Server log files**

The website provider automatically collects and stores information that your browser automatically transmits to us in "server log files". These are:

* Browser type and browser version
* Operating system used
* Referrer URL
* Host name of the accessing computer
* Time of the server request
* IP address

These data will not be combined with data from other sources. The basis for data processing is Art. 6 (1) (f) DSGVO, which allows the processing of data to fulfill a contract or for measures preliminary to a contract.


# Credits

Thanks to all Open Source and Open Data contributers.

## Open Source

### Open Source Routing Machine (OSRM)

Website: <https://project-osrm.org/>\
License: [BSD-2-Clause license](https://github.com/Project-OSRM/osrm-backend#BSD-2-Clause-1-ov-file)\
Attribution: Copyright (c) 2017, Project OSRM contributors

### Protomaps (pmtiles)

Website: <https://protomaps.com/>\
License: \
Attribution: Copyright 2021 Protomaps LLC

### MapLibre

Website: <https://maplibre.org/>\
License: <https://github.com/maplibre/maplibre-gl-js?tab=License-1-ov-file#readme>\
Attribution: Copyright (c) 2023, MapLibre contributors

## Data sources

### OpenStreetMap (OSM)

Website: <https://www.openstreetmap.org/>\
License: OpenStreetMap[®](https://www.openstreetmap.org/copyright#trademarks) is *open data*, licensed under the [Open Data Commons Open Database License](https://opendatacommons.org/licenses/odbl/) (ODbL) by the [OpenStreetMap Foundation](https://osmfoundation.org/) (OSMF).\
Attribution: © [OpenStreetMap](https://www.openstreetmap.org/) contributors

### GeoNames

Website: [geonames.org](https://geonames.org)\
License: [Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/)\
Attribution: <https://www.geonames.org/team.html>


# Get in contact

### Social

{% embed url="<https://bsky.app/profile/stephangeorg.bsky.social>" %}

### Business & consulting&#x20;

{% embed url="<https://www.linkedin.com/in/stephangeorg/>" %}

### Developers & tech

{% embed url="<https://github.com/StephanGeorg>" %}

### OpenStreetMap

{% embed url="<https://www.openstreetmap.org/user/StpnGeorg>" %}

### Advertisers

{% content-ref url="/pages/wHEVtG4SyHiBHPpVPZAB" %}
[Advertisers](/tools/webapp/advertisers)
{% endcontent-ref %}

### Questions & support

Mail <s.georg@hey.com>


# Editor

GitBook has a powerful block-based editor that allows you to seamlessly create, update, and enhance your content.

<figure><img src="https://gitbookio.github.io/onboarding-template-images/editor-hero.png" alt=""><figcaption></figcaption></figure>

### Writing content

GitBook offers a range of block types for you to add to your content inline — from simple text and tables, to code blocks and more. These elements will make your pages more useful to readers, and offer extra information and context.

Either start typing below, or press `/` to see a list of the blocks you can insert into your page.

### Add a new block

{% stepper %}
{% step %}

### Open the insert block menu

Press `/` on your keyboard to open the insert block menu.
{% endstep %}

{% step %}

### Search for the block you need&#x20;

Try searching for “Stepper”, for exampe, to insert the stepper block.
{% endstep %}

{% step %}

### Insert and edit your block

Click or press Enter to insert your block. From here, you’ll be able to edit it as needed.
{% endstep %}
{% endstepper %}


# Markdown

GitBook supports many different types of content, and is backed by Markdown — meaning you can copy and paste any existing Markdown files directly into the editor!

<figure><img src="https://gitbookio.github.io/onboarding-template-images/markdown-hero.png" alt=""><figcaption></figcaption></figure>

Feel free to test it out and copy the Markdown below by hovering over the code block in the upper right, and pasting into a new line underneath.

```markdown
# Heading

This is some paragraph text, with a [link](https://docs.gitbook.com) to our docs. 

## Heading 2
- Point 1
- Point 2
- Point 3
```

{% hint style="info" %}
If you have multiple files, GitBook makes it easy to import full repositories too — allowing you to keep your GitBook content in sync.
{% endhint %}


# Images & media

GitBook allows you to add images and media easily to your docs. Simply drag a file into the editor, or use the file manager in the upper right corner to upload multiple images at once.

<figure><img src="https://gitbookio.github.io/onboarding-template-images/images-hero.png" alt=""><figcaption><p>Add alt text and captions to your images</p></figcaption></figure>

{% hint style="info" %}
You can also add images simply by copying and pasting them directly into the editor — and GitBook will automatically add it to your file manager.
{% endhint %}


# Interactive blocks

In addition to the default Markdown you can write, GitBook has a number of out-of-the-box interactive blocks you can use. You can find interactive blocks by pressing `/` from within the editor.

<figure><img src="https://gitbookio.github.io/onboarding-template-images/interactive-hero.png" alt=""><figcaption></figcaption></figure>

### Tabs

{% tabs %}
{% tab title="First tab" %}
Each tab is like a mini page — it can contain multiple other blocks, of any type. So you can add code blocks, images, integration blocks and more to individual tabs in the same tab block.
{% endtab %}

{% tab title="Second tab" %}
Add images, embedded content, code blocks, and more.

```javascript
const handleFetchEvent = async (request, context) => {
    return new Response({message: "Hello World"});
};
```

{% endtab %}
{% endtabs %}

### Expandable sections

<details>

<summary>Click me to expand</summary>

Expandable blocks are helpful in condensing what could otherwise be a lengthy paragraph. They are also great in step-by-step guides and FAQs.

</details>

### Drawings

<img alt="" class="gitbook-drawing">

### Embedded content

{% embed url="<https://www.youtube.com/watch?v=YILlrDYzAm4>" %}

{% hint style="info" %}
GitBook supports thousands of embedded websites out-of-the-box, simply by pasting their links. Feel free to check out which ones[ are supported natively](https://iframely.com).
{% endhint %}


# OpenAPI

You can sync GitBook pages with an OpenAPI or Swagger file or a URL to include auto-generated API methods in your documentation.

### OpenAPI block

GitBook's OpenAPI block is powered by [Scalar](https://scalar.com/), so you can test your APIs directly from your docs.

{% openapi src="<https://petstore3.swagger.io/api/v3/openapi.json>" path="/pet" method="post" %}
<https://petstore3.swagger.io/api/v3/openapi.json>
{% endopenapi %}


# Integrations

GitBook integrations allow you to connect your GitBook spaces to some of your favorite platforms and services. You can install integrations into your GitBook page from the *Integrations* menu in the top left.

<figure><img src="https://gitbookio.github.io/onboarding-template-images/integrations-hero.png" alt=""><figcaption></figcaption></figure>

### Types of integrations

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden></th></tr></thead><tbody><tr><td><strong>Analytics</strong></td><td>Track analytics from your docs</td><td><a href="https://www.gitbook.com/integrations#analytics">https://www.gitbook.com/integrations#analytics</a></td><td></td><td></td></tr><tr><td><strong>Support</strong></td><td>Add support widgets to your docs</td><td><a href="https://www.gitbook.com/integrations#support">https://www.gitbook.com/integrations#support</a></td><td></td><td></td></tr><tr><td><strong>Interactive</strong></td><td>Add extra functionality to your docs</td><td><a href="https://www.gitbook.com/integrations#interactive">https://www.gitbook.com/integrations#interactive</a></td><td></td><td></td></tr><tr><td><strong>Visitor Authentication</strong></td><td>Protect your docs and require sign-in</td><td><a href="https://www.gitbook.com/integrations#visitor-authentication">https://www.gitbook.com/integrations#visitor-authentication</a></td><td></td><td></td></tr></tbody></table>


