23 aktive Meldungen 9 Tiere wieder zu Hause

API-Dokumentation · v1.0.0

API-Dokumentation

Die API von Ik ben vermist liefert Ihnen pro Meldung die Tierart, die Gemeinde, das Datum und einen dauerhaften Link zur Meldung auf ikbenvermist.be, ohne personenbezogene Daten. Unten finden Sie alles, um in wenigen Minuten Ihre erste Anfrage zu stellen.

Was wir teilen und was nicht

Was wir teilen

  • Nummer (ID) der Meldung
  • Status: vermisst, gefunden, gesichtet oder wieder zu Hause
  • Tierart (Katze, Hund, Vogel …)
  • Gemeinde und Provinz
  • Datum der Meldung und der letzten Änderung
  • Dauerhafter Link zur Meldung auf Ik ben vermist
  • Aggregierte Zahlen und das Barometer
  • Gemeinden mit Links zu ihrer Seite und zur Liste der Unterbringungen

Was wir nie teilen

  • Namen von Besitzern, Findern oder meldenden Personen
  • E-Mail-Adressen und Telefonnummern
  • Name des Tieres
  • Fotos
  • Beschreibungen, Merkmale und Freitext
  • Chipnummern
  • Straße, Adresse oder genauer Standort auf der Karte
  • Nachrichten, Sichtungen und Suchaktionen

Schnellstart

  1. Fragen Sie einen Schlüssel an

    Über das Formular auf der API-Seite. Nach der Genehmigung rufen Sie Ihren Schlüssel einmal ab.

  2. Bewahren Sie ihn auf Ihrem Server auf

    Zum Beispiel als Umgebungsvariable IBV_API_KEY. Nie im Browser oder in einer URL.

  3. Stellen Sie Ihre erste Anfrage

    Rufen Sie die vermissten Tiere in Ihrer Gemeinde ab:

    curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?gemeente=hasselt&status=missing" \
      -H "Authorization: Bearer $IBV_API_KEY"

Noch kein Schlüssel? Probieren Sie es mit dem Sandbox-Schlüssel: Er liefert immer dieselben Beispieldaten.

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/listings" \
  -H "Authorization: Bearer ibv_sandbox_try_it_out_public_demo_key"

Authentifizierung

  • Senden Sie Ihren Schlüssel bei jeder Anfrage im Header Authorization: Bearer <Schlüssel> oder in X-API-Key: <Schlüssel>. Nur über HTTPS.
  • Einen Schlüssel in der URL (z. B. ?api_key=) lehnen wir immer mit 400 key_in_query ab: URLs landen in Logdateien. Ist das trotzdem passiert? Dann fragen Sie uns nach einem neuen Schlüssel.
  • Nach zu vielen Anfragen mit fehlendem oder ungültigem Schlüssel sperren wir die IP-Adresse für eine Viertelstunde (429 too_many_failures).
  • Die API verwendet keine Cookies und erlaubt keine Anfragen aus dem Browser anderer Websites (kein CORS). Ihr Server ruft die Daten ab; Ihre Website zeigt die Links.
Authorization: Bearer ibv_live_<prefix>_<secret>
# or
X-API-Key: ibv_live_<prefix>_<secret>

Limits und Polling

  • Pro Schlüssel standardmäßig 60 Anfragen pro Minute, 1000 pro Stunde und 10000 pro Tag. Jede Antwort sagt Ihnen, wie viele Sie noch haben: X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset.
  • Senden Sie das ETag Ihrer vorigen Antwort in If-None-Match zurück (oder Last-Modified in If-Modified-Since). Hat sich nichts geändert, erhalten Sie ein 304 ohne Inhalt. Das zählt zwar als Anfrage, kostet uns und Sie aber fast nichts.
  • Empfohlen: Meldungen alle 15 Minuten (mindestens 60 Sekunden zwischen identischen Anfragen), den Lösch-Feed mindestens täglich, Zahlen, Barometer und Gemeinden einmal täglich (mindestens eine Stunde).
  • Eine identische Anfrage innerhalb der Mindestwartezeit erhält die vorige Antwort aus dem Cache (Header X-Cache: POLL). Neu berechnet wird nur, wenn sich inzwischen etwas geändert hat.
  • Bei 429 oder 503: Warten Sie die Sekunden aus Retry-After ab und versuchen Sie es dann erneut, am besten mit wachsender Wartezeit. Schlüssel, die weiter hämmern, pausieren wir automatisch.
  • Für große Synchronisationen: per_page bis 100 und page bis 100. Darüber hinaus arbeiten Sie mit updated_since.
