Endpunkte der Bluttest API

Zuletzt aktualisiert:

Vollständige Referenz aller Kantesti Bluttest-API-Endpunkte mit Codebeispielen in mehreren Programmiersprachen.

Neu am 23. September 2026: die DNA Health API

Mit Stolz präsentieren wir drei DNA-Module für die Kantesti API. Die DNA-Test-Interpretation macht aus DNA-Rohdaten oder einem genetischen Befundbericht einen umfassenden genetischen Gesundheitsbericht, der DNA + Blut-Gesundheitsbericht verbindet ihn mit einem Bluttest, und der Supplement-Berater erstellt einen personalisierten Supplement-Plan mit den eigenen Produkten Ihrer Klinik. Zur Referenz der DNA Health API.

Basis-URL
https://app.aibloodtestinterpret.com

Changelog

Verfolgen Sie API-Versionen, Updates und Migrationsinformationen. Verwenden Sie die empfohlenen Endpunkte für neue Integrationen.

Neueste Updates (2026)

Alle drei Updates aus dem Jahr 2026 wurden auf jede der unten aufgeführten API-Versionen angewendet. Versionsnummern und Endpunktpfade haben sich nicht geändert, sodass keine Migration erforderlich ist.

  • 8. September 2026 KI-Modell-Update und plattformweite Verbesserungen
  • 21. Juli 2026 Umfassende Verbesserungen und Fehlerbehebungen
  • 8. Mai 2026 Umfassende Verbesserungen und Fehlerbehebungen

Aktuelle stabile Endpunkte

Diese Endpunkte werden für den Produktionseinsatz und neue Integrationen empfohlen.

APIEndpunktStatus
Bluttest-Analyse v12 /api/v12/18-09-2026/analyze Empfohlen Neu 18.09.2026
Bluttest-Analyse (Gesundheitsscore) v12 /api/v12/health-score/analyze Empfohlen Neu 18.09.2026
Body Map v1 /api/v1/body-map/analyze Veröffentlicht 18.09.2026 Neu
Biologisches Blutalter v1 /api/v1/blood-age/analyze Veröffentlicht 18.09.2026 Neu
DNA-Test-Interpretation v1 /api/v1/dna-interpretation/analyze Veröffentlicht 23.09.2026 Neu
DNA + Blut-Gesundheitsbericht v1 /api/v1/dna-blood-report/analyze Veröffentlicht 23.09.2026 Neu
DNA-Supplement-Berater v1 /api/v1/dna-supplements/analyze Veröffentlicht 23.09.2026 Neu
Bluttest-Analyse v11 /api/v11/01-06-2025/analyze Stabil Aktualisiert 08.09.2026
Bluttest-Analyse (Gesundheitsscore) v11 /api/v11/health-score/analyze Stabil Aktualisiert 08.09.2026
Ernährungs-KI v1 /api/v1/nutrition/diet-plan/analyze Stabil Aktualisiert 08.09.2026
KI-Bluttest-Vergleich v1 /api/v1/bloodtest/comparison/analyze Stabil Aktualisiert 08.09.2026
Family Health Risikobewertung v1 /api/v1/family-health/analyze Veröffentlicht 23.03.2026 Aktualisiert 08.09.2026
ICR - Intelligente Zeichenerkennung v1 /api/icr/v1/extract Veröffentlicht 14.02.2026 Aktualisiert 08.09.2026
ICR Kan - Bluttest-Extraktion v1 /api/icr/v1/kan Veröffentlicht 14.02.2026 Aktualisiert 08.09.2026
Trendanalyse v1 /api/v1/analytics/trends/analyze Stabil Aktualisiert 08.09.2026

Versionsgeschichte

DatumVersionÄnderungen
5. November 2026 Bluttest-Analyse v12, Ernährungs-API v1 Qualitative (binary) Zeilen: Bereichsfelder sind null, evaluation ist good oder bad; alle Bewertungswerte stehen unter evaluation. lab_date fällt auf das Ergebnisdatum zurück. Ernährungspläne halten dietary_preferences, dietary_restrictions und allergies in jedem Abschnitt ein; Nahrungsergänzungsmittel folgen den auffälligen Markern.
23. September 2026 DNA-Test-Interpretation v1, DNA + Blut-Gesundheitsbericht v1, DNA-Supplement-Berater v1 DNA Health API veröffentlicht — DNA-Test-Interpretation aus DNA-Rohdaten (23andMe, AncestryDNA, MyHeritage, FTDNA, LivingDNA, VCF) oder genetischen Befunddateien anhand von 334 kuratierten Markern, ein kombinierter DNA + Blut-Gesundheitsbericht und ein Supplement-Berater mit dem eigenen Produktkatalog der Klinik; asynchroner Modus und Sandbox
September 2026 Bluttest-Analyse v12 Bluttest-Analyse v12 veröffentlicht — Multi-Datei-Upload, Berichte in 100 Sprachen, optionaler Gesundheitsscore und Krankheitsrisikoanalyse, Sandbox-Modus
September 2026 Body Map v1, Biologisches Blutalter v1 Body Map API und Biologisches Blutalter API veröffentlicht — organbezogene Zuordnung auffälliger Ergebnisse zu 13 anatomischen Regionen sowie PhenoAge-Blutalter mit bis zu 18 abgeleiteten klinischen Indizes; beide mit deterministischem Modus und Sandbox
September 2026 Alle Versionen KI-Modell-Update, fixiert auf die neueste Modellversion; umfassende Verbesserungen und Fehlerbehebungen in allen API-Versionen; Versionsnummern unverändert; 98,89% Genauigkeit bei Prüfungen medizinischer Fakultäten (aktueller Open-Source-Benchmark)
Juli 2026 Alle Versionen Umfassende Verbesserungen und Fehlerbehebungen für alle API-Versionen; Versionsnummern unverändert
Mai 2026 Alle Versionen Umfassende Verbesserungen und Fehlerbehebungen für alle API-Versionen; Versionsnummern unverändert
März 2026 Family Health v1 Family Health Risikobewertung API veröffentlicht — KI-gestützte hereditäre Risikoanalyse, 100+ Sprachunterstützung, Stammbaum-Analyse, präventiver Vorsorgeplan, genetische Screening-Empfehlungen, Sandbox-Modus
Februar 2026 ICR v1 ICR (Intelligente Zeichenerkennung) API veröffentlicht — 79% schneller als OCR, strukturierte JSON-Ausgabe, Dokumenttyp-Erkennung, Tabellenextraktion, Kan-Bluttest-Integration
Dezember 2025 Neueste Verbesserte Fehlerbehandlung, 98,7% Genauigkeit, Unterstützung für 100 Sprachen
Juni 2025 v11 v11 Bluttest-Analyse, Gesundheitsscore-Endpunkt, Multi-Datei-Unterstützung
April 2025 v9 api_parameters_v9 Modell, verbesserte Parameterextraktion
März 2025 v8 Multi-Datei-Upload-Unterstützung, Stapelverarbeitung

Legacy-Endpunkte

Diese Endpunkte werden für Abwärtskompatibilität gepflegt, werden aber für neue Integrationen nicht empfohlen.

VersionEndpunktStatus
v10 /api/v10/health-score/analyze Legacy
v9 /api/v9/14-04-2025/analyze Legacy
v8 /api/v8/31-03-2025/analyze Legacy
v6 /api/v6-1/21-11-2024/analyze Legacy
v3 /api/v3/10-10-2024/analyze Legacy
Hinweis

Legacy-Endpunkte werden für Abwärtskompatibilität gepflegt, werden aber für neue Integrationen nicht empfohlen. Bitte migrieren Sie zu den aktuellen stabilen Endpunkten für bessere Leistung und Support.

Unterstützte Sprachen Referenz

Die Kantesti-API unterstützt 100 Sprachen für die Lokalisierung von Antworten. Verwenden Sie den language-Parameter mit einem der unten aufgeführten ISO 639-1-Codes. Wenn nicht angegeben, werden Antworten standardmäßig auf Englisch (en) zurückgegeben.

Standardsprache

Wenn kein language-Parameter angegeben wird, gibt die API Antworten auf Englisch (en) zurück.

Wichtige Weltsprachen

CodeSpracheEigenbezeichnung
enEnglischEnglish
zhChinesisch中文
esSpanischEspañol
arArabischالعربية
hiHindiहिन्दी
ptPortugiesischPortuguês
ruRussischРусский
jaJapanisch日本語
frFranzösischFrançais
deDeutschDeutsch
koKoreanisch한국어
trTürkischTürkçe

Europäische Sprachen

CodeSpracheEigenbezeichnung
itItalienischItaliano
nlNiederländischNederlands
plPolnischPolski
elGriechischΕλληνικά
svSchwedischSvenska
noNorwegischNorsk
daDänischDansk
fiFinnischSuomi
csTschechischČeština
ukUkrainischУкраїнська
roRumänischRomână
huUngarischMagyar
bgBulgarischБългарски
hrKroatischHrvatski
skSlowakischSlovenčina
slSlowenischSlovenščina
srSerbischСрпски
ltLitauischLietuvių
lvLettischLatviešu
etEstnischEesti
caKatalanischCatalà
euBaskischEuskara
glGalizischGalego
cyWalisischCymraeg
gaIrischGaeilge
isIsländischÍslenska
mtMaltesischMalti
sqAlbanischShqip
mkMazedonischМакедонски
bsBosnischBosanski
lbLuxemburgischLëtzebuergesch
beWeißrussischБеларуская

Nahostsprachen & Zentralasiatische Sprachen

CodeSpracheEigenbezeichnung
heHebräischעברית
faPersischفارسی
azAserbaidschanischAzərbaycan
kaGeorgischქართული
hyArmenischՀայdelays
kkKasachischҚазақша
uzUsbekischOʻzbek
tgTadschikischТоҷикӣ
kyKirgisischКыргызча
tkTurkmenischTürkmen
mnMongolischМонгол
psPaschtuپښتو
kuKurdischKurdî

Südasiatische Sprachen

CodeSpracheEigenbezeichnung
bnBengalischবাংলা
taTamilischதமிழ்
teTeluguతెలుగు
mrMarathiमराठी
guGujaratiગુજરાતી
knKannadaಕನ್ನಡ
mlMalayalamമലയാളം
paPunjabiਪੰਜਾਬੀ
urUrduاردو
neNepaliनेपाली
siSinghalesischසිංහල
sdSindhiسنڌي
asAssamesischঅসমীয়া
orOdiaଓଡ଼ିଆ

Südostasiatische Sprachen

CodeSpracheEigenbezeichnung
idIndonesischBahasa Indonesia
thThailändischไทย
viVietnamesischTiếng Việt
msMalaiischBahasa Melayu
myBirmanischမြန်မာ
kmKhmerភាសាខ្មែរ
loLaotischລາວ
filFilipinoFilipino
tlTagalogTagalog
jvJavanischBasa Jawa
suSundanesischBasa Sunda

Afrikanische Sprachen

CodeSpracheEigenbezeichnung
afAfrikaansAfrikaans
swSuaheliKiswahili
amAmharischአማርኛ
haHausaHausa
yoYorubaYorùbá
igIgboIgbo
zuZuluisiZulu
xhXhosaisiXhosa
soSomaliSoomaali
mgMadagassischMalagasy

Andere Sprachen

CodeSpracheEigenbezeichnung
laLateinLatina
eoEsperantoEsperanto
yiJiddischייִדיש
htHaitianisch-KreolischKreyòl Ayisyen
miMaoriTe Reo Māori
smSamoanischGagana Samoa
toTongaischLea Faka-Tonga
hawHawaiianischʻŌlelo Hawaiʻi

Bluttest-Analyse-API

Analysieren Sie Bluttestbilder oder PDFs mit KI, um Parameter zu extrahieren und umfassende medizinische Interpretationen zu generieren.

POST /api/v12/18-09-2026/analyze Neueste

Produktionsendpunkt für die Bluttestanalyse. Laden Sie ein oder mehrere Bluttestbilder oder eine PDF-Datei hoch und erhalten Sie strukturierte Parameter, Patienten- und Labor-Metadaten sowie eine vollständige klinische Interpretation in einer der 100 unterstützten Sprachen. Verbraucht 1 Credit pro Anfrage.

Anfrageparameter

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername
passwordstringJaIhr API-Passwort
filefileJaBluttestbild (PNG, JPG, WEBP) oder PDF. Max. 20 MB. Wiederholen Sie das Feld, um mehrere Bilder zu senden.
languagestringNeinSprachcode der Antwort (Standard: en). Siehe unterstützte Sprachen.
pdf_passwordstringNeinPasswort für verschlüsselte PDFs

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze" \
  -F "username=IHR_BENUTZERNAME" \
  -F "password=IHR_PASSWORT" \
  -F "language=de" \
  -F "[email protected]"

Python-Beispiel

import requests

def bluttest_analysieren(dateipfade, benutzername, passwort, sprache="de"):
    """
    Bluttest mit Kantesti Bluttest-Analyse v12 analysieren.

    Args:
        dateipfade: Ein oder mehrere Pfade zu Bluttestbildern oder eine einzelne PDF
        benutzername: API-Benutzername
        passwort: API-Passwort
        sprache: Sprachcode des Berichts (Standard: de)

    Returns:
        dict: Strukturierte Parameter, Metadaten und klinische Interpretation
    """
    url = "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze"

    handles = [open(pfad, "rb") for pfad in dateipfade]
    try:
        dateien = [("file", (pfad, handle)) for pfad, handle in zip(dateipfade, handles)]
        daten = {"username": benutzername, "password": passwort, "language": sprache}
        antwort = requests.post(url, files=dateien, data=daten, timeout=300)
        antwort.raise_for_status()
        return antwort.json()
    finally:
        for handle in handles:
            handle.close()

# Anwendungsbeispiel
if __name__ == "__main__":
    ergebnis = bluttest_analysieren(
        dateipfade=["bluttest.pdf"],
        benutzername="ihr_benutzername",
        passwort="ihr_passwort",
        sprache="de"
    )
    print(f"Status: {ergebnis['status']}")
    for parameter in ergebnis["data"]["parameters"]:
        print(f"  {parameter['short_name']}: {parameter['result']} {parameter['unit']} ({parameter['evaluation']})")

Beispielantwort

{
  "status": "success",
  "api_version": "v12",
  "data": {
    "metadata": {
      "patient_name": "Jan Novak",
      "patient_age": "45",
      "patient_sex": "Male",
      "lab_name": "BioLAB Medical Center",
      "lab_city": "Prague",
      "lab_country": "Czech Republic",
      "lab_date": "2026-09-11",
      "results_date": "2026-09-12"
    },
    "parameters": [
      {"short_name": "Glucose", "long_name": "Fasting Blood Glucose", "result": "92", "unit": "mg/dL", "reference_range": "74 - 100", "range_normal_min": 74, "range_normal_max": 100, "type": "range", "evaluation": "normal"},
      {"short_name": "ALT", "long_name": "Alanine aminotransferase", "result": "65", "unit": "U/L", "reference_range": "< 45", "range_normal_min": 7, "range_normal_max": 45, "type": "range", "evaluation": "high"},
      {"short_name": "Creatinine", "long_name": "Creatinine", "result": "0.9", "unit": "mg/dL", "reference_range": "0.7 - 1.2", "range_normal_min": 0.7, "range_normal_max": 1.2, "type": "range", "evaluation": "normal"}
    ],
    "interpretation": [
      {"shortcode": "overview", "item": "Most parameters are within their reference ranges."},
      {"shortcode": "key_findings", "item": "Alanine aminotransferase is above the reference range, which warrants a follow-up liver panel."}
    ]
  },
  "timestamp": "2026-09-18T10:30:00Z"
}
POST /api/v11/01-06-2025/analyze Stabil

Produktionsendpunkt für Bluttestanalyse. Verbraucht 1 Credit pro Anfrage.

Anfrageparameter

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername
passwordstringJaIhr API-Passwort
filefileJaBluttestbild (PNG, JPG, WEBP) oder PDF. Max 20MB.
languagestringNeinAntwortsprachcode (Standard: en). Siehe unterstützte Sprachen.

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze" \
  -F "username=IHR_BENUTZERNAME" \
  -F "password=IHR_PASSWORT" \
  -F "language=de" \
  -F "[email protected]"

Python-Beispiel

import requests

def bluttest_analysieren(dateipfad: str, benutzername: str, passwort: str, sprache: str = "de"):
    """
    Analysiert eine Bluttestdatei mit der Kantesti-API.

    Args:
        dateipfad: Pfad zur Bluttest-PDF oder Bilddatei
        benutzername: API-Benutzername
        passwort: API-Passwort
        sprache: Antwortsprachcode (Standard: de)

    Returns:
        dict: API-Antwort mit Analyseergebnissen
    """
    url = "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze"

    with open(dateipfad, "rb") as f:
        dateien = {"file": (dateipfad, f, "application/pdf")}
        daten = {
            "username": benutzername,
            "password": passwort,
            "language": sprache
        }

        antwort = requests.post(url, files=dateien, data=daten, timeout=120)
        antwort.raise_for_status()
        return antwort.json()

# Anwendungsbeispiel
if __name__ == "__main__":
    ergebnis = bluttest_analysieren(
        dateipfad="bluttest.pdf",
        benutzername="ihr_benutzername",
        passwort="ihr_passwort",
        sprache="de"
    )
    print(f"Status: {ergebnis['status']}")
    print(f"Gefundene Parameter: {len(ergebnis['data']['parameters'])}")

C++-Beispiel (libcurl)

#include <iostream>
#include <string>
#include <curl/curl.h>

// Callback-Funktion für die Antwortverarbeitung
size_t SchreibCallback(void* inhalt, size_t groesse, size_t nmemb, std::string* ausgabe) {
    ausgabe->append((char*)inhalt, groesse * nmemb);
    return groesse * nmemb;
}

std::string bluttestAnalysieren(const std::string& dateipfad,
                                 const std::string& benutzername,
                                 const std::string& passwort,
                                 const std::string& sprache = "de") {
    CURL* curl = curl_easy_init();
    std::string antwort;

    if (curl) {
        curl_mime* formular = curl_mime_init(curl);
        curl_mimepart* feld;

        // Benutzername hinzufügen
        feld = curl_mime_addpart(formular);
        curl_mime_name(feld, "username");
        curl_mime_data(feld, benutzername.c_str(), CURL_ZERO_TERMINATED);

        // Passwort hinzufügen
        feld = curl_mime_addpart(formular);
        curl_mime_name(feld, "password");
        curl_mime_data(feld, passwort.c_str(), CURL_ZERO_TERMINATED);

        // Sprache hinzufügen
        feld = curl_mime_addpart(formular);
        curl_mime_name(feld, "language");
        curl_mime_data(feld, sprache.c_str(), CURL_ZERO_TERMINATED);

        // Datei hinzufügen
        feld = curl_mime_addpart(formular);
        curl_mime_name(feld, "file");
        curl_mime_filedata(feld, dateipfad.c_str());

        curl_easy_setopt(curl, CURLOPT_URL,
            "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze");
        curl_easy_setopt(curl, CURLOPT_MIMEPOST, formular);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, SchreibCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &antwort);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 120L);

        CURLcode res = curl_easy_perform(curl);

        curl_mime_free(formular);
        curl_easy_cleanup(curl);
    }
    return antwort;
}

int main() {
    std::string ergebnis = bluttestAnalysieren("bluttest.pdf", "benutzername", "passwort");
    std::cout << ergebnis << std::endl;
    return 0;
}

Postman-Konfiguration

{
  "info": {
    "name": "Kantesti Bluttest-API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Bluttest analysieren",
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "formdata",
          "formdata": [
            {"key": "username", "value": "{{api_benutzername}}", "type": "text"},
            {"key": "password", "value": "{{api_passwort}}", "type": "text"},
            {"key": "language", "value": "de", "type": "text"},
            {"key": "file", "type": "file", "src": "/pfad/zur/bluttest.pdf"}
          ]
        },
        "url": {
          "raw": "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze",
          "protocol": "https",
          "host": ["app", "aibloodtestinterpret", "com"],
          "path": ["api", "v11", "01-06-2025", "analyze"]
        }
      }
    }
  ]
}

