Entwickler

Hengst-API

Laden Sie die Hengste, die eine Station auf OneTrot veröffentlicht, direkt in ihre Website: Abstammung, Fotos, Decktaxen, Texte und den Buchungslink. Die Station pflegt alles einmal in OneTrot, und die Website ist immer aktuell.

Überblick

Basis-URL
https://onetrot.com/api/public/v1
Authentifizierung
Keine. Die API ist nur lesend und liefert nur, was die Station auf ihren öffentlichen OneTrot-Seiten zeigt.
Format
JSON (UTF-8). Jede erfolgreiche Antwort enthält die Nutzdaten in data.
Version
v1, Teil der URL. Innerhalb von v1 kommen nur Felder hinzu.
OpenAPI
Maschinenlesbare Beschreibung für Code-Generatoren und Werkzeuge wie Postman: https://onetrot.com/api/public/v1/openapi.json

Schnellstart

Jede Station wird über den Slug aus ihrem Buchungslink angesprochen: …/de/book/gestuet-sonnenfeld hat den Slug gestuet-sonnenfeld. Die Beispiele auf dieser Seite nutzen Gestüt Sonnenfeld, eine fiktive Demo-Station; ersetzen Sie den Slug durch den Ihrer Station. Dieser Aufruf liefert alle öffentlichen Hengste:

curl "https://onetrot.com/api/public/v1/stables/gestuet-sonnenfeld/stallions?locale=de"

Grundlagen

Slugs sind Ihre Schlüssel

Der Slug einer Station und der eines Hengstes sind die letzten Teile des Buchungslinks. Der Slug eines Hengstes ist innerhalb seiner Station eindeutig und bleibt gleich, wenn der Hengst umbenannt wird. Speichern Sie ihn deshalb als Schlüssel in Ihrem CMS.

Sprache

Hängen Sie locale=de oder locale=en an (Standard: de). Bezeichnungen wie Rasse und Farbe kommen übersetzt. Die Texte schreibt die Station: Hat ein Hengst keinen Text in der angefragten Sprache, erhalten Sie die andere Sprache, und texts.locale sagt Ihnen, welche.

Buchungslinks

Verlinken Sie jeden Button „Samen bestellen“ auf links.booking: Das Formular öffnet sich mit dem richtigen Hengst. Bitte verlinken (gleicher oder neuer Tab) statt in einem iframe einzubetten: Anmeldung und Zahlung funktionieren nur im eigenen Fenster zuverlässig.

Welche Hengste enthalten sind

Nur Hengste, die die Station auf aktiv und öffentlich gestellt hat, genau wie auf ihrer OneTrot-Katalogseite. Verschwindet ein Hengst aus der Liste, bietet die Station ihn nicht mehr an: Blenden Sie ihn auf der Website aus. Ein alter Buchungslink zu ihm funktioniert weiter und öffnet die Hengstübersicht der Station.

Preise

Alle Beträge sind ganze Zahlen in Euro-Cent, netto und brutto, brutto mit 7 % MwSt wie im OneTrot-Katalog. offers enthält einen Eintrag pro buchbarer Option (Frischsamen, Tiefgefriersamen, Natursprung) mit ihren Gebühren: initial ist bei Buchung fällig, pregnancy sobald die Stute tragend ist, redelivery für jede weitere TG-Lieferung. formatted ist fertig zur Anzeige. priceNote ist der eigene Hinweis der Station, etwa „pro Portion“.

Fotos und Videos

Bild-URLs zeigen auf den Bildspeicher von OneTrot und bleiben gültig; Sie können sie direkt einbinden oder in Ihre Mediathek kopieren. focalPoint ist der Bildausschnitt, den die Station gewählt hat, als CSS-Wert für object-position: Damit zeigt ein beschnittenes Foto das Pferd und nicht den Hintergrund. videos sind YouTube-URLs.

Caching und Limits

Antworten dürfen 5 Minuten zwischengespeichert werden. Jede Antwort trägt ein ETag: Senden Sie es in If-None-Match zurück, und Sie erhalten 304 Not Modified, solange sich nichts geändert hat. Das Limit liegt bei 120 Anfragen pro Minute und IP-Adresse, großzügig für einen Sync, zu knapp für einen Aufruf pro Seitenaufruf.

Endpunkte

Hengste einer Station auflisten

GET/stables/{stableSlug}/stallions

Alle Hengste, die die Station veröffentlicht, nach Name sortiert. Ohne Seitenaufteilung: Eine Station hat einige Dutzend Hengste, Sie erhalten immer die ganze Liste in einem Aufruf.

Parameter

stableSlugPfad · string · Pflicht
Slug der Station, wie im Buchungslink.
localeQuery · string · optional
de oder en. Standard de.

Anfrage