EndpointMindestintervall
GET /listings60 Sekunden
GET /listings/{id}60 Sekunden
GET /listings/deleted60 Sekunden
GET /stats3.600 Sekunden
GET /barometer3.600 Sekunden
GET /gemeenten3.600 Sekunden
GET /me10 Sekunden
# 1st request
curl -si "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?updated_since=2026-10-12T00:00:00Z&sort=updated_at" -H "Authorization: Bearer $IBV_API_KEY"
# → 200, ETag: W/"g42-…"

# 15 minutes later, nothing changed
curl -si "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?updated_since=2026-10-12T00:00:00Z&sort=updated_at" \
  -H "Authorization: Bearer $IBV_API_KEY" -H 'If-None-Match: W/"g42-…"'
# → 304 Not Modified (no body)

Fehlercodes

Jeder Fehler hat dieselbe Form: {"code": "…", "message": "…"}, ohne interne Details.

HTTPcodeBeschreibung
400unknown_parameter, invalid_parameterUnbekannter oder ungültiger Parameter. Wir akzeptieren nur die dokumentierten Parameter.
400key_in_querySchlüssel in der URL. Senden Sie ihn in einem Header und fragen Sie einen neuen Schlüssel an.
400since_too_oldDer Lösch-Feed reicht 180 Tage zurück: Synchronisieren Sie zuerst alles neu.
401missing_key, invalid_keyKein oder kein gültiger Schlüssel.
403key_paused, key_expired, key_revokedDer Schlüssel funktioniert (vorübergehend) nicht. Bei Ablauf: Verwenden Sie den Verlängerungslink aus unserer E-Mail.
403insufficient_scope, ip_not_allowedDer Schlüssel darf diesen Endpunkt nicht nutzen, oder die IP-Adresse steht nicht auf der Liste.
403writes_disabledDas Einsenden von Meldungen ist noch nicht verfügbar.
404not_foundKeine öffentliche Meldung mit dieser ID oder kein solcher Endpunkt.
429rate_limited, too_many_failures, write_limitLimit erreicht. Warten Sie Retry-After Sekunden.
503overloadedVorübergehend ausgelastet. Warten Sie Retry-After Sekunden.
{
    "code": "rate_limited",
    "message": "Rate limit reached for this key. Try again later."
}

Endpunkte

Base URL https://ikbenvermist.be/wp-json/ibv/api/v1

GET /listings

Meldungen abrufen

Öffentliche Meldungen, neueste zuerst. Filtern Sie nach Status, Tierart und Ort. Synchronisieren Sie mit updated_since und If-None-Match. Eine identische Anfrage innerhalb von 60 Sekunden erhält die vorige Antwort aus dem Cache.

Scope
read:listings
Mindestintervall
60 Sekunden

Parameter