Beispielantwort

{
  "status": "success",
  "data": {
    "metadata": {
      "patient_name": "Jan Novák",
      "lab_name": "BioLAB Medizinzentrum",
      "lab_city": "München",
      "lab_country": "Deutschland",
      "lab_date": "2025-05-11",
      "patient_age": "45",
      "patient_sex": "Männlich"
    },
    "parameters": [
      {
        "short_name": "WBC",
        "long_name": "Weiße Blutkörperchen",
        "category": "Komplettes Blutbild",
        "result": 7.2,
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": 2.0,
        "range_max": 12.0,
        "range_normal_min": 4.0,
        "range_normal_max": 10.0,
        "short_description": "Misst die Gesamtzahl der weißen Blutkörperchen im Blut.",
        "long_description": "Weiße Blutkörperchen (Leukozyten) sind für die Immunfunktion unerlässlich..."
      },
      {
        "short_name": "HGB",
        "long_name": "Hämoglobin",
        "category": "Komplettes Blutbild",
        "result": 14.5,
        "unit": "g/dL",
        "evaluation": "normal",
        "range_min": 10.0,
        "range_max": 18.0,
        "range_normal_min": 13.5,
        "range_normal_max": 17.5,
        "short_description": "Protein in roten Blutkörperchen, das Sauerstoff transportiert.",
        "long_description": "Hämoglobin ist das eisenhaltige Protein, das für den Sauerstofftransport verantwortlich ist..."
      }
    ],
    "interpretation": [
      {
        "title": "Gesamtgesundheitsbewertung",
        "shortcode": "overall_health_assessment",
        "subsections": [
          {
            "subtitle": "Umfassender Überblick",
            "shortcode": "overall_health_assessment_overview",
            "items": [
              {"item": "Der Patient zeigt eine erhaltene Organfunktion mit normalen hämatologischen Parametern."},
              {"item": "Im kompletten Blutbild wurden keine signifikanten Auffälligkeiten festgestellt."}
            ]
          }
        ]
      }
    ]
  },
  "api_version": "v11",
  "timestamp": "2025-12-22T10:30:00Z"
}

Antwortfelder-Referenz

Stammebene
FeldTypBeschreibung
statusstring"success" oder "error"
dataobjectEnthält alle Analyseergebnisse
timestampstringISO 8601 Zeitstempel der Antwort
api_versionstringVerwendete API-Version
data.metadata Objekt
FeldTypBeschreibung
lab_datestringDatum der Blutentnahme (JJJJ-MM-TT). Druckt der Befund nur sein Ergebnisdatum, dieses Datum. Leer, wenn der Befund gar kein Datum zeigt.
results_datestringDatum der Ergebnisausgabe (JJJJ-MM-TT)
lab_namestringName des Labors
lab_citystringStadt des Labors
lab_countrystringLand des Labors
patient_namestringVollständiger Name des Patienten (nur Metadaten, wird nicht an die Interpretation gesendet)
patient_agestringAlter des Patienten
patient_sexstring"male", "female" oder "other"
data.parameters Array-Element
FeldTypBeschreibung
categorystringParameterkategorie (z.B. "Blutbild", "Lipidprofil")
long_namestringVollständiger Parametername
short_namestringAbgekürzter Parametername
resultstringMesswert
unitstringMaßeinheit
typestringrange: ein numerisches Ergebnis, das an Referenzbereichen bewertet wird. binary: ein qualitatives Ergebnis (Negativ, Positiv, Reaktiv, ein Titer ...) — seine Bereichsfelder sind null, es gibt nichts als Diagramm darzustellen, und evaluation ist good oder bad.
range_optimal_minnumber|nullUntergrenze des Optimalbereichs: der ideale Bereich innerhalb des Normalbereichs. So zeigen Sie die drei Bereiche an (null bei einer binary-Zeile)
range_optimal_maxnumber|nullObergrenze des Optimalbereichs (null bei einer binary-Zeile)
range_normal_minnumber|nullUntergrenze des Normalbereichs: Referenzbereich des Labors (null bei einer binary-Zeile)
range_normal_maxnumber|nullObergrenze des Normalbereichs (null bei einer binary-Zeile)
range_minnumber|nullUntere Grenze des Grenzbereichs: zwischen ihr und dem Normalbereich ist ein Ergebnis grenzwertig (slightly_low), darunter low (null bei einer binary-Zeile)
range_maxnumber|nullObere Grenze des Grenzbereichs: zwischen dem Normalbereich und ihr ist ein Ergebnis grenzwertig (slightly_high), darüber high (null bei einer binary-Zeile)
evaluationstringErgebnisstatus. Siehe Bewertungswerte
data.interpretation Array-Element
FeldTypBeschreibung
titlestringAbschnittstitel (z.B. "Gesamtgesundheitsbewertung")
contentstringKI-generierte medizinische Interpretation

Vollständiges Antwortbeispiel

{
  "status": "success",
  "data": {
    "metadata": {
      "patient_name": "Anna Müller",
      "lab_name": "MedLab Diagnostics International",
      "lab_city": "München",
      "lab_country": "Deutschland",
      "lab_date": "2025-12-15",
      "results_date": "2025-12-16",
      "patient_age": "38",
      "patient_sex": "female"
    },
    "parameters": [
      {
        "short_name": "WBC",
        "long_name": "Leukozytenzahl",
        "category": "Blutbild",
        "result": "6.8",
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": "4.0",
        "range_max": "11.0",
        "range_normal_min": "4.5",
        "range_normal_max": "10.0",
        "short_description": "Misst die Gesamtzahl der weißen Blutkörperchen.",
        "long_description": "Weiße Blutkörperchen (Leukozyten) sind wesentliche Bestandteile des Immunsystems..."
      },
      {
        "short_name": "RBC",
        "long_name": "Erythrozytenzahl",
        "category": "Blutbild",
        "result": "4.52",
        "unit": "10^12/L",
        "evaluation": "normal",
        "range_min": "3.8",
        "range_max": "5.8",
        "range_normal_min": "4.0",
        "range_normal_max": "5.5",
        "short_description": "Misst die Gesamtzahl der roten Blutkörperchen.",
        "long_description": "Rote Blutkörperchen (Erythrozyten) transportieren Sauerstoff von der Lunge zu den Körpergeweben..."
      },
      {
        "short_name": "HGB",
        "long_name": "Hämoglobin",
        "category": "Blutbild",
        "result": "13.2",
        "unit": "g/dL",
        "evaluation": "normal",
        "range_min": "11.5",
        "range_max": "16.0",
        "range_normal_min": "12.0",
        "range_normal_max": "15.5",
        "short_description": "Protein in roten Blutkörperchen, das Sauerstoff transportiert.",
        "long_description": "Hämoglobin ist das eisenhaltige Protein in roten Blutkörperchen, das für den Sauerstofftransport verantwortlich ist..."
      },
      {
        "short_name": "HCT",
        "long_name": "Hämatokrit",
        "category": "Blutbild",
        "result": "39.8",
        "unit": "%",
        "evaluation": "normal",
        "range_min": "35.0",
        "range_max": "47.0",
        "range_normal_min": "36.0",
        "range_normal_max": "44.0",
        "short_description": "Prozentsatz des Blutvolumens, der von roten Blutkörperchen eingenommen wird.",
        "long_description": "Der Hämatokrit misst den Anteil des Blutes, der aus roten Blutkörperchen besteht..."
      },
      {
        "short_name": "PLT",
        "long_name": "Thrombozytenzahl",
        "category": "Blutbild",
        "result": "245",
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": "150",
        "range_max": "400",
        "range_normal_min": "150",
        "range_normal_max": "350",
        "short_description": "Misst die Anzahl der Blutplättchen im Blut.",
        "long_description": "Thrombozyten (Blutplättchen) sind essentiell für die Blutgerinnung und Wundheilung..."
      },
      {
        "short_name": "GLU",
        "long_name": "Nüchternglukose",
        "category": "Stoffwechselpanel",
        "result": "102",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "70",
        "range_max": "140",
        "range_normal_min": "70",
        "range_normal_max": "99",
        "short_description": "Misst den Blutzuckerspiegel nach dem Fasten.",
        "long_description": "Die Nüchternglukose ist ein wichtiger Indikator dafür, wie gut der Körper Zucker verstoffwechselt..."
      },
      {
        "short_name": "TC",
        "long_name": "Gesamtcholesterin",
        "category": "Lipidprofil",
        "result": "218",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "0",
        "range_max": "300",
        "range_normal_min": "0",
        "range_normal_max": "200",
        "short_description": "Misst das Gesamtcholesterin im Blut.",
        "long_description": "Das Gesamtcholesterin ist die Summe aus HDL-, LDL- und VLDL-Cholesterin..."
      },
      {
        "short_name": "HDL",
        "long_name": "HDL-Cholesterin",
        "category": "Lipidprofil",
        "result": "58",
        "unit": "mg/dL",
        "evaluation": "normal",
        "range_min": "35",
        "range_max": "100",
        "range_normal_min": "50",
        "range_normal_max": "90",
        "short_description": "Misst das 'gute' Cholesterin.",
        "long_description": "HDL (High-Density-Lipoprotein) Cholesterin hilft, andere Formen von Cholesterin zu entfernen..."
      },
      {
        "short_name": "LDL",
        "long_name": "LDL-Cholesterin",
        "category": "Lipidprofil",
        "result": "142",
        "unit": "mg/dL",
        "evaluation": "high",
        "range_min": "0",
        "range_max": "200",
        "range_normal_min": "0",
        "range_normal_max": "100",
        "short_description": "Misst das 'schlechte' Cholesterin.",
        "long_description": "LDL (Low-Density-Lipoprotein) Cholesterin kann sich in den Arterienwänden ablagern..."
      },
      {
        "short_name": "TRIG",
        "long_name": "Triglyzeride",
        "category": "Lipidprofil",
        "result": "156",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "0",
        "range_max": "500",
        "range_normal_min": "0",
        "range_normal_max": "150",
        "short_description": "Misst das Fett im Blut.",
        "long_description": "Triglyzeride sind eine Art von Fett im Blut, das überschüssige Energie speichert..."
      }
    ],
    "interpretation": [
      {
        "title": "Gesamtgesundheitsbewertung",
        "shortcode": "overall_health_assessment",
        "subsections": [
          {
            "subtitle": "Umfassende Übersicht",
            "shortcode": "overall_health_assessment_overview",
            "items": [
              {"item": "Die Patientin zeigt allgemein gesunde hämatologische Parameter mit allen Blutbildwerten im Normalbereich."},
              {"item": "Die Ergebnisse des kompletten Blutbildes zeigen eine ausreichende Sauerstofftransportkapazität und Immunfunktion."},
              {"item": "Das Lipidprofil zeigt Bereiche, die Aufmerksamkeit erfordern, insbesondere die LDL-Cholesterinwerte."}
            ]
          }
        ]
      },
      {
        "title": "Stoffwechselanalyse",
        "shortcode": "metabolic_analysis",
        "subsections": [
          {
            "subtitle": "Blutzuckerbewertung",
            "shortcode": "metabolic_analysis_glucose",
            "items": [
              {"item": "Der Nüchternglukosewert von 102 mg/dL ist leicht erhöht und deutet auf einen Prädiabetes-Bereich hin."},
              {"item": "Es werden Lebensstiländerungen empfohlen, einschließlich regelmäßiger Bewegung und reduzierter Aufnahme einfacher Kohlenhydrate."},
              {"item": "Eine HbA1c-Nachuntersuchung wird in 3 Monaten empfohlen, um die langfristige Glukosekontrolle zu beurteilen."}
            ]
          }
        ]
      },
      {
        "title": "Kardiovaskuläre Risikobewertung",
        "shortcode": "cardiovascular_risk",
        "subsections": [
          {
            "subtitle": "Lipidprofilanalyse",
            "shortcode": "cardiovascular_risk_lipids",
            "items": [
              {"item": "LDL-Cholesterin mit 142 mg/dL überschreitet die optimalen Werte und erfordert eine Intervention."},
              {"item": "HDL-Cholesterin mit 58 mg/dL bietet moderaten kardiovaskulären Schutz."},
              {"item": "Triglyzeride leicht erhöht; Ernährungsumstellungen zur Reduzierung der gesättigten Fettsäuren werden empfohlen."},
              {"item": "Das Verhältnis von Gesamtcholesterin zu HDL von 3,76 deutet auf ein moderates kardiovaskuläres Risiko hin."}
            ]
          }
        ]
      },
      {
        "title": "Empfehlungen",
        "shortcode": "recommendations",
        "subsections": [
          {
            "subtitle": "Lebensstiländerungen",
            "shortcode": "recommendations_lifestyle",
            "items": [
              {"item": "Erhöhen Sie die aerobe körperliche Aktivität auf mindestens 150 Minuten pro Woche."},
              {"item": "Übernehmen Sie eine mediterrane Ernährung, reich an Gemüse, Obst und gesunden Fetten."},
              {"item": "Begrenzen Sie verarbeitete Lebensmittel, gesättigte Fette und zugesetzten Zucker."},
              {"item": "Erwägen Sie eine Beratung durch einen Ernährungsberater für personalisierte Ernährungsempfehlungen."}
            ]
          },
          {
            "subtitle": "Nachfolgeuntersuchungen",
            "shortcode": "recommendations_followup",
            "items": [
              {"item": "Wiederholung des Lipidprofils in 3 Monaten nach Umsetzung der Lebensstiländerungen."},
              {"item": "HbA1c-Test empfohlen, um die durchschnittlichen Blutzuckerwerte zu beurteilen."},
              {"item": "Jährliches umfassendes Stoffwechselpanel zur laufenden Überwachung."}
            ]
          }
        ]
      }
    ]
  },
  "api_version": "v11",
  "timestamp": "2025-12-16T14:32:18Z"
}
Antwort-Schlüsselwörter

Das Feld evaluation verwendet standardisierte Werte. Siehe Bewertungswerte.

POST /api/v12/health-score/analyze Neueste

Produktionsendpunkt mit umfassender Gesundheitsscore-Berechnung und Krankheitsrisikoanalyse. Erwartet dieselbe Anfrage wie /api/v12/18-09-2026/analyze und ergänzt die Antwort um die unten aufgeführten Felder. Verbraucht 1 Credit pro Anfrage.

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/health-score/analyze" \
  -F "username=IHR_BENUTZERNAME" \
  -F "password=IHR_PASSWORT" \
  -F "language=de" \
  -F "[email protected]"

Zusätzliche Antwortfelder

{
  "health_score": {
    "overall": 78,
    "optimal": 4,
    "normal": 12,
    "warning": 3,
    "critical": 1,
    "total_parameters": 20,
    "score_interpretation": "good",
    "recommendations": [
      "Consider increasing vitamin D intake",
      "Schedule follow-up for cholesterol levels"
    ]
  },
  "disease_risks": [
    {"name": "Cardiovascular Disease", "percentage": "18%", "severity": "low"},
    {"name": "Type 2 Diabetes", "percentage": "12%", "severity": "low"},
    {"name": "Metabolic Syndrome", "percentage": "25%", "severity": "moderate"}
  ]
}
Antwort-Schlüsselwörter

Das Feld score_interpretation verwendet standardisierte Werte. Siehe Gesundheitsscore-Werte.

POST /api/v11/health-score/analyze Stabil

Produktionsendpunkt mit umfassender Gesundheitsscore-Berechnung und Krankheitsrisikoanalyse.

Zusätzliche Antwortfelder

{
  "health_score": {
    "overall": 78,
    "optimal": 4,
    "normal": 12,
    "warning": 3,
    "critical": 1,
    "total_parameters": 20,
    "score_interpretation": "gut",
    "recommendations": [
      "Erwägen Sie eine Erhöhung der Vitamin-D-Aufnahme",
      "Planen Sie eine Nachuntersuchung für Cholesterinwerte"
    ]
  },
  "disease_risks": [
    {"name": "Herz-Kreislauf-Erkrankung", "percentage": "18%", "severity": "niedrig"},
    {"name": "Typ-2-Diabetes", "percentage": "12%", "severity": "niedrig"},
    {"name": "Metabolisches Syndrom", "percentage": "25%", "severity": "mäßig"}
  ]
}

Sandbox-Endpunkte

Sandbox-Endpunkte liefern realistische Testdaten, ohne das API-Kontingent zu verbrauchen. Verwenden Sie diese für Entwicklung und Integrationstests.

Sandbox-Vorteile
  • Kein Kontingentverbrauch
  • Liefert realistische Testdaten
  • Gleiches Anfrageformat wie Produktion
  • Testen Sie Ihre Integration vor dem Livebetrieb
  • Für alle API-Versionen verfügbar
APISandbox-Endpunkt
Bluttest v12/api/v12/18-09-2026/sandbox
Bluttest v12-health/api/v12/health-score/sandbox
Body Map/api/v1/body-map/sandbox
Biologisches Blutalter/api/v1/blood-age/sandbox
DNA-Test-Interpretation/api/v1/dna-interpretation/sandbox
DNA + Blut-Gesundheitsbericht/api/v1/dna-blood-report/sandbox
DNA-Supplement-Berater/api/v1/dna-supplements/sandbox
Bluttest v11/api/v11/01-06-2025/sandbox
Bluttest v11-health/api/v11/health-score/sandbox
Ernährungs-KI/api/v1/nutrition/diet-plan/sandbox
Bluttestvergleich/api/v1/bloodtest/comparison/sandbox
Trendanalyse/api/v1/analytics/trends/sandbox
ICR Extract/api/icr/v1/sandbox
ICR Kan (Bluttest)/api/icr/v1/kan/sandbox
Vergleichs-API vs Trendanalyse-API

Wählen Sie die richtige API für Ihren Anwendungsfall:

FunktionKI-BluttestvergleichTrendanalyse
HauptfokusKI-narrative VergleichStatistische Trendanalyse
KI-VerarbeitungVollständige KI-NarrativeKI-erweitert + Statistik
AusgabetypNarrative ZusammenfassungenDiagramme, Statistiken, Muster
Geeignet fürWas hat sich zwischen Tests geändertLangzeit-Parameter-Tracking
Min. Tests22
Max. Tests2050

Trendanalyse-API

Analysieren Sie Gesundheitsparameter-Trends über die Zeit mit KI-gestützter Mustererkennung. Identifizieren Sie Verbesserungen, Verschlechterungen und handlungsrelevante Erkenntnisse aus historischen Bluttestdaten.

Ernährungs-KI mit Nahrungsergänzungsmitteln

Erstellen Sie personalisierte Ernährungspläne, Diätempfehlungen und Nahrungsergänzungsmittelvorschläge basierend auf der Bluttestanalyse mit fortschrittlichen KI-Algorithmen.

POST /api/v1/nutrition/diet-plan/analyze Neu

Erstellt umfassende Ernährungs- und Nahrungsergänzungsmittelempfehlungen basierend auf Bluttestparametern und Patientenprofil.

Anfrageparameter

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername
passwordstringJaIhr API-Passwort
languagestringNeinAntwortsprache (Standard: en). Siehe unterstützte Sprachen.
patientobjectJaPatientendemografie und Gesundheitsinformationen
blood_testobjectJaBluttestparameter
health_goalsarrayNeinSpezifische Gesundheitsziele
dietary_restrictionsarrayNeinAllergien, Unverträglichkeiten, Präferenzen

Patientenobjekt-Schema

Patienten-Demografieobjekt mit gender (siehe Werte) und activity_level (siehe Werte).