curl "https://onetrot.com/api/public/v1/stables/gestuet-sonnenfeld/stallions?locale=de"

Antwort

200 OK · application/json
{
  "data": [
    {
      "id": "5f0c2a7e-1d4b-4c6a-9e2f-7b3d8a1c6e90",
      "slug": "soprano-sonnenfeld",
      "name": "Soprano Sonnenfeld",
      "updatedAt": "2026-10-20T09:12:44.000Z",
      "breed": {
        "key": "oldenburg",
        "label": "Oldenburger"
      },
      "color": {
        "key": "black",
        "label": "Rappe"
      },
      "wffs": {
        "key": "negative",
        "label": "WFFS-frei (N/N)"
      },
      "yearOfBirth": 2018,
      "heightCm": 172,
      "ueln": "276431017232512",
      "breeder": "Gestüt Sonnenfeld",
      "owner": null,
      "approvedFor": [
        "Verband der Züchter des Oldenburger Pferdes e.V.",
        "Hannoveraner Verband e.V."
      ],
      "texts": {
        "locale": "de",
        "tagline": "Der Aushängehengst des Gestüts",
        "description": {
          "html": "<p>Soprano Sonnenfeld vereint Modernität und Leistungsvermögen in idealer Form.</p>",
          "text": "Soprano Sonnenfeld vereint Modernität und Leistungsvermögen in idealer Form."
        },
        "achievements": null,
        "characteristics": null,
        "priceNote": "Frischsamen: zweite Rate bei Trächtigkeit"
      },
      "pedigree": {
        "sire": {
          "name": "Sonnenkönig",
          "registrationNumber": "276431010012014",
          "breed": "Old",
          "award": null,
          "sire": {
            "name": "Royal Sun",
            "registrationNumber": null,
            "breed": "Han",
            "award": null,
            "sire": null,
            "dam": null
          },
          "dam": {
            "name": "Belle Étoile",
            "registrationNumber": null,
            "breed": null,
            "award": null,
            "sire": null,
            "dam": null
          }
        },
        "dam": {
          "name": "Donna del Sol",
          "registrationNumber": null,
          "breed": "Old",
          "award": null,
          "sire": {
            "name": "Diamantino",
            "registrationNumber": null,
            "breed": null,
            "award": null,
            "sire": null,
            "dam": null
          },
          "dam": {
            "name": "Fleur du Nord",
            "registrationNumber": null,
            "breed": null,
            "award": null,
            "sire": null,
            "dam": null
          }
        }
      },
      "media": {
        "hero": {
          "url": "https://chpvnflyhhdnaaugasjt.supabase.co/storage/v1/object/public/public/stallion-images/demo/soprano-sonnenfeld/hero.webp",
          "focalPoint": "50% 30%"
        },
        "gallery": [
          {
            "url": "https://chpvnflyhhdnaaugasjt.supabase.co/storage/v1/object/public/public/stallion-images/demo/soprano-sonnenfeld/1.webp",
            "focalPoint": null
          }
        ],
        "videos": []
      },
      "offers": [
        {
          "type": "fresh",
          "fees": [
            {
              "kind": "initial",
              "netCents": 50000,
              "grossCents": 53500,
              "vatRatePercent": 7,
              "currency": "EUR",
              "formatted": "535,00 €"
            },
            {
              "kind": "pregnancy",
              "netCents": 50000,
              "grossCents": 53500,
              "vatRatePercent": 7,
              "currency": "EUR",
              "formatted": "535,00 €"
            }
          ]
        },
        {
          "type": "frozen",
          "fees": [
            {
              "kind": "initial",
              "netCents": 90000,
              "grossCents": 96300,
              "vatRatePercent": 7,
              "currency": "EUR",
              "formatted": "963,00 €"
            },
            {
              "kind": "redelivery",
              "netCents": 30000,
              "grossCents": 32100,
              "vatRatePercent": 7,
              "currency": "EUR",
              "formatted": "321,00 €"
            }
          ]
        }
      ],
      "links": {
        "booking": "https://onetrot.com/de/book/gestuet-sonnenfeld/soprano-sonnenfeld",
        "catalogue": "https://onetrot.com/de/catalogue/gestuet-sonnenfeld/soprano-sonnenfeld",
        "vetCheck": null
      }
    },
    "..."
  ]
}

Einen Hengst abrufen

GET/stables/{stableSlug}/stallions/{stallionSlug}

Dasselbe Objekt wie in der Liste, für einen Hengst. 404, wenn der Hengst nicht existiert oder nicht öffentlich ist.

Parameter

stableSlugPfad · string · Pflicht
Slug der Station, wie im Buchungslink.
stallionSlugPfad · string · Pflicht
Slug des Hengstes, wie im Buchungslink.
localeQuery · string · optional
de oder en. Standard de.