NameOrtTypBeschreibung
statusquerystringKommagetrennt: missing, found, seen, home.
speciesquerystringKommagetrennt: cat, dog, bird, small_mammal, reptile, horse, other.
provincequerystringProvinz-Slug (siehe /gemeenten). Nicht zusammen mit gemeente oder near.
gemeentequerystringGemeinde-Slug oder NIS-Code (siehe /gemeenten).
nearquerystringBelgische Postleitzahl: Meldungen in Gemeinden, deren Zentrum innerhalb von radius km liegt (Abstand zwischen Gemeindezentren, nie genaue Standorte).
radiusqueryinteger 1–25Radius in km (1–25, Standard 10), nur mit near.
updated_sincequerystringNur seitdem geänderte Meldungen (ISO 8601). Grundlage der Synchronisation.
sortquerystring (-reported_at, reported_at, -updated_at, updated_at) = -reported_atSortierung; ein Minuszeichen bedeutet neueste zuerst.
pagequeryinteger 1–100 = 1Seite (max. 100). Für eine vollständige Synchronisation verwenden Sie updated_since.
per_pagequeryinteger 1–100 = 25Ergebnisse pro Seite (max. 100).
langquerystring (nl, fr, en, de) = nlSprache der Bezeichnungen und Links (der Link öffnet die Meldung in dieser Sprache).
If-None-MatchheaderstringETag Ihrer vorigen Antwort: unverändert → 304 ohne Inhalt.
If-Modified-SinceheaderstringLast-Modified Ihrer vorigen Antwort.

Beispielanfrage

curl

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?status=missing&gemeente=hasselt&lang=nl" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H 'If-None-Match: W/"…"'

JavaScript

// on your server (Node 18+), never in the browser
const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/listings?status=missing&gemeente=hasselt&lang=nl', {
  headers: { Authorization: `Bearer ${process.env.IBV_API_KEY}` },
});
if (res.status === 429) { /* wait res.headers.get('Retry-After') seconds */ }
const body = await res.json();

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/listings?status=missing&gemeente=hasselt&lang=nl');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);

Beispielantwort 200

{
    "data": [
        {
            "id": 900001,
            "status": "missing",
            "status_label": "Vermist",
            "species": "cat",
            "species_label": "Kat",
            "place": {
                "gemeente": "Hasselt",
                "gemeente_slug": "hasselt",
                "nis": "71022",
                "province": "Limburg",
                "province_slug": "limburg"
            },
            "reported_at": "2026-10-10T08:12:00Z",
            "updated_at": "2026-10-11T17:40:00Z",
            "url": "https://ikbenvermist.be/m/900001/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
            "links": {
                "self": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/900001",
                "html": "https://ikbenvermist.be/m/900001/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                "gemeente": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
            }
        },
        {
            "id": 900002,
            "status": "found",
            "status_label": "Gevonden",
            "species": "dog",
            "species_label": "Hond",
            "place": {
                "gemeente": "Gent",
                "gemeente_slug": "gent",
                "nis": "44021",
                "province": "Oost-Vlaanderen",
                "province_slug": "oost-vlaanderen"
            },
            "reported_at": "2026-10-09T14:03:00Z",
            "updated_at": "2026-10-09T14:03:00Z",
            "url": "https://ikbenvermist.be/m/900002/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
            "links": {
                "self": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/900002",
                "html": "https://ikbenvermist.be/m/900002/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                "gemeente": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
            }
        }
    ],
    "meta": {
        "page": 1,
        "per_page": 2,
        "total": 6,
        "total_pages": 3,
        "lang": "nl",
        "generated_at": "2026-10-15T01:00:04Z"
    },
    "links": {
        "self": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?lang=nl&per_page=2&page=1",
        "first": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?lang=nl&per_page=2&page=1",
        "last": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?lang=nl&per_page=2&page=3",
        "next": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings?lang=nl&per_page=2&page=2",
        "docs": "https://ikbenvermist.be/en/api/documentation/"
    }
}

POST /listings

Meldung einsenden (noch nicht verfügbar) Noch nicht verfügbar

Vorbereitet z. B. für Tierärzte oder Behörden, aber noch nicht verfügbar: antwortet 403 writes_disabled. Sobald aktiv, geht eine Meldung nie direkt online: Die meldende Person erhält eine E-Mail zur Bestätigung, danach folgt die übliche Prüfung.

Scope
write:listings / write:found

Beispielanfrage

curl