FeldTypErforderlichStandardBeschreibung
ageintegerJa-Patientenalter in Jahren (18-120)
genderstringJa-Patientengeschlecht. Siehe Werte
weightnumberNeinnullGewicht in kg (für Kalorienberechnungen)
heightnumberNeinnullGröße in cm (für BMI-Berechnungen)
conditionsarrayNein[]Erkrankungen (z.B. ["diabetes", "hypertension"])
allergiesarrayNein[]Lebensmittel-/Nahrungsergänzungsmittelallergien
dietary_preferencesarrayNein[]Ernährungspräferenzen. Siehe Werte
activity_levelstringNein"moderate"Aktivitätsniveau. Siehe Werte
dietary_restrictionsarrayNein[]Ernährungseinschränkungen. Siehe Werte
liked_foodsarrayNein[]Bevorzugte Lebensmittel
disliked_foodsarrayNein[]Abgelehnte Lebensmittel
meal_frequencyinteger oder stringNein5Mahlzeiten pro Tag: Jeder Tag des Plans hat genau diese Mahlzeiten, z. B. 2 = Mittag- und Abendessen. Siehe Werte
budgetstring oder objectNein"moderate"Lebensmittelbudget: ein Niveau oder ein Betrag pro Tag wie "10-20 EUR/day". Siehe Werte
medicationsarrayNein[]Aktuelle Medikamente für Interaktionsprüfungen
{
  "age": 45,
  "gender": "male",
  "weight": 82,
  "height": 178,
  "activity_level": "moderate",
  "conditions": ["hypertension"],
  "medications": ["lisinopril"],
  "allergies": ["shellfish"]
}

Python-Beispiel

import requests
from typing import Dict, List, Optional

def ernaehrungsplan_erstellen(
    benutzername: str,
    passwort: str,
    patient: Dict,
    bluttest: Dict,
    gesundheitsziele: Optional[List[str]] = None,
    ernaehrungseinschraenkungen: Optional[List[str]] = None,
    sprache: str = "de"
) -> Dict:
    """
    Erstellt personalisierte Ernährungs- und Nahrungsergänzungsmittelempfehlungen.

    Args:
        benutzername: API-Benutzername
        passwort: API-Passwort
        patient: Patientendemografie und Gesundheitsinformationen
        bluttest: Bluttestparameter
        gesundheitsziele: Optionale Gesundheitsziele
        ernaehrungseinschraenkungen: Optionale Ernährungseinschränkungen
        sprache: Antwortsprache

    Returns:
        dict: Ernährungsplan mit Nahrungsergänzungsmitteln
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze"

    nutzlast = {
        "username": benutzername,
        "password": passwort,
        "language": sprache,
        "patient": patient,
        "blood_test": bluttest
    }

    if gesundheitsziele:
        nutzlast["health_goals"] = gesundheitsziele
    if ernaehrungseinschraenkungen:
        nutzlast["dietary_restrictions"] = ernaehrungseinschraenkungen

    antwort = requests.post(url, json=nutzlast, timeout=120)
    antwort.raise_for_status()
    return antwort.json()

# Anwendungsbeispiel
if __name__ == "__main__":
    patient = {
        "age": 45,
        "gender": "male",
        "weight": 82,
        "height": 178,
        "activity_level": "moderate",
        "conditions": ["hypertension"],
        "allergies": ["shellfish"]
    }

    bluttest = {
        "lab_date": "2025-12-01",
        "parameters": [
            {"short_name": "VITD", "result": 18, "unit": "ng/mL"},
            {"short_name": "FER", "result": 25, "unit": "ng/mL"},
            {"short_name": "CHOL", "result": 210, "unit": "mg/dL"}
        ]
    }

    ergebnis = ernaehrungsplan_erstellen(
        benutzername="ihr_benutzername",
        passwort="ihr_passwort",
        patient=patient,
        bluttest=bluttest,
        gesundheitsziele=["lower_cholesterol", "increase_energy"]
    )

    # Nahrungsergänzungsmittelempfehlungen ausgeben
    for supp in ergebnis['data']['nutrition_plan']['supplement_recommendations']:
        print(f"{supp['name']}: {supp['dosage']} - {supp['reason']}")

Beispielantwort

{
  "status": "success",
  "data": {
    "analysis_id": "NUT-1A2B3C4D",
    "generated_at": "2026-11-04T10:30:00Z",
    "patient_summary": {
      "age": 34,
      "gender": "female",
      "weight": 62,
      "height": 165,
      "conditions": [],
      "dietary_preferences": "omnivore"
    },
    "nutrition_plan": {
      "nutrition_summary": {
        "daily_calories": 2046,
        "macro_distribution": {
          "protein_g": 153,
          "fat_g": 57,
          "carbs_g": 230,
          "fiber_g": 29
        },
        "key_focus_areas": [
          "Rebuild iron stores (low ferritin and haemoglobin)",
          "Raise vitamin D into the optimal range",
          "Lower LDL cholesterol with fibre and unsaturated fats"
        ],
        "primary_recommendations": [
          "Eat a heme-iron source (red meat, poultry, fish or shellfish) at least once a day",
          "Pair plant iron with vitamin C and keep tea and coffee one hour away from meals",
          "Have oily fish 2-3 times a week and oats, legumes or psyllium every day"
        ]
      },
      "weekly_meal_plan": {
        "monday": {
          "breakfast": {
            "main_dish": "Spinach and mushroom omelette (2 eggs) on wholegrain toast",
            "sides": ["Orange segments", "Cherry tomatoes"],
            "calories": 510,
            "protein": 30,
            "preparation_time": "15 minutes",
            "cost_estimate": "$3-4"
          },
          "morning_snack": {
            "items": ["Pumpkin seeds (30 g)", "Kiwi"],
            "calories": 150
          },
          "lunch": {
            "main_dish": "Lentil and vegetable soup",
            "sides": ["Wholegrain bread", "Red pepper salad with lemon"],
            "calories": 640,
            "protein": 32,
            "preparation_time": "25 minutes",
            "cost_estimate": "$3-5"
          },
          "afternoon_snack": {
            "items": ["Greek yogurt (150 g)", "Strawberries"],
            "calories": 150
          },
          "dinner": {
            "main_dish": "Grilled lean beef steak (150 g)",
            "sides": ["Roasted sweet potato", "Steamed broccoli with lemon"],
            "calories": 600,
            "protein": 45,
            "preparation_time": "30 minutes",
            "cost_estimate": "$6-8"
          }
        }
        // "tuesday" ... "sunday": the same meals as "monday"
      },
      "food_recommendations": {
        "power_foods": [
          {
            "name": "Lean red meat (beef, lamb)",
            "benefits": "Heme iron is absorbed two to three times better than plant iron and refills ferritin fastest; also supplies B12 and zinc.",
            "serving_size": "120-150 g",
            "frequency": "3 times a week",
            "blood_marker_impact": "Ferritin, Hemoglobin"
          },
          {
            "name": "Mussels and clams",
            "benefits": "Among the richest heme-iron foods, with B12 and omega-3 fats.",
            "serving_size": "100 g (cooked, shelled)",
            "frequency": "Once a week",
            "blood_marker_impact": "Ferritin, Hemoglobin"
          }
          // 12-15 foods in a live plan
        ],
        "foods_to_limit": [
          {
            "name": "Tea and coffee with meals",
            "reason": "Tannins and polyphenols can cut iron absorption from a meal by more than half.",
            "alternative": "Drink them at least one hour before or after eating; water or rooibos with meals",
            "impact_on_health": "Slows the rebuilding of ferritin"
          },
          {
            "name": "Processed meats (sausages, salami, bacon)",
            "reason": "High in saturated fat and salt, which raise LDL and blood pressure.",
            "alternative": "Grilled chicken, turkey or lean beef",
            "impact_on_health": "Keeps LDL cholesterol high"
          }
          // 12-15 foods in a live plan
        ],
        "hydration": {
          "daily_water": "3.1 L",
          "timing": "A glass on waking, then evenly through the day; less in the hour before bed",
          "special_considerations": "Keep tea and coffee at least one hour away from iron-rich meals"
        }
      },
      "supplement_recommendations": [
        {
          "name": "Iron bisglycinate",
          "dosage": "25 mg elemental iron a day",
          "timing": "In the morning on an empty stomach, with vitamin C",
          "reason": "Ferritin 14 ng/mL and haemoglobin 11.8 g/dL show depleted iron stores",
          "duration": "3 months, then retest ferritin",
          "contraindications": "Haemochromatosis; take 2 hours apart from calcium, antacids and thyroid medication",
          "source": "evidence_based",
          "priority": "high",
          "blood_marker_addressed": "Ferritin, Hemoglobin",
          "priority_label": "High",
          "source_label": "Evidence-Based"
        },
        {
          "name": "Vitamin D3",
          "dosage": "2000 IU a day",
          "timing": "With the largest meal of the day",
          "reason": "Vitamin D 18 ng/mL is below the 30 ng/mL threshold",
          "duration": "3 months, then retest",
          "contraindications": "Hypercalcaemia, sarcoidosis",
          "source": "evidence_based",
          "priority": "high",
          "blood_marker_addressed": "Vitamin D (25-OH)",
          "priority_label": "High",
          "source_label": "Evidence-Based"
        }
        // 5-8 supplements in a live plan
      ],
      "lifestyle_integration": {
        "meal_prep_tips": [
          "Cook a large pot of lentils or chickpeas on Sunday for three lunches",
          "Keep cut peppers and kiwi ready to add vitamin C to meals",
          "Portion nuts and seeds into small boxes for snacks"
        ],
        "shopping_list": {
          "proteins": ["Lean beef", "Salmon", "Sardines", "Mussels", "Chicken liver", "Eggs"],
          "vegetables": ["Spinach", "Kale", "Broccoli", "Bell peppers", "Tomatoes"],
          "fruits": ["Kiwi", "Oranges", "Strawberries", "Dried apricots"],
          "grains": ["Oats", "Quinoa", "Brown rice", "Wholegrain bread"],
          "dairy_alternatives": ["Greek yogurt", "Kefir", "Cottage cheese"],
          "pantry_staples": ["Lentils", "Chickpeas", "Pumpkin seeds", "Olive oil", "Psyllium husk"]
        },
        "eating_schedule": {
          "breakfast": "07:30-08:30",
          "morning_snack": "10:30",
          "lunch": "12:30-13:30",
          "afternoon_snack": "16:00",
          "dinner": "19:00-20:00"
        },
        "special_occasions": "When eating out, choose grilled meat or fish with salad, and keep coffee for after the meal."
      },
      "monitoring_plan": {
        "weekly_goals": [
          "Heme iron at least 5 days a week",
          "Oily fish twice a week",
          "No tea or coffee within an hour of meals"
        ],
        "tracking_metrics": [
          "Energy levels",
          "Fatigue and breathlessness",
          "Weight",
          "Digestive tolerance of the iron supplement"
        ],
        "adjustment_signs": [
          "Constipation or stomach upset from the iron supplement",
          "No improvement in energy after 6 weeks"
        ],
        "follow_up_tests": [
          "Ferritin, iron and haemoglobin in 8-12 weeks",
          "Vitamin D (25-OH) in 3 months",
          "Lipid panel in 3 months"
        ],
        "expected_improvements": [
          "Ferritin up 15-30 ng/mL within 3 months",
          "Vitamin D above 30 ng/mL within 3 months",
          "LDL down 10-15% within 3 months"
        ]
      },
      "educational_insights": {
        "blood_test_connections": [
          {
            "parameter": "Ferritin",
            "current_value": "14 ng/mL",
            "dietary_impact": "Iron stores are low; heme iron and vitamin C with meals refill them fastest.",
            "foods_that_help": ["Lean red meat", "Mussels", "Chicken liver", "Lentils with peppers"]
          },
          {
            "parameter": "Hemoglobin",
            "current_value": "11.8 g/dL",
            "dietary_impact": "Slightly below range, consistent with iron deficiency; it rises as ferritin recovers.",
            "foods_that_help": ["Beef", "Spinach with lemon", "Eggs"]
          }
          // one entry per relevant blood test parameter
        ],
        "nutritional_science": [
          "Heme iron from animal foods is absorbed at 15-35%, plant iron at 2-20%.",
          "Vitamin C turns plant iron into a form the gut absorbs more easily.",
          "Beta-glucan from oats forms a gel that carries cholesterol-rich bile out of the body."
        ],
        "success_strategies": [
          "Plan the week's meals and shop once",
          "Add a vitamin C food to every iron-rich meal",
          "Retest on schedule to see the progress"
        ]
      },
      "metadata": {
        "generated_at": "2026-11-04T10:30:00",
        "patient_id": "api_1a2b3c4d",
        "bmr": 1320.25,
        "tdee": 2046.39,
        "nutritional_concerns": ["vitamin_d_deficiency", "anemia", "iron_deficiency", "elevated_ldl"],
        "version": "2.2",
        "used_clinic_supplements": false,
        "clinic_supplements_count": 0,
        "report_language": "english",
        "meal_slots": ["breakfast", "morning_snack", "lunch", "afternoon_snack", "dinner"],
        "meal_frequency": "3 meals and 2 snacks a day (breakfast, morning snack, lunch, afternoon snack, dinner)",
        "budget": "moderate",
        "api_provider": "KantestiAI Engine",
        "model": "KantestiAI Engine"
      }
    },
    "labels": {
      "nutrition_summary": "Nutrition Summary",
      "key_focus_areas": "Key Focus Areas",
      "weekly_meal_plan": "Weekly Meal Plan",
      "monday": "Monday",
      "breakfast": "Breakfast",
      "morning_snack": "Morning Snack",
      "main_dish": "Main Dish",
      "supplement_recommendations": "Supplement Recommendations",
      "priority": "Priority",
      "high": "High",
      "evidence_based": "Evidence-Based"
      // ... one entry for every key of nutrition_plan and every priority / source code
    },
    "language": "en",
    "sandbox_mode": false
  },
  "timestamp": "2026-11-04T10:30:00Z",
  "api_version": "1.0.0",
  "message": "Nutrition analysis completed successfully"
}

Antwortfelder-Referenz

Der Produktionsendpunkt (/analyze) und die Sandbox liefern dieselbe Struktur. JSON-Schlüssel und Codes sind immer auf Englisch; alle Texte sind in der mit language angeforderten Sprache (Sandbox-Texte sind immer auf Englisch). Zeigen Sie Benutzern keine Schlüssel oder Codes an: Entnehmen Sie die Titel aus labels und zeigen Sie für Priorität und Quelle eines Nahrungsergänzungsmittels priority_label und source_label an. Jeder Tag in weekly_meal_plan, von monday bis sunday, hat dieselben Mahlzeiten: die von meal_frequency, standardmäßig fünf.

Der Plan wird in 39 Sprachen verfasst: en, de, fr, it, es, pt, ar, he, el, pl, tr, zh, ru, fa, ja, ko, nl, hi, id, th, vi, sv, no, da, fi, cs, ms, af, uk, ro, hu, sk, sl, hr, bg, sr, lv, lt, et. Jeder andere unterstützte Sprachcode (language) liefert den Plan und seine labels auf Englisch.

data Objekt
FeldTypBeschreibung
analysis_idstringEindeutige Kennung für diese Analyse (z.B. "NUT-1A2B3C4D")
generated_atstringErstellungszeitpunkt (ISO 8601, UTC)
patient_summaryobjectDie von Ihnen gesendeten Patientendaten: age, gender, weight, height, conditions, dietary_preferences
nutrition_planobjectDer Ernährungsplan (Abschnitte unten)
labelsobjectAnzeigetexte in der angeforderten Sprache für jeden Schlüssel von nutrition_plan und jeden Code von priority und source, z.B. labels.key_focus_areas, labels.monday, labels.high
languagestringSprachcode der Antwort
sandbox_modebooleantrue nur in Sandbox-Antworten
nutrition_plan Objekt
FeldTypBeschreibung
nutrition_summaryobjectTägliche Kalorien- und Makronährstoffziele sowie die Schwerpunkte des Plans
weekly_meal_planobjectmonday bis sunday, jeder Tag mit den Mahlzeiten von meal_frequency (unten); standardmäßig fünf
food_recommendationsobjectpower_foods, foods_to_limit (unten) und hydration (daily_water, timing, special_considerations)
supplement_recommendationsarrayEmpfehlungen zu Nahrungsergänzungsmitteln (unten). Eine je auffälligem oder grenzwertigem Marker, bei dem ein Präparat helfen kann, keine für einen Marker im Normbereich; keine feste Anzahl.
lifestyle_integrationobjectmeal_prep_tips, shopping_list (nach Lebensmittelgruppe), eating_schedule (Uhrzeit jeder Mahlzeit), special_occasions
monitoring_planobjectweekly_goals, tracking_metrics, adjustment_signs, follow_up_tests, expected_improvements (Listen von Texten)
educational_insightsobjectblood_test_connections (parameter, current_value, dietary_impact, foods_that_help), nutritional_science, success_strategies
metadataobjectTechnische Angaben, nicht zur Anzeige bestimmt: bmr und tdee (kcal/Tag), nutritional_concerns (Codes), version, report_language, meal_slots (die Mahlzeiten jedes Tages, z. B. ["lunch", "dinner"]), meal_frequency und budget (wie die Werte der Anfrage verstanden wurden)
nutrition_plan.nutrition_summary Objekt
FeldTypBeschreibung
daily_caloriesintegerTägliches Kalorienziel (kcal)
macro_distributionobjectprotein_g, fat_g, carbs_g, fiber_g: Gramm pro Tag
key_focus_areasarrayHauptschwerpunkte des Plans
primary_recommendationsarrayDie wichtigsten Empfehlungen
weekly_meal_plan.<day> Objekt
FeldTypBeschreibung
breakfast, lunch, dinnerobjectHauptmahlzeiten (Felder unten)
morning_snack, afternoon_snackobjectSnacks: items (Array von Texten) und calories (Ganzzahl, kcal)

Ein Tag hat genau die Mahlzeiten von meal_frequency, und metadata.meal_slots listet sie auf: bei 2 nur lunch und dinner. Zeigen Sie die Mahlzeiten an, die ein Tag hat, nicht eine feste Liste von fünf.

breakfast / lunch / dinner Objekt
FeldTypBeschreibung
main_dishstringName des Hauptgerichts
sidesarrayBeilagen
caloriesintegerKalorien (kcal)
proteinintegerProtein (g)
preparation_timestringZubereitungszeit (z.B. "15 Minuten")
cost_estimatestringGeschätzte Kosten (z.B. "$3-5")
food_recommendations.power_foods Array-Element
FeldTypBeschreibung
namestringLebensmittelname
benefitsstringWarum es hilft, bezogen auf die Bluttestergebnisse
serving_sizestringPortionsgröße
frequencystringWie oft man es essen soll
blood_marker_impactstringBlutmarker, denen es hilft
food_recommendations.foods_to_limit Array-Element
FeldTypBeschreibung
namestringLebensmittelname
reasonstringWarum man es einschränken sollte
alternativestringGesündere Alternative
impact_on_healthstringAuswirkung auf die Gesundheit des Patienten
supplement_recommendations Array-Element
FeldTypBeschreibung
namestringName des Nahrungsergänzungsmittels
dosagestringDosierung (z.B. "2000 IE täglich")
timingstringWann man es einnehmen soll
reasonstringWarum es empfohlen wird, basierend auf den Bluttestergebnissen
durationstringWie lange man es einnehmen soll
contraindicationsstringKontraindikationen und Wechselwirkungen
sourcestringCode: clinic_library (aus Ihrer Bibliothek der Nahrungsergänzungsmittel) oder evidence_based
source_labelstringsource als Text in der angeforderten Sprache, bereit zur Anzeige
prioritystringCode: high, medium oder low
priority_labelstringpriority als Text in der angeforderten Sprache, bereit zur Anzeige
blood_marker_addressedstringBlutmarker, auf die es abzielt

Vollständiges cURL-Beispiel mit Antwort

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "demo_user",
    "password": "demo_pass",
    "language": "de",
    "patient": {
      "age": 42,
      "gender": "female",
      "weight": 68,
      "height": 165,
      "activity_level": "moderate",
      "conditions": ["iron_deficiency_anemia"],
      "allergies": ["gluten"],
      "dietary_preferences": ["mediterranean"],
      "dietary_restrictions": ["gluten_free"],
      "liked_foods": ["salmon", "spinach", "quinoa"],
      "disliked_foods": ["liver"],
      "meal_frequency": 5,
      "budget": "moderate",
      "medications": ["ferrous_sulfate"]
    },
    "blood_test": {
      "lab_date": "2025-12-20",
      "parameters": [
        {"short_name": "FER", "result": 12, "unit": "ng/mL"},
        {"short_name": "HGB", "result": 10.8, "unit": "g/dL"},
        {"short_name": "VITD", "result": 22, "unit": "ng/mL"}
      ]
    },
    "health_goals": ["increase_energy", "improve_iron_levels"]
  }'
Antwort:
{
  "status": "success",
  "data": {
    "analysis_id": "NUT-1A2B3C4D",
    "generated_at": "2026-11-04T10:30:00Z",
    "patient_summary": {
      "age": 34,
      "gender": "female",
      "weight": 62,
      "height": 165,
      "conditions": [],
      "dietary_preferences": "omnivore"
    },
    "nutrition_plan": {
      "nutrition_summary": {
        "daily_calories": 2046,
        "macro_distribution": {
          "protein_g": 153,
          "fat_g": 57,
          "carbs_g": 230,
          "fiber_g": 29
        },
        "key_focus_areas": [
          "Rebuild iron stores (low ferritin and haemoglobin)",
          "Raise vitamin D into the optimal range",
          "Lower LDL cholesterol with fibre and unsaturated fats"
        ],
        "primary_recommendations": [
          "Eat a heme-iron source (red meat, poultry, fish or shellfish) at least once a day",
          "Pair plant iron with vitamin C and keep tea and coffee one hour away from meals",
          "Have oily fish 2-3 times a week and oats, legumes or psyllium every day"
        ]
      },
      "weekly_meal_plan": {
        "monday": {
          "breakfast": {
            "main_dish": "Spinach and mushroom omelette (2 eggs) on wholegrain toast",
            "sides": ["Orange segments", "Cherry tomatoes"],
            "calories": 510,
            "protein": 30,
            "preparation_time": "15 minutes",
            "cost_estimate": "$3-4"
          },
          "morning_snack": {
            "items": ["Pumpkin seeds (30 g)", "Kiwi"],
            "calories": 150
          },
          "lunch": {
            "main_dish": "Lentil and vegetable soup",
            "sides": ["Wholegrain bread", "Red pepper salad with lemon"],
            "calories": 640,
            "protein": 32,
            "preparation_time": "25 minutes",
            "cost_estimate": "$3-5"
          },
          "afternoon_snack": {
            "items": ["Greek yogurt (150 g)", "Strawberries"],
            "calories": 150
          },
          "dinner": {
            "main_dish": "Grilled lean beef steak (150 g)",
            "sides": ["Roasted sweet potato", "Steamed broccoli with lemon"],
            "calories": 600,
            "protein": 45,
            "preparation_time": "30 minutes",
            "cost_estimate": "$6-8"
          }
        }
        // "tuesday" ... "sunday": the same meals as "monday"
      },
      "food_recommendations": {
        "power_foods": [
          {
            "name": "Lean red meat (beef, lamb)",
            "benefits": "Heme iron is absorbed two to three times better than plant iron and refills ferritin fastest; also supplies B12 and zinc.",
            "serving_size": "120-150 g",
            "frequency": "3 times a week",
            "blood_marker_impact": "Ferritin, Hemoglobin"
          },
          {
            "name": "Mussels and clams",
            "benefits": "Among the richest heme-iron foods, with B12 and omega-3 fats.",
            "serving_size": "100 g (cooked, shelled)",
            "frequency": "Once a week",
            "blood_marker_impact": "Ferritin, Hemoglobin"
          }
          // 12-15 foods in a live plan
        ],
        "foods_to_limit": [
          {
            "name": "Tea and coffee with meals",
            "reason": "Tannins and polyphenols can cut iron absorption from a meal by more than half.",
            "alternative": "Drink them at least one hour before or after eating; water or rooibos with meals",
            "impact_on_health": "Slows the rebuilding of ferritin"
          },
          {
            "name": "Processed meats (sausages, salami, bacon)",
            "reason": "High in saturated fat and salt, which raise LDL and blood pressure.",
            "alternative": "Grilled chicken, turkey or lean beef",
            "impact_on_health": "Keeps LDL cholesterol high"
          }
          // 12-15 foods in a live plan
        ],
        "hydration": {
          "daily_water": "3.1 L",
          "timing": "A glass on waking, then evenly through the day; less in the hour before bed",
          "special_considerations": "Keep tea and coffee at least one hour away from iron-rich meals"
        }
      },
      "supplement_recommendations": [
        {
          "name": "Iron bisglycinate",
          "dosage": "25 mg elemental iron a day",
          "timing": "In the morning on an empty stomach, with vitamin C",
          "reason": "Ferritin 14 ng/mL and haemoglobin 11.8 g/dL show depleted iron stores",
          "duration": "3 months, then retest ferritin",
          "contraindications": "Haemochromatosis; take 2 hours apart from calcium, antacids and thyroid medication",
          "source": "evidence_based",
          "priority": "high",
          "blood_marker_addressed": "Ferritin, Hemoglobin",
          "priority_label": "High",
          "source_label": "Evidence-Based"
        },
        {
          "name": "Vitamin D3",
          "dosage": "2000 IU a day",
          "timing": "With the largest meal of the day",
          "reason": "Vitamin D 18 ng/mL is below the 30 ng/mL threshold",
          "duration": "3 months, then retest",
          "contraindications": "Hypercalcaemia, sarcoidosis",
          "source": "evidence_based",
          "priority": "high",
          "blood_marker_addressed": "Vitamin D (25-OH)",
          "priority_label": "High",
          "source_label": "Evidence-Based"
        }
        // 5-8 supplements in a live plan
      ],
      "lifestyle_integration": {
        "meal_prep_tips": [
          "Cook a large pot of lentils or chickpeas on Sunday for three lunches",
          "Keep cut peppers and kiwi ready to add vitamin C to meals",
          "Portion nuts and seeds into small boxes for snacks"
        ],
        "shopping_list": {
          "proteins": ["Lean beef", "Salmon", "Sardines", "Mussels", "Chicken liver", "Eggs"],
          "vegetables": ["Spinach", "Kale", "Broccoli", "Bell peppers", "Tomatoes"],
          "fruits": ["Kiwi", "Oranges", "Strawberries", "Dried apricots"],
          "grains": ["Oats", "Quinoa", "Brown rice", "Wholegrain bread"],
          "dairy_alternatives": ["Greek yogurt", "Kefir", "Cottage cheese"],
          "pantry_staples": ["Lentils", "Chickpeas", "Pumpkin seeds", "Olive oil", "Psyllium husk"]
        },
        "eating_schedule": {
          "breakfast": "07:30-08:30",
          "morning_snack": "10:30",
          "lunch": "12:30-13:30",
          "afternoon_snack": "16:00",
          "dinner": "19:00-20:00"
        },
        "special_occasions": "When eating out, choose grilled meat or fish with salad, and keep coffee for after the meal."
      },
      "monitoring_plan": {
        "weekly_goals": [
          "Heme iron at least 5 days a week",
          "Oily fish twice a week",
          "No tea or coffee within an hour of meals"
        ],
        "tracking_metrics": [
          "Energy levels",
          "Fatigue and breathlessness",
          "Weight",
          "Digestive tolerance of the iron supplement"
        ],
        "adjustment_signs": [
          "Constipation or stomach upset from the iron supplement",
          "No improvement in energy after 6 weeks"
        ],
        "follow_up_tests": [
          "Ferritin, iron and haemoglobin in 8-12 weeks",
          "Vitamin D (25-OH) in 3 months",
          "Lipid panel in 3 months"
        ],
        "expected_improvements": [
          "Ferritin up 15-30 ng/mL within 3 months",
          "Vitamin D above 30 ng/mL within 3 months",
          "LDL down 10-15% within 3 months"
        ]
      },
      "educational_insights": {
        "blood_test_connections": [
          {
            "parameter": "Ferritin",
            "current_value": "14 ng/mL",
            "dietary_impact": "Iron stores are low; heme iron and vitamin C with meals refill them fastest.",
            "foods_that_help": ["Lean red meat", "Mussels", "Chicken liver", "Lentils with peppers"]
          },
          {
            "parameter": "Hemoglobin",
            "current_value": "11.8 g/dL",
            "dietary_impact": "Slightly below range, consistent with iron deficiency; it rises as ferritin recovers.",
            "foods_that_help": ["Beef", "Spinach with lemon", "Eggs"]
          }
          // one entry per relevant blood test parameter
        ],
        "nutritional_science": [
          "Heme iron from animal foods is absorbed at 15-35%, plant iron at 2-20%.",
          "Vitamin C turns plant iron into a form the gut absorbs more easily.",
          "Beta-glucan from oats forms a gel that carries cholesterol-rich bile out of the body."
        ],
        "success_strategies": [
          "Plan the week's meals and shop once",
          "Add a vitamin C food to every iron-rich meal",
          "Retest on schedule to see the progress"
        ]
      },
      "metadata": {
        "generated_at": "2026-11-04T10:30:00",
        "patient_id": "api_1a2b3c4d",
        "bmr": 1320.25,
        "tdee": 2046.39,
        "nutritional_concerns": ["vitamin_d_deficiency", "anemia", "iron_deficiency", "elevated_ldl"],
        "version": "2.2",
        "used_clinic_supplements": false,
        "clinic_supplements_count": 0,
        "report_language": "english",
        "meal_slots": ["breakfast", "morning_snack", "lunch", "afternoon_snack", "dinner"],
        "meal_frequency": "3 meals and 2 snacks a day (breakfast, morning snack, lunch, afternoon snack, dinner)",
        "budget": "moderate",
        "api_provider": "KantestiAI Engine",
        "model": "KantestiAI Engine"
      }
    },
    "labels": {
      "nutrition_summary": "Nutrition Summary",
      "key_focus_areas": "Key Focus Areas",
      "weekly_meal_plan": "Weekly Meal Plan",
      "monday": "Monday",
      "breakfast": "Breakfast",
      "morning_snack": "Morning Snack",
      "main_dish": "Main Dish",
      "supplement_recommendations": "Supplement Recommendations",
      "priority": "Priority",
      "high": "High",
      "evidence_based": "Evidence-Based"
      // ... one entry for every key of nutrition_plan and every priority / source code
    },
    "language": "en",
    "sandbox_mode": false
  },
  "timestamp": "2026-11-04T10:30:00Z",
  "api_version": "1.0.0",
  "message": "Nutrition analysis completed successfully"
}

Bluttestvergleich-API

Vergleichen Sie mehrere Bluttests, um Veränderungen, Verbesserungen und Bereiche zu identifizieren, die Aufmerksamkeit erfordern, mit KI-gestützter Analyse. Erhalten Sie vollständige KI-narrative Zusammenfassungen, die erklären, was sich zwischen Tests geändert hat.

POST /api/v1/bloodtest/comparison/analyze

Analysiert 2-20 Bluttests und liefert einen detaillierten Vergleich mit KI-generierten narrativen Erkenntnissen.

Anforderungen
  • Mindestens 2 Bluttests erforderlich
  • Maximal 20 Bluttests pro Anfrage
  • Jeder Test muss lab_date oder results_date enthalten
  • Mindestens ein gemeinsamer Parameter über alle Tests

Anfrageparameter

ParameterTypErforderlichStandardBeschreibung
usernamestringJa-Ihr API-Benutzername
passwordstringJa-Ihr API-Passwort
languagestringNeinenAntwortsprache. Siehe unterstützte Sprachen
blood_testsarrayJa-Array von Bluttestobjekten (2-20 Tests)

blood_tests Array-Struktur

FeldTypErforderlichBeschreibung
lab_datestringJa*Testdatum im YYYY-MM-DD Format
results_datestringJa*Alternative zu lab_date (YYYY-MM-DD)
parametersarrayJaArray von Bluttestparametern
metadataobjectNeinZusätzliche Metadaten (lab_name, notes, etc.)

*Entweder lab_date oder results_date ist für jeden Bluttest erforderlich.

Python-Beispiel

import requests
from typing import Dict, List

def bluttests_vergleichen(
    benutzername: str,
    passwort: str,
    bluttests: List[Dict],
    sprache: str = "de"
) -> Dict:
    """
    Vergleicht mehrere Bluttests für Trendanalyse.

    Args:
        benutzername: API-Benutzername
        passwort: API-Passwort
        bluttests: Liste von Bluttestobjekten (2-20 Tests)
        sprache: Antwortsprache

    Returns:
        dict: Vergleichsergebnisse mit KI-narrativen Erkenntnissen
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze"

    if len(bluttests) < 2:
        raise ValueError("Mindestens 2 Bluttests erforderlich")
    if len(bluttests) > 20:
        raise ValueError("Maximal 20 Bluttests erlaubt")

    nutzlast = {
        "username": benutzername,
        "password": passwort,
        "language": sprache,
        "blood_tests": bluttests
    }

    antwort = requests.post(url, json=nutzlast, timeout=120)
    antwort.raise_for_status()
    return antwort.json()

