Anleitung

overpass-api.de: «406 Not Acceptable»

Seit dem 19. April 2026 lehnt der öffentliche Server overpass-api.de Skripte ab, die den Standard-User-Agent ihrer HTTP-Bibliothek senden oder gar keinen. Sie erhalten HTTP 406 Not Acceptable mit einer kurzen Seite von nginx.

Senden Sie einen Header User-Agent, der Ihre Anwendung nennt und sagt, wie man Sie erreicht, zum Beispiel shop-map/1.2 (+https://example.com/contact). Seiten im Browser müssen einen Referer senden. Für regelmässige oder kommerzielle Nutzung bitten die Betreiber, einen anderen Server zu verwenden.

So sieht die Antwort aus

Die Antwort kommt von nginx, das vor Overpass läuft, und enthält deshalb keine Fehlermeldung von Overpass:

HTTP/1.1 406 Not Acceptable
Content-Type: text/html

<html>
<head><title>406 Not Acceptable</title></head>
<body>
<center><h1>406 Not Acceptable</h1></center>
<hr><center>nginx</center>

Wir haben diese Antwort am 4. November 2026 mit dem User-Agent von python-requests 2.32 erhalten. Die Bibliotheken zeigen sie auf ihre Art: requests wirft HTTPError: 406 Client Error: Not Acceptable, overpy wirft OverpassUnknownHTTPStatusCode mit dem Code 406, und R meldet HTTP 406 Not Acceptable.

Warum der Server Sie ablehnt

overpass-api.de wird von Freiwilligen des Vereins FOSSGIS betrieben und ist überlastet. Am 19. April 2026 haben die Betreiber Sperrregeln eingeführt und im Forum von OpenStreetMap beschrieben:

  • Skripte müssen einen eigenen User-Agent setzen, der sie gut erkennbar macht. Standard-User-Agents, gefälschte und wechselnde werden abgelehnt.
  • Anfragen aus dem Browser müssen einen Referrer enthalten.
  • Ein Benutzer, ein Skript: Verteilen Sie Abfragen nicht auf mehrere Skripte, Server oder Cloud-Worker.
  • Kommerzielle Nutzer sollen einen eigenen Server betreiben oder einen kommerziellen Anbieter nutzen.

Ein Standard-User-Agent ist der, den eine Bibliothek sendet, wenn Sie keinen setzen, etwa python-requests/2.32.3, Python-urllib/3.12 oder curl/8.5.0. Welche Zeichenketten abgelehnt werden, ist nicht veröffentlicht. Sperren nach User-Agent oder Referrer werden auch von Hand gesetzt und ebenfalls mit 406 beantwortet.

Einen User-Agent setzen

Nennen Sie die Anwendung, ihre Version und einen Kontakt: eine Webseite oder eine E-Mail-Adresse. Verwenden Sie bei jeder Anfrage denselben User-Agent und für jede Anwendung einen eigenen.

Python mit requests

import requests

HEADERS = {"User-Agent": "shop-map/1.2 (+https://example.com/contact)"}
query = "[out:json][timeout:25];node[amenity=drinking_water](46.51,6.62,46.53,6.65);out;"

r = requests.post("https://overpass-api.de/api/interpreter",
                  data={"data": query}, headers=HEADERS, timeout=60)
r.raise_for_status()
print(len(r.json()["elements"]))

overpy

overpy sendet seine Anfragen mit urllib und hat keine Einstellung für Header, also sendet es Python-urllib/3.x. Installieren Sie vor der ersten Abfrage einen Opener mit Ihrem User-Agent; overpy verwendet ihn dann:

import urllib.request
import overpy

opener = urllib.request.build_opener()
opener.addheaders = [("User-Agent", "shop-map/1.2 (+https://example.com/contact)")]
urllib.request.install_opener(opener)

api = overpy.Overpass()
result = api.query("node[amenity=drinking_water](46.51,6.62,46.53,6.65);out;")

Der Opener gilt für jede Anfrage des Programms über urllib.

overpass (Python-Paket)

Ohne user_agent sendet das Paket Unknown overpass-api-python-wrapper application:

import overpass

api = overpass.API(user_agent="shop-map/1.2 (+https://example.com/contact)", timeout=60)

OSMnx

OSMnx sendet für jedes OSMnx-Skript auf der Welt denselben User-Agent und Referer. Setzen Sie Ihren eigenen:

import osmnx as ox

ox.settings.http_user_agent = "thesis-streets/0.3 (jane.doe@example.org)"
ox.settings.http_referer = "https://example.org/thesis"

osmdata (R)

library(osmdata)
options(osmdata.user_agent = "flood-study/1.0 (jane.doe@example.org)")

curl

curl -A "shop-map/1.2 (+https://example.com/contact)" \
  --data-urlencode "data@query.overpassql" \
  https://overpass-api.de/api/interpreter

JavaScript

In Node.js setzen Sie den Header in fetch:

const r = await fetch("https://overpass-api.de/api/interpreter", {
  method: "POST",
  headers: { "User-Agent": "shop-map/1.2 (+https://example.com/contact)" },
  body: new URLSearchParams({ data: query }),
});

Im Browser sendet der Browser seinen eigenen User-Agent (Chrome lässt Skripte ihn nicht ändern), und die Seite muss einen Referer senden. Ein Header Referrer-Policy: no-referrer, gesetzt von Helmet, Django oder nginx, entfernt ihn. Die Anleitung zu gesperrten Kartenkacheln zeigt, wo Sie die Einstellung ändern. Auch eine Interpreter-URL, die Sie direkt in die Adresszeile eingeben, wird abgelehnt, weil kein Referrer mitkommt.

QGIS und Overpass Turbo

QGIS setzt Mozilla/5.0 vor den User-Agent von Plugins, deshalb haben die Betreiber den User-Agent von QGIS ausgenommen; QuickOSM funktioniert ohne Änderung. Overpass Turbo läuft im Browser und sendet einen Referrer.

Trotz eigenem User-Agent 406

  • Ihr User-Agent oder Ihre Website wurde von Hand gesperrt. Einen neuen User-Agent zu wählen, um die Sperre zu umgehen, ist der Wechsel, den die Regeln verbieten. Fragen Sie im Hilfebereich des Forums von OpenStreetMap nach.
  • Ihre Seite läuft auf einer Plattform für KI-generierte Apps. Am 11. August 2026 schrieben die Betreiber, dass sie viele solcher Plattformen gesperrt haben, zum Beispiel lovable.app und netlify.app. Anfragen von dort gehosteten Seiten tragen diesen Referrer.
  • Der Browser sendet keinen Referrer. Prüfen Sie die Anfrage in den Entwicklerwerkzeugen des Browsers, Reiter Netzwerk.

Warten Sie nach einem 406 mindestens 30 Sekunden bis zur nächsten Anfrage. Wer immer wieder 406 oder 429 erhält, wird nach IP-Adresse gesperrt; siehe gesperrt bei overpass-api.de.

Ein anderer Server

Für eine Anwendung oder eine regelmässige Aufgabe ist der öffentliche Server der falsche Ort: Seine Richtlinie im Wiki von OpenStreetMap zählt die Anfragen aller Nutzer einer App oder Website zusammen und schickt kommerzielle Nutzer zu einem eigenen oder bezahlten Server. Die Anleitung zu den Alternativen vergleicht die Möglichkeiten.

overpass.ch erkennt Sie am API-Schlüssel und nimmt jeden User-Agent an. Ihre Abfragen bleiben gleich; nur die URL ändert sich:

https://overpass-api.de/api/interpreter
→ https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/interpreter