Anfrage

curl "https://onetrot.com/api/public/v1/stables/gestuet-sonnenfeld/stallions/soprano-sonnenfeld?locale=de"

Antwort

200 OK · application/json
{
  "data": {
    "id": "5f0c2a7e-1d4b-4c6a-9e2f-7b3d8a1c6e90",
    "slug": "soprano-sonnenfeld",
    "name": "Soprano Sonnenfeld",
    "updatedAt": "2026-10-20T09:12:44.000Z",
    "breed": {
      "key": "oldenburg",
      "label": "Oldenburger"
    },
    "color": {
      "key": "black",
      "label": "Rappe"
    },
    "wffs": {
      "key": "negative",
      "label": "WFFS-frei (N/N)"
    },
    "yearOfBirth": 2018,
    "heightCm": 172,
    "ueln": "276431017232512",
    "breeder": "Gestüt Sonnenfeld",
    "owner": null,
    "approvedFor": [
      "Verband der Züchter des Oldenburger Pferdes e.V.",
      "Hannoveraner Verband e.V."
    ],
    "texts": {
      "locale": "de",
      "tagline": "Der Aushängehengst des Gestüts",
      "description": {
        "html": "<p>Soprano Sonnenfeld vereint Modernität und Leistungsvermögen in idealer Form.</p>",
        "text": "Soprano Sonnenfeld vereint Modernität und Leistungsvermögen in idealer Form."
      },
      "achievements": null,
      "characteristics": null,
      "priceNote": "Frischsamen: zweite Rate bei Trächtigkeit"
    },
    "pedigree": {
      "sire": {
        "name": "Sonnenkönig",
        "registrationNumber": "276431010012014",
        "breed": "Old",
        "award": null,
        "sire": {
          "name": "Royal Sun",
          "registrationNumber": null,
          "breed": "Han",
          "award": null,
          "sire": null,
          "dam": null
        },
        "dam": {
          "name": "Belle Étoile",
          "registrationNumber": null,
          "breed": null,
          "award": null,
          "sire": null,
          "dam": null
        }
      },
      "dam": {
        "name": "Donna del Sol",
        "registrationNumber": null,
        "breed": "Old",
        "award": null,
        "sire": {
          "name": "Diamantino",
          "registrationNumber": null,
          "breed": null,
          "award": null,
          "sire": null,
          "dam": null
        },
        "dam": {
          "name": "Fleur du Nord",
          "registrationNumber": null,
          "breed": null,
          "award": null,
          "sire": null,
          "dam": null
        }
      }
    },
    "media": {
      "hero": {
        "url": "https://chpvnflyhhdnaaugasjt.supabase.co/storage/v1/object/public/public/stallion-images/demo/soprano-sonnenfeld/hero.webp",
        "focalPoint": "50% 30%"
      },
      "gallery": [
        {
          "url": "https://chpvnflyhhdnaaugasjt.supabase.co/storage/v1/object/public/public/stallion-images/demo/soprano-sonnenfeld/1.webp",
          "focalPoint": null
        }
      ],
      "videos": []
    },
    "offers": [
      {
        "type": "fresh",
        "fees": [
          {
            "kind": "initial",
            "netCents": 50000,
            "grossCents": 53500,
            "vatRatePercent": 7,
            "currency": "EUR",
            "formatted": "535,00 €"
          },
          {
            "kind": "pregnancy",
            "netCents": 50000,
            "grossCents": 53500,
            "vatRatePercent": 7,
            "currency": "EUR",
            "formatted": "535,00 €"
          }
        ]
      },
      {
        "type": "frozen",
        "fees": [
          {
            "kind": "initial",
            "netCents": 90000,
            "grossCents": 96300,
            "vatRatePercent": 7,
            "currency": "EUR",
            "formatted": "963,00 €"
          },
          {
            "kind": "redelivery",
            "netCents": 30000,
            "grossCents": 32100,
            "vatRatePercent": 7,
            "currency": "EUR",
            "formatted": "321,00 €"
          }
        ]
      }
    ],
    "links": {
      "booking": "https://onetrot.com/de/book/gestuet-sonnenfeld/soprano-sonnenfeld",
      "catalogue": "https://onetrot.com/de/catalogue/gestuet-sonnenfeld/soprano-sonnenfeld",
      "vetCheck": null
    }
  }
}

Die Station abrufen

GET/stables/{stableSlug}

Name, Adresse, Kontakt und der Buchungslink der Station (die Hengstauswahl), für einen Kontaktblock oder den allgemeinen Button „Samen bestellen“.

Parameter

stableSlugPfad · string · Pflicht
Slug der Station, wie im Buchungslink.
localeQuery · string · optional
de oder en. Standard de.

Anfrage

curl "https://onetrot.com/api/public/v1/stables/gestuet-sonnenfeld?locale=de"