curl -s -X POST "https://ikbenvermist.be/wp-json/ibv/api/v1/listings" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"found","species":"cat","postcode":"3500","date":"2026-10-12","color":"rood","contact":{"email":"dierenarts@example.org"},"lang":"nl"}'

JavaScript

const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/listings', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.IBV_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"type":"found","species":"cat","postcode":"3500","date":"2026-10-12","color":"rood","contact":{"email":"dierenarts@example.org"},"lang":"nl"}),
});
console.log(res.status, await res.json());

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/listings');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY'), 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => '{"type":"found","species":"cat","postcode":"3500","date":"2026-10-12","color":"rood","contact":{"email":"dierenarts@example.org"},"lang":"nl"}',
]);
$result = json_decode(curl_exec($ch), true);

GET /listings/{id}

Eine Meldung

Eine öffentliche Meldung. Alles, was nicht öffentlich ist (entfernt, abgeschlossen, unbestätigt oder vom Besitzer nicht geteilt), ergibt dieselbe 404-Antwort.

Scope
read:listings
Mindestintervall
60 Sekunden

Parameter

NameOrtTypBeschreibung
id PflichtpathintegerListing id.
langquerystring (nl, fr, en, de) = nlSprache der Bezeichnungen und Links (der Link öffnet die Meldung in dieser Sprache).
If-None-MatchheaderstringETag Ihrer vorigen Antwort: unverändert → 304 ohne Inhalt.
If-Modified-SinceheaderstringLast-Modified Ihrer vorigen Antwort.

Beispielanfrage

curl

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/900001" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H 'If-None-Match: W/"…"'

JavaScript

// on your server (Node 18+), never in the browser
const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/listings/900001', {
  headers: { Authorization: `Bearer ${process.env.IBV_API_KEY}` },
});
if (res.status === 429) { /* wait res.headers.get('Retry-After') seconds */ }
const body = await res.json();

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/listings/900001');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);

Beispielantwort 200

{
    "data": {
        "id": 900001,
        "status": "missing",
        "status_label": "Vermist",
        "species": "cat",
        "species_label": "Kat",
        "place": {
            "gemeente": "Hasselt",
            "gemeente_slug": "hasselt",
            "nis": "71022",
            "province": "Limburg",
            "province_slug": "limburg"
        },
        "reported_at": "2026-10-10T08:12:00Z",
        "updated_at": "2026-10-11T17:40:00Z",
        "url": "https://ikbenvermist.be/m/900001/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
        "links": {
            "self": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/900001",
            "html": "https://ikbenvermist.be/m/900001/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
            "gemeente": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
        }
    }
}

GET /listings/deleted

Entfernte Meldungen (Sync)

IDs von Meldungen, die nicht mehr öffentlich sind (entfernt, abgeschlossen, archiviert oder vom Besitzer nicht mehr geteilt). Entfernen Sie sie bei sich innerhalb von 24 Stunden. Rufen Sie dies mindestens einmal täglich ab.

Scope
read:listings
Mindestintervall
60 Sekunden

Parameter

NameOrtTypBeschreibung
sincequerystringEntfernt seit (ISO 8601, standardmäßig vor 24 Stunden, höchstens 180 Tage zurück).
pagequeryinteger 1–100 = 1Seite (max. 100). Für eine vollständige Synchronisation verwenden Sie updated_since.
per_pagequeryinteger 1–100 = 25Ergebnisse pro Seite (max. 100).
If-None-MatchheaderstringETag Ihrer vorigen Antwort: unverändert → 304 ohne Inhalt.
If-Modified-SinceheaderstringLast-Modified Ihrer vorigen Antwort.

Beispielanfrage

curl

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/deleted?since=2026-10-12T00%3A00%3A00Z" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H 'If-None-Match: W/"…"'

JavaScript

