API-Methoden
Partner-API-Dokumentation
Diese Referenz beschreibt, wie Ihre Integration im Namen Ihrer Organisation mit Animal-ID kommuniziert: Authentifizierung, erforderliche Header und die zentralen MVP-Endpunkte (Halter, Tiere, Behandlungen, Fotos, Wörterbücher).
SDKs & Client-Bibliotheken
Offizielle Open-Source-SDKs, die die Request-Signierung und die Endpunkte unten kapseln — einfach einbinden, statt Requests manuell zu signieren.
PHP · Composer
Serverseitiges PHP-SDK: HMAC-Request-Signierung und typisierte Clients für jeden Endpunkt.
composer require animal-id/aid-partner-sdk
JavaScript · npm
Framework-Pakete für Node und den Browser, auf einem gemeinsamen Kern aufgebaut.
npm i @animal-id/partner-core
- @animal-id/partner-coreFramework-unabhängiger Kern: Signierung + typisierter Client.
- @animal-id/partner-reactReact-Hooks & -Helfer.
- @animal-id/partner-vueVue-Composables.
- @animal-id/partner-angularAngular-Services.
- @animal-id/partner-nestjsNestJS-Modul für serverseitige Integrationen.
Authentifizierung & Signatur
Basis-URL: https://gw-dev.animal-id.net · alle Pfade werden vorangestellt mit /v1/partner.
Jede signierte Anfrage trägt vier Header. Die Signatur ist ein HMAC-SHA256 (hex) einer kanonischen Zeichenkette, signiert mit Ihrem privaten Schlüssel:
stringToSign = METHOD + "\n" + path[?query] + "\n" + sha256_hex(rawBody) + "\n" + timestamp signature = hex( hmac_sha256(stringToSign, privateKey) )
| Header | Wert |
|---|---|
X-Eternity-App-Id | Ihre Anwendungs-ID. |
X-Eternity-Public-Key | Ihr öffentlicher Schlüssel. |
X-Eternity-Timestamp | Unix-Sekunden; muss innerhalb von ±300s der Serverzeit liegen. |
X-Eternity-Signature | Der oben berechnete HMAC-SHA256-Hex-Wert. |
X-Eternity-Idempotency-Key | UUID, erforderlich bei jedem POST/PATCH/DELETE. Wiederholungen geben die erste Antwort zurück; gleicher Schlüssel + anderer Body → 409. |
X-Eternity-Animal-ID-Version | Optionale Datumsversion (YYYY-MM-DD). Standard ist die bei der Ausstellung Ihrer App festgelegte Version; ab 2026-07-04 hängt die Tierregistrierung vorhandene Besitzer per public_id statt user_gid an. |
X-Eternity-Expand | Optional. JSON-Array von Expand-Schlüsseln, um zusätzliche Daten an unterstützten Endpunkten einzubetten (z. B. ["owners"]). Siehe den Abschnitt „Erweiterung“ eines Endpunkts für die zulässigen Schlüssel; unbekannte Schlüssel → 422. |
X-Eternity-Lang-Code | Optional. Sprachcode (uk, en, ru, de, es) für die von der API gelieferten Namen — z. B. species_name und breed_name auf der Tierkarte sowie die Bezeichnungen in den Wörterbüchern. Ohne Angabe gilt die Standardsprache der Region. |
Signieren und senden Sie exakt dieselben Body-Bytes. Bei GET/DELETE ist der Body leer (sein sha256 ist der Hash einer leeren Zeichenkette). path enthält die Query-Zeichenkette, sofern vorhanden. Bei multipart/form-data-Uploads (Fotos) ist der Roh-Body ebenfalls nicht Teil der Signatur — signieren Sie mit dem sha256 eines leeren Bodys.
Jede erfolgreiche Antwort verpackt die Ergebnisse in einem payload-Array. Endpunkte zum Erstellen/Abrufen einer einzelnen Ressource geben ein einelementiges Array zurück (z. B. { "payload": [ { … } ] }); die Beispiele pro Endpunkt unten zeigen der Kürze halber das einzelne Objekt.
APP_ID="aid_app_xxx"; PUBLIC_KEY="pk_xxx"; PRIVATE_KEY="sk_xxx"
METHOD="POST"
PATH_Q="/v1/partner/owners" # path (+ "?query" if any), exactly as sent
BODY='{"email":"jane@example.com","consent":{"account_creation":true}}'
TS=$(date +%s)
BODY_HASH=$(printf '%s' "$BODY" | openssl dgst -sha256 | awk '{print $2}')
STRING_TO_SIGN=$(printf '%s\n%s\n%s\n%s' "$METHOD" "$PATH_Q" "$BODY_HASH" "$TS")
SIG=$(printf '%s' "$STRING_TO_SIGN" | openssl dgst -sha256 -hmac "$PRIVATE_KEY" | awk '{print $2}')
curl -X "$METHOD" "https://gw.animal-id.net$PATH_Q" \
-H "X-Eternity-App-Id: $APP_ID" \
-H "X-Eternity-Public-Key: $PUBLIC_KEY" \
-H "X-Eternity-Timestamp: $TS" \
-H "X-Eternity-Signature: $SIG" \
-H "X-Eternity-Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d "$BODY"const crypto = require('crypto');
function sign({ method, pathQ, body = '', privateKey }) {
const ts = Math.floor(Date.now() / 1000).toString();
const bodyHash = crypto.createHash('sha256').update(body).digest('hex');
const stringToSign = [method, pathQ, bodyHash, ts].join('\n');
const signature = crypto.createHmac('sha256', privateKey).update(stringToSign).digest('hex');
return { ts, signature };
}
const body = JSON.stringify({ email: 'jane@example.com' });
const { ts, signature } = sign({ method: 'POST', pathQ: '/v1/partner/owners', body, privateKey: 'sk_xxx' });
await fetch('https://gw.animal-id.net/v1/partner/owners', {
method: 'POST',
headers: {
'X-Eternity-App-Id': 'aid_app_xxx',
'X-Eternity-Public-Key': 'pk_xxx',
'X-Eternity-Timestamp': ts,
'X-Eternity-Signature': signature,
'X-Eternity-Idempotency-Key': crypto.randomUUID(),
'Content-Type': 'application/json',
},
body, // sign and send the SAME bytes
});import hashlib, hmac, time, json, uuid, requests
def sign(method, path_q, body, private_key):
ts = str(int(time.time()))
body_hash = hashlib.sha256(body.encode()).hexdigest()
string_to_sign = "\n".join([method, path_q, body_hash, ts])
signature = hmac.new(private_key.encode(), string_to_sign.encode(), hashlib.sha256).hexdigest()
return ts, signature
body = json.dumps({"email": "jane@example.com"}, separators=(",", ":"))
ts, signature = sign("POST", "/v1/partner/owners", body, "sk_xxx")
requests.post(
"https://gw.animal-id.net/v1/partner/owners",
data=body, # send the SAME bytes you signed
headers={
"X-Eternity-App-Id": "aid_app_xxx",
"X-Eternity-Public-Key": "pk_xxx",
"X-Eternity-Timestamp": ts,
"X-Eternity-Signature": signature,
"X-Eternity-Idempotency-Key": str(uuid.uuid4()),
"Content-Type": "application/json",
},
)<?php
function signRequest(string $method, string $pathQ, string $body, string $privateKey): array {
$ts = (string) time();
$bodyHash = hash('sha256', $body);
$stringToSign = implode("\n", [$method, $pathQ, $bodyHash, $ts]);
$signature = hash_hmac('sha256', $stringToSign, $privateKey);
return [$ts, $signature];
}
$body = json_encode(['email' => 'jane@example.com']);
[$ts, $signature] = signRequest('POST', '/v1/partner/owners', $body, 'sk_xxx');
$ch = curl_init('https://gw.animal-id.net/v1/partner/owners');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body, // send the SAME bytes you signed
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Eternity-App-Id: aid_app_xxx",
"X-Eternity-Public-Key: pk_xxx",
"X-Eternity-Timestamp: $ts",
"X-Eternity-Signature: $signature",
'X-Eternity-Idempotency-Key: ' . bin2hex(random_bytes(16)),
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);Webhooks
Empfangen Sie aufgeschobene Ereignisse — etwa wenn ein Besitzer die Zugriffsanfrage eines Tierarztes genehmigt — als signierte POST-Anfragen an Ihren Server. Legen Sie die URL fest und finden Sie Ihr Signatur-Geheimnis im Tab „API-Schlüssel“.
Signierte Webhook-ZustellungWebhook-Signatur & Nutzdaten▸Wir senden jedes Ereignis per POST an Ihre konfigurierte Webhook-URL, signiert mit Ihrem app-spezifischen Webhook-Geheimnis (wird bei der Erzeugung einmalig angezeigt). Überprüfen Sie die Signatur, bevor Sie einer Zustellung vertrauen, indem Sie den HMAC über die kanonische Zeichenkette neu berechnen und in konstanter Zeit vergleichen:
canonical = "POST" + "\n" + path[?query] + "\n" + sha256_hex(rawBody) + "\n" + timestamp signature = hex( hmac_sha256(canonical, webhookSecret) )
| Header | Wert |
|---|---|
X-Eternity-Webhook-Id | Eindeutige Zustellungs-ID (UUID); bleibt bei erneutem Senden desselben Ereignisses gleich. |
X-Eternity-Webhook-Event | Der Ereignisschlüssel, z. B. animal_access.approved. |
X-Eternity-Webhook-Timestamp | Unix-Sekunden, zu denen die Zustellung signiert wurde; weisen Sie Zustellungen mit abweichendem Zeitstempel zurück. |
X-Eternity-Webhook-Signature | HMAC-SHA256 (hex) der kanonischen Zeichenkette, mit Ihrem Webhook-Geheimnis als Schlüssel (nicht Ihrem API-Privatschlüssel). |
Zustellungsinhalt (JSON)
{
"id": "5f1c0b8e-3a2d-4c7b-9b1a-2e6f0d4c8a91",
"event": "animal_access.approved",
"occurred_at": "2026-06-24T09:15:00+00:00",
"result": {
"animal_id": "8xK3pQzVnB7rL2qF",
"requester_user_gid": 90231,
"status": "granted",
"requested_at": "2026-06-23T09:00:00+00:00",
"expires_at": "2026-06-30T09:00:00+00:00",
"retry_after_seconds": 0,
"decided_at": "2026-06-24T09:15:00+00:00"
}
}| Feld | Beschreibung |
|---|---|
id | Die eindeutige Ereignis-ID (entspricht dem Header X-Eternity-Webhook-Id). |
event | Der Ereignisschlüssel, z. B. animal_access.approved. |
occurred_at | Wann das Ereignis eintrat (ISO 8601). |
result | Die Zugriffsentscheidung. Entspricht GET /v1/partner/animals/{id}/access-request und ergänzt animal_id, requester_user_gid und decided_at. |
Ereignisse
| Schlüssel | Bedeutung |
|---|---|
animal_access.approved | Ein Besitzer hat Ihre ausstehende Zugriffsanfrage genehmigt — Sie können das Tier nun bearbeiten. |
animal_access.denied | Ein Besitzer hat Ihre Zugriffsanfrage abgelehnt — Sie können nach Ablauf erneut anfragen. |
consent.approved | Die gefragte Person hat zugestimmt — Sie dürfen die Erlaubnis nutzen, bis sie abläuft. |
consent.denied | Die gefragte Person hat abgelehnt. Es wurde nichts erteilt. |
consent.revoked | Eine Ihnen erteilte Erlaubnis wurde widerrufen. Bei einem übergebenen Schlüssel endet der Zugriff sofort. |
consent.expired | Niemand hat rechtzeitig geantwortet, die Anfrage ist verfallen. Das ist keine Ablehnung — Sie dürfen erneut fragen. |
Nutzlast eines Einwilligungsereignisses
Einwilligungsereignisse werden an Ihre Plattform-Anwendung geliefert, nicht an eine Organisation: Wenn ein Arzt Ihnen erlaubt, Zugangsdaten zu halten, die in seinem Namen handeln, ist gar keine Klinik beteiligt.
{
"id": "282824f1-b65e-40f4-86d1-62a2bac566df",
"event": "consent.revoked",
"occurred_at": "2026-08-26T19:45:00+00:00",
"result": {
"consent_id": "qeHSuvlSZHAWpacF",
"kind": "key_handover",
"status": "revoked",
"doctor_id": "c71ORqKq81fRoTcm",
"clinic_id": null,
"decided_at": "2026-08-26T19:45:00+00:00"
}
}| Feld | Beschreibung |
|---|---|
consent_id | Die Anfrage, zu der dieses Ergebnis gehört — dieselbe Id, die der Provisionierungsaufruf zurückgab. |
kind | key_handover (Zugangsdaten, die als Arzt handeln) oder clinic_membership (einen Arzt in einer Klinik führen). |
status | approved, denied, revoked oder expired. |
doctor_id | Die öffentliche Id des Arztes bei einer Schlüsselübergabe. Sonst null, ebenso wenn das Konto inzwischen entfernt wurde. |
clinic_id | Die öffentliche Id der Klinik bei einer Klinikmitgliedschaft. Sonst null. |
decided_at | Wann dieser Zustand eintrat (ISO 8601). Bei einem Ablauf ist das die Frist, nicht der Zeitpunkt unserer Feststellung. |
Verarbeiten Sie consent.revoked. Eine Erlaubnis kann jederzeit widerrufen werden, und ein übergebener Schlüssel endet im selben Moment — ohne dieses Ereignis merken Sie es erst, wenn Ihr nächster Aufruf fehlschlägt.
Bestätigen Sie mit einer beliebigen 2xx-Antwort. Ein Status ungleich 2xx oder ein Timeout wird als fehlgeschlagene Zustellung erfasst, die Sie aus dem Webhook-Zustellprotokoll in Ihrem Konto erneut senden können.
const crypto = require('crypto');
// Express: mount with a raw-body parser so you verify the EXACT bytes received.
// app.post('/animal-id/webhook', express.raw({ type: 'application/json' }), handler)
function verify(req, webhookSecret) {
const ts = req.header('X-Eternity-Webhook-Timestamp');
const sig = req.header('X-Eternity-Webhook-Signature');
const path = req.originalUrl; // path (+ ?query) exactly as received
const raw = req.body; // Buffer of the raw request body
const bodyHash = crypto.createHash('sha256').update(raw).digest('hex');
const canonical = ['POST', path, bodyHash, ts].join('\n');
const expected = crypto.createHmac('sha256', webhookSecret).update(canonical).digest('hex');
return sig && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
}<?php
// Verify a webhook delivery from Animal ID before trusting it.
function verifyWebhook(string $rawBody, string $path, string $webhookSecret): bool {
$ts = $_SERVER['HTTP_X_ETERNITY_WEBHOOK_TIMESTAMP'] ?? '';
$sig = $_SERVER['HTTP_X_ETERNITY_WEBHOOK_SIGNATURE'] ?? '';
$canonical = implode("\n", ['POST', $path, hash('sha256', $rawBody), $ts]);
$expected = hash_hmac('sha256', $canonical, $webhookSecret);
return $sig !== '' && hash_equals($expected, $sig);
}
$rawBody = file_get_contents('php://input'); // verify the EXACT bytes received
if (!verifyWebhook($rawBody, $_SERVER['REQUEST_URI'], getenv('AID_WEBHOOK_SECRET'))) {
http_response_code(401);
exit;
}
$event = json_decode($rawBody, true); // ['id' => …, 'event' => …, 'result' => …]
http_response_code(204); // acknowledge with any 2xxAPI-Methoden
Tippen Sie — Abschnitte werden nach Stichwort gefiltert.
Platform API — Einrichtung
Kliniken und Ärzte anlegen und Personen um eine Erlaubnis bitten, die man sich nicht nehmen kann. Hier beginnt eine Integration: erst die Konten anlegen, dann die Zugangsdaten holen, mit denen gearbeitet wird.
- Signiert mit Ihrem Plattform-Schlüssel, der Ihnen einmalig bei der Einrichtung Ihres Partnerkontos ausgestellt wird. Senden Sie die Uuid der Plattform-Anwendung in X-Eternity-App-Id.
- Er erreicht niemals Tierdaten. Ein Plattform-Schlüssel auf einem /v1/partner/-Pfad antwortet mit 401 — so wirkt die Trennung, das ist kein Konfigurationsfehler.
/v1/platform/organizationsEine bereits vorhandene Klinik finden, bevor eine neue angelegt wird.▸Authentifizierung: HMAC with your PLATFORM key.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
query | ja | string | — | Namens- oder Adressfragment, mindestens 2 Zeichen. |
limit | nein | int | — | Maximale Trefferzahl, bis zu 50 (Standard 20). |
Beispielantwort
{
"payload": [
{
"public_id": "TGo1Gwe2ppRkUFO1",
"org_name": "Лапа",
"full_address": "Україна, Київ, вул. Прикладна, 1",
"status": 3,
"linked": false
}
]
}| Feld | Beschreibung |
|---|---|
public_id | Übergeben Sie sie an den Endpunkt unten, um hier einen Arzt anzulegen. |
status | Moderationsstatus. Eine von Ihnen angelegte Klinik bleibt außerhalb des öffentlichen Verzeichnisses, bis ihre Leitung sie übernimmt. |
linked | true, wenn Sie diese Klinik selbst angelegt haben. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | Treffer (leere Liste, wenn nichts passt). |
422 | Validierungsfehler (query fehlt oder ist kürzer als 2 Zeichen). |
/v1/platform/organizationsEine Klinik anhand Ihrer eigenen Kennung anlegen oder auflösen.▸Authentifizierung: HMAC with your PLATFORM key. Issued separately from clinic keys; it never reaches animal data.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
external_org_id | ja | string | — | Ihre eigene Kennung für diese Klinik. Ein erneuter Aufruf mit demselben Wert liefert die bereits vorhandene Klinik zurück, statt eine zweite anzulegen — senden Sie daher einen stabilen Wert. |
name | ja | string | — | Clinic name. |
director_public_id | ja | string | — | Der Arzt, der die Leitung übernimmt — über seine public_id (aus POST /owners oder dem Endpunkt unten). Eine Klinik kann ohne Leitung nicht bestehen, und ein Arzt darf nur eine Klinik leiten; wer bereits eine leitet, führt zu einer 409-Antwort. |
email | nein | string | — | Contact email. |
phone | nein | string | — | Contact phone (E.164). |
website | nein | string | — | Website. |
address | nein | string | — | Full address. |
country_id | nein | int | countries | Country dictionary id. |
description | nein | string | — | Free-text description. |
lat | nein | number | — | Latitude. |
lng | nein | number | — | Longitude. |
Anfrage-Body (JSON)
{
"external_org_id": "crm-clinic-118",
"name": "Лапа",
"director_public_id": "V1StGXR8Z5jd",
"email": "clinic@example.com",
"phone": "+380441234567"
}Beispielantwort
{
"payload": {
"public_id": "yAvgJrSYehJo9JXh",
"name": "Лапа",
"status": 2,
"created": true
}
}| Feld | Beschreibung |
|---|---|
public_id | Stabile öffentliche Kennung der Klinik — übergeben Sie sie an den Endpunkt unten. |
created | true, wenn dieser Aufruf die Klinik angelegt hat; false, wenn die bereits vorhandene zurückgegeben wurde. |
status | Moderationsstatus. Eine angelegte Klinik bleibt außerhalb des öffentlichen Verzeichnisses, bis ihre Leitung sie übernimmt. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Clinic created. |
200 | Für diese external_org_id gab es die Klinik bereits — dieselbe wurde zurückgegeben. |
409 | Der genannte Leiter führt bereits eine andere Klinik. Nennen Sie einen anderen Arzt. |
422 | Validierungsfehler (external_org_id, name oder director_public_id fehlen). |
/v1/platform/organizations/{clinic_public_id}/membersEinen Arzt in einer Klinik anlegen und dessen Zugangsdaten erhalten.▸Authentifizierung: HMAC with your PLATFORM key.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
email | bedingt | string | — | E-Mail des Arztes. E-Mail oder Telefon ist erforderlich. |
phone | bedingt | string | — | Telefon des Arztes (E.164). E-Mail oder Telefon ist erforderlich. |
first_name | nein | string | — | Vorname. |
last_name | nein | string | — | Nachname. |
language | nein | string | languages | Bevorzugte Sprache. |
clinic_name | nein | string | — | Bezeichnung, die auf den ausgestellten Zugangsdaten erscheint. |
external_doctor_id | nein | string | — | Ihre eigene Kennung für diesen Arzt. Dasselbe Feld und dieselben Regeln wie external_owner_id: einmalig geschrieben, nie überschrieben und nur für Sie sichtbar. |
consent | ja | object | — | Einwilligungsblock (unveränderlicher Audit). |
consent.account_creation | ja | bool | — | Muss true sein. Die erhaltenen Zugangsdaten handeln im Namen dieser Person, daher ist ihre Zustimmung erforderlich. |
Anfrage-Body (JSON)
{
"email": "doctor@example.com",
"first_name": "Ihor",
"last_name": "Melnyk",
"language": "uk",
"external_doctor_id": "crm-doc-4471",
"consent": { "account_creation": true }
}Beispielantwort
{
"payload": {
"public_id": "LSG9w6B2rwAiPoJD",
"app_id": "4833d2e5-1a97-4572-ac5d-a03c7614e0d7",
"public_key": "94af0494...",
"private_key": "b208c6e0...",
"created": true
}
}| Feld | Beschreibung |
|---|---|
app_id | App-Id, mit der dieser Arzt Aufrufe der Datenebene signiert (X-Eternity-App-Id). |
public_key | Öffentliche Hälfte des Schlüsselpaars des Arztes. |
private_key | Private Hälfte. Wird nur in dieser Antwort angezeigt und nie wieder — speichern Sie sie, bevor Sie die Verbindung schließen. |
public_id | Stabile öffentliche Kennung des Arztes — verwenden Sie sie überall dort, wo ein Halter oder eine Leitung benannt wird. |
created | true, wenn dieser Aufruf das Konto angelegt hat; false, wenn der Arzt bereits eines hatte und zugeordnet wurde. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Arzt angelegt; Zugangsdaten zurückgegeben. |
409 | Dieser Arzt hat bereits einen Schlüssel für diese Klinik, oder die Klinik stammt nicht von Ihnen und ihre Leitung hat Sie nicht freigegeben — stellen Sie zuerst eine clinic_membership-Anfrage. |
422 | Validierungsfehler (keine E-Mail/Telefon oder consent.account_creation nicht akzeptiert). |
/v1/platform/organizations/{clinic_public_id}/members/{doctor_public_id}/credentialsZugangsdaten erhalten, die im Namen eines einverstandenen Arztes handeln.▸Authentifizierung: HMAC with your PLATFORM key.
Beispielantwort
{
"payload": {
"public_id": "LSG9w6B2rwAiPoJD",
"app_id": "dcd4895e-550e-424a-9c5d-5206cbce2956",
"public_key": "11fff5d1...",
"private_key": "00604b9b...",
"created": false
}
}| Feld | Beschreibung |
|---|---|
private_key | Wird einmal angezeigt und nie wieder. Der Schlüssel gehört Ihnen und ist vom eigenen Schlüssel des Arztes getrennt — widerruft er die Zustimmung, verliert Ihrer die Gültigkeit, seiner nicht. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Zugangsdaten ausgestellt. |
409 | Der Arzt hat der Übergabe nicht zugestimmt, oder Sie dürfen für diese Klinik nicht handeln. Die Meldung nennt den Grund. |
/v1/platform/consentsEinen Arzt oder eine Klinik um Erlaubnis bitten.▸Authentifizierung: HMAC with your PLATFORM key.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
kind | ja | string | — | key_handover — Zugangsdaten halten, die im Namen dieses Arztes handeln; nur der Arzt selbst kann das erlauben. clinic_membership — diesen Arzt in einer Klinik anlegen, die Sie nicht erstellt haben; darüber entscheidet deren Leitung. |
doctor_public_id | ja | string | — | Der Arzt, den die Anfrage betrifft. |
clinic_public_id | bedingt | string | — | Für clinic_membership erforderlich: die Klinik, deren Leitung Sie fragen. |
Anfrage-Body (JSON)
{
"kind": "clinic_membership",
"doctor_public_id": "LSG9w6B2rwAiPoJD",
"clinic_public_id": "jJlmHf0sgxMT3Gni"
}Beispielantwort
{
"payload": {
"public_id": "5G5rBYl0hQvpJuCZ",
"kind": "clinic_membership",
"status": "pending",
"expires_at": 1788973565,
"decided_at": null
}
}| Feld | Beschreibung |
|---|---|
public_id | Damit fragen Sie den Status ab. |
status | pending, bis die Person antwortet, danach approved oder denied. |
expires_at | Unix-Sekunden. Eine unbeantwortete Anfrage schließt sich selbst, und eine Zustimmung verliert im selben Moment ihre Wirkung — die Erlaubnis gilt nicht unbefristet. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Anfrage gestellt oder die bereits vorhandene zurückgegeben — zweimal fragen erzeugt keine zweite. |
409 | Niemand kann darüber entscheiden (etwa eine Klinik ohne Leitung). |
422 | Validierungsfehler (unbekannter kind oder clinic_public_id fehlt für clinic_membership). |
/v1/platform/consents/{public_id}Den Stand einer Erlaubnisanfrage prüfen.▸Authentifizierung: HMAC with your PLATFORM key.
Beispielantwort
{
"payload": {
"public_id": "5G5rBYl0hQvpJuCZ",
"kind": "clinic_membership",
"status": "approved",
"expires_at": 1788973565,
"decided_at": 1787763211
}
}Antwortstatus
| Status | Bedeutung |
|---|---|
200 | Aktueller Stand. |
404 | Keine solche Anfrage, oder sie gehört einem anderen Partner. |
Partner API — Daten
Tiere, Halter, Behandlungen und Fotos — die tägliche Oberfläche. Jeder Schreibvorgang wird dem Arzt zugeschrieben, mit dessen Schlüssel er signiert wurde.
- Signiert mit dem Schlüssel eines Arztes, der einmalig zurückgegeben wird — beim Anlegen in einer Klinik oder beim Abholen der Zugangsdaten nach dessen Zustimmung. Senden Sie die Uuid der Anwendung dieses Arztes in X-Eternity-App-Id.
- Er kann nichts einrichten und endet in dem Moment, in dem der Arzt seine Erlaubnis widerruft. Wörterbücher brauchen gar keine Signatur.
/v1/partner/dictionariesWörterbücher (mehrsprachig, filterbar).▸Authentifizierung: Öffentlich (keine Signatur erforderlich). Über ETag im CDN cachebar.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
include | nein | string (csv) | — | Wörterbuchschlüssel, kommagetrennt; leer → alle. Schlüssel: species, pet_species_featured, sex, sizes, lost_statuses, other_identifiers, procedure_types, countries, languages, cites. `pet_species_featured` ist die kanonische Liste beliebter Arten mit einer public_id als UUID — übergeben Sie deren Code als species_public_id an POST /animals. |
q | nein | string | — | Einträge nach lokalisiertem Namen in einer beliebigen aktiven Sprache filtern. |
lang | nein | string | languages | Namen auf eine einzelne Sprache projizieren (uk, en, ru, de, es). Standard: alle aktiven. |
Beispielantwort
{
"payload": [
{
"key": "species",
"items": [
{ "code": 3, "names": { "uk": "Собаки", "en": "Dogs", "ru": "Собаки", "de": "Dogs" } },
{ "code": 4, "names": { "uk": "Коти", "en": "Cats" } }
]
},
{
"key": "pet_species_featured",
"items": [
{ "code": "1b289672-0a74-48d2-9600-7104bedacd8c", "names": { "uk": "Собака", "en": "Dog" } },
{ "code": "b0dd3c3a-4d35-4479-91f9-616ae072c400", "names": { "uk": "Домашні коти", "en": "Domestic cats" } }
]
},
{
"key": "countries",
"items": [
{ "code": "804", "alpha2": "UA", "alpha3": "UKR",
"names": { "uk": "Україна", "en": "Ukraine", "ru": "Украина", "de": "Ukraine", "es": "Ukraine" } }
]
},
{
"key": "languages",
"items": [
{ "code": "uk", "native": "Українська",
"names": { "uk": "Українська", "en": "Ukrainian", "ru": "Украинский", "de": "Ukrainian", "es": "Ukrainian" } }
]
}
],
"metadata": { "etag": "W/\"dict-…\"", "generated_at": "2026-05-30T08:00:00+00:00", "languages": ["uk","en","ru","de","es"] },
"links": [],
"message": null
}| Feld | Beschreibung |
|---|---|
payload[].key | Wörterbuchschlüssel. |
payload[].items[].code | Stabile Id, die in den Schreib-Endpunkten als Wert dient. Numerisch für die meisten Wörterbücher (species, sex, …); bei pet_species_featured ist es die kanonische public_id der Art (eine UUID) → als species_public_id an POST /animals übergeben; bei countries der mit Nullen aufgefüllte numerische ISO-3166-1-Code als Zeichenkette (z. B. "004", "804"); bei languages der ISO-639-1-Code (z. B. "uk"). |
payload[].items[].names | Zuordnung Sprache → lokalisierter Name. Sprachen ohne Übersetzung fallen auf Englisch zurück. |
payload[].items[].alpha2 / alpha3 | Nur Länder: ISO 3166-1 alpha-2 / alpha-3 Codes für bequeme Zuordnung. |
payload[].items[].native | Nur Sprachen: der Eigenname der Sprache (Endonym), praktisch für Sprachauswahlen. |
metadata.etag | Geben Sie ihn in If-None-Match zurück, um bei unveränderten Daten 304 zu erhalten. |
metadata.languages | Aktive Sprachen, die in diesem Build tatsächlich vorhanden sind. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK — Wörterbücher zurückgegeben. |
304 | Not Modified — Ihr If-None-Match stimmt überein; verwenden Sie die zwischengespeicherte Kopie erneut. |
/v1/partner/dictionaries/speciesArtensuche (kanonisch, per public_id).▸Authentifizierung: Public (no signature required).
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
q | nein | string | — | Suchbegriff für die Art (beliebiger taxonomischer Rang, Teilstring und tippfehlertolerant). Weglassen, um die besten Treffer zu durchsuchen. Ergänzt das Wörterbuch pet_species_featured, das nur beliebte Arten enthält. |
Beispielantwort
{
"payload": [
{ "public_id": "1b289672-0a74-48d2-9600-7104bedacd8c", "name": "Dog", "rank": "species", "has_breeds": true },
{ "public_id": "9cd7d2a1-4e45-4922-8f9e-fb84c61ca6ae", "name": "Cats", "rank": "genus", "has_breeds": false }
]
}| Feld | Beschreibung |
|---|---|
payload[].public_id | public_id der Art — übergeben Sie sie als species_public_id an POST /animals oder an /dictionaries/species/{species_public_id}/breeds. |
payload[].name | Lokalisierter Artname (Sprache der Anfrage, Rückfall auf Englisch). |
payload[].rank | Taxonomischer Rang (Art, Gattung, Familie, …). |
payload[].has_breeds | Ob die Art eine Rasseliste führt. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK — matching species. |
/v1/partner/dictionaries/species/{species_public_id}/breedsRassen für eine Art (kanonisch, per public_id).▸Authentifizierung: Public (no signature required).
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
species_public_id | ja | string | — | Pfadsegment: die public_id der Art (eine UUID). Zu finden über pet_species_featured oder /dictionaries/species. |
q | nein | string | — | Optionaler Filter nach Rassename (Teilstring, tippfehlertolerant). |
Beispielantwort
{
"payload": [
{ "public_id": "6bb37956-d7fb-426d-8045-9d2fb854ee43", "name": "Belgian Shepherd Dog", "kind": "purebred" },
{ "public_id": "d1f2a0c8-7b3e-4a1d-9c22-0f5e6b7a8c90", "name": "Mixed breed", "kind": "mixed" }
]
}| Feld | Beschreibung |
|---|---|
payload[].public_id | Kanonische public_id der Rasse — übergeben Sie sie als breed_public_id an POST /animals. |
payload[].name | Lokalisierter Rassename (Sprache der Anfrage, Rückfall auf Englisch). |
payload[].kind | purebred | mixed | unknown | crossbreed | variety. mixed/unknown/crossbreed sind die besonderen Platzhalter-Optionen. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK — Rassen der Art (eine leere Liste, wenn die Art keine Rassen führt). |
404 | species_public_id ist keine gültige UUID (die Route hat nicht gegriffen). |
/v1/partner/ownersHalter anlegen (oder finden); gibt die globale Benutzer-ID zurück.▸Authentifizierung: HMAC. Beliebiger Partnerschlüssel. · X-Eternity-Idempotency-Key erforderlich
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
email | bedingt | string | — | E-Mail-Adresse des Eigentümers. E-Mail oder Telefon ist erforderlich — darüber wird der Eigentümer später erreicht/authentifiziert. |
phone | bedingt | string | — | Telefonnummer des Eigentümers (E.164). E-Mail oder Telefon ist erforderlich. |
first_name | nein | string | — | Vorname. |
last_name | nein | string | — | Nachname. |
language | nein | string | languages | Bevorzugte Sprache. |
country | nein | string | countries | Mit Nullen aufgefüllter numerischer ISO 3166-1-Code als Zeichenkette (z. B. "804") — entspricht dem Code im countries-Wörterbuch. |
external_owner_id | nein | string | — | Ihre eigene Kennung für diese Person. Wird einmalig beim ersten Kontakt gespeichert und nie überschrieben — senden Sie sie mit, damit beide Seiten dieselbe Person später abgleichen können. Maximal 128 Zeichen. |
consent | ja | object | — | Einwilligungsblock (unveränderlicher Audit). |
consent.account_creation | ja | bool | — | Muss true sein — der Eigentümer hat der account_creation zugestimmt. Der Zeitpunkt der Erfassung wird serverseitig aufgezeichnet. |
Anfrage-Body (JSON)
{
"email": "jane@example.com",
"phone": "+380681234567",
"first_name": "Jane",
"last_name": "Doe",
"language": "uk",
"country": "804",
"external_owner_id": "crm-4471",
"consent": {
"account_creation": true
}
}Beispielantwort
{
"payload": {
"user_gid": 90231,
"public_id": "V1StGXR8Z5jd",
"has_account": true,
"email": "jane@example.com",
"phone": null,
"display_hint": "Ол*** К.",
"language": "uk",
"country_id": 804,
"external_owner_id": "crm-4471"
}
}| Feld | Beschreibung |
|---|---|
public_id | Stabile öffentliche Besitzer-ID — übergeben Sie sie an POST /animals owners[].public_id (API-Version >= 2026-07-04). |
user_gid | Veraltete numerische Besitzer-ID (Besitzer-Anhängen in älteren API-Versionen). |
has_account | Ob der Eigentümer bereits ein nutzbares Konto hat. |
email | Hinterlegte E-Mail-Adresse für diesen Eigentümer (null, falls unbekannt). |
phone | Hinterlegte Telefonnummer für diesen Eigentümer (null, falls unbekannt). |
display_hint | Maskierter Anzeigename (keine personenbezogenen Daten). |
external_owner_id | Die Kennung, die SIE uns für diese Person übermittelt haben, oder null, wenn Sie das nie getan haben. Auf Ihre eigene Integration beschränkt — Sie sehen nie, wie ein anderer Partner dieselbe Person bezeichnet. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Erstellt (oder einen vorhandenen Eigentümer aufgelöst — idempotent nach E-Mail/Telefon). |
409 | X-Eternity-Idempotency-Key mit einem anderen Body wiederverwendet oder wird noch verarbeitet. |
422 | Validierungsfehler (fehlende E-Mail/Telefon oder consent.account_creation nicht akzeptiert). |
/v1/partner/owners/searchHalter anhand exakter E-Mail oder Telefonnummer finden.▸Authentifizierung: HMAC. Beliebiger Partnerschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
email_or_phone | ja | string | — | Exakte E-Mail oder Telefon (einzelnes Feld; E-Mail wird am Format erkannt). |
Beispielantwort
{
"payload": { "user_gid": 90231, "public_id": "V1StGXR8Z5jd", "has_account": true, "email": "jane@example.com", "phone": null, "display_hint": "Ол*** К.", "language": "uk", "country_id": 804, "external_owner_id": "crm-4471" }
}| Feld | Beschreibung |
|---|---|
public_id | Stabile öffentliche Besitzer-ID — übergeben Sie sie an POST /animals owners[].public_id (API-Version >= 2026-07-04). |
user_gid | Veraltete numerische Besitzer-ID (Besitzer-Anhängen in älteren API-Versionen). |
email | Hinterlegte E-Mail-Adresse für diesen Eigentümer (null, falls unbekannt). |
phone | Hinterlegte Telefonnummer für diesen Eigentümer (null, falls unbekannt). |
external_owner_id | Die Kennung, die SIE uns für diese Person übermittelt haben, oder null, wenn Sie das nie getan haben. Auf Ihre eigene Integration beschränkt — Sie sehen nie, wie ein anderer Partner dieselbe Person bezeichnet. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | Eigentümer gefunden. |
404 | Kein Eigentümer mit dieser email_or_phone. |
422 | email_or_phone ist erforderlich. |
/v1/partner/animalsTier registrieren (chip-basiert).▸Authentifizierung: HMAC. Tierarzt-/Organisationsschlüssel. · X-Eternity-Idempotency-Key erforderlich
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
species | bedingt | int | species | Alte Art-Id aus dem Wörterbuch. Genau eines von species / species_public_id ist erforderlich. |
species_public_id | bedingt | string | pet_species_featured | Kanonische public_id der Art (eine UUID) aus dem Wörterbuch pet_species_featured. Genau eines von species / species_public_id ist erforderlich; wenn vorhanden, hat sie Vorrang vor species. |
is_microchip | ja | bool | — | Ob das Tier gechippt ist. true → microchip ist erforderlich; false → microchip wird ignoriert und das Register vergibt eine temporäre WC-Nummer. |
microchip | bedingt | string | — | Mikrochip (Transponder). Nur erforderlich, wenn is_microchip = true. |
nickname | ja | string | — | Name des Tieres. |
qr_tag | nein | string | — | Seriennummer des QR-Passes, die bei der Registrierung angehängt werden soll. |
owners | nein | array | — | Eigentümer; der erste wird zum main_owner, die übrigen zu owners (dedupliziert). Jeder Eintrag hängt entweder einen vorhandenen Eigentümer an ODER registriert inline einen neuen. |
owners[].public_id | bedingt | string | — | Anhäng-Modus (API-Version >= 2026-07-04): public_id eines vorhandenen Besitzers aus POST/GET owners. Weglassen, um inline zu registrieren. |
owners[].user_gid | bedingt | int | — | Anhäng-Modus (API-Versionen vor 2026-07-04): veraltete numerische Besitzer-ID. Weglassen, um inline zu registrieren. |
owners[].email | bedingt | string | — | Inline-Modus: E-Mail des Besitzers. Eine von E-Mail/Telefon ist erforderlich, wenn keine public_id/user_gid vorhanden ist (Upsert — keine Duplikate). |
owners[].phone | bedingt | string | — | Inline-Modus: Telefonnummer des Eigentümers (E.164). |
owners[].first_name | nein | string | — | Inline-Modus: Vorname. |
owners[].last_name | nein | string | — | Inline-Modus: Nachname. |
owners[].language | nein | string | languages | Inline-Modus: bevorzugte Sprache. |
owners[].country | nein | string | countries | Inline-Modus: mit Nullen aufgefüllter numerischer ISO 3166-1-Code als Zeichenkette (z. B. "804") — entspricht dem Code im countries-Wörterbuch. |
owners[].external_owner_id | nein | string | — | Inline-Modus: Ihre eigene Kennung für diese Person — dasselbe Feld und dieselben Regeln wie bei POST /owners. |
owners[].consent.account_creation | bedingt | bool | — | Inline-Modus: muss true sein — der Eigentümer hat der account_creation zugestimmt. Nur bei Inline-Registrierung erforderlich. |
breed | nein | string | — | Rasse (Freitext). Wird nur verwendet, wenn breed_public_id fehlt. |
breed_public_id | nein | string | — | Kanonische public_id der Rasse (eine UUID) aus GET /breeds?species_public_id=. Muss zur Art gehören; wenn vorhanden, hat sie Vorrang vor der Freitext-Rasse. |
color | nein | string | — | Farbe (Freitext — kein Wörterbuch). |
gender_id | nein | int | sex | Wörterbuch-ID des Geschlechts. |
dob | nein | date | — | Geburtsdatum (ISO 8601). |
microchip_date | nein | date | — | Wann der Chip implantiert wurde (ISO 8601). |
sterilization | nein | bool | — | Sterilisiert-Flag. |
size | nein | int | sizes | Wörterbuch-ID der Größe. |
identifiers | nein | array | — | Zusätzliche Kennungen neben microchip/qr. |
identifiers[].type | ja | int | other_identifiers | Kennungstyp-ID aus dem other_identifiers-Wörterbuch (tattoo, ring, …). |
identifiers[].value | ja | string | — | Wert der Kennung. |
identifiers[].added_at | nein | date | — | Wann die Kennung zugewiesen wurde (ISO 8601). |
Anfrage-Body (JSON)
{
"species": 3,
"is_microchip": true,
"microchip": "900263000123456",
"nickname": "Барсік",
"qr_tag": null,
"gender_id": 1,
"breed": "Labrador",
"color": "black",
"dob": "2022-03-01T00:00:00+00:00",
"microchip_date": "2022-11-20T00:00:00+00:00",
"sterilization": true,
"size": 2,
"owners": [
{ "public_id": "V1StGXR8Z5jd" },
{
"email": "jane@example.com",
"phone": "+380681234567",
"first_name": "Jane",
"last_name": "Doe",
"external_owner_id": "crm-4471",
"consent": { "account_creation": true }
}
],
"identifiers": [
{ "type": 3, "value": "TAT-001", "added_at": "2026-05-01T00:00:00+00:00" }
]
}Beispielantwort
{ "payload": { "id": "8xK3pQzVnB7rL2qF" } }| Feld | Beschreibung |
|---|---|
id | Nicht erratbare öffentliche Tier-ID (NanoID). Verwenden Sie sie in allen nachfolgenden Tieraufrufen. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Tier registriert. |
409 | X-Eternity-Idempotency-Key-Konflikt (gleicher Schlüssel, anderer Body). |
422 | Validierungsfehler: nickname/is_microchip fehlt, oder weder species noch species_public_id; eine unbekannte species_public_id/breed_public_id oder eine breed_public_id, die nicht zur Art gehört; is_microchip=true ohne gültigen Mikrochip; ein doppelter Mikrochip (Transponder bereits registriert, Feld "transponder"); oder ein eingebetteter Halter ohne E-Mail/Telefon oder ohne consent.account_creation. |
/v1/partner/animals/by-identifier/{type}/{value}Suche nach einem bestimmten Kennzeichnungstyp. Immer ein Array.▸Authentifizierung: HMAC. Beliebiger Partnerschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
type | ja | path enum | — | microchip oder qr_tag. |
value | ja | path string | — | Nachzuschlagender Kennungswert. |
Beispielantwort
{
"payload": [
{ "id": "8xK3pQzVnB7rL2qF", "species": 3,
"species_public_id": "d49c523a-d7ff-41b4-9ab6-0d1d2ce20939", "species_name": "Собака",
"breed": "Labrador", "breed_public_id": null, "breed_name": null,
"color": "black", "gender_id": 1,
"nickname": "Барсік", "microchip": "900263000123456", "qr_tag": null,
"dob": "2022-03-01", "register_date": "2026-05-30", "sterilization_status": true,
"lost_status": null, "deceased": false, "died_at": null, "status": 1,
"abilities": { "can_edit": true } }
]
}| Feld | Beschreibung |
|---|---|
payload | Array von Tierkarten — üblicherweise eine, aber ein Wert kann mehrere ergeben. |
species_public_id | Kanonische public_id der Art — derselbe Schlüssel, den Sie als species_public_id an POST /animals zurückgeben. |
species_name | Artname in der Sprache der Anfrage (Rückfall auf Englisch, dann auf den lateinischen Namen). |
breed_public_id | Kanonische public_id der Rasse, oder null, wenn das Tier nur die Freitext-Rasse trägt. |
breed_name | Kanonischer Rassename in der Sprache der Anfrage; null, wenn breed_public_id null ist — lesen Sie dann `breed`. |
microchip / qr_tag | Aktive Kennungen. |
lost_status | "active", wenn als vermisst gemeldet, andernfalls null. |
deceased | True, sobald Euthanasie/Tod erfasst ist. |
Berechtigungen
Jedes Tierobjekt enthält ein abilities-Objekt, das beschreibt, was der authentifizierte Partnerbenutzer mit diesem Tier tun darf. Dies ist das erste Zugriffsflag; im Laufe der Zeit werden weitere hinzugefügt.
| Feld | Beschreibung |
|---|---|
abilities.can_edit | Ob der authentifizierte Partnerbenutzer dieses Tier bearbeiten darf — seine Daten aktualisieren, Verfahren hinzufügen und Fotos verwalten. True, wenn der Benutzer das Tier registriert hat, eine Beziehung zu ihm hat (animal_user_relation) oder aktives Mitglied einer Organisation ist, deren Register es führt (org_animals). |
Erweiterung (X-Eternity-Expand)
Optionaler Header, der ein JSON-Array von Expand-Schlüsseln enthält (z. B. ["owners"]). Jeder angeforderte Schlüssel bettet ein zusätzliches Feld in jedes Tierobjekt der Antwort ein; lassen Sie den Header weg, um die einfache Karte zu erhalten. Unbekannte Schlüssel werden mit 422 abgelehnt.
| Schlüssel | Fügt hinzu | Beschreibung |
|---|---|---|
owners | owners[] | Die Eigentümer des Tieres — der Haupteigentümer plus etwaige Miteigentümer — jeweils mit Kontaktdaten und einem is_main_owner-Flag. Nur auf dieser Partneroberfläche verfügbar. |
"owners": [
{
"user_gid": 90231,
"public_id": "V1StGXR8Z5jd",
"has_account": true,
"email": "jane@example.com",
"phone": "+380681234567",
"display_hint": "Ja*** D.",
"language": "uk",
"country_id": "804",
"external_owner_id": "crm-4471",
"is_main_owner": true
}
]| Feld | Beschreibung |
|---|---|
owners[].public_id | Stabile öffentliche Besitzer-ID — übergeben Sie sie an POST /animals owners[].public_id (API-Version >= 2026-07-04). |
owners[].user_gid | Veraltete numerische Besitzer-ID (Besitzer-Anhängen in älteren API-Versionen). |
owners[].has_account | Ob der Eigentümer bereits ein nutzbares Konto hat. |
owners[].email | Hinterlegte E-Mail-Adresse für diesen Eigentümer (null, falls unbekannt). |
owners[].phone | Hinterlegte Telefonnummer für diesen Eigentümer (null, falls unbekannt). |
owners[].display_hint | Maskierter Anzeigename (keine personenbezogenen Daten). |
owners[].language | Bevorzugte Sprache. |
owners[].country_id | Mit Nullen aufgefüllter numerischer ISO 3166-1-Code als Zeichenkette (z. B. "804"). |
owners[].external_owner_id | Die Kennung, die SIE uns für diese Person übermittelt haben, oder null, wenn Sie das nie getan haben. Auf Ihre eigene Integration beschränkt — Sie sehen nie, wie ein anderer Partner dieselbe Person bezeichnet. |
owners[].is_main_owner | true für den Haupteigentümer (animal_user_relation-Typ main_owner); false für Miteigentümer. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK — Array (möglicherweise leer). |
/v1/partner/animals/by-identifier/{value}Suche über alle Kennzeichnungstypen gleichzeitig. Immer ein Array.▸Authentifizierung: HMAC. Beliebiger Partnerschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
value | ja | path string | — | Kennungswert; durchsucht über microchip und qr_tag. |
Beispielantwort
{ "payload": [ { "id": "8xK3pQzVnB7rL2qF", "nickname": "Барсік", "microchip": "900263000123456",
"species": 3, "species_public_id": "d49c523a-d7ff-41b4-9ab6-0d1d2ce20939",
"species_name": "Собака", "breed": "Labrador",
"breed_public_id": null, "breed_name": null } ] }| Feld | Beschreibung |
|---|---|
species_public_id / breed_public_id | Kanonische Schlüssel — dieselben, die POST /animals annimmt. breed_public_id ist null, solange das Tier nur die Freitext-Rasse trägt. |
species_name / breed_name | Namen in der Sprache der Anfrage (Rückfall auf Englisch, dann auf den lateinischen/kanonischen Namen). |
Berechtigungen
Jedes Tierobjekt enthält ein abilities-Objekt, das beschreibt, was der authentifizierte Partnerbenutzer mit diesem Tier tun darf. Dies ist das erste Zugriffsflag; im Laufe der Zeit werden weitere hinzugefügt.
| Feld | Beschreibung |
|---|---|
abilities.can_edit | Ob der authentifizierte Partnerbenutzer dieses Tier bearbeiten darf — seine Daten aktualisieren, Verfahren hinzufügen und Fotos verwalten. True, wenn der Benutzer das Tier registriert hat, eine Beziehung zu ihm hat (animal_user_relation) oder aktives Mitglied einer Organisation ist, deren Register es führt (org_animals). |
Erweiterung (X-Eternity-Expand)
Optionaler Header, der ein JSON-Array von Expand-Schlüsseln enthält (z. B. ["owners"]). Jeder angeforderte Schlüssel bettet ein zusätzliches Feld in jedes Tierobjekt der Antwort ein; lassen Sie den Header weg, um die einfache Karte zu erhalten. Unbekannte Schlüssel werden mit 422 abgelehnt.
| Schlüssel | Fügt hinzu | Beschreibung |
|---|---|---|
owners | owners[] | Die Eigentümer des Tieres — der Haupteigentümer plus etwaige Miteigentümer — jeweils mit Kontaktdaten und einem is_main_owner-Flag. Nur auf dieser Partneroberfläche verfügbar. |
"owners": [
{
"user_gid": 90231,
"public_id": "V1StGXR8Z5jd",
"has_account": true,
"email": "jane@example.com",
"phone": "+380681234567",
"display_hint": "Ja*** D.",
"language": "uk",
"country_id": "804",
"external_owner_id": "crm-4471",
"is_main_owner": true
}
]| Feld | Beschreibung |
|---|---|
owners[].public_id | Stabile öffentliche Besitzer-ID — übergeben Sie sie an POST /animals owners[].public_id (API-Version >= 2026-07-04). |
owners[].user_gid | Veraltete numerische Besitzer-ID (Besitzer-Anhängen in älteren API-Versionen). |
owners[].has_account | Ob der Eigentümer bereits ein nutzbares Konto hat. |
owners[].email | Hinterlegte E-Mail-Adresse für diesen Eigentümer (null, falls unbekannt). |
owners[].phone | Hinterlegte Telefonnummer für diesen Eigentümer (null, falls unbekannt). |
owners[].display_hint | Maskierter Anzeigename (keine personenbezogenen Daten). |
owners[].language | Bevorzugte Sprache. |
owners[].country_id | Mit Nullen aufgefüllter numerischer ISO 3166-1-Code als Zeichenkette (z. B. "804"). |
owners[].external_owner_id | Die Kennung, die SIE uns für diese Person übermittelt haben, oder null, wenn Sie das nie getan haben. Auf Ihre eigene Integration beschränkt — Sie sehen nie, wie ein anderer Partner dieselbe Person bezeichnet. |
owners[].is_main_owner | true für den Haupteigentümer (animal_user_relation-Typ main_owner); false für Miteigentümer. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK — Array (möglicherweise leer). |
/v1/partner/animals/by-ownerTiere anhand des Halterkontakts suchen. Immer ein Array.▸Authentifizierung: HMAC. Beliebiger Partnerschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
email_or_phone | ja | string | — | Exakte E-Mail oder Telefon des Eigentümers (einzelnes Feld; E-Mail wird am Format erkannt). Eine Telefonnummer wird zuerst zum Eigentümer aufgelöst. |
Beispielantwort
{ "payload": [ { "id": "8xK3pQzVnB7rL2qF", "nickname": "Барсік", "species": 3,
"species_public_id": "d49c523a-d7ff-41b4-9ab6-0d1d2ce20939",
"species_name": "Собака", "breed": "Labrador",
"breed_public_id": null, "breed_name": null } ] }| Feld | Beschreibung |
|---|---|
species_public_id / breed_public_id | Kanonische Schlüssel — dieselben, die POST /animals annimmt. breed_public_id ist null, solange das Tier nur die Freitext-Rasse trägt. |
species_name / breed_name | Namen in der Sprache der Anfrage (Rückfall auf Englisch, dann auf den lateinischen/kanonischen Namen). |
Berechtigungen
Jedes Tierobjekt enthält ein abilities-Objekt, das beschreibt, was der authentifizierte Partnerbenutzer mit diesem Tier tun darf. Dies ist das erste Zugriffsflag; im Laufe der Zeit werden weitere hinzugefügt.
| Feld | Beschreibung |
|---|---|
abilities.can_edit | Ob der authentifizierte Partnerbenutzer dieses Tier bearbeiten darf — seine Daten aktualisieren, Verfahren hinzufügen und Fotos verwalten. True, wenn der Benutzer das Tier registriert hat, eine Beziehung zu ihm hat (animal_user_relation) oder aktives Mitglied einer Organisation ist, deren Register es führt (org_animals). |
Erweiterung (X-Eternity-Expand)
Optionaler Header, der ein JSON-Array von Expand-Schlüsseln enthält (z. B. ["owners"]). Jeder angeforderte Schlüssel bettet ein zusätzliches Feld in jedes Tierobjekt der Antwort ein; lassen Sie den Header weg, um die einfache Karte zu erhalten. Unbekannte Schlüssel werden mit 422 abgelehnt.
| Schlüssel | Fügt hinzu | Beschreibung |
|---|---|---|
owners | owners[] | Die Eigentümer des Tieres — der Haupteigentümer plus etwaige Miteigentümer — jeweils mit Kontaktdaten und einem is_main_owner-Flag. Nur auf dieser Partneroberfläche verfügbar. |
"owners": [
{
"user_gid": 90231,
"public_id": "V1StGXR8Z5jd",
"has_account": true,
"email": "jane@example.com",
"phone": "+380681234567",
"display_hint": "Ja*** D.",
"language": "uk",
"country_id": "804",
"external_owner_id": "crm-4471",
"is_main_owner": true
}
]| Feld | Beschreibung |
|---|---|
owners[].public_id | Stabile öffentliche Besitzer-ID — übergeben Sie sie an POST /animals owners[].public_id (API-Version >= 2026-07-04). |
owners[].user_gid | Veraltete numerische Besitzer-ID (Besitzer-Anhängen in älteren API-Versionen). |
owners[].has_account | Ob der Eigentümer bereits ein nutzbares Konto hat. |
owners[].email | Hinterlegte E-Mail-Adresse für diesen Eigentümer (null, falls unbekannt). |
owners[].phone | Hinterlegte Telefonnummer für diesen Eigentümer (null, falls unbekannt). |
owners[].display_hint | Maskierter Anzeigename (keine personenbezogenen Daten). |
owners[].language | Bevorzugte Sprache. |
owners[].country_id | Mit Nullen aufgefüllter numerischer ISO 3166-1-Code als Zeichenkette (z. B. "804"). |
owners[].external_owner_id | Die Kennung, die SIE uns für diese Person übermittelt haben, oder null, wenn Sie das nie getan haben. Auf Ihre eigene Integration beschränkt — Sie sehen nie, wie ein anderer Partner dieselbe Person bezeichnet. |
owners[].is_main_owner | true für den Haupteigentümer (animal_user_relation-Typ main_owner); false für Miteigentümer. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK — Array (leer, wenn der Eigentümer bei reinen Telefonsuchen keine hinterlegte E-Mail hat). |
422 | email_or_phone ist erforderlich. |
/v1/partner/animals/{id}Vollständige Tierkarte.▸Authentifizierung: HMAC. Beliebiger Partnerschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
id | ja | path string | — | Öffentliche Tier-ID (NanoID). |
Beispielantwort
{ "payload": { "id": "8xK3pQzVnB7rL2qF", "species": 3,
"species_public_id": "d49c523a-d7ff-41b4-9ab6-0d1d2ce20939", "species_name": "Собака",
"breed": "Labrador", "breed_public_id": null, "breed_name": null,
"nickname": "Барсік", "microchip": "900263000123456", "deceased": false,
"abilities": { "can_edit": true } } }| Feld | Beschreibung |
|---|---|
species_public_id | Kanonische public_id der Art — derselbe Schlüssel, den Sie als species_public_id an POST /animals zurückgeben. |
species_name | Artname in der Sprache der Anfrage (Rückfall auf Englisch, dann auf den lateinischen Namen). |
breed_public_id | Kanonische public_id der Rasse, oder null, wenn das Tier nur die Freitext-Rasse trägt. |
breed_name | Kanonischer Rassename in der Sprache der Anfrage; null, wenn breed_public_id null ist — lesen Sie dann `breed`. |
Berechtigungen
Jedes Tierobjekt enthält ein abilities-Objekt, das beschreibt, was der authentifizierte Partnerbenutzer mit diesem Tier tun darf. Dies ist das erste Zugriffsflag; im Laufe der Zeit werden weitere hinzugefügt.
| Feld | Beschreibung |
|---|---|
abilities.can_edit | Ob der authentifizierte Partnerbenutzer dieses Tier bearbeiten darf — seine Daten aktualisieren, Verfahren hinzufügen und Fotos verwalten. True, wenn der Benutzer das Tier registriert hat, eine Beziehung zu ihm hat (animal_user_relation) oder aktives Mitglied einer Organisation ist, deren Register es führt (org_animals). |
Erweiterung (X-Eternity-Expand)
Optionaler Header, der ein JSON-Array von Expand-Schlüsseln enthält (z. B. ["owners"]). Jeder angeforderte Schlüssel bettet ein zusätzliches Feld in jedes Tierobjekt der Antwort ein; lassen Sie den Header weg, um die einfache Karte zu erhalten. Unbekannte Schlüssel werden mit 422 abgelehnt.
| Schlüssel | Fügt hinzu | Beschreibung |
|---|---|---|
owners | owners[] | Die Eigentümer des Tieres — der Haupteigentümer plus etwaige Miteigentümer — jeweils mit Kontaktdaten und einem is_main_owner-Flag. Nur auf dieser Partneroberfläche verfügbar. |
"owners": [
{
"user_gid": 90231,
"public_id": "V1StGXR8Z5jd",
"has_account": true,
"email": "jane@example.com",
"phone": "+380681234567",
"display_hint": "Ja*** D.",
"language": "uk",
"country_id": "804",
"external_owner_id": "crm-4471",
"is_main_owner": true
}
]| Feld | Beschreibung |
|---|---|
owners[].public_id | Stabile öffentliche Besitzer-ID — übergeben Sie sie an POST /animals owners[].public_id (API-Version >= 2026-07-04). |
owners[].user_gid | Veraltete numerische Besitzer-ID (Besitzer-Anhängen in älteren API-Versionen). |
owners[].has_account | Ob der Eigentümer bereits ein nutzbares Konto hat. |
owners[].email | Hinterlegte E-Mail-Adresse für diesen Eigentümer (null, falls unbekannt). |
owners[].phone | Hinterlegte Telefonnummer für diesen Eigentümer (null, falls unbekannt). |
owners[].display_hint | Maskierter Anzeigename (keine personenbezogenen Daten). |
owners[].language | Bevorzugte Sprache. |
owners[].country_id | Mit Nullen aufgefüllter numerischer ISO 3166-1-Code als Zeichenkette (z. B. "804"). |
owners[].external_owner_id | Die Kennung, die SIE uns für diese Person übermittelt haben, oder null, wenn Sie das nie getan haben. Auf Ihre eigene Integration beschränkt — Sie sehen nie, wie ein anderer Partner dieselbe Person bezeichnet. |
owners[].is_main_owner | true für den Haupteigentümer (animal_user_relation-Typ main_owner); false für Miteigentümer. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK. |
404 | Tier nicht gefunden. |
/v1/partner/animals/{id}Änderbare Felder aktualisieren / als verstorben markieren.▸Authentifizierung: HMAC. Eigentümer ODER Tierarzt mit aktiver Beziehung zum Tier. · X-Eternity-Idempotency-Key erforderlich
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
nickname | nein | string | — | Neuer Name. |
color | nein | string | — | Neue Farbe (Freitext — kein Wörterbuch). |
sterilization_status | nein | bool | — | Sterilisiert-Flag setzen. |
deceased | nein | bool | — | true → das Tier als tot markieren. |
Anfrage-Body (JSON)
{
"nickname": "Барсік",
"color": "black",
"sterilization_status": true,
"deceased": false
}Beispielantwort
204 No Content
Antwortstatus
| Status | Bedeutung |
|---|---|
204 | Aktualisiert. |
403 | Kein Zugriff auf dieses Tier — fordern Sie ihn an (POST /v1/partner/animals/{id}/access-request) und wiederholen Sie es, sobald der Eigentümer zustimmt. |
409 | X-Eternity-Idempotency-Key-Konflikt. |
422 | Validierungsfehler. |
/v1/partner/animals/{id}/access-requestDen Tierhalter um Zugriff bitten.▸Authentifizierung: HMAC. Tierarzt-/Organisationsschlüssel. · X-Eternity-Idempotency-Key erforderlich
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
id | ja | path string | — | Öffentliche Tier-ID (NanoID). |
Beispielantwort
{
"payload": {
"status": "pending",
"requested_at": "2026-06-23T09:00:00+00:00",
"expires_at": "2026-06-30T09:00:00+00:00",
"retry_after_seconds": 604800
}
}| Feld | Beschreibung |
|---|---|
status | "granted" — Sie haben bereits Zugriff, es wurde keine Anfrage erstellt; "pending" — wartet auf den Eigentümer; "denied" — der Eigentümer hat abgelehnt (erneut prüfbar, bis sie abläuft). |
requested_at | Wann die Anfrage gestellt wurde (null, wenn status="granted"). |
expires_at | Wann die Anfrage abläuft und Sie erneut anfragen dürfen (null, wenn status="granted"). |
retry_after_seconds | Sekunden, bis Sie dasselbe Tier erneut anfragen dürfen (0 nach Ablauf; null, wenn status="granted"). |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Eine neue Zugriffsanfrage wurde erstellt — der Eigentümer wurde per E-Mail benachrichtigt. |
200 | Keine neue Anfrage erstellt: Sie haben bereits Zugriff (status "granted") oder es existiert bereits eine aktive Anfrage (status "pending"/"denied") — warten Sie retry_after_seconds ab, bevor Sie erneut anfragen. |
404 | Tier nicht gefunden. |
/v1/partner/animals/{id}/access-requestPrüfen, ob Ihre Zugriffsanfrage genehmigt wurde.▸Authentifizierung: HMAC. Tierarzt-/Organisationsschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
id | ja | path string | — | Öffentliche Tier-ID (NanoID). |
Beispielantwort
{
"payload": {
"status": "granted",
"requested_at": "2026-06-23T09:00:00+00:00",
"expires_at": "2026-06-30T09:00:00+00:00",
"retry_after_seconds": 0
}
}| Feld | Beschreibung |
|---|---|
status | "granted" — Zugriff wurde genehmigt und ist aktiv; "pending" — wartet auf den Eigentümer; "denied" — abgelehnt; "none" — keine aktive Anfrage. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK. |
404 | Tier nicht gefunden. |
/v1/partner/animals/{id}/proceduresBehandlungen erfassen; öffnet einen Besuch. Einzelobjekt oder Array.▸Authentifizierung: HMAC. Tierarzt-/Organisationsschlüssel mit Zugriff auf das Tier. · X-Eternity-Idempotency-Key erforderlich
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
(body) | ja | object | array | — | Ein einzelnes Verfahrensobjekt oder ein Array davon (≤100). |
type | ja | int | procedure_types | Katalog-ID des Verfahrens: 10 Impfung, 20 Tollwutimpfung, 30 Transponder-Identifikation, 40 Token-Identifikation, 50 Entwurmung, 60 Sterilisation, 70 Euthanasie / Todesbescheinigung. |
occurred_at | ja | datetime | — | Wann durchgeführt (ISO 8601). |
summary | nein | string | — | Freitext-Notiz. |
revaccination_date | nein | date | — | Datum der nächsten Impfung überschreiben (Impfungen). |
type_specific_payload | nein | object | — | Felder pro Typ — serverseitig validiert: 10/20 → {vaccine_name*, batch_number*}; 30 → {transponder_number* — 15 digits}; 40 → {token_number*}; 50 → {drug*, batch_number?, dose?}; 60 → {method?, anesthesia_type?}; 70 → {reason*, death_date*}. Für Typ 30: Wenn das Tier bereits einen Mikrochip trägt, wird dieser beibehalten — die neue Nummer wird als zusätzliche Kennung gespeichert (other_identifiers Typ 11), anstatt den Chip zu ersetzen. |
Anfrage-Body (JSON)
[
{
"type": 10,
"occurred_at": "2026-05-30T08:00:00+00:00",
"summary": "Annual shot",
"revaccination_date": "2027-05-30",
"type_specific_payload": {
"vaccine_name": "Nobivac",
"batch_number": "A123"
}
},
{
"type": 30,
"occurred_at": "2026-05-30T08:05:00+00:00",
"type_specific_payload": {
"transponder_number": "900263000123456"
}
}
]Beispielantwort
{
"payload": {
"appointment_id": 7741,
"procedures": [
{ "id": 99001, "animal_id": "8xK3pQzVnB7rL2qF", "visit_id": 7741, "type": 10,
"occurred_at": "2026-05-30T08:00:00+00:00", "summary": "Annual shot", "revaccination_date": "2027-05-30",
"type_specific_payload": { "vaccine_name": "Nobivac", "batch_number": "A123" } }
]
}
}| Feld | Beschreibung |
|---|---|
appointment_id | Der für diesen Batch geöffnete/verwendete Besuch. |
procedures[] | Die erfassten Behandlungen — dieselbe Karte wie bei GET Liste/Detail. |
procedures[].id | ID des Verfahrensdatensatzes. |
procedures[].type | Numerische Typ-Id (Wörterbuch procedure_types). |
procedures[].type_specific_payload | Gespeicherte typspezifische Nutzdaten. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Erfasst; Besuch geöffnet. |
403 | Kein Zugriff auf dieses Tier — fordern Sie ihn an (POST /v1/partner/animals/{id}/access-request) und wiederholen Sie es, sobald der Eigentümer zustimmt. |
404 | Tier nicht gefunden. |
409 | X-Eternity-Idempotency-Key-Konflikt. |
422 | Nicht unterstützter Typ, fehlendes occurred_at oder fehlende typspezifische Felder. |
/v1/partner/animals/{id}/proceduresBehandlungen eines Tieres auflisten. Immer ein Array.▸Authentifizierung: HMAC. Tierarzt-/Organisationsschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
type | nein | int | procedure_types | Nach Verfahrenskatalog-ID filtern. |
since | nein | datetime | — | Nur an oder nach diesem Zeitpunkt. |
until | nein | datetime | — | Nur an oder vor diesem Zeitpunkt. |
Beispielantwort
{
"payload": [
{ "id": 99001, "animal_id": "8xK3pQzVnB7rL2qF", "visit_id": 7741, "type": 10,
"occurred_at": "2026-05-30T08:00:00+00:00", "summary": null, "revaccination_date": "2027-05-30",
"type_specific_payload": { "vaccine_name": "Nobivac", "batch_number": "A123" } }
]
}| Feld | Beschreibung |
|---|---|
type | Katalog-ID des Verfahrens (procedure_types-Wörterbuch). |
visit_id | Termin, unter dem das Verfahren erfasst wurde. |
type_specific_payload | Felder pro Typ. |
Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK — Array (möglicherweise leer). |
404 | Tier nicht gefunden. |
/v1/partner/procedures/{id}Einzelne Behandlung.▸Authentifizierung: HMAC. Tierarzt-/Organisationsschlüssel.
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
id | ja | path int | — | ID des Verfahrensdatensatzes. |
Beispielantwort
{
"payload": {
"id": 99001, "animal_id": "8xK3pQzVnB7rL2qF", "visit_id": 7741, "type": 10,
"occurred_at": "2026-05-30T08:00:00+00:00", "summary": null, "revaccination_date": "2027-05-30",
"type_specific_payload": { "vaccine_name": "Nobivac", "batch_number": "A123" }
}
}Antwortstatus
| Status | Bedeutung |
|---|---|
200 | OK. |
404 | Verfahren nicht gefunden. |
/v1/partner/animals/{id}/photosFoto hochladen (multipart). Halter oder Tierarzt mit Beziehung.▸Authentifizierung: HMAC + multipart/form-data. Eigentümer ODER Tierarzt mit Beziehung. · X-Eternity-Idempotency-Key erforderlich
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
file | ja | file | — | Bilddatei. Max. 8 MB pro Foto (Konfiguration partner.photos.max_single_mb). |
kind | nein | enum | — | avatar | gallery | nose_print. avatar legt das Hauptfoto fest. Standard gallery. |
Beispielantwort
{ "payload": { "id": 33015 } }| Feld | Beschreibung |
|---|---|
id | ID des neuen Fotos. |
Antwortstatus
| Status | Bedeutung |
|---|---|
201 | Hochgeladen. |
403 | Kein Zugriff auf dieses Tier — fordern Sie ihn an (POST /v1/partner/animals/{id}/access-request) und wiederholen Sie es, sobald der Eigentümer zustimmt. |
422 | Ungültige Datei oder größer als 8 MB (Größe reduzieren / Qualität verringern). |
413 | Gesamte Anfrage überschreitet 15 MB. |
/v1/partner/animals/{id}/photos/{photoId}Foto soft-löschen.▸Authentifizierung: HMAC. Eigentümer ODER Tierarzt mit Beziehung. · X-Eternity-Idempotency-Key erforderlich
Anfragefelder
| Feld | Erf. | Typ | Wörterbuch | Beschreibung |
|---|---|---|---|---|
id | ja | path string | — | Öffentliche Tier-ID (NanoID). |
photoId | ja | path int | — | Foto-ID. |
Beispielantwort
204 No Content
Antwortstatus
| Status | Bedeutung |
|---|---|
204 | Gelöscht. |
403 | Kein Zugriff auf dieses Tier — fordern Sie ihn an (POST /v1/partner/animals/{id}/access-request) und wiederholen Sie es, sobald der Eigentümer zustimmt. |