# Anwendungsbeispiel
if __name__ == "__main__":
    tests = [
        {
            "lab_date": "2024-06-15",
            "parameters": [
                {"short_name": "HGB", "result": 12.2, "unit": "g/dL"},
                {"short_name": "CHOL", "result": 235, "unit": "mg/dL"},
                {"short_name": "LDL", "result": 155, "unit": "mg/dL"}
            ]
        },
        {
            "lab_date": "2024-12-15",
            "parameters": [
                {"short_name": "HGB", "result": 14.5, "unit": "g/dL"},
                {"short_name": "CHOL", "result": 185, "unit": "mg/dL"},
                {"short_name": "LDL", "result": 98, "unit": "mg/dL"}
            ]
        }
    ]

    ergebnis = bluttests_vergleichen("ihr_benutzername", "ihr_passwort", tests)

    print(f"Gesamttrend: {ergebnis['data']['comparison_summary']['overall_trend']}")
    for param in ergebnis['data']['parameter_analysis']:
        print(f"{param['parameter_name']}: {param['trend_assessment']}")

Antwortfelder-Referenz

FeldTypBeschreibung
comparison_idstringEindeutige Kennung für diesen Vergleich (Format: CMP-XXXXXXXX)
comparison_summaryobjectÜbersicht: key_findings, overall_trend, Berichtsdaten, time_interval
parameter_analysisarrayDetaillierte Analyse pro Parameter mit Änderungstyp und klinischer Bedeutung
health_assessmentobjectBesorgnisbereiche, Verbesserungen, positive Entwicklungen, Risikofaktoren
recommendationsobjectFolgeuntersuchungen, sofortige Maßnahmen, Lebensstiländerungen, Fachärztüberweisungen
detailed_interpretationobjectKI-narrative Abschnitte mit Zusammenfassung und klinischen Empfehlungen

parameter_analysis Objektstruktur

FeldTypBeschreibung
parameter_namestringParametername
report1_valuestringWert aus erstem Bericht mit Einheit
report2_valuestringWert aus zweitem Bericht mit Einheit
change_typestringincreased, decreased oder stable
change_magnitudestringsignificant, moderate oder minor
clinical_significancestringKI-Erklärung der Bedeutung der Änderung
trend_assessmentstringpositive, negative oder neutral

Beispielantwort

{
  "api_version": "1.0.0",
  "status": "success",
  "message": "Bluttestvergleich erfolgreich abgeschlossen",
  "timestamp": "2025-12-22T01:12:43.057537Z",
  "data": {
    "comparison_id": "CMP-F4ACEE52",
    "tests_compared": 2,
    "date_range": {
      "earliest": "2024-06-15",
      "latest": "2024-12-15",
      "span_days": 183
    },
    "comparison_summary": {
      "overall_trend": "verbessert",
      "report1_date": "2024-06-15",
      "report2_date": "2024-12-15",
      "time_interval": "183 Tage zwischen Berichten",
      "key_findings": [
        "Hämoglobin- und RBC-Werte normalisiert, was auf Behebung der Anämie hinweist",
        "Glukose und HbA1c verbessert auf Normalbereich",
        "Lipidprofil verbessert mit normalisierten Cholesterinwerten"
      ]
    },
    "parameter_analysis": [
      {
        "parameter_name": "Hämoglobin",
        "report1_value": "12,2 g/dL",
        "report2_value": "14,5 g/dL",
        "change_type": "increased",
        "change_magnitude": "significant",
        "clinical_significance": "Verbesserung von Anämie zu normalen Hämoglobinwerten",
        "trend_assessment": "positive"
      },
      {
        "parameter_name": "LDL-Cholesterin",
        "report1_value": "155 mg/dL",
        "report2_value": "98 mg/dL",
        "change_type": "decreased",
        "change_magnitude": "significant",
        "clinical_significance": "LDL nahe optimalem Bereich, reduziert Atheroskleroserisiko",
        "trend_assessment": "positive"
      }
    ],
    "health_assessment": {
      "overall_health_trend": "verbessert",
      "areas_of_improvement": [
        "Anämiekorrektur",
        "Glykämische Kontrolle",
        "Lipidprofil-Normalisierung"
      ],
      "areas_of_concern": [],
      "positive_developments": [
        "Behebung der Anämie",
        "Normale Glukose und HbA1c",
        "Verbessertes kardiovaskuläres Risikoprofil"
      ]
    },
    "recommendations": {
      "immediate_actions": [
        "Aktuelle Supplementierung für Eisen und Vitamin D fortsetzen"
      ],
      "follow_up_tests": [
        "Blutbild und Eisenstudien in 3 Monaten wiederholen",
        "Nüchternglukose und HbA1c vierteljährlich überwachen"
      ],
      "lifestyle_modifications": [
        "Herzgesunde Ernährung mit wenig gesättigten Fetten"
      ],
      "monitoring_frequency": "3 Monate"
    },
    "summary": {
      "improved_parameters": 13,
      "stable_parameters": 0,
      "worsened_parameters": 0,
      "overall_trend": "verbessert"
    },
    "sandbox_mode": false
  }
}
Antwort-Schlüsselwörter

Antwortfelder verwenden standardisierte Werte: overall_trend und trend_assessment (siehe Trendbewertung), change_type (increased, decreased, stable).

Schlüsselwort-Referenz

Vollständige Referenz für alle Eingabeschlüsselwerte, die in Kantesti API-Endpunkten verwendet werden. Verwenden Sie diese exakten Werte bei API-Anfragen.

analysis_type Trendanalyse-API

Gibt den Typ der durchzuführenden Trendanalyse an.

WertStandardBeschreibung
comprehensive✓Vollständige Analyse mit Statistiken, Diagrammen und KI-Interpretation
statisticalNur statistische Analyse
summaryNur Zusammenfassung auf hoher Ebene

health_goals Ernährungs-API

Gesundheitsziele für personalisierte Ernährungsempfehlungen. Mehrere Werte können als Array bereitgestellt werden.

WertBeschreibung
maintainAktuelle Gesundheit beibehalten (Standard)
improve_energyFokus auf Energieniveau
weight_managementGesundes Gewichtsmanagement
heart_healthKardiovaskuläre Gesundheit
immune_supportUnterstützung des Immunsystems
digestive_healthVerdauungsgesundheit
bone_healthKnochengesundheit
mental_clarityKognitive Funktion

dietary_restrictions Ernährungs-API

Ernährungseinschränkungen und Allergien. Mehrere Werte können als Array bereitgestellt werden. Freitext wird auch für benutzerdefinierte Einschränkungen akzeptiert.

WertBeschreibung
low_sodiumReduzierte Natriumaufnahme
low_sugarReduzierte Zuckeraufnahme
low_fatReduzierte Fettaufnahme
gluten_freeKein Gluten
dairy_freeKeine Milchprodukte
nut_freeKeine Nüsse
soy_freeKein Soja
egg_freeKeine Eier
halalHalal-konform
kosherKoscher-konform
Hinweis

Freitext wird auch für benutzerdefinierte Ernährungseinschränkungen akzeptiert, die oben nicht aufgeführt sind.

dietary_preferences Ernährungs-API

Ernährungslebensstil-Präferenzen für die Mahlzeitenplanung.

WertBeschreibung
omnivoreKeine Einschränkungen (Standard)
vegetarianKein Fleisch
veganKeine tierischen Produkte
pescatarianVegetarisch + Fisch
ketoKetogene Ernährung
paleoPaläolithische Ernährung
mediterraneanMediterrane Ernährung

Der Plan hält dietary_preferences, dietary_restrictions und allergies in jedem Abschnitt ein: Mahlzeiten, empfohlene Lebensmittel und Nahrungsergänzungsmittel (vegetarisch: kein Fleisch, kein Fisch, keine Leber, kein Fischöl; Omega-3 aus Algenöl, Leinsamen oder Walnüssen).

activity_level Ernährungs-API

Körperliches Aktivitätsniveau für Kalorien- und Nährstoffberechnungen.

WertBeschreibung
sedentaryWenig oder keine Bewegung
lightLeichte Bewegung 1-3 Tage/Woche
moderateModerate Bewegung 3-5 Tage/Woche (Standard)
activeIntensive Bewegung 6-7 Tage/Woche
very_activeSehr intensive Bewegung oder körperlicher Beruf

meal_frequency Ernährungs-API

Die Mahlzeiten, die jeder Tag des Plans hat, und keine anderen. Die Antwort listet sie in nutrition_plan.metadata.meal_slots auf. Die Sandbox antwortet mit denselben Mahlzeiten, sodass Sie jede Option testen können, ohne das API-Kontingent zu verbrauchen.

WertMahlzeiten jedes Tages
1dinner
2lunch, dinner
3breakfast, lunch, dinner
4breakfast, lunch, afternoon_snack, dinner
5 oder mehrbreakfast, morning_snack, lunch, afternoon_snack, dinner (Standard)
"2 meals + 1 snack", "3 meals and 2 snacks"Die angegebenen Mahlzeiten und Snacks (höchstens 3 Mahlzeiten und 2 Snacks)
"intermittent", "16:8"lunch, afternoon_snack, dinner, alle zwischen 12:00 und 20:00 Uhr
["breakfast", "dinner"]Genau die aufgeführten Mahlzeiten

budget Ernährungs-API

Lebensmittelbudget des Ernährungsplans: ein Niveau oder ein Betrag. Bei einem Betrag ist jedes cost_estimate in dessen Währung angegeben, und die Mahlzeiten jedes Tages bleiben innerhalb dieses Betrags.

WertBeschreibung
lowBudgetbewusste Optionen
moderateAusgewogene Optionen (Standard)
highPremium-Optionen
"10-20 EUR/day", "€15 a day", "100 EUR per week"Ein Betrag pro Tag, Woche oder Monat mit seiner Währung (EUR, USD, GBP, TRY, ... oder € $ £ ₺)
{"min": 10, "max": 20, "currency": "EUR"}Derselbe Betrag als Objekt (optional "period": "day", "week" oder "month")

gender Alle APIs

Patientengeschlecht für personalisierte Referenzbereiche und Empfehlungen.

WertBeschreibung
maleMännlicher Patient
femaleWeiblicher Patient
otherAndere oder nicht angegeben

Ausgabe-Schlüsselwörter

Die folgenden Schlüsselwörter erscheinen in API-Antworten. Das Verständnis dieser Werte hilft Ihnen, Ergebnisse korrekt zu interpretieren und anzuzeigen.

evaluation Bluttest- & Vergleichs-APIs

Parameterbewertungsstatus, der angibt, wie das Ergebnis im Vergleich zu Referenzbereichen steht.

WertBeschreibung
normalInnerhalb des normalen Referenzbereichs
lowUnter dem Normalbereich
highÜber dem Normalbereich
critical_lowKritisch niedrig (sofortige Aufmerksamkeit erforderlich)
critical_highKritisch hoch (sofortige Aufmerksamkeit erforderlich)
borderline_lowLeicht unter dem Normalbereich
borderline_highLeicht über dem Normalbereich

Was die Bluttest-Analyse-API je type zurückgibt:

WertZeilentypAnzeigen als
optimal, normalrangeNormal
slightly_low, slightly_highrangeGrenzwertig (außerhalb des Normalbereichs, innerhalb des äußeren Bereichs)
low, highrangeAuffällig
goodbinaryNormal (z. B. „Negativ“, wo negativ erwartet wird)
badbinaryAuffällig (z. B. „Positiv“, wo negativ erwartet wird)
UnknownbeideNicht bewertet (kein Ergebnis oder keine Referenz zur Bewertung) — weder normal noch auffällig

Referenzbereiche Bluttest- & Vergleichs-APIs

Jeder range-Marker hat drei ineinanderliegende Bereiche, vom engsten zum weitesten. Zeigen Sie jeden mit Bezeichnung und Einheit an (z. B. Optimal: 0.0 – 0.51 %) und markieren Sie mit evaluation den Bereich, in dem das Ergebnis liegt. Blenden Sie einen Bereich aus, dessen Felder null sind; binary-Zeilen haben keine Bereiche.

Anzuzeigende BezeichnungFelderDas Ergebnis liegt hier, wenn evaluation ist
Optimalrange_optimal_min – range_optimal_maxoptimal
Normal (Referenzbereich)range_normal_min – range_normal_maxnormal
Grenzbereichrange_min – range_maxslightly_low, slightly_high (zwischen Normalbereich und dieser Grenze: grenzwertig)
Außerhalb des Grenzbereichs—low, high (auffällig)

Beispiel: Ein Ergebnis von 0.2 % mit Optimal 0.0 – 0.51 %, Normal 0.0 – 0.6 % und Grenzbereich 0.0 – 0.9 % liegt im Optimalbereich (evaluation: optimal).

trend_assessment Vergleichs- & Trend-APIs

Gesamtbewertung der Parametertrends zwischen Tests.

WertBeschreibung
positiveVerbessert (bewegt sich zum Normalbereich)
negativeVerschlechtert (entfernt sich vom Normalbereich)
stableRelativ unverändert zwischen Tests
improvingAllgemeiner Verbesserungstrend
worseningAllgemeiner Verschlechterungstrend

trend_direction Trendanalyse-API

Richtung der Parameterwertänderungen über die Zeit.

WertBeschreibung
upwardWerte steigen über die Zeit
downwardWerte sinken über die Zeit
stableMinimale Änderung über die Zeit

trend_strength Trendanalyse-API

Stärke des beobachteten Trends.

WertBeschreibung
strong>15% Änderung zwischen Perioden
moderate5-15% Änderung zwischen Perioden
mild<5% Änderung zwischen Perioden

health_score / score_interpretation Gesundheitswert-API

Gesamtinterpretation des Gesundheitswertes basierend auf analysierten Parametern.

WertBeschreibung
excellentAlle Marker im optimalen Bereich
goodDie meisten Marker im Normalbereich
fairEinige Marker erfordern Aufmerksamkeit
poorMehrere Marker erfordern Aufmerksamkeit

Hilfs-Endpunkte

GET /api/info

Gibt API-Plattforminformationen, verfügbare Versionen und unterstützte Funktionen zurück. Keine Authentifizierung erforderlich.

Beispielantwort

{
  "platform": "Kantesti Bluttest-Analyse-API",
  "versions": ["v6", "v8", "v9", "v10", "v11"],
  "latest_version": "v11",
  "supported_languages": 100,
  "documentation": "https://www.kantesti.net/docs/",
  "status": "operational"
}
GET /api/health

Gesundheitsprüfungs-Endpunkt für Überwachung. Gibt Servicestatus zurück. Keine Authentifizierung erforderlich.

Beispielantwort

{
  "status": "healthy",
  "timestamp": "2025-12-22T10:30:00Z",
  "uptime": "99.99%"
}
POST /api/quota/check

Überprüfen Sie Ihr verbleibendes API-Kontingent. Erfordert Authentifizierung.

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/quota/check" \
  -H "Content-Type: application/json" \
  -d '{"username": "IHR_BENUTZERNAME", "password": "IHR_PASSWORT"}'

Beispielantwort

{
  "status": "success",
  "quota": {
    "remaining": 847,
    "total": 1000,
    "reset_date": "2026-01-01",
    "plan": "professional"
  }
}

Family Health Risikobewertung API

Veröffentlicht: 23. März 2026

Die Kantesti Family Health Risikobewertung API ist eine KI-gestützte Plattform zur Analyse hereditärer Gesundheitsrisiken. Sie erstellt umfassende Familiengesundheitsberichte durch Analyse der familiären Krankengeschichte, Gesundheitsprofile der Patienten und Bluttestdaten zur Identifizierung erblicher Risikofaktoren und personalisierten Vorsorgeempfehlungen.

100+
Sprachen
9
Erkrankungskategorien
14
Familienbeziehungen

KI-gestützte hereditäre Risikoanalyse

Die Family Health API verwendet fortschrittliche KI-Modelle, um die familiäre Krankengeschichte mit Bluttestdaten des Patienten abzugleichen und erbliche Risikomuster in den Bereichen Herz-Kreislauf, Stoffwechsel, Krebs, Neurologie, Atemwege, Autoimmun, Genetik, psychische Gesundheit und Nieren/Leber zu identifizieren. Berichte umfassen Risikobewertung, präventive Vorsorgepläne, genetische Screening-Empfehlungen und Lifestyle-Ratschläge — alles lokalisiert in über 100 Sprachen.

Hauptfunktionen
  • Hereditäre Risikoanalyse — Klassifizierung in hohes, mittleres und niedriges Risiko mit detaillierter Bewertung
  • Stammbaum-Analyse — Risikokartierung der väterlichen und mütterlichen Linie mit kombinierten Risikofaktoren
  • Bluttest-Korrelation — Abgleich der Familiengeschichte mit Bluttestparametern
  • Genetische Screening-Empfehlungen — Personalisierte Vorschläge für Gentests
  • Präventiver Vorsorgeplan — Altersgerechte Screening-Pläne basierend auf Familienrisiko
  • Medikamentenanalyse — Bewertung von Wechselwirkungen und erblichen Empfindlichkeiten
  • 100+ Sprachunterstützung — Vollständige Berichtslokalisierung in über 100 Sprachen
  • Sandbox-Modus — Integration testen ohne Credits zu verbrauchen
  • 9 Erkrankungskategorien — Herz-Kreislauf, Stoffwechsel, Krebs, Neurologie, Atemwege, Autoimmun, Genetik, Psychische Gesundheit, Niere/Leber
  • 14 Familienbeziehungen — Vater, Mutter, Geschwister, Großeltern, Onkel, Tanten, Kinder

Endpunkte-Übersicht

EndpunktMethodeBeschreibungAuth
/api/v1/family-health/analyze POST Umfassenden Familiengesundheits-Risikobewertungsbericht erstellen Erforderlich (1 Credit)
/api/v1/family-health/validate POST Anfragedaten vor der Analyse validieren (kein Kontingentverbrauch) Erforderlich (Kostenlos)
/api/v1/family-health/supported-languages GET Alle 100+ unterstützten Sprachen auflisten Nicht erforderlich
/api/v1/family-health/condition-categories GET Alle medizinischen Erkrankungskategorien auflisten Nicht erforderlich
/api/v1/family-health/family-relations GET Alle unterstützten Familienbeziehungstypen auflisten Nicht erforderlich
/api/v1/family-health/sandbox/analyze POST Sandbox-Test mit Beispieldaten (kein Kontingentverbrauch) Erforderlich (Kostenlos)
POST /api/v1/family-health/analyze Veröffentlicht 23.03.2026

Erstellen Sie einen umfassenden KI-gestützten Familiengesundheits-Risikobewertungsbericht. Analysiert die familiäre Krankengeschichte, Gesundheitsprofile und Bluttestdaten zur Identifizierung erblicher Risikofaktoren mit personalisierten Vorsorgeempfehlungen.

Anfrageparameter (JSON Body)

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername
passwordstringJaIhr API-Passwort
patient_dataobjectJaPatienteninformationen (siehe unten)
family_membersarrayJa*Array von Familienmitglieder-Objekten (max. 100). *Erforderlich wenn health_profile fehlt
health_profileobjectJa*Gesundheitsprofil des Patienten. *Erforderlich wenn family_members fehlt
blood_test_dataarrayNeinArray von Bluttestdaten für Korrelationsanalyse
languagestringNeinAntwortsprache (Standard: en). 100+ Sprachen unterstützt

patient_data Objekt

FeldTypErforderlichBeschreibung
namestringNeinVollständiger Name des Patienten
ageintegerJaAlter des Patienten in Jahren
genderstringJamale, female oder other
dobstringNeinGeburtsdatum (JJJJ-MM-TT)

family_members Array-Element

FeldTypErforderlichBeschreibung
relationstringJaBeziehungstyp: father, mother, brother, sister, paternal_grandfather, paternal_grandmother, maternal_grandfather, maternal_grandmother, paternal_uncle, paternal_aunt, maternal_uncle, maternal_aunt, son, daughter
ageintegerNeinAlter des Familienmitglieds
conditionsarrayNeinArray bekannter Erkrankungen (Strings)
deceasedbooleanNeinOb das Familienmitglied verstorben ist
age_at_deathintegerNeinAlter beim Tod (falls verstorben)
cause_of_deathstringNeinTodesursache (falls verstorben)

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "IHR_BENUTZERNAME",
    "password": "IHR_PASSWORT",
    "patient_data": {
      "name": "Anna Müller",
      "age": 42,
      "gender": "female"
    },
    "family_members": [
      {"relation": "father", "age": 70, "conditions": ["hypertension", "type2_diabetes"]},
      {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]}
    ],
    "language": "de"
  }'

Python-Beispiel

import requests

url = "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze"
payload = {
    "username": "IHR_BENUTZERNAME",
    "password": "IHR_PASSWORT",
    "patient_data": {"name": "Anna Müller", "age": 42, "gender": "female"},
    "family_members": [
        {"relation": "father", "age": 70, "conditions": ["hypertension", "type2_diabetes"]},
        {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]}
    ],
    "language": "de"
}
response = requests.post(url, json=payload, timeout=120)
print(response.json())

Beispielantwort

{
  "status": "success",
  "data": {
    "report_data": {
      "report_title": "Familiengesundheits-Risikobewertungsbericht",
      "executive_summary": "Basierend auf der Analyse der familiären Krankengeschichte...",
      "hereditary_risk_analysis": {
        "high_risk": [{"condition": "Herz-Kreislauf-Erkrankung", "risk_score": 75}],
        "moderate_risk": [{"condition": "Typ-2-Diabetes", "risk_score": 60}],
        "low_risk": []
      },
      "genetic_screening_recommendations": ["BRCA1/BRCA2 Gentest", "Kardiovaskuläres Genpanel"],
      "preventive_care_timeline": [
        {"age_range": "40-45", "screenings": ["Jährliche Mammographie", "Belastungs-EKG"]}
      ]
    }
  },
  "message": "Familiengesundheits-Risikobewertung erfolgreich abgeschlossen",
  "timestamp": "2026-03-23T10:30:00Z",
  "api_version": "1.0.0"
}

Family Health API Fehlercodes

FehlercodeHTTP-StatusBeschreibung
AUTH_1001401Fehlende Authentifizierungsdaten
AUTH_1002401Ungültiger Benutzername oder Passwort
QUOTA_1101403Unzureichendes API-Kontingent
VAL_2001400Pflichtfeld fehlt
VAL_2003400Nicht unterstützter Sprachcode
VAL_2006400Array überschreitet maximale Größe (max. 100 Familienmitglieder)
VAL_2007400Ungültige Patientendatenstruktur
PROC_3001500Berichterstellung fehlgeschlagen
PROC_3003500KI-Verarbeitungsfehler
SRV_5001500Interner Serverfehler

Family Health Sandbox-Endpunkt

Testen Sie Ihre Family Health API-Integration ohne Credits zu verbrauchen. Der Sandbox-Endpunkt liefert realistische Beispielberichtsdaten.

APISandbox-EndpunktBeschreibung
Family Health Analyze/api/v1/family-health/sandbox/analyzeGibt Beispieldaten für Familiengesundheits-Risikobewertung zurück

Referenz-Endpunkte (Keine Auth erforderlich)

Diese Endpunkte liefern Referenzdaten zum Aufbau Ihrer Integration. Keine Authentifizierung erforderlich.

EndpunktMethodeBeschreibung
/api/v1/family-health/supported-languages GET Gibt alle 100+ unterstützten Sprachcodes und Namen zurück
/api/v1/family-health/condition-categories GET Gibt alle 9 Erkrankungskategorien mit ihren Erkrankungen zurück
/api/v1/family-health/family-relations GET Gibt alle 14 unterstützten Familienbeziehungstypen zurück

Body Map API

Veröffentlicht: 18. September 2026

Die Kantesti Body Map API übersetzt ein Laborpanel in Anatomie. Jedes auffällige und grenzwertige Ergebnis wird einer von 13 Körperregionen zugeordnet, und die API liefert beides — die Legende mit Region, Schweregrad und den verantwortlichen Markern sowie eine URL zu einer passenden Körperillustration.

13
Körperregionen
39
Eingabesprachen
0
Modellaufrufe im Standardfall

Standardmäßig deterministisch

Markernamen werden gegen mehrsprachige Alias-Tabellen für 39 Berichtssprachen abgeglichen, einschließlich nicht-lateinischer Schriften — Sie senden die Analytnamen genau so, wie Ihr Labor sie gedruckt hat, in der Sprache, in der es sie gedruckt hat. Es wird kein Modell aufgerufen und keine Illustration erzeugt, solange Sie es nicht anfordern; die Standardanfrage verursacht daher keine KI-Kosten und liefert für dasselbe Panel jedes Mal dieselbe Antwort.

Hauptfunktionen
  • 13 anatomische Regionen — Gehirn & Nerven, Schilddrüse, Herz & Gefäße, Leber, Bauchspeicheldrüse, Nebennieren, Nieren, Darm, Fortpflanzung, Blut, Immunsystem, Knochen, Muskeln
  • Schweregrade — Stufe 2 für Werte außerhalb des Referenzbereichs, Stufe 1 für grenzwertige Werte, sodass eine Legende ohne weitere Logik eingefärbt werden kann
  • Marker-Zuordnung — Jede Region listet die Marker auf, die sie ausgelöst haben, die auffälligsten zuerst
  • Sprachfreie Ausgabe — Regionsschlüssel und Ihre eigenen Markernamen; die Illustration enthält keinen Text, sodass ein Bild für jede Sprache genügt
  • Signierte Illustrations-URLs — Jede Illustrations-URL trägt eine HMAC-Signatur, sodass niemand sie erraten oder fälschen kann
  • Ehrliche Leerzustände — Ein unauffälliges Panel liefert den gemeinsamen "alles in Ordnung"-Körper; ein Panel, dessen markierte Werte nicht zugeordnet werden können, liefert einen Fehler statt eines irreführend grünen Körpers
  • Deterministischer Modus — Standard. Kein Modellaufruf, kein Bild-Credit, reproduzierbare Ausgabe
  • Sandbox-Modus — Integration testen ohne Credits zu verbrauchen

Endpunkte-Übersicht

EndpunktMethodeBeschreibungAuth
/api/v1/body-map/analyze POST Körperkarte aus einem Laborpanel erstellen Erforderlich (1 Credit)
/api/v1/body-map/validate POST Anfragedaten validieren und sehen, welche Marker erkannt werden (kein Kontingentverbrauch) Erforderlich (Kostenlos)
/api/v1/body-map/sandbox POST Sandbox-Test mit Beispieldaten (kein Kontingentverbrauch) Erforderlich (Kostenlos)
/api/v1/body-map/regions GET Alle 13 Körperregionen und die Schweregrade auflisten Nicht erforderlich
/api/v1/body-map/info GET Metadaten zu Funktionsumfang, Limits und Authentifizierung Nicht erforderlich
POST /api/v1/body-map/analyze Veröffentlicht 18.09.2026

Bildet jedes markierte Ergebnis eines Laborpanels auf den Körper ab. Verbraucht 1 Credit pro erfolgreicher Anfrage. Eine Anfrage, die die Validierung nicht besteht oder deren markierte Marker nicht zugeordnet werden können, wird nicht berechnet.

Anfrageparameter

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername
passwordstringJaIhr API-Passwort
parametersarrayJaLaborergebnis-Objekte. Max. 500. Jedes benötigt einen Analytnamen und eine evaluation.
interpretationarrayNeinKlinische Interpretation, wird nur als Kontext verwendet, wenn ai_assist aktiviert ist
ai_assistbooleanNeinDas Modell Marker zuordnen lassen, die die Alias-Tabellen nicht erkennen (Standard: false)
include_imagebooleanNeinDie gerenderte Illustration anfordern (Standard: false)
image_waitintegerNeinSekunden, die auf eine frisch erzeugte Illustration gewartet wird, 0-30 (Standard: 0)

Felder des Parameter-Objekts

FeldTypErforderlichBeschreibung
short_namestringJa*Analytname, wie ihn das Labor gedruckt hat. *Mindestens eines von short_name, long_name, name, parameter_name oder parameter ist erforderlich.
long_namestringNeinVollständiger Analytname; verbessert die Zuordnung von Abkürzungen
evaluationstringNeinEiner der Werte high, low, bad, slightly_high, slightly_low, normal. Nur markierte Werte erscheinen auf der Karte.
resultstring|numberNeinDer gemessene Wert; bestimmt die Rangfolge der gezeichneten Regionen
unitstringNeinEinheit des Ergebnisses, in beliebiger Schreibweise
range_normal_minnumberNeinUntere Grenze des Referenzbereichs
range_normal_maxnumberNeinObere Grenze des Referenzbereichs
categorystringNeinLaborkategorie; dient als Rückfalloption, wenn der Analytname unbekannt ist

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "IHR_BENUTZERNAME",
    "password": "IHR_PASSWORT",
    "parameters": [
      {"short_name": "ALT", "long_name": "Alanine aminotransferase", "result": "65", "unit": "U/L", "range_normal_min": 7, "range_normal_max": 45, "evaluation": "high"},
      {"short_name": "AST", "long_name": "Aspartate aminotransferase", "result": "48", "unit": "U/L", "range_normal_min": 8, "range_normal_max": 40, "evaluation": "slightly_high"},
      {"short_name": "TSH", "long_name": "Thyrotropin", "result": "6.2", "unit": "mIU/L", "range_normal_min": 0.4, "range_normal_max": 4.0, "evaluation": "high"}
    ]
  }'

Python-Beispiel

import requests

def koerperkarte_erstellen(parameter, benutzername, passwort, bild_einschliessen=False):
    """
    Auffällige Bluttestergebnisse auf den Körper abbilden.

    Args:
        parameter: Liste von Laborergebnis-Objekten
        benutzername: API-Benutzername
        passwort: API-Passwort
        bild_einschliessen: Gerenderte Illustration anfordern (verbraucht ein Bild-Credit)

    Returns:
        dict: Body-Map-Block mit Regionen, Legende und Illustrations-URLs
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze"

    antwort = requests.post(url, json={
        "username": benutzername,
        "password": passwort,
        "parameters": parameter,
        "include_image": bild_einschliessen,
    }, timeout=60)
    antwort.raise_for_status()
    return antwort.json()

# Anwendungsbeispiel
if __name__ == "__main__":
    ergebnis = koerperkarte_erstellen(
        parameter=[
            {"short_name": "ALT", "result": "65", "unit": "U/L",
             "range_normal_min": 7, "range_normal_max": 45, "evaluation": "high"},
            {"short_name": "TSH", "result": "6.2", "unit": "mIU/L",
             "range_normal_min": 0.4, "range_normal_max": 4.0, "evaluation": "high"},
        ],
        benutzername="ihr_benutzername",
        passwort="ihr_passwort",
    )

    body_map = ergebnis["data"]["body_map"]
    if ergebnis["data"]["all_clear"]:
        print("Alles unauffällig — nichts markiert.")
    for region in body_map["regions"]:
        schweregrad = "außerhalb des Referenzbereichs" if region["level"] == 2 else "grenzwertig"
        print(f"  {region['key']}: {schweregrad} ({', '.join(region['markers'])})")
    print(f"Illustration: {body_map['image_url'] or body_map['fallback_url']}")

Beispielantwort

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Body map generated successfully",
  "data": {
    "body_map": {
      "v": 4,
      "spec": "v4-thy2-liv2",
      "unmapped": 0,
      "image_url": "/static/body_maps/v4-thy2-liv2.webp",
      "fallback_url": "/body-map/v4-thy2-liv2.0123456789abcdef.webp",
      "regions": [
        {"key": "thyroid", "level": 2, "drawn": true, "markers": ["TSH"]},
        {"key": "liver", "level": 2, "drawn": true, "markers": ["ALT", "AST"]}
      ]
    },
    "engine_version": 4,
    "region_keys": ["brain_nerves", "thyroid", "heart_vessels", "liver", "pancreas", "adrenals", "kidneys", "gut", "reproductive", "blood", "immune", "bones", "muscles"],
    "mode": "deterministic",
    "all_clear": false
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Referenz der Antwortfelder

FeldTypBeschreibung
body_map.specstringKanonische Kennung für diese Kombination aus Regionen und Schweregraden. Identische Panels teilen sich eine Spec und damit auch eine zwischengespeicherte Illustration.
body_map.regions[].keystringEiner der 13 Regionsschlüssel
body_map.regions[].levelinteger2 = außerhalb des Referenzbereichs, 1 = grenzwertig
body_map.regions[].drawnbooleanOb diese Region auf der Illustration eingezeichnet wird. Die Legende listet immer alle Regionen auf; gezeichnet werden höchstens sechs.
body_map.regions[].markersarrayMarkernamen, die diese Region auf die Karte gebracht haben, die auffälligsten zuerst
body_map.unmappedintegerMarkierte Marker, die keiner Region zugeordnet werden konnten
body_map.image_urlstring|nullZwischengespeicherte Illustration. null, solange die Datei nicht existiert — weichen Sie auf fallback_url aus.
body_map.fallback_urlstringSignierte Erzeugungs-URL. Immer vorhanden. Antwortet mit 503 und Retry-After, solange die Illustration noch erzeugt wird.
all_clearbooleantrue, wenn nichts markiert wurde; dann gilt der gemeinsame "alles in Ordnung"-Körper
modestringdeterministic oder ai_assisted
Die Legende darstellen

Die Antwort ist bewusst sprachfrei: Sie enthält Regionsschlüssel und die Markernamen Ihres Labors. Übersetzen Sie die 13 Regionsschlüssel in Ihrem eigenen Client und stellen Sie die Legende über die Illustration — sollte das Bildmodell einmal das falsche Organ einfärben, stimmt die Legende daneben trotzdem.

POST /api/v1/body-map/validate Veröffentlicht 18.09.2026

Prüft die Anfragedaten, ohne die Analyse auszuführen, und meldet, welche Ihrer Analytnamen die Engine erkennt. Authentifizierung ist erforderlich; es wird kein Kontingent verbraucht, und der Endpunkt funktioniert auch bei einem Konto ohne verbleibende Credits.

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "IHR_BENUTZERNAME",
    "password": "IHR_PASSWORT",
    "parameters": [
      {"short_name": "ALT", "result": "65", "evaluation": "high"},
      {"short_name": "Unobtainium", "result": "9", "evaluation": "high"}
    ]
  }'

Beispielantwort

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Payload is valid",
  "data": {
    "valid": true,
    "errors": [],
    "parameter_count": 2,
    "flagged_count": 2,
    "recognised": [
      {"name": "ALT", "region": "liver", "level": 2}
    ],
    "unrecognised": [
      {"name": "Unobtainium", "region": null, "level": 2}
    ]
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Referenz-Endpunkte

Beide Referenz-Endpunkte sind ohne Authentifizierung und kostenlos nutzbar.

GET /api/v1/body-map/regions

Listet die 13 Körperregionen in kanonischer Reihenfolge zusammen mit den Schweregraden auf. Verwenden Sie ihn, um Ihre eigenen Legendenübersetzungen aufzubauen.

cURL-Beispiel

curl "https://app.aibloodtestinterpret.com/api/v1/body-map/regions"

Beispielantwort

{
  "status": "success",
  "data": {
    "regions": [
      {"key": "brain_nerves", "code": "brn", "order": 0},
      {"key": "thyroid", "code": "thy", "order": 1},
      {"key": "heart_vessels", "code": "hrt", "order": 2},
      {"key": "liver", "code": "liv", "order": 3}
    ],
    "region_keys": ["brain_nerves", "thyroid", "heart_vessels", "liver", "pancreas", "adrenals", "kidneys", "gut", "reproductive", "blood", "immune", "bones", "muscles"],
    "levels": {
      "0": "within range — not shown",
      "1": "borderline (slightly high / slightly low)",
      "2": "out of range (high / low / abnormal)"
    },
    "count": 13
  }
}
GET /api/v1/body-map/info

Metadaten zum Funktionsumfang: ob die Engine in dieser Installation aktiviert ist, die Anfragelimits, das Authentifizierungsverfahren und die vollständige Endpunktliste.

cURL-Beispiel

curl "https://app.aibloodtestinterpret.com/api/v1/body-map/info"

Sandbox

POST /api/v1/body-map/sandbox liefert eine Beispielantwort in genau der Form, die /analyze erzeugt, sodass ein gegen die Sandbox entwickelter Client unverändert gegen die Produktion funktioniert. Authentifizierung ist erforderlich, sodass der Aufruf zugleich Ihre Zugangsdaten prüft; es wird jedoch kein Kontingent verbraucht und keine Analyse durchgeführt.

FehlercodeHTTPBedeutung
AUTH_1001401Fehlende Authentifizierungsdaten
AUTH_1002401Ungültiger Benutzername oder ungültiges Passwort
AUTH_1004400Fehlerhafte Zugangsdaten (falscher Typ oder zu lang)
QUOTA_1101403Unzureichendes API-Kontingent
VAL_2001400parameters fehlt
VAL_2002400Ungültiges Datenformat
VAL_2005400parameters ist leer
VAL_2006400Mehr als 500 Parameter
VAL_2008400Eine Parameterzeile ist fehlerhaft oder ohne Namen
RES_4004422Es gibt markierte Ergebnisse, aber keines lässt sich einer Körperregion zuordnen
RES_4005503Die Body-Map-Engine ist in dieser Installation deaktiviert

Biologisches Blutalter API

Veröffentlicht: 18. September 2026

Die Kantesti Biologisches Blutalter API beantwortet eine Frage, die kein Referenzbereich beantworten kann: Wie alt wirkt dieses Blut? Sie berechnet das biologische Alter aus einem Routinepanel mit dem publizierten Levine-PhenoAge-Modell und leitet daneben bis zu 18 klinische Indizes ab — FIB-4, HOMA-IR, TyG, eGFR, AIP, NLR, Anionenlücke und mehr —, die ein Laborbericht nur selten ausweist.

9
PhenoAge-Marker
18
Abgeleitete Indizes
39
Eingabesprachen

Ein Wert auch aus einem unvollständigen Panel

PhenoAge benötigt neun Marker, und die meisten Panels enthalten weniger. Sind alle neun vorhanden, liefert die API die publizierte Formel unverändert. Andernfalls werden die fehlenden Eingaben aus Populationsmedianen ergänzt und die Antwort mit source: "partial" gekennzeichnet, sodass Sie stets wissen, was Sie erhalten haben. Beide Wege sind deterministisch: kein Modellaufruf, keine Zusatzkosten, für dasselbe Panel jedes Mal dieselbe Antwort.

Hauptfunktionen
  • Levine PhenoAge — Das publizierte Modell, unverändert berechnet, wenn alle neun Marker vorliegen
  • Graceful Degradation — Auch ein unvollständiges Panel liefert einen Wert, klar als solchen gekennzeichnet und mit Auflistung der fehlenden Marker
  • 18 klinische Indizes — FIB-4, De-Ritis-Quotient, A/G-Quotient, HOMA-IR, TyG, eAG, eGFR, Anionenlücke, Harnstoff/Kreatinin, Nicht-HDL, TG/HDL, AIP, Gesamtcholesterin/HDL, Remnant-Cholesterin, NLR, Mentzer-Index, Transferrinsättigung, korrigiertes Kalzium
  • Automatische Einheitenumrechnung — SI- und konventionelle Einheiten in beliebiger Schreibweise, mit Plausibilitätsprüfungen, die physiologisch unmögliche Werte zurückweisen
  • Mehrsprachiger Markerabgleich — Analytnamen in 39 Berichtssprachen einschließlich nicht-lateinischer Schriften; interne Schlüssel senden Sie nie
  • Deterministischer Modus — Standard. Kein Netzwerkaufruf, keine KI-Kosten, reproduzierbare Ausgabe
  • Optionale Modellebenen — Zeilenerkennung, eine verbesserte Schätzung und eine persönliche Notiz, jeweils hinter einem eigenen Schalter. Ein vollständiges PhenoAge aus neun Markern wird nie vom Modell überschrieben.
  • 100 Sprachen — Für die optionale persönliche Notiz
  • Sandbox-Modus — Integration testen ohne Credits zu verbrauchen

Endpunkte-Übersicht

EndpunktMethodeBeschreibungAuth
/api/v1/blood-age/analyze POST Biologisches Blutalter und abgeleitete klinische Indizes berechnen Erforderlich (1 Credit)
/api/v1/blood-age/validate POST Anfragedaten validieren und sehen, welche Marker das Panel liefert (kein Kontingentverbrauch) Erforderlich (Kostenlos)
/api/v1/blood-age/sandbox POST Sandbox-Test mit Beispieldaten (kein Kontingentverbrauch) Erforderlich (Kostenlos)
/api/v1/blood-age/biomarkers GET Die von der Engine gelesenen Marker und ihre Zieleinheiten auflisten Nicht erforderlich
/api/v1/blood-age/info GET Metadaten zu Funktionsumfang, Limits und Authentifizierung Nicht erforderlich
POST /api/v1/blood-age/analyze Veröffentlicht 18.09.2026

Berechnet das biologische Blutalter und die abgeleiteten Indizes aus einem Laborpanel. Verbraucht 1 Credit pro erfolgreicher Anfrage. Eine Anfrage, die die Validierung nicht besteht oder deren Panel nichts Berechenbares enthält, wird nicht berechnet.

Anfrageparameter

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername
passwordstringJaIhr API-Passwort
parametersarrayJaLaborergebnis-Objekte. Max. 500. Jedes benötigt einen Analytnamen und ein Ergebnis.
metadataobjectNeinBerichtskopf. Dringend empfohlen: PhenoAge enthält einen Term für das chronologische Alter. Gelesen werden patient_age, patient_sex, dob, lab_date.
patientobjectNein{"age": 42, "gender": "female"} — wird verwendet, wenn die Metadaten diese Angaben nicht enthalten
interpretationarrayNeinKlinische Interpretation, dient ausschließlich als Modellkontext
languagestringNeinSprache für die optionale persönliche Notiz (Standard: en). Siehe unterstützte Sprachen.
ai_assistbooleanNeinDas Modell ungewöhnliche Analytnamen erkennen lassen (Standard: false)
ai_estimatebooleanNeinDas Modell ein unvollständiges Alter verbessern lassen (Standard: false)
ai_notebooleanNeinEine persönliche Notiz in language anfordern (Standard: false)

Die neun PhenoAge-Marker

Senden Sie sie unter den Namen, die Ihr Labor gedruckt hat — die Zuordnung erfolgt über den Namen in einer der 39 unterstützten Berichtssprachen, und Einheiten werden automatisch umgerechnet.

MarkerTypischer NameZieleinheit
albuminAlbuming/L
creatinineKreatininµmol/L
glucoseGlukose / Nüchternblutzuckermmol/L
crpC-reaktives Proteinmg/L
lymphLymphozyten%
mcvMittleres korpuskuläres VolumenfL
rdwErythrozytenverteilungsbreite%
alpAlkalische PhosphataseU/L
wbcLeukozytenzahl10⁹/L

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "IHR_BENUTZERNAME",
    "password": "IHR_PASSWORT",
    "metadata": {"patient_age": "40", "patient_sex": "Male", "lab_date": "2026-09-11"},
    "parameters": [
      {"short_name": "Albumin", "result": 4.4, "unit": "g/dL", "range_normal_min": 3.5, "range_normal_max": 5.0},
      {"short_name": "Creatinine", "result": 0.9, "unit": "mg/dL", "range_normal_min": 0.6, "range_normal_max": 1.2},
      {"short_name": "Glucose", "result": 90, "unit": "mg/dL", "range_normal_min": 70, "range_normal_max": 99},
      {"short_name": "CRP", "result": 1.0, "unit": "mg/L", "range_normal_min": 0, "range_normal_max": 5},
      {"short_name": "Lymphocytes", "result": 30, "unit": "%", "range_normal_min": 20, "range_normal_max": 40},
      {"short_name": "MCV", "result": 90, "unit": "fL", "range_normal_min": 80, "range_normal_max": 100},
      {"short_name": "RDW", "result": 13, "unit": "%", "range_normal_min": 11.5, "range_normal_max": 14.5},
      {"short_name": "ALP", "result": 70, "unit": "U/L", "range_normal_min": 40, "range_normal_max": 130},
      {"short_name": "WBC", "result": 6.0, "unit": "10^9/L", "range_normal_min": 4, "range_normal_max": 11}
    ]
  }'

Python-Beispiel

import requests

def biologisches_blutalter(parameter, metadaten, benutzername, passwort):
    """
    Biologisches Blutalter aus einem Routine-Blutpanel berechnen.

    Args:
        parameter: Liste von Laborergebnis-Objekten
        metadaten: Berichtskopf mit patient_age und patient_sex
        benutzername: API-Benutzername
        passwort: API-Passwort

    Returns:
        dict: Blutalter-Block, abgeleitete Indizes und eine flache Zusammenfassung
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze"

    antwort = requests.post(url, json={
        "username": benutzername,
        "password": passwort,
        "parameters": parameter,
        "metadata": metadaten,
    }, timeout=60)
    antwort.raise_for_status()
    return antwort.json()

# Anwendungsbeispiel
if __name__ == "__main__":
    ergebnis = biologisches_blutalter(
        parameter=[
            {"short_name": "Albumin", "result": 4.4, "unit": "g/dL"},
            {"short_name": "Creatinine", "result": 0.9, "unit": "mg/dL"},
            {"short_name": "Glucose", "result": 90, "unit": "mg/dL"},
            {"short_name": "CRP", "result": 1.0, "unit": "mg/L"},
            {"short_name": "Lymphocytes", "result": 30, "unit": "%"},
            {"short_name": "MCV", "result": 90, "unit": "fL"},
            {"short_name": "RDW", "result": 13, "unit": "%"},
            {"short_name": "ALP", "result": 70, "unit": "U/L"},
            {"short_name": "WBC", "result": 6.0, "unit": "10^9/L"},
        ],
        metadaten={"patient_age": "40", "patient_sex": "Male"},
        benutzername="ihr_benutzername",
        passwort="ihr_passwort",
    )

    zusammenfassung = ergebnis["data"]["summary"]
    if zusammenfassung["status"] != "ok":
        print(f"Kein Alter berechnet: {zusammenfassung['status']}")
    else:
        print(f"Chronologisch: {zusammenfassung['chronological_age']}")
        print(f"Biologisch:    {zusammenfassung['biological_age']} ({zusammenfassung['source']})")
        print(f"Differenz:     {zusammenfassung['delta_years']:+} Jahre")

    for index in ergebnis["data"]["blood_age"]["indices"]:
        print(f"  {index['key']}: {index['value']} {index['unit']} [{index['band']}]")

Beispielantwort

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Biological blood age computed successfully",
  "data": {
    "blood_age": {
      "version": 1,
      "age": {
        "status": "ok",
        "source": "formula",
        "chrono": 40,
        "pheno": 35.1,
        "delta": -4.9,
        "sex": "m",
        "found": ["albumin", "creatinine", "glucose", "crp", "lymph", "mcv", "rdw", "alp", "wbc"],
        "missing": [],
        "labels": {"albumin": "Albumin", "creatinine": "Creatinine", "glucose": "Glucose"},
        "inputs": {"albumin": 44.0, "creatinine": 79.56, "glucose": 5.0}
      },
      "indices": [
        {"key": "fib4", "group": "liver", "value": 1.12, "unit": "", "band": "ok", "from": ["AST", "ALT", "PLT"]},
        {"key": "egfr", "group": "kidneys", "value": 98.0, "unit": "mL/min/1.73m2", "band": "ok", "from": ["Creatinine"]},
        {"key": "nlr", "group": "immune", "value": 1.8, "unit": "", "band": "ok", "from": ["Neutrophils", "Lymphocytes"]}
      ]
    },
    "engine_version": 1,
    "mode": "deterministic",
    "summary": {
      "status": "ok",
      "source": "formula",
      "chronological_age": 40,
      "biological_age": 35.1,
      "delta_years": -4.9,
      "sex": "m",
      "markers_found": 9,
      "markers_missing": [],
      "indices_count": 3
    }
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Referenz der Antwortfelder

FeldTypBeschreibung
summary.statusstringok, missing_age, missing_markers, needs_markers oder unavailable
summary.sourcestringformula (alle neun Marker), partial (Mediane ergänzt) oder ai (Modellschätzung, nur mit ai_estimate)
summary.chronological_ageinteger|nullAlter aus den Metadaten oder dem patient-Objekt
summary.biological_agenumber|nullDas berechnete Blutalter in Jahren
summary.delta_yearsnumber|nullBiologisch minus chronologisch. Negativ bedeutet jünger als der Kalender.
summary.markers_missingarrayWelche der neun PhenoAge-Marker das Panel nicht geliefert hat
blood_age.age.inputsobjectDie tatsächlich verwendeten umgerechneten Werte in den Zieleinheiten
blood_age.age.labelsobjectDer Name Ihres Labors für jeden von der Engine zugeordneten Marker
blood_age.indices[].bandstringok, borderline, high, low oder info
blood_age.indices[].fromarrayDie Laborzeilen, aus denen dieser Index abgeleitet wurde
modestringdeterministic oder ai_assisted
Chronologisches Alter angeben

PhenoAge enthält einen Altersterm; ohne chronologisches Alter kommt die Antwort daher mit status: "missing_age" und ohne Wert zurück. Senden Sie es in metadata.patient_age, in patient.age oder als Geburtsdatum in patient.dob. Die Formel gilt für ein Alter zwischen 18 und 100 Jahren.

POST /api/v1/blood-age/validate Veröffentlicht 18.09.2026

Prüft die Anfragedaten, ohne die Analyse auszuführen, und meldet, welche der neun PhenoAge-Marker Ihr Panel liefert und ob ein chronologisches Alter gelesen werden konnte — die beiden Angaben, die darüber entscheiden, ob Sie die vollständige Formel oder die partielle Schätzung erhalten. Authentifizierung ist erforderlich; es wird kein Kontingent verbraucht, und der Endpunkt funktioniert auch bei einem Konto ohne verbleibende Credits.

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "IHR_BENUTZERNAME",
    "password": "IHR_PASSWORT",
    "metadata": {"patient_age": "40", "patient_sex": "Male"},
    "parameters": [
      {"short_name": "MCV", "result": 90, "unit": "fL"},
      {"short_name": "WBC", "result": 6.0, "unit": "10^9/L"},
      {"short_name": "Lymphocytes", "result": 30, "unit": "%"}
    ]
  }'

Beispielantwort

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "Payload is valid",
  "data": {
    "valid": true,
    "errors": [],
    "parameter_count": 3,
    "looks_like_blood_panel": true,
    "chronological_age": 40,
    "sex": "m",
    "phenoage_markers_found": ["lymph", "mcv", "wbc"],
    "phenoage_markers_missing": ["albumin", "creatinine", "glucose", "crp", "rdw", "alp"],
    "expected_source": "partial",
    "recognised_markers": ["lymph_pct", "mcv", "wbc"]
  },
  "timestamp": "2026-09-18T10:30:00Z"
}

Referenz-Endpunkte

Beide Referenz-Endpunkte sind ohne Authentifizierung und kostenlos nutzbar.

GET /api/v1/blood-age/biomarkers

Listet die neun PhenoAge-Eingaben auf, jeden von der Engine lesbaren Marker mit seiner Zieleinheit sowie den Altersbereich, für den die Formel gilt.

cURL-Beispiel

curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/biomarkers"

Beispielantwort

{
  "status": "success",
  "data": {
    "phenoage_inputs": ["albumin", "creatinine", "glucose", "crp", "lymph", "mcv", "rdw", "alp", "wbc"],
    "phenoage_age_range": {"min": 18, "max": 100},
    "markers": [
      {"key": "albumin", "target_unit": "g/l"},
      {"key": "alp", "target_unit": "u/l"},
      {"key": "alt", "target_unit": "u/l"}
    ],
    "marker_count": 33,
    "name_matching": "Markers are matched by the analyte name your laboratory printed, in any of the supported report languages. You never send these keys."
  }
}
GET /api/v1/blood-age/info

Metadaten zum Funktionsumfang: ob die Engine in dieser Installation aktiviert ist, die beiden Modi und ihre jeweiligen Kosten, die Anfragelimits, das Authentifizierungsverfahren und die unterstützten Sprachen.

cURL-Beispiel

curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/info"

Sandbox

POST /api/v1/blood-age/sandbox liefert eine Beispielantwort in genau der Form, die /analyze erzeugt, sodass ein gegen die Sandbox entwickelter Client unverändert gegen die Produktion funktioniert. Authentifizierung ist erforderlich, sodass der Aufruf zugleich Ihre Zugangsdaten prüft; es wird jedoch kein Kontingent verbraucht und keine Analyse durchgeführt.

FehlercodeHTTPBedeutung
AUTH_1001401Fehlende Authentifizierungsdaten
AUTH_1002401Ungültiger Benutzername oder ungültiges Passwort
AUTH_1004400Fehlerhafte Zugangsdaten (falscher Typ oder zu lang)
QUOTA_1101403Unzureichendes API-Kontingent
VAL_2001400parameters fehlt
VAL_2002400Ungültiges Datenformat
VAL_2003400Nicht unterstützter Sprachcode
VAL_2005400parameters ist leer
VAL_2006400Mehr als 500 Parameter
VAL_2007400Ungültiges patient-Objekt
VAL_2008400Eine Parameterzeile ist fehlerhaft oder ohne Namen
VAL_2009400Nicht unterstützter Wert für patient.gender
RES_4004422Aus diesen Parametern lässt sich nichts berechnen
RES_4005503Die Blutalter-Engine ist in dieser Installation deaktiviert

DNA Health API: DNA-Test-Interpretation, DNA + Blut-Bericht und Supplement-Berater

Veröffentlicht: 23. September 2026

Mit Stolz stellen wir die Kantesti DNA Health API vor: drei neue KI-Module, die aus dem DNA-Test eines Patienten klinische Berichte machen. Die DNA-Test-Interpretation liest eine Genotyp-Rohdatei oder einen genetischen Befundbericht und erstellt daraus einen umfassenden genetischen Gesundheitsbericht. Der DNA + Blut-Gesundheitsbericht verbindet diesen Bericht mit einem interpretierten Bluttest und zeigt, wo sich Gene und Laborwerte bestätigen oder widersprechen. Der Supplement-Berater erstellt aus DNA, Bluttest und einem kurzen Fragebogen einen personalisierten Supplement-Plan, der auf den eigenen Produkten Ihrer Klinik aufbaut.

334
Kuratierte DNA-Marker
20
Gesundheitskategorien
100+
Berichtssprachen

Abgeglichen mit Ihrer Datei

Eine Genotyp-Rohdatei wird auf dem Server eingelesen und mit einem kuratierten Panel aus 334 Markern in 20 Kategorien abgeglichen — von Methylierungs-, Herz-Kreislauf- und Lipidgenen bis zu Pharmakogenomik, Nährstoffstoffwechsel, Trägerstatus und Langlebigkeit. Jeder Befund, den die KI formuliert, wird gegen den Upload geprüft: Eine rsID, die in der Datei nicht vorkommt, wird verworfen, und jeder Genotyp wird auf den Wert festgelegt, der in der Datei steht. So kann der Bericht kein Ergebnis erfinden.

Hauptfunktionen
  • Alle gängigen DNA-Quellen — Rohdateien von 23andMe, AncestryDNA, MyHeritage, FTDNA und LivingDNA, VCF-Dateien, auch als .zip oder .gz; eingefügte rsID-Zeilen; oder ein genetischer Befundbericht als bis zu 6 PDF-, JPG- oder PNG-Dateien
  • Umfassender genetischer Bericht — Befunde nach Gesundheitsbereich, Krankheitsrisiken, Trägerstatus, Pharmakogenomik (vorhergesagte Metabolisierer-Phänotypen und betroffene Arzneimittelklassen), Nutrigenomik, Merkmale, empfohlene Folgeuntersuchungen und Warnsignale
  • Gene treffen Laborwerte — Der DNA + Blut-Bericht ordnet jede Verbindung zwischen einem genetischen Befund und einem Laborwert als confirms, contradicts, neutral oder watch ein, ergänzt um eine Risikomatrix, vorrangige Maßnahmen und einen Monitoring-Plan
  • Supplement-Pläne mit Sicherheitsregeln — Dosis, Darreichungsform, Einnahmezeitpunkt, Dauer, Wechselwirkungen und Termine für Kontrolltests; die Dosierungen bleiben innerhalb der tolerierbaren Höchstzufuhrmengen, in der Schwangerschaft gelten sichere Grenzwerte, und alles, was eine ärztliche Entscheidung erfordert, landet in clinician_review_required
  • Ihr eigener Produktkatalog — Der Berater empfiehlt die Produkte, die Ihre Klinik führt, kennzeichnet sie als clinic_library und listet im Modus „nur Klinikprodukte“ die Bedarfe auf, die Ihr Katalog nicht abdeckt
  • Verkettbar und zustandslos — Senden Sie den Bericht aus Modul 1 direkt an die Module 2 und 3. Es wird nichts patientenbezogen gespeichert, und Genotyp-Rohdateien werden nach dem Einlesen verworfen
  • 100+ Berichtssprachen — Der Bericht wird in der Sprache verfasst, die Sie anfordern
  • Asynchroner Modus — Hängen Sie ?async=1 an und fragen Sie /api/jobs/<job_id> ab, damit eine lange Analyse nie in ein Gateway-Timeout läuft
  • Sandbox-Modus — Integration testen ohne Credits zu verbrauchen
So arbeiten die drei Module zusammen

1. POST /api/v1/dna-interpretation/analyze mit der DNA-Datei liefert data.report. 2. Senden Sie diesen Bericht zusammen mit einem interpretierten Bluttest an /api/v1/dna-blood-report/analyze. 3. Senden Sie denselben Bericht, die Antworten aus dem Fragebogen und optional den Bluttest an /api/v1/dna-supplements/analyze. Die Module 2 und 3 akzeptieren den DNA-Bericht so, wie er zurückgegeben wurde: das report-Objekt, das gesamte data-Objekt oder die vollständige Antwort.

Endpunkte-Übersicht

EndpunktMethodeBeschreibungAuth
/api/v1/dna-interpretation/analyzePOSTDNA-Datei, eingefügte rsID-Zeilen oder Berichtsseiten → umfassender genetischer GesundheitsberichtErforderlich (1 Credit)
/api/v1/dna-interpretation/validatePOSTUpload einlesen und anzeigen, was gefunden wurde, ohne KI-AufrufErforderlich (Kostenlos)
/api/v1/dna-interpretation/sandboxPOSTBeispiel eines genetischen BerichtsErforderlich (Kostenlos)
/api/v1/dna-interpretation/infoGETAkzeptierte Eingaben, Limits und BerichtssprachenNicht erforderlich
/api/v1/dna-blood-report/analyzePOSTDNA-Bericht + interpretierter Bluttest → kombinierter GesundheitsberichtErforderlich (1 Credit)
/api/v1/dna-blood-report/validatePOSTAnfragedaten ohne KI-Aufruf prüfenErforderlich (Kostenlos)
/api/v1/dna-blood-report/sandboxPOSTBeispiel eines kombinierten BerichtsErforderlich (Kostenlos)
/api/v1/dna-blood-report/infoGETAnfragefelder und LimitsNicht erforderlich
/api/v1/dna-supplements/analyzePOSTDNA-Bericht + Bluttest (optional) + Fragebogen → Supplement-PlanErforderlich (1 Credit)
/api/v1/dna-supplements/validatePOSTAnfragedaten und Antworten ohne KI-Aufruf prüfenErforderlich (Kostenlos)
/api/v1/dna-supplements/sandboxPOSTBeispiel eines Supplement-PlansErforderlich (Kostenlos)
/api/v1/dna-supplements/questionnaireGETDie 25 Fragen und ihre zulässigen AntwortenNicht erforderlich
/api/v1/dna-supplements/settingsGET PUTProduktkatalog und Berater-Einstellungen Ihrer Klinik lesen oder aktualisierenErforderlich (Kostenlos)
/api/v1/dna-supplements/infoGETAnfragefelder und LimitsNicht erforderlich
POST /api/v1/dna-interpretation/analyze Veröffentlicht 23.09.2026

Interpretiert einen DNA-Test und liefert einen umfassenden genetischen Gesundheitsbericht. Senden Sie eine Datei als multipart/form-data oder eingefügte Genotyp-Zeilen als JSON. Der Upload wird noch während der Anfrage eingelesen, sodass eine unlesbare Datei sofort mit 400 beantwortet wird und nichts kostet. Ein Credit wird erst berechnet, nachdem der Bericht erstellt wurde.

Anfrageparameter

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername (oder HTTP Basic-Authentifizierung verwenden)
passwordstringJaIhr API-Passwort
filefileJa*Eine Genotyp-Rohdatei (.txt, .csv, .tsv, .vcf, .zip, .gz, bis 80 MB) oder bis zu 6 Berichtsdateien (PDF bis 20 MB, JPG/PNG bis 10 MB je Datei). *Senden Sie entweder file oder genotype_text.
genotype_textstringJa*Eingefügte Genotyp-Zeilen (rsID, Chromosom, Position, Genotyp), bis zu 2.000.000 Zeichen
languagestringNeinSprachcode des Berichts, z. B. en, de, ar (Standard: en). Siehe unterstützte Sprachen.
patientobjectNeinage, sex, diagnoses, comorbidities, medications, treatments, notes. In einer Multipart-Anfrage als JSON-String senden.
source_labelstringNeinIhre eigene Bezeichnung für die Quelle, bis zu 120 Zeichen

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-interpretation/analyze?async=1" \
  -u "IHR_BENUTZERNAME:IHR_PASSWORT" \
  -F "file=@genome_raw_data.txt" \
  -F "language=en" \
  -F 'patient={"age": 41, "sex": "female", "medications": "clopidogrel"}'

# Antwort 202 Accepted: {"status": "pending", "job_id": "...", "poll_url": "/api/jobs/...", ...}
curl -u "IHR_BENUTZERNAME:IHR_PASSWORT" "https://app.aibloodtestinterpret.com/api/jobs/JOB_ID"

Python-Beispiel

import time
import requests

BASE = "https://app.aibloodtestinterpret.com"
AUTH = ("IHR_BENUTZERNAME", "IHR_PASSWORT")


def run(path, poll=True, **kwargs):
    """POST im asynchronen Modus, dann /api/jobs/<id> abfragen, bis der Bericht fertig ist."""
    resp = requests.post(f"{BASE}{path}?async=1", auth=AUTH, timeout=60, **kwargs)
    body = resp.json()
    if resp.status_code != 202:
        return body                      # ein Fehler oder eine synchrone Antwort
    while True:
        time.sleep(body.get("poll_interval_ms", 3000) / 1000)
        job = requests.get(f"{BASE}{body['poll_url']}", auth=AUTH, timeout=30).json()
        if job["status"] in ("completed", "failed"):
            return job["result"]["response"]


# 1) DNA-Test-Interpretation
with open("genome_raw_data.txt", "rb") as fh:
    dna = run("/api/v1/dna-interpretation/analyze",
              files={"file": fh},
              data={"language": "en", "patient": '{"age": 41, "sex": "female"}'})
report = dna["data"]["report"]
print(report["executive_summary"])
for section in report["sections"]:
    print(section["title"], "-", section["risk_level"])

Beispielantwort

{
  "status": "success",
  "api_version": "1.0.0",
  "message": "DNA test interpretation completed successfully",
  "data": {
    "analysis_id": "DNA-3F9A1C07B2",
    "module": "dna_interpretation",
    "generated_at": "2026-09-23T10:30:00Z",
    "language": "en",
    "source": {
      "kind": "raw", "format": "23andme", "build": "GRCh37",
      "total_records": 638463, "called": 631022, "no_call_rate": 0.0117,
      "inferred_sex": "female", "panel_total": 334, "panel_found": 291,
      "filename": "genome_raw_data.txt", "warnings": []
    },
    "report": {
      "report_type": "dna",
      "title": "Genetic health report",
      "executive_summary": "Array genotyping with good coverage of the clinical panel...",
      "overall_assessment": {"level": "slightly_elevated", "summary": "Mostly typical findings with a few actionable ones."},
      "data_quality": {"source": "23andMe v5 raw file", "markers_analyzed": 291, "coverage_note": "...", "limitations": "..."},
      "sections": [
        {
          "key": "nutrigenomics", "title": "Nutrient metabolism", "risk_level": "slightly_elevated",
          "summary": "Reduced folate cycle activity...",
          "findings": [
            {"gene": "MTHFR", "rsid": "rs1801133", "genotype": "AG", "phenotype": "C677T heterozygous",
             "risk_level": "slightly_elevated", "evidence": "established",
             "explanation": "About 65% of typical enzyme activity.", "recommendation": "Check homocysteine."}
          ]
        }
      ],
      "pharmacogenomics": [
        {"gene": "CYP2C19", "rsids": ["rs4244285"], "predicted_phenotype": "Intermediate metabolizer",
         "affected_drugs": ["clopidogrel", "omeprazole"], "recommendation": "Review before prescribing clopidogrel."}
      ],
      "disease_risks": [], "carrier_status": [], "nutrigenomics": [], "traits": [],
      "lifestyle_recommendations": ["..."], "recommended_tests": [{"test": "Homocysteine", "reason": "MTHFR C677T"}],
      "red_flags": [], "limitations": "Consumer arrays miss rare variants.",
      "disclaimer": "AI-generated clinical decision support for clinician review; not a diagnosis."
    }
  },
  "timestamp": "2026-09-23T10:30:00Z"
}

Referenz der Antwortfelder

FeldTypBeschreibung
sourceobjectWas gelesen wurde: kind (raw, text oder document), erkanntes Format und Genom-Build, Anzahl der Datensätze und Genotyp-Calls, wie viele der 334 Panel-Marker gefunden wurden, sowie Parser-Warnungen
report.overall_assessment.levelstringtypical, slightly_elevated, elevated oder high
report.sections[]arrayEin Eintrag pro Gesundheitsbereich mit einem risk_level und den zugehörigen findings
report.sections[].findings[]arraygene, rsid, genotype, phenotype, risk_level (protective, typical, informational, slightly_elevated, elevated, high), evidence (established, probable, preliminary), explanation, recommendation
report.pharmacogenomics[]arrayVorhergesagter Metabolisierer-Phänotyp pro Gen und die Arzneimittelklassen, die davon betroffen sein können. Der Bericht nennt nie Dosierungen verschreibungspflichtiger Arzneimittel.
report.carrier_status[]arraycarrier, not_detected, affected_pattern oder inconclusive, stets durch klinische Gentests zu bestätigen
report.disease_risks[], nutrigenomics[], traits[]arrayErkrankungsrisiken, Nährstoffbefunde und Merkmale mit den zugrunde liegenden Genen
report.recommended_tests[], red_flags[]arrayFolgeuntersuchungen mit Begründung sowie Befunde, die zeitnah Aufmerksamkeit erfordern
POST /api/v1/dna-interpretation/validate Veröffentlicht 23.09.2026

Liest den Upload genau wie /analyze ein und meldet, was gefunden wurde, ohne KI-Aufruf. Authentifizierung ist erforderlich; es wird kein Credit verbraucht. Nutzen Sie den Endpunkt, um eine Datei zu prüfen, bevor Sie einen Credit einsetzen.

Beispielantwort

{
  "status": "success",
  "message": "Payload is valid",
  "data": {
    "valid": true,
    "language": "en",
    "source": {"kind": "raw", "format": "ancestrydna", "build": "GRCh37", "panel_total": 334, "panel_found": 287, "warnings": []}
  }
}
POST /api/v1/dna-blood-report/analyze Veröffentlicht 23.09.2026

Verbindet einen DNA-Bericht und einen interpretierten Bluttest zu einem gemeinsamen Gesundheitsbericht. Jede Verbindung zwischen einem genetischen Befund und einem Laborwert wird eingeordnet; es folgen eine Risikomatrix, vorrangige Maßnahmen und ein Monitoring-Plan. Ein Credit pro erfolgreicher Anfrage.

Anfrageparameter

ParameterTypErforderlichBeschreibung
dna_reportobjectJaDer Bericht aus /api/v1/dna-interpretation/analyze: data.report, das gesamte data-Objekt oder die vollständige Antwort
blood_testobject|arrayJaEin interpretierter Bluttest, wie ihn die Bluttest API liefert (metadata, parameters, interpretation), oder einfach eine Liste von bis zu 500 Parametern mit Namen und result
languagestringNeinSprachcode des Berichts (Standard: en)
patientobjectNeinDieselben Felder wie bei der DNA-Test-Interpretation

Python-Beispiel

# 2) DNA + Blut-Gesundheitsbericht (verwendet run() und dna aus dem Beispiel oben)
blood_test = {
    "parameters": [
        {"short_name": "25-OH D", "result": 18, "unit": "ng/mL", "range_normal_min": 30, "range_normal_max": 100, "evaluation": "low"},
        {"short_name": "Homocysteine", "result": 13.2, "unit": "µmol/L", "evaluation": "high"}
    ]
}
combined = run("/api/v1/dna-blood-report/analyze",
               json={"dna_report": dna, "blood_test": blood_test, "language": "en"})
for link in combined["data"]["report"]["correlations"]:
    print(link["topic"], link["concordance"], link["action"])

Beispielantwort

{
  "status": "success",
  "message": "DNA + blood health report completed successfully",
  "data": {
    "analysis_id": "DNB-8C21E40A9D",
    "module": "dna_blood_report",
    "language": "en",
    "report": {
      "report_type": "dna_blood",
      "executive_summary": "The low vitamin D level matches the GC genotype; homocysteine is borderline, in line with MTHFR C677T.",
      "overall_status": {"level": "watch", "summary": "Two gene-lab matches to act on."},
      "correlations": [
        {"topic": "Vitamin D", "genetic_finding": "GC rs2282679 GT", "lab_finding": "25-OH D 18 ng/mL",
         "concordance": "confirms", "interpretation": "Genetic tendency and lab value agree.", "action": "Supplement and recheck in 12 weeks."}
      ],
      "risk_matrix": [{"area": "Folate cycle", "genetic_risk": "slightly_elevated", "lab_status": "borderline", "combined_assessment": "Watch homocysteine."}],
      "priority_actions": [{"priority": "high", "action": "Start vitamin D3", "why": "Deficient level and GC genotype"}],
      "monitoring_plan": [{"marker": "25-OH vitamin D", "interval": "12 weeks", "reason": "Dose check"}],
      "lifestyle_plan": [], "questions_for_clinician": [], "red_flags": [],
      "limitations": "One blood test; values vary.",
      "disclaimer": "AI-generated clinical decision support for clinician review; not a diagnosis."
    }
  }
}

Referenz der Antwortfelder

FeldTypBeschreibung
report.overall_status.levelstringgood, watch, attention oder urgent
report.correlations[].concordancestringconfirms, contradicts, neutral oder watch
report.risk_matrix[]arrayPro Bereich: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) und eine kombinierte Bewertung
report.priority_actions[]arraypriority (high, medium, low), die Maßnahme und ihre Begründung
report.monitoring_plan[]arrayWelcher Marker wann und warum erneut getestet werden sollte
POST /api/v1/dna-supplements/analyze Veröffentlicht 23.09.2026

Erstellt einen personalisierten Supplement-Plan aus dem DNA-Bericht, den Antworten aus dem Fragebogen und optional einem interpretierten Bluttest. Produktkatalog und Berater-Einstellungen Ihrer Klinik werden automatisch angewendet. Ein Credit pro erfolgreicher Anfrage.

Anfrageparameter

ParameterTypErforderlichBeschreibung
dna_reportobjectJaDer Bericht aus /api/v1/dna-interpretation/analyze
answersobjectJaAntworten aus dem Fragebogen. diet_type und pregnancy sind Pflichtangaben; alle 25 Fragen liefert GET /api/v1/dna-supplements/questionnaire. Unbekannte Schlüssel und Werte werden verworfen.
blood_testobject|arrayNeinDasselbe Format wie beim DNA + Blut-Bericht
use_clinic_cataloguebooleanNeinProduktkatalog und Einstellungen Ihrer Klinik anwenden (Standard: true)
languagestringNeinSprachcode des Berichts (Standard: en)
patientobjectNeinDieselben Felder wie bei der DNA-Test-Interpretation. Die hier angegebenen Medikamente werden auf Wechselwirkungen geprüft.

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/analyze?async=1" \
  -u "IHR_BENUTZERNAME:IHR_PASSWORT" \
  -H "Content-Type: application/json" \
  -d '{
    "dna_report": { ...data.report aus der DNA-Test-Interpretation... },
    "answers": {"diet_type": "vegetarian", "pregnancy": "no", "sun_exposure": "low", "goals": ["energy", "immunity"]},
    "language": "en"
  }'

Python-Beispiel

# 3) Supplement-Plan (verwendet run(), dna und blood_test aus den Beispielen oben)
plan = run("/api/v1/dna-supplements/analyze",
           json={"dna_report": dna, "blood_test": blood_test,
                 "answers": {"diet_type": "vegetarian", "pregnancy": "no"},
                 "language": "en"})
for item in plan["data"]["report"]["recommendations"]:
    print(item["name"], item["dose"], item["timing"], "-", item["source"])

Beispielantwort

{
  "status": "success",
  "message": "Supplement plan completed successfully",
  "data": {
    "analysis_id": "SUP-51B7D2E6F0",
    "module": "dna_supplements",
    "language": "en",
    "catalogue": {"mode": "prefer", "products": 24},
    "report": {
      "report_type": "supplement",
      "summary": "Plan built from GC and MTHFR findings, a low vitamin D level and a vegetarian diet.",
      "recommendations": [
        {"name": "Vitamin D3 + K2", "source": "clinic_library", "product": "Vitamin D3 + K2 (Clinic Brand)",
         "form": "softgel", "dose": "2000 IU", "timing": "with lunch", "duration": "12 weeks", "priority": "high",
         "rationale": {"genetic": "GC rs2282679 GT", "lab": "25-OH D 18 ng/mL", "questionnaire": "little sun"},
         "evidence": "established", "cautions": ["Recheck calcium"], "interactions": ["Thiazide diuretics"],
         "retest": "25-OH D in 12 weeks"}
      ],
      "avoid_or_caution": [{"name": "High-dose vitamin A", "reason": "Pregnancy planning"}],
      "uncovered_needs": [],
      "dietary_sources": [{"nutrient": "Folate", "foods": ["lentils", "spinach"]}],
      "retest_plan": [{"marker": "25-OH vitamin D", "when": "12 weeks", "why": "Dose check"}],
      "clinician_review_required": ["Thiazide co-medication"],
      "disclaimer": "AI-generated clinical decision support for clinician review; not a diagnosis."
    }
  }
}

Referenz der Antwortfelder

FeldTypBeschreibung
catalogueobjectDer angewendete Katalogmodus (prefer, only, off) und die Anzahl der verfügbaren Klinikprodukte
report.recommendations[]arrayname, form, dose, timing, duration, priority, die genetische / labordiagnostische / fragebogenbasierte rationale, evidence, cautions, interactions und retest
report.recommendations[].sourcestringclinic_library für ein Produkt aus Ihrem Katalog (benannt in product), andernfalls evidence_based
report.uncovered_needs[]arrayIm Modus „nur Klinikprodukte“: Bedarfe, die Ihr Katalog nicht abdeckt
report.clinician_review_required[]arrayAlles, was eine ärztliche Entscheidung erfordert: Wechselwirkungen, Schwangerschaft, Nieren- oder Lebererkrankungen, Antikoagulanzien, Dosierungen nahe der tolerierbaren Höchstzufuhrmenge
report.avoid_or_caution[], dietary_sources[], retest_plan[]arrayWas zu meiden ist, Lebensmittelquellen für jeden Nährstoff und wann erneut getestet werden sollte
GET PUT /api/v1/dna-supplements/settings Veröffentlicht 23.09.2026

Liest oder aktualisiert den Produktkatalog Ihrer Klinik und die Berater-Einstellungen. Es ist derselbe Katalog wie im Klinik-Panel und in der Ernährungs-KI, sodass ein an einer Stelle hinzugefügtes Produkt überall verfügbar ist. Authentifizierung ist erforderlich; es wird kein Credit verbraucht. Senden Sie catalogue, settings oder beides; der Katalog ersetzt jeweils die gesamte Liste.

FeldTypBeschreibung
catalogue[]arrayBis zu 200 Produkte: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description
settings.modestringprefer (Klinikprodukte, wo sie passen, andernfalls evidenzbasierte Vorschläge), only (nur Klinikprodukte) oder off (Katalog ignorieren)
settings.instructionsstringIhre eigenen Anweisungen an die KI, bis zu 1.500 Zeichen. Sicherheitsregeln haben immer Vorrang.
settings.max_itemsintegerMaximale Anzahl an Empfehlungen pro Plan, 3 bis 12

cURL-Beispiel

curl -X PUT "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/settings" \
  -u "IHR_BENUTZERNAME:IHR_PASSWORT" \
  -H "Content-Type: application/json" \
  -d '{
    "catalogue": [
      {"name": "Vitamin D3 + K2", "brand": "Clinic Brand", "form": "softgel", "dosage": "2000 IU / 75 µg", "category": "vitamin"},
      {"name": "Omega-3 EPA/DHA", "brand": "Clinic Brand", "form": "softgel", "dosage": "1000 mg", "category": "omega"}
    ],
    "settings": {"mode": "prefer", "instructions": "Prefer our own brand.", "max_items": 8}
  }'

Referenz-Endpunkte

GET /api/v1/dna-supplements/questionnaire listet die 25 Fragen (Ernährungsweise, Mahlzeiten, Obst und Gemüse, Fisch, rotes Fleisch, Milchprodukte, Alkohol, Rauchen, Koffein, Sonnenexposition, Bewegung, Schlaf, Stress, Verdauung, Energie, aktuell eingenommene Nahrungsergänzungsmittel, Medikamente, Allergien, Erkrankungen, Schwangerschaft, Ziele, Budget, bevorzugte Darreichungsform und Anmerkungen) mit ihren Typen und zulässigen Werten auf. Die drei /info-Endpunkte liefern die akzeptierten Eingaben, Limits, Credit-Kosten und die vollständige Liste der Berichtssprachen. Keiner dieser Endpunkte erfordert eine Authentifizierung.

Sandbox und asynchroner Modus

POST /api/v1/dna-interpretation/sandbox, /api/v1/dna-blood-report/sandbox und /api/v1/dna-supplements/sandbox liefern einen Beispielbericht in genau der Form, die /analyze erzeugt. Authentifizierung ist erforderlich; es wird kein Credit verbraucht.

Ein KI-Bericht dauert in der Regel ein bis drei Minuten. Hängen Sie ?async=1 an (oder senden Sie den Header X-Async: 1), dann antwortet die Anfrage sofort mit 202 und einer job_id. Fragen Sie GET /api/jobs/<job_id> mit denselben Zugangsdaten ab, bis status den Wert completed oder failed hat. Die endgültige Antwort steht in result.response und ist identisch mit der synchronen.

FehlercodeHTTPBedeutung
AUTH_1001401Fehlende Authentifizierungsdaten
AUTH_1002401Ungültiger Benutzername oder ungültiges Passwort
QUOTA_1101403Unzureichendes API-Kontingent
VAL_2001400Ein Pflichtfeld fehlt: file oder genotype_text, dna_report, blood_test oder eine erforderliche Antwort
VAL_2002400Unlesbare Genotyp-Daten, nicht unterstützter Dateityp, ungültiges JSON oder ein ungültiger dna_report
VAL_2003400Nicht unterstützte Berichtssprache
VAL_2006400Zu groß: eingefügter Text, Blutparameter (500) oder Katalog (200 Produkte)
VAL_2007400Ungültiges patient-Objekt
VAL_2008400Kein verwertbarer Bluttest-Parameter (Name und Ergebnis)
PROC_3003500Die KI-Antwort konnte nicht erzeugt oder validiert werden; bitte erneut versuchen. Es wird kein Credit berechnet.
RES_4005503Die DNA-Module sind in dieser Installation deaktiviert
Klinische Entscheidungsunterstützung

Die DNA Health API erzeugt KI-generierte Informationen für das behandelnde medizinische Fachpersonal. Sie ist weder eine Diagnose noch eine Verordnung. Genotypisierungs-Arrays für Endverbraucher sind keine klinische Sequenzierung: Bestätigen Sie handlungsrelevante Befunde und Trägerbefunde mit validierten klinischen Gentests, bevor Sie darauf reagieren.

ICR - Intelligente Zeichenerkennung API

Veröffentlicht: 14. Februar 2026

Die Kantesti ICR (Intelligente Zeichenerkennung) API ist eine fortschrittliche Dokumenten-Textextraktionstechnologie, die weit über herkömmliche OCR hinausgeht. Angetrieben von Kantestis proprietärer KI-Engine liefert ICR strukturierte JSON-Ausgaben aus jedem Dokumenttyp, einschließlich medizinischer Berichte, Rechnungen, Formulare und mehr.

79%
Schneller als OCR
99,7%
Genauigkeitsrate
100+
Sprachen

Kantesti ICR vs. Herkömmliche OCR

In Benchmark-Tests zeigte Kantesti ICR eine 79% höhere Leistung im Vergleich zu herkömmlichen OCR-Lösungen. ICR versteht die Dokumentenstruktur, bewahrt Tabellenlayouts, extrahiert Metadaten und liefert sauberes strukturiertes JSON — während OCR nur rohen unstrukturierten Text liefert.

ICR Hauptfunktionen
  • Strukturierte JSON-Ausgabe — Tabellen, Abschnitte, Metadaten und Rohtext im sauberen JSON-Format
  • Dokumenttyp-Erkennung — Erkennt automatisch medizinische Berichte, Rechnungen, Formulare, Briefe usw.
  • Tabellenextraktion — Bewahrt Tabellenüberschriften und Zeilendaten mit vollständiger Struktur
  • Multi-Format-Unterstützung — PDF, JPG, JPEG, PNG Dokumentenverarbeitung
  • Bluttest-Integration (Kan) — Spezialisierter Endpunkt für Bluttestdokumenten-Extraktion
  • Sandbox-Modus — Integration testen ohne Credits zu verbrauchen
  • Kreditsystem — 0,5 Credits pro API-Aufruf

ICR Endpunkte-Übersicht

EndpunktMethodeBeschreibungKosten
/api/icr/v1/extractPOSTICR-Textextraktion aus Dokumenten0,5 Credit
/api/icr/v1/sandboxPOSTICR-Sandbox-TestKostenlos
/api/icr/v1/kanPOSTBluttestdokumenten-Analyse0,5 Credit
/api/icr/v1/kan/sandboxPOSTBluttest-Sandbox-TestKostenlos
/api/icr/infoGETAPI-Dokumentation und FunktionenKostenlos
/api/icr/healthGETGesundheitsprüfung-EndpunktKostenlos
/api/icr/v1/quotaPOSTVerbleibende ICR-Credits prüfenKostenlos
POST /api/icr/v1/extract Veröffentlicht 14.02.2026

Extrahiert den gesamten Textinhalt aus hochgeladenen Dokumenten mit Kantesti ICR-Technologie. Gibt strukturiertes JSON mit Dokumenttyp-Erkennung, Tabellenextraktion, Abschnittsanalyse und Metadaten zurück.

Anfrageparameter

ParameterTypErforderlichBeschreibung
usernamestringJaIhr API-Benutzername
passwordstringJaIhr API-Passwort
filefileJaDokumentdatei (PDF, JPG, JPEG, PNG)
languagestringNeinAusgabesprache (Standard: en)

cURL-Beispiel

curl -X POST "https://app.aibloodtestinterpret.com/api/icr/v1/extract" \
  -F "username=IHR_BENUTZERNAME" \
  -F "password=IHR_PASSWORT" \
  -F "language=de" \
  -F "[email protected]"

Python-Beispiel

import requests

def icr_extract(file_path: str, username: str, password: str, language: str = "de"):
    """
    Text aus einem Dokument mit Kantesti ICR API extrahieren.
    79% schneller und genauer als herkömmliche OCR.
    """
    url = "https://app.aibloodtestinterpret.com/api/icr/v1/extract"

    with open(file_path, "rb") as f:
        files = {"file": (file_path, f)}
        data = {"username": username, "password": password, "language": language}
        response = requests.post(url, files=files, data=data, timeout=120)
        response.raise_for_status()
        return response.json()

# Beispielverwendung
result = icr_extract("medizinischer_bericht.pdf", "benutzername", "passwort", "de")
print(f"Dokumenttyp: {result['data']['document_type']}")
print(f"Seiten: {result['data']['page_count']}")

Beispielantwort

{
  "status": "success",
  "data": {
    "document_type": "blood_test_report",
    "page_count": 1,
    "pages": [
      {
        "page_number": 1,
        "content": {
          "raw_text": "Universitätsklinikum Köln - Blutbild\n\nPatient: Max Mustermann\nGeb.: 15.03.1990\nGeschlecht: Männlich\nDatum: 10.01.2026",
          "sections": [
            {"type": "header", "content": "Universitätsklinikum Köln - Blutbild"},
            {"type": "paragraph", "content": "Patient: Max Mustermann, Geb.: 15.03.1990, Männlich"}
          ],
          "tables": [
            {
              "headers": ["Test", "Ergebnis", "Einheit", "Referenzbereich"],
              "rows": [
                ["Glukose", "92", "mg/dL", "74 - 100"],
                ["ALT", "22", "U/L", "< 35"],
                ["Kreatinin", "0,9", "mg/dL", "0,7 - 1,2"],
                ["Leukozyten", "7,2", "10*9/L", "3,8 - 10"],
                ["Hämoglobin", "148", "g/L", "130 - 175"],
                ["Thrombozyten", "230", "10*9/L", "150 - 400"]
              ]
            }
          ]
        }
      }
    ],
    "metadata": {"detected_language": "de", "confidence": "high"},
    "icr_metadata": {"engine": "kantesti-icr", "version": "1.0.0", "images_processed": 1, "timestamp": "2026-02-14T10:30:00Z"}
  },
  "credit_cost": 0.5,
  "api_version": "icr-v1",
  "timestamp": "2026-02-14T10:30:00Z"
}

ICR Sandbox-Endpunkte

Testen Sie Ihre ICR-Integration, ohne Credits zu verbrauchen. Sandbox-Endpunkte liefern realistische Beispieldaten.

APISandbox-EndpunktBeschreibung
ICR Extract/api/icr/v1/sandboxLiefert Beispieldaten für die ICR-Extraktion
ICR Kan/api/icr/v1/kan/sandboxLiefert Beispieldaten für Bluttestparameter

ICR vs. OCR Leistungsvergleich

Benchmark-Ergebnisse — Kantesti ICR vs. Herkömmliche OCR
MetrikKantesti ICRHerkömmliche OCRVerbesserung
Verarbeitungsgeschwindigkeit1,2s Durchschnitt5,7s Durchschnitt79% schneller
Textgenauigkeit99,7%92,1%+7,6%
Tabellenerkennung98,9%71,2%+27,7%
Strukturierte AusgabeJSON mit Abschnitten, Tabellen, MetadatenRoher unstrukturierter TextVolle Struktur
Dokumenttyp-ErkennungAutomatischNicht verfügbarKI-gesteuert
Mehrsprachige Unterstützung100+ Sprachen30-50 Sprachen2x+ Abdeckung