// on your server (Node 18+), never in the browser
const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/listings/deleted?since=2026-10-12T00%3A00%3A00Z', {
  headers: { Authorization: `Bearer ${process.env.IBV_API_KEY}` },
});
if (res.status === 429) { /* wait res.headers.get('Retry-After') seconds */ }
const body = await res.json();

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/listings/deleted?since=2026-10-12T00%3A00%3A00Z');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);

Beispielantwort 200

{
    "data": [
        {
            "id": 899990,
            "deleted_at": "2026-10-11T09:00:00Z"
        },
        {
            "id": 899991,
            "deleted_at": "2026-10-11T15:30:00Z"
        }
    ],
    "meta": {
        "page": 1,
        "per_page": 2,
        "total": 2,
        "total_pages": 1,
        "lang": "nl",
        "generated_at": "2026-10-15T01:00:04Z"
    },
    "links": {
        "self": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/deleted?since=2026-10-14T01%3A00%3A04Z&lang=nl&per_page=2&page=1",
        "first": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/deleted?since=2026-10-14T01%3A00%3A04Z&lang=nl&per_page=2&page=1",
        "last": "https://ikbenvermist.be/wp-json/ibv/api/v1/listings/deleted?since=2026-10-14T01%3A00%3A04Z&lang=nl&per_page=2&page=1",
        "docs": "https://ikbenvermist.be/en/api/documentation/"
    }
}

GET /stats

Zahlen

Aggregierte Live-Zahlen (dieselben wie auf der Zahlenseite). Einmal täglich genügt.

Scope
read:stats
Mindestintervall
3.600 Sekunden

Parameter

NameOrtTypBeschreibung
langquerystring (nl, fr, en, de) = nlSprache der Bezeichnungen und Links (der Link öffnet die Meldung in dieser Sprache).
If-None-MatchheaderstringETag Ihrer vorigen Antwort: unverändert → 304 ohne Inhalt.
If-Modified-SinceheaderstringLast-Modified Ihrer vorigen Antwort.

Beispielanfrage

curl

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/stats?lang=nl" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H 'If-None-Match: W/"…"'

JavaScript

// on your server (Node 18+), never in the browser
const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/stats?lang=nl', {
  headers: { Authorization: `Bearer ${process.env.IBV_API_KEY}` },
});
if (res.status === 429) { /* wait res.headers.get('Retry-After') seconds */ }
const body = await res.json();

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/stats?lang=nl');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);

Beispielantwort 200

{
    "data": {
        "updated_at": "2026-10-12T06:00:00Z",
        "since": 2019,
        "listings_total": 1234,
        "active_now": 210,
        "back_home": 480,
        "by_status": {
            "missing": 870,
            "found": 290,
            "seen": 74
        },
        "by_species": {
            "cat": 760,
            "dog": 390,
            "bird": 40,
            "small_mammal": 30,
            "reptile": 4,
            "horse": 2,
            "other": 8
        },
        "by_province": [
            {
                "province": "Limburg",
                "province_slug": "limburg",
                "count": 300
            }
        ],
        "chip_pct": 71,
        "median_days_home": 3,
        "summer_factor": 1.6,
        "source": "SAMPLE DATA — Ik ben vermist sandbox",
        "links": {
            "html": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
            "barometer": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
        }
    }
}

GET /barometer

Quartalsbarometer

Die Barometer-Ausgaben und die Zahlen einer Ausgabe (standardmäßig die neueste).

Scope
read:stats
Mindestintervall
3.600 Sekunden

Parameter

NameOrtTypBeschreibung
editionquerystringBarometer-Ausgabe (standardmäßig die neueste).
langquerystring (nl, fr, en, de) = nlSprache der Bezeichnungen und Links (der Link öffnet die Meldung in dieser Sprache).
If-None-MatchheaderstringETag Ihrer vorigen Antwort: unverändert → 304 ohne Inhalt.
If-Modified-SinceheaderstringLast-Modified Ihrer vorigen Antwort.

Beispielanfrage

curl

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/barometer?edition=2026-q3&lang=nl" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H 'If-None-Match: W/"…"'

JavaScript

