Hey,
from our side, things look like they should:
OPTIONS-request to api.openrouteservice.org:
$ curl -X OPTIONS -i "https://api.openrouteservice.org/v2/directions/driving-car/geojson" -H "Authorization: *****" --json '{"coordinates":[[8.681495,49.41461],[8.686507,49.41943],[8.687872,49.420318]]}' -H 'Accept: application/geo+json' -H 'Origin: thisisatest'
HTTP/2 204
server: nginx/1.25.4
date: Mon, 11 May 2026 09:26:54 GMT
access-control-allow-origin: *
access-control-allow-methods: OPTIONS,GET,POST
access-control-allow-headers: Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Authorization, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers
access-control-max-age: 1728000
OPTIONS-request to api.heigit.org:
$ curl -X OPTIONS -i "https://api.heigit.org/openrouteservice/v2/directions/driving-car/geojson" -H "Authorization: ****" --json '{"coordinates":[[8.681495,49.41461],[8.686507,49.41943],[8.687872,49.420318]]}' -H 'Accept: application/geo+json' -H 'Origin: thisisatest'
HTTP/2 200
server: nginx/1.25.4
date: Mon, 11 May 2026 09:26:00 GMT
content-length: 0
accept-patch:
access-control-allow-origin: *
access-control-expose-headers: Access-Control-Allow-Origin, Access-Control-Allow-Credentials
allow: POST,OPTIONS
strict-transport-security: max-age=63072000; includeSubdomains;
vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
x-ratelimit-limit: 2000
x-ratelimit-remaining: 1993
x-ratelimit-reset: 1778575002
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
x-frame-options: DENY
access-control-expose-headers: x-ratelimit-limit, x-ratelimit-remaining
Note, that absence of the Origin header indeed implies absence of the CORS headers:
$ curl -X OPTIONS -i "https://api.heigit.org/openrouteservice/v2/directions/driving-car/geojson" -H "Authorization: ****" --json '{"coordinates":[[8.681495,49.41461],[8.686507,49.41943],[8.687872,49.420318]]}' -H 'Accept: application/geo+json'
HTTP/2 200
server: nginx/1.25.4
date: Mon, 11 May 2026 09:26:17 GMT
content-length: 0
accept-patch:
allow: POST,OPTIONS
strict-transport-security: max-age=63072000; includeSubdomains;
vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
x-ratelimit-limit: 2000
x-ratelimit-remaining: 1992
x-ratelimit-reset: 1778575002
strict-transport-security: max-age=63072000
x-content-type-options: nosniff
x-frame-options: DENY
access-control-expose-headers: x-ratelimit-limit, x-ratelimit-remaining
If you still experience issues, please do submit a full HTTP request, ideally in an easy-to-reproduce way such as a cURL request. It is quite hard to debug these issues without concrete examples of what request was sent and what happened.
Best regards