Antwort

200 OK · application/json
{
  "data": {
    "slug": "gestuet-sonnenfeld",
    "name": "Gestüt Sonnenfeld",
    "address": {
      "line1": "Sonnenweg 1",
      "line2": null,
      "postalCode": "49377",
      "city": "Vechta",
      "country": "DE"
    },
    "contact": {
      "email": "info@gestuet-sonnenfeld.de",
      "phone": "+494441000000"
    },
    "links": {
      "booking": "https://onetrot.com/de/book/gestuet-sonnenfeld",
      "catalogue": "https://onetrot.com/de/catalogue/gestuet-sonnenfeld"
    }
  }
}

Beispielantwort, gekürzt: Die Abstammung zeigt zwei von vier Generationen und die Galerie ein Foto.

OpenAPI-Beschreibung

GET/openapi.json

Diese API als OpenAPI-3.1-Dokument.

Das Hengst-Objekt

Jedes Feld ist immer vorhanden; ein Wert, den die Station nicht eingetragen hat, ist null (oder eine leere Liste).

idstring (uuid)
Dauerhafte ID des Hengstes.
slugstring
Slug des Hengstes; eindeutig innerhalb der Station, ändert sich nicht bei Umbenennung. Als Schlüssel verwenden.
namestring
Name, wie die Station ihn schreibt.
updatedAtstring | null
Letzte Änderung am Hengst (ISO 8601).
breed{ key, label } | null
Rasse: Schlüssel plus Bezeichnung in der angefragten Sprache.
color{ key, label } | null
Farbe: Schlüssel plus Bezeichnung.
wffs{ key, label } | null
WFFS-Status: Schlüssel plus Bezeichnung.
yearOfBirthinteger | null
Geburtsjahr.
heightCminteger | null
Stockmaß in cm.
uelnstring | null
UELN (Lebensnummer).
breederstring | null
Züchter.
ownerstring | null
Besitzer.
approvedForstring[]
Namen der Zuchtverbände, für die der Hengst anerkannt ist.
texts.locale"de" | "en" | null
Sprache der tatsächlich gelieferten Texte (de oder en); null, wenn der Hengst keine Texte hat.
texts.taglinestring | null
Kurzer Slogan, etwa „Einer der Besten“.
texts.description, .achievements, .characteristics{ html, text } | null
Lange Texte als bereinigtes HTML (html) und als reiner Text (text).
texts.priceNotestring | null
Hinweis der Station zum Preis.
pedigree{ sire, dam } | null
Abstammung bis zur vierten Generation: Jeder Knoten hat name, registrationNumber, breed, award und wiederum sire und dam. Ein unbekannter Vorfahr ist null, oder ein Knoten mit name null, wenn Vorfahren darüber bekannt sind.
media.hero{ url, focalPoint } | null
Hauptfoto mit focalPoint.
media.gallery{ url, focalPoint }[]
Weitere Fotos, in der Reihenfolge der Station.
media.videosstring[]
YouTube-URLs.
offers[]{ type, fees }
Ein Eintrag pro buchbarer Option: type ist fresh, frozen oder natural_cover.
offers[].fees[]{ kind, netCents, grossCents, ... }
Gebühren der Option: kind (initial, pregnancy, redelivery), netCents, grossCents, vatRatePercent, currency, formatted.
links.bookingstring
Buchungsseite mit diesem Hengst vorausgewählt. Ihr Button „Samen bestellen“.
links.cataloguestring
Die öffentliche OneTrot-Seite des Hengstes.
links.vetCheckstring | null
Link zum tierärztlichen Befund des Hengstes, falls die Station einen hinterlegt.

Fehler

Fehler antworten mit einem HTTP-Status und einem JSON-Körper, dessen error-Objekt code und message enthält:

400invalid_locale
locale ist weder de noch en.
404not_found
Die Station oder der Hengst existiert nicht oder ist nicht öffentlich.
429rate_limited
Mehr als 120 Anfragen pro Minute von Ihrer IP-Adresse. Später erneut versuchen und zwischenspeichern.
500internal
Ein Fehler auf unserer Seite. Die Antwort enthält eine incidentId: Bitte nennen Sie sie, wenn Sie uns kontaktieren.
404 Not Found
{
  "error": {
    "code": "not_found",
    "message": "No public stallion \"unknown\" at \"gestuet-sonnenfeld\"."
  }
}

Versionierung und Support

v1 (Oktober 2026): erste Version. Innerhalb von v1 kommen nur Felder hinzu; ignorieren Sie Felder, die Sie nicht kennen. Eine Umbenennung oder Entfernung käme als /v2, mit Vorankündigung.

Fragen oder fehlt Ihnen ein Feld? Schreiben Sie an info@onetrot.com