// on your server (Node 18+), never in the browser
const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/barometer?edition=2026-q3&lang=nl', {
  headers: { Authorization: `Bearer ${process.env.IBV_API_KEY}` },
});
if (res.status === 429) { /* wait res.headers.get('Retry-After') seconds */ }
const body = await res.json();

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/barometer?edition=2026-q3&lang=nl');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);

Beispielantwort 200

{
    "data": {
        "editions": [
            {
                "edition": "2026-q3",
                "url": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
            }
        ],
        "edition": {
            "edition": "2026-q3",
            "year": 2026,
            "quarter": 3,
            "listings": 321,
            "by_status": {
                "missing": 220,
                "found": 80,
                "seen": 21
            },
            "by_species": {
                "cat": 200,
                "dog": 101,
                "other": 20
            },
            "by_province": [
                {
                    "province": "Oost-Vlaanderen",
                    "province_slug": "oost-vlaanderen",
                    "count": 64
                }
            ],
            "back_home": 120,
            "home_rate_pct": 55,
            "median_days_home": 3,
            "change_vs_previous_pct": 12,
            "change_vs_last_year_pct": null,
            "referring_municipalities": 25,
            "frozen": true,
            "url": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
        }
    }
}

GET /gemeenten

Gemeinden und Links

Alle belgischen Gemeinden mit ihrem Namen in vier Sprachen, NIS-Code, Postleitzahlen, Provinz und den Links zu ihrer Seite mit vermissten und gefundenen Tieren sowie zur Liste der Unterbringungen. So verlinken Sie auf die richtige Gemeindeseite.

Scope
read:places
Mindestintervall
3.600 Sekunden

Parameter

NameOrtTypBeschreibung
provincequerystringNur die Gemeinden dieser Provinz.
If-None-MatchheaderstringETag Ihrer vorigen Antwort: unverändert → 304 ohne Inhalt.
If-Modified-SinceheaderstringLast-Modified Ihrer vorigen Antwort.

Beispielanfrage

curl

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/gemeenten?province=limburg" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H 'If-None-Match: W/"…"'

JavaScript

// on your server (Node 18+), never in the browser
const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/gemeenten?province=limburg', {
  headers: { Authorization: `Bearer ${process.env.IBV_API_KEY}` },
});
if (res.status === 429) { /* wait res.headers.get('Retry-After') seconds */ }
const body = await res.json();

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/gemeenten?province=limburg');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);

Beispielantwort 200

{
    "data": [
        {
            "slug": "hasselt",
            "nis": "71022",
            "names": {
                "nl": "Hasselt",
                "fr": "Hasselt",
                "en": "Hasselt",
                "de": "Hasselt"
            },
            "postcodes": [
                "3500",
                "3501",
                "3510",
                "3511",
                "3512"
            ],
            "province": {
                "slug": "limburg",
                "names": {
                    "nl": "Limburg",
                    "fr": "Limbourg",
                    "en": "Limburg",
                    "de": "Limburg"
                }
            },
            "links": {
                "missing": {
                    "nl": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "fr": "https://ikbenvermist.be/fr/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "en": "https://ikbenvermist.be/en/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "de": "https://ikbenvermist.be/de/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
                },
                "found": {
                    "nl": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "fr": "https://ikbenvermist.be/fr/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "en": "https://ikbenvermist.be/en/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "de": "https://ikbenvermist.be/de/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
                },
                "opvang": {
                    "nl": "https://ikbenvermist.be/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "fr": "https://ikbenvermist.be/fr/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "en": "https://ikbenvermist.be/en/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api",
                    "de": "https://ikbenvermist.be/de/?utm_source=jouw-organisatie&utm_medium=api&utm_campaign=api"
                }
            }
        }
    ],
    "meta": {
        "total": 1,
        "generated_at": "2026-10-12T06:00:00Z"
    }
}

GET /me

Ihr Schlüssel und Ihre Nutzung

Scopes, Limits, Ablaufdatum und Nutzung des verwendeten Schlüssels.

