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.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. |
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. |
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.
/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) | — | Kommagetrennte Wörterbuchschlüssel zur Rückgabe; leer → alle. Schlüssel: species, sex, sizes, lost_statuses, other_identifiers, procedure_types, countries, languages, cites. |
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": "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 als Wert in Schreib-Endpunkten verwendet wird. Numerisch für die meisten Wörterbücher (species, sex, …); für countries ist es der mit Nullen aufgefüllte numerische ISO 3166-1-Code als Zeichenkette (z. B. "004", "804"); für languages ist es 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/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. |
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",
"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
}
}| 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). |
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 }
}| 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). |
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 | ja | int | species | Wörterbuch-ID der Spezies. |
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[].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 — kein Wörterbuch). |
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",
"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: fehlende species/nickname/is_microchip; is_microchip=true ohne gültigen microchip; ein doppelter microchip (Transponder bereits registriert, Feld "transponder"); oder ein Inline-Eigentümer 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, "breed": "Labrador", "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. |
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",
"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[].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" } ] }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",
"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[].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 } ] }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",
"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[].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, "nickname": "Барсік", "microchip": "900263000123456", "deceased": false, "abilities": { "can_edit": true } } }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",
"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[].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[] | The recorded procedures — same card as GET list/show. |
procedures[].id | ID des Verfahrensdatensatzes. |
procedures[].type | Numeric type id (procedure_types dictionary). |
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. |