3099 code on foot-walking foot-hiking Isochrone service but working for cars profile


I am facing a strange error when using Isochrone foot walking service :

For several locations I am able to get “car” profiles but I get a 3099 error code when placing the same call with walking profiles.

Here is an example within API Playground (to remove error that my occur within my code)


import requests

body = {"locations":[[2.312812774836902,48.84267681906289]],"range":[600],"attributes":["area"],"location_type":"start","range_type":"time"}

headers = {
    'Accept': 'application/json, application/geo+json, application/gpx+xml, img/png; charset=utf-8',
    'Authorization': 'api_key',
    'Content-Type': 'application/json; charset=utf-8'
call = requests.post('https://api.openrouteservice.org/v2/isochrones/foot-walking', json=body, headers=headers)

print(call.status_code, call.reason)

API Response for foot-walking

API Response for car-driving

Close up on location

I can not figure out why this happens as the locations seem connected to road networks am I missing something here ?

Anyone has any pointer ?

Digging deeper in this forum I understand that isochrone service shall be snapping a close routable point (up to 350m) :

source : Automaticly change isochrones point with 3099 error code

It seems that car-driving profile is doing this snapping but foot walking/hiking is not. Is this the expected behaviour ? If so, is there a way i can force this snapping ?

thanks for your patience! :innocent:

I could reproduce the described error on the current public API instance running ORS v7.1.1. The observed behaviour is most probably caused by a recently discovered bug fixed via #1566 and does not occur in ORS v8 anymore, which I’ve just verified (see attached screen).

The ORS team is currently in the process of deploying the update on the serves. The fixed service should be available within the next one or two weeks, so stay tuned.


Thank you very much for your answer!

I will be eagerly awaiting v8 to be deployed then :smiley: . Thanks to all of you for the amazing work you are doing!

1 Like

Good news @Zwyxy-fr: ORS v8 has been successfully deployed and your example seems to work as expected :wink:

1 Like

Thanks for the follow up :slight_smile:

After some testing V8 seem to work fine to get Isochrone on locations that failed in previous attempts.

However I am encoutering a new problem :

I get what seem to be random “502 proxy error”. Whats bugging me is that this error can be thrown for a given location , but if i make the call again with the same parameters the request is successfull.

I thought it might me be due to API token limitations , but incresing the delay between request does not seem to have an impact.

Is there something I am missing with public API limitations / known load issues on server side or ?

Here is the error I get :

<title>502 Proxy Error</title>
<h1>Proxy Error</h1>
<p>The proxy server received an invalid
response from an upstream server.<br />
The proxy server could not handle the request<p>Reason: <strong>Error reading from remote server</strong></p></p>

In this case
parameters were as follow :

{'locations': [[2.372825724542572, 48.837045119237075]], 'range': [300], 'range_type': 'time', 'attributes': ['area'], 'location_type': 'start'}

Here is the code used to make calls to the API

import requests
import time

def Isochrone_call(locations,delay,id):
    url = "https://api.openrouteservice.org/v2/isochrones/foot-walking"
    key = xxxx

    headers = {
        "Authorization": key,
        "Accept": 'application/json, application/geo+json, application/gpx+xml, img/png; charset=utf-8',
        "Content-Type": "application/json; charset=utf-8"

    params = {
        "locations": locations,
        "range": [delay],
        "range_type": "time",
        "attributes": ["area"],
        "location_type": "start"
    print(id,": ")
    response = requests.post(url, json=params, headers=headers)

    if response.status_code == 200:    
        data = response.json()
        #print(f"Réponse :{response.content}\n \n" )
        print("OK \n")
        return data
        print("\n L'appel API a échoué avec le code d'erreur :", response.status_code,"\n")
        print("Contenu de la réponse :", response.content.decode("utf-8"),"\n")
        print("Contenu de params :", params,"\n")
        return None

Seems like ORS public API was rolled back to 7.1.1 for those who are working with Isochrone

Hi @Zwyxy-fr,

we had some connectivity issues with our reverse proxy, which took some time to resolve.
We are back on v 8.0.0 again for all profiles :slight_smile:
(See build: add tomcat keep-alive-timeout by TheGreatRefrigerator · Pull Request #1780 · GIScience/openrouteservice · GitHub)

Best regards