Scope
—
Mindestintervall
10 Sekunden

Beispielanfrage

curl

curl -s "https://ikbenvermist.be/wp-json/ibv/api/v1/me" \
  -H "Authorization: Bearer $IBV_API_KEY" \
  -H 'If-None-Match: W/"…"'

JavaScript

// on your server (Node 18+), never in the browser
const res = await fetch('https://ikbenvermist.be/wp-json/ibv/api/v1/me', {
  headers: { Authorization: `Bearer ${process.env.IBV_API_KEY}` },
});
if (res.status === 429) { /* wait res.headers.get('Retry-After') seconds */ }
const body = await res.json();

PHP

$ch = curl_init('https://ikbenvermist.be/wp-json/ibv/api/v1/me');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('IBV_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);

Beispielantwort 200

{
    "organisation": "Sandbox",
    "key_prefix": "sandbox",
    "status": "active",
    "scopes": [
        "read:listings",
        "read:stats",
        "read:places"
    ],
    "writes": {
        "enabled_globally": false,
        "enabled_for_key": false
    },
    "limits": {
        "per_minute": 20,
        "per_hour": 0,
        "per_day": 0,
        "min_poll_seconds": {
            "listings": 60,
            "listing": 60,
            "deleted": 60,
            "stats": 3600,
            "barometer": 3600,
            "gemeenten": 3600,
            "me": 10
        }
    },
    "expires_at": null,
    "usage": {
        "last_24h": 0,
        "last_30_days": 0
    },
    "utm_source": "sandbox",
    "ip_allowlist": false
}

Ausprobieren

Im Explorer probieren Sie jeden Endpunkt sofort aus, mit dem Sandbox-Schlüssel und Beispieldaten. Echte Schlüssel gehören dort nicht hin: Setzen Sie Ihren eigenen Schlüssel von Ihrem Server aus in den Authorization-Header.

In neuem Fenster öffnen

Versionen und Änderungen

Die API folgt der semantischen Versionierung. Der Pfad enthält die Hauptversion (/v1/). Felder können ohne neue Version hinzukommen, ignorieren Sie also Felder, die Sie nicht kennen. Etwas entfernen oder ändern wir nur in einer neuen Hauptversion, die wir mindestens drei Monate vorher ankündigen.

  • v1.0.0

    Erste Version: Meldungen (lesen), Lösch-Feed, Zahlen, Barometer, Gemeinden, Schlüsselinfo, Sandbox. Das Einsenden von Meldungen ist vorbereitet, aber noch nicht verfügbar.

Nutzungsbedingungen · Zurück zur API-Seite

Häufige Fragen

Wie synchronisiere ich am besten?

Rufen Sie einmal alle Meldungen ab (per_page=100, Seite 1 bis zur letzten). Danach fragen Sie alle 15 Minuten /listings?updated_since=<Zeitpunkt Ihrer letzten Synchronisation>&sort=updated_at ab, mit dem ETag Ihrer vorigen Antwort in If-None-Match, und einmal täglich /listings/deleted?since=<letztes Mal>.

Warum erhalte ich X-Cache: POLL?

Sie haben dieselbe Anfrage innerhalb der Mindestwartezeit gesendet. Dann erhalten Sie die vorige Antwort aus dem Cache; sie zählt trotzdem für Ihre Limits. Verwenden Sie If-None-Match und halten Sie sich an die empfohlenen Intervalle.

Warum ein 404 für eine Meldung, die ich gestern noch hatte?

Sie wurde entfernt, abgeschlossen oder der Besitzer teilt sie nicht mehr über die API. Entfernen Sie sie bei sich; sie steht auch in /listings/deleted.

Darf ich den Sandbox-Schlüssel in meinem eigenen Code verwenden?

Zum Testen ja: Er liefert immer dieselben Beispieldaten und hat ein strenges Limit pro IP. Für echte Daten fragen Sie einen eigenen Schlüssel an.