Für Reisevereinigungen, Verbände und Veranstalter
Ergebnis-API
Übermitteln Sie die Ergebnisse Ihrer Preisflüge direkt an Pidgree. Jeder Züchter, der Pidgree nutzt, findet seine Ergebnisse danach automatisch in der App – ohne L-Datei, ohne Abtippen.
So funktioniert es
- Sie senden einen Flug mit allen Ergebnissen als JSON an die API.
- Pidgree ordnet jede Zeile über Schlagnummer und Ringnummer dem richtigen Schlag und der richtigen Taube zu.
- Die Züchter erhalten eine Benachrichtigung und sehen die Ergebnisse bei ihren Reisen – gekennzeichnet mit „Übermittelt von“ und Ihrem Namen.
Schläge, die Pidgree nicht nutzen, werden übersprungen. Was ein Züchter selbst eingetragen oder bearbeitet hat, wird nie überschrieben.
Zugang erhalten
Für die API benötigen Sie einen persönlichen API-Schlüssel. Wir vergeben ihn nur an Reisevereinigungen, Verbände und Veranstalter – damit nicht jeder Ergebnisse einspielen kann.
Schreiben Sie uns über die Kontaktdaten im Impressum.
Schlüssel geheim halten
Der Schlüssel beginnt mit pdg_live_ und wird nur einmal angezeigt. Bewahren Sie ihn wie ein Passwort auf und geben Sie ihn nicht in Webseiten oder Apps weiter, die andere herunterladen können. Ist er in falsche Hände geraten, sperren wir ihn sofort und stellen einen neuen aus.
Schnellstart
Basisadresse der API:
https://example.supabase.co/functions/v1/race-resultsDen Schlüssel senden Sie bei jeder Anfrage im Header X-API-Key mit.
1. Verbindung prüfen
curl https://example.supabase.co/functions/v1/race-results/v1/me \
-H "X-API-Key: pdg_live_IHR_SCHLUESSEL"2. Probelauf – nichts wird gespeichert
Mit ?dry_run=true prüft Pidgree Ihre Daten und meldet, wie viele Schläge und Tauben zugeordnet werden könnten. Ideal für den ersten Test.
curl "https://example.supabase.co/functions/v1/race-results/v1/races?dry_run=true" \
-H "X-API-Key: pdg_live_IHR_SCHLUESSEL" \
-H "Content-Type: application/json" \
--data @flug.json3. Flug übermitteln
curl "https://example.supabase.co/functions/v1/race-results/v1/races" \
-H "X-API-Key: pdg_live_IHR_SCHLUESSEL" \
-H "Content-Type: application/json" \
--data @flug.jsonBeispiel für flug.json:
{
"external_id": "RV-2026-07-12-Bourges",
"name": "Bourges 2026 (Alttiere)",
"race_date": "2026-07-12",
"release_location": "Bourges",
"release_time": "06:30",
"total_pigeons": 1850,
"results": [
{ "loft_number": "DV-01156", "ring_number": "DV 06523-24-0123",
"placement": 1, "arrival_time": "14:05:12",
"distance_m": 712345, "speed_mpm": 1284.6 },
{ "loft_number": "DV-02045", "ring_number": "DV 02045-21-0002",
"placement": 2, "distance_m": 698120, "speed_mpm": 1281.2 },
{ "loft_number": "DV-03221", "ring_number": "DV 03221-23-0815",
"did_not_return": true }
]
}Felder
Flug
| Feld | Pflicht | Bedeutung |
|---|---|---|
external_id | ja | Ihre eigene, eindeutige Kennung für den Flug (A–Z, 0–9, . _ : -). Dieselbe Kennung erneut senden ersetzt die Ergebnisse. |
race_date | ja | Datum des Auflasses, z. B. 2026-07-12 |
release_location | ja | Auflassort |
name | nein | Anzeigename, z. B. „Bourges 2026 (Alttiere)“ |
release_time | nein | Auflasszeit, z. B. 06:30 |
release_lat / release_lon | nein | Koordinaten des Auflassorts |
total_pigeons | nein | Gesamteinsatz des Flugs |
results | ja | Liste der Ergebnisse (bis 10.000 pro Anfrage) |
Jede Ergebniszeile
| Feld | Pflicht | Bedeutung |
|---|---|---|
loft_number | ja | Schlagnummer, z. B. DV-01156 (Schreibweise egal) |
ring_number | ja | Ringnummer, z. B. DV 06523-24-0123, DV-06523-24-123 oder 2465230123; ausländische Ringe wie NL 2023-1234567 |
placement | nein | Platzierung (leer bei nicht heimgekehrt) |
did_not_return | nein | true = nicht heimgekehrt |
arrival_time | nein | Ankunftszeit, z. B. 14:05:12 |
distance_m | nein | Entfernung zum Schlag in Metern |
speed_mpm | nein | Geschwindigkeit in Metern pro Minute |
placement_g / placement_f | nein | Platzierung in Sonderwertungen |
total_pigeons | nein | Einsatz für diese Zeile (sonst der Gesamteinsatz) |
Antwort und Zuordnung
Nach dem Speichern antwortet die API mit einer Zusammenfassung:
{
"dry_run": false,
"external_id": "RV-2026-07-12-Bourges",
"results_received": 3,
"lofts_matched": 2,
"results_imported": 2,
"results_kept_from_loft": 0,
"pigeons_linked": 1,
"unmatched": [
{ "index": 2, "loft_number": "DV-03221", "ring_number": "2332210815",
"reason": "loft_not_registered" }
]
}lofts_matched– so viele Schläge haben Ergebnisse erhalten.pigeons_linked– so viele Ergebnisse wurden einer angelegten Taube zugeordnet.results_kept_from_loft– Zeilen, die der Züchter bereits selbst eingetragen hatte; diese bleiben unverändert.unmatched– Zeilen ohne Zuordnung, mit Grund:loft_not_registered(der Schlag nutzt Pidgree nicht oder hat die Übernahme abgeschaltet – nicht gespeichert) oderpigeon_not_found(die Taube ist beim Schlag noch nicht angelegt – das Ergebnis wurde trotzdem gespeichert).
Korrekturen und Zurückziehen
- Korrigieren: Senden Sie den Flug mit derselben
external_iderneut. Die vorher übermittelten Ergebnisse werden ersetzt. - Status abfragen:
GET /v1/races/{external_id} - Alle eigenen Flüge:
GET /v1/races - Zurückziehen:
DELETE /v1/races/{external_id}entfernt alle übermittelten Ergebnisse dieses Flugs wieder.
Grenzen: 60 Anfragen pro Minute, höchstens 10.000 Ergebnisse bzw. 5 MB pro Anfrage.
Fehlermeldungen
Fehler kommen immer im selben Format: { "error": { "code": "…", "message": "…" } }
| Status | Code | Bedeutung |
|---|---|---|
| 401 | missing_api_key / invalid_api_key | Schlüssel fehlt, ist falsch oder gesperrt. |
| 422 | validation_failed | Pflichtangaben fehlen oder sind ungültig. Das Feld „details“ nennt jede betroffene Zeile, z. B. results[3].ring_number. |
| 400 | invalid_json | Der Inhalt ist kein gültiges JSON. |
| 404 | race_not_found | Zu dieser external_id gibt es keinen Flug. |
| 413 | payload_too_large | Anfrage größer als 5 MB – bitte aufteilen. |
| 429 | rate_limited | Mehr als 60 Anfragen pro Minute. Nach der im Header Retry-After genannten Zeit erneut versuchen. |
| 500 | internal_error | Fehler bei uns. Bitte später erneut versuchen. |
Was Züchter sehen
Züchter erhalten eine Benachrichtigung („Neue Reiseergebnisse“) und finden den Flug bei ihren Reisen. Wer das nicht möchte, schaltet die Übernahme in den Schlag-Einstellungen der App ab. Kontaktdaten der Züchter erhalten Sie über die API nicht – sie ist eine reine Einbahnstraße zu Pidgree.
Technische Beschreibung
Die vollständige Beschreibung im OpenAPI-Format (z. B. für Postman oder Swagger) können Sie herunterladen: