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

  1. Sie senden einen Flug mit allen Ergebnissen als JSON an die API.
  2. Pidgree ordnet jede Zeile über Schlagnummer und Ringnummer dem richtigen Schlag und der richtigen Taube zu.
  3. 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-results

Den 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.json

3. 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.json

Beispiel 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

FeldPflichtBedeutung
external_idjaIhre eigene, eindeutige Kennung für den Flug (A–Z, 0–9, . _ : -). Dieselbe Kennung erneut senden ersetzt die Ergebnisse.
race_datejaDatum des Auflasses, z. B. 2026-07-12
release_locationjaAuflassort
nameneinAnzeigename, z. B. „Bourges 2026 (Alttiere)“
release_timeneinAuflasszeit, z. B. 06:30
release_lat / release_lonneinKoordinaten des Auflassorts
total_pigeonsneinGesamteinsatz des Flugs
resultsjaListe der Ergebnisse (bis 10.000 pro Anfrage)

Jede Ergebniszeile

FeldPflichtBedeutung
loft_numberjaSchlagnummer, z. B. DV-01156 (Schreibweise egal)
ring_numberjaRingnummer, z. B. DV 06523-24-0123, DV-06523-24-123 oder 2465230123; ausländische Ringe wie NL 2023-1234567
placementneinPlatzierung (leer bei nicht heimgekehrt)
did_not_returnneintrue = nicht heimgekehrt
arrival_timeneinAnkunftszeit, z. B. 14:05:12
distance_mneinEntfernung zum Schlag in Metern
speed_mpmneinGeschwindigkeit in Metern pro Minute
placement_g / placement_fneinPlatzierung in Sonderwertungen
total_pigeonsneinEinsatz 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) oder pigeon_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_id erneut. 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": "…" } }

StatusCodeBedeutung
401missing_api_key / invalid_api_keySchlüssel fehlt, ist falsch oder gesperrt.
422validation_failedPflichtangaben fehlen oder sind ungültig. Das Feld „details“ nennt jede betroffene Zeile, z. B. results[3].ring_number.
400invalid_jsonDer Inhalt ist kein gültiges JSON.
404race_not_foundZu dieser external_id gibt es keinen Flug.
413payload_too_largeAnfrage größer als 5 MB – bitte aufteilen.
429rate_limitedMehr als 60 Anfragen pro Minute. Nach der im Header Retry-After genannten Zeit erneut versuchen.
500internal_errorFehler 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:

OpenAPI-Beschreibung herunterladen