Zoeken
API REFERENTIE

API-documentatie

Integreer de GeoPin geolocatie-engine in je applicatie. Upload een straatfoto en ontvang GPS-coördinaten.

Base URL https://geopin.nl

# Snelstart

Haal je API-sleutel op via je accountpagina en stuur je eerste verzoek:

curl
curl -X POST https://geopin.nl/api/geolocate \
  -H "X-API-Key: sk_geopin_jouw_sleutel" \
  -F "image=@foto.jpg"

# Authenticatie

Alle verzoeken naar /api/geolocate vereisen een API-sleutel in de X-API-Key header.

Je API-sleutel vind je op je accountpagina. Deel je sleutel nooit publiek.

# Limieten per abonnement

Abonnement Zoekopdrachten / maand Resultaat
Gratis3Locatie binnen ~500m
Starter10Exacte GPS-coördinaten
Pro150Exacte GPS-coördinaten
Business1.000Exacte GPS-coördinaten

# Endpoints

POST /api/geolocate

Lokaliseer een straatfoto en ontvang GPS-coördinaten.

Headers

X-API-Key vereist Je API-sleutel
Content-Type automatisch multipart/form-data

Body multipart/form-data

image vereist Afbeeldingsbestand (JPG, PNG of WebP)

Voorbeeld response 200 OK

JSON
{
  "search_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "location": {
    "lat": 52.21987,
    "lon": 6.89350,
    "confidence": 0.847,
    "heading": 142.5
  },
  "pano_id": "CAoSLEFGMVFp...",
  "server_time": 1.243,
  "usage": {
    "plan": "pro",
    "used": 42,
    "limit": 150
  }
}

Foutcodes

400Geen afbeelding meegegeven
401Ongeldige of ontbrekende API-sleutel
402Maandelijkse limiet bereikt
429Te veel verzoeken
503Dienst tijdelijk niet beschikbaar
GET /api/stats

Geeft de huidige status van de GeoPin-index.

Geen authenticatie vereist.

Voorbeeld response 200 OK

JSON
{
  "total_indexed_images": 112885,
  "coverage": "Enschede (pilot)",
  "last_updated": "2026-03-22T10:00:00.000Z"
}
GET /api/auth/me

Haal je accountgegevens en huidig verbruik op.

Headers

Authorization vereist Bearer <auth_token>

Voorbeeld response 200 OK

JSON
{
  "user": {
    "id": 1,
    "email": "naam@voorbeeld.nl",
    "name": "Jan de Vries",
    "plan": "pro",
    "apiKey": "sk_geopin_abc123...",
    "usage": 42
  }
}

# Codevoorbeelden

Python

Python
import requests

API_KEY = "sk_geopin_jouw_sleutel"

with open("foto.jpg", "rb") as f:
    resp = requests.post(
        "https://geopin.nl/api/geolocate",
        headers={"X-API-Key": API_KEY},
        files={"image": f},
    )

data = resp.json()
loc = data["location"]
print(f"Locatie: {loc['lat']}, {loc['lon']}")
print(f"Betrouwbaarheid: {loc['confidence']:.1%}")

JavaScript / Node.js

JavaScript
const form = new FormData();
form.append("image", fileInput.files[0]);

const res = await fetch("https://geopin.nl/api/geolocate", {
  method: "POST",
  headers: { "X-API-Key": "sk_geopin_jouw_sleutel" },
  body: form,
});

const { location } = await res.json();
console.log(`Locatie: ${location.lat}, ${location.lon}`);

# Responsevelden

VeldTypeBeschrijving
location.latfloatBreedtegraad (WGS84)
location.lonfloatLengtegraad (WGS84)
location.confidencefloatBetrouwbaarheidsscore (0–1)
location.headingfloatGeschatte kijkrichting in graden (0–360)
pano_idstringID van het gematchte panorama
server_timefloatVerwerkingstijd in seconden
search_idstringUniek ID van deze zoekopdracht