Крайни точки на API за кръвни изследвания

Последна актуализация:

Пълна справка за всички крайни точки на Kantesti Blood Test API с примери за код на множество езици.

Ново от 23 септември 2026 г.: API за ДНК здраве

С гордост представяме три ДНК модула за Kantesti API. Интерпретацията на ДНК тест превръща необработени ДНК данни или генетичен отчет в изчерпателен генетичен здравен отчет, Здравният отчет ДНК + кръв го съчетава с кръвно изследване, а Консултантът за хранителни добавки изготвя персонализиран план за хранителни добавки с продуктите на вашата клиника. Прочетете справката за API за ДНК здраве.

Основен URL
https://app.aibloodtestinterpret.com

Дневник на промените

Проследявайте API версии, актуализации и информация за миграция. Използвайте препоръчителните крайни точки за нови интеграции.

Най-нови актуализации (2026)

И трите актуализации от 2026 г. бяха приложени към всяка версия на API, посочена по-долу. Номерата на версиите и пътищата на крайните точки не са променени, така че не е необходима миграция.

  • 8 септември 2026 г. Актуализация на AI модела и подобрения в цялата платформа
  • 21 юли 2026 г. Цялостни подобрения и корекции на грешки
  • 8 май 2026 г. Цялостни подобрения и корекции на грешки

Текущи стабилни крайни точки

Тези крайни точки се препоръчват за производствено използване и нови интеграции.

APIКрайна точкаСтатус
Анализ на кръвни тестове v12 /api/v12/18-09-2026/analyze Препоръчано Ново 18.09.2026
Анализ на кръвни тестове (здравен резултат) v12 /api/v12/health-score/analyze Препоръчано Ново 18.09.2026
Карта на тялото v1 /api/v1/body-map/analyze Издаден 18.09.2026 Ново
Биологична възраст на кръвта v1 /api/v1/blood-age/analyze Издаден 18.09.2026 Ново
Интерпретация на ДНК тест v1 /api/v1/dna-interpretation/analyze Издаден 23.09.2026 Ново
Здравен отчет ДНК + кръв v1 /api/v1/dna-blood-report/analyze Издаден 23.09.2026 Ново
Консултант за хранителни добавки по ДНК v1 /api/v1/dna-supplements/analyze Издаден 23.09.2026 Ново
Анализ на кръвни тестове v11 /api/v11/01-06-2025/analyze Стабилен Актуализирано 08.09.2026
Анализ на кръвни тестове (здравен резултат) v11 /api/v11/health-score/analyze Стабилен Актуализирано 08.09.2026
AI за хранителен режим v1 /api/v1/nutrition/diet-plan/analyze Стабилен Актуализирано 08.09.2026
AI сравнение на кръвни тестове v1 /api/v1/bloodtest/comparison/analyze Стабилен Актуализирано 08.09.2026
Оценка на семейния здравен риск v1 /api/v1/family-health/analyze Издаден 23.03.2026 Актуализирано 08.09.2026
ICR - Интелигентно разпознаване на символи v1 /api/icr/v1/extract Издаден 14.02.2026 Актуализирано 08.09.2026
ICR Kan - Извличане на кръвен тест v1 /api/icr/v1/kan Издаден 14.02.2026 Актуализирано 08.09.2026
Анализ на тенденции v1 /api/v1/analytics/trends/analyze Стабилен Актуализирано 08.09.2026

История на версиите

ДатаВерсияПромени
23 септември 2026 г. Интерпретация на ДНК тест v1, Здравен отчет ДНК + кръв v1, Консултант за хранителни добавки по ДНК v1 Пуснат API за ДНК здраве — интерпретация на ДНК тестове от необработени ДНК данни (23andMe, AncestryDNA, MyHeritage, FTDNA, LivingDNA, VCF) или файлове с генетични отчети спрямо 334 подбрани маркера, комбиниран здравен отчет ДНК + кръв и консултант за хранителни добавки със собствения продуктов каталог на клиниката; асинхронен режим и sandbox
септември 2026 Анализ на кръвни тестове v12 Пуснат Анализ на кръвни тестове v12 — качване на множество файлове, отчети на 100 езика, опционален здравен резултат и анализ на риска от заболявания, sandbox режим
септември 2026 Карта на тялото v1, Биологична възраст на кръвта v1 Пуснати API за карта на тялото и API за биологична възраст на кръвта — картографиране на ниво орган на резултати извън границите в 13 анатомични зони и биологична възраст по PhenoAge с до 18 изведени клинични индекса; и двата предлагат детерминистичен режим и sandbox
септември 2026 Всички версии Актуализация на AI модела, фиксиран към най-новата версия на модела; цялостни подобрения и корекции на грешки във всички версии на API; номерата на версиите са непроменени; 98,89% точност на изпити от медицински факултети (най-нов бенчмарк с отворен код)
юли 2026 Всички версии Цялостни подобрения и корекции на грешки, приложени към всички версии на API; номерата на версиите са непроменени
май 2026 Всички версии Цялостни подобрения и корекции на грешки, приложени към всички версии на API; номерата на версиите са непроменени
март 2026 Семейно здраве v1 Пуснат API за оценка на семейния здравен риск — AI анализ на наследствен риск, поддръжка на 100+ езика, анализ на семейно дърво, времева линия на превантивна грижа, препоръки за генетичен скрининг, sandbox режим
февруари 2026 ICR v1 Пуснат API за ICR (Интелигентно разпознаване на символи) — 79% по-бърз от OCR, структуриран JSON изход, откриване на типа документ, извличане на таблици, интеграция с Kan за кръвни тестове
декември 2025 Най-нов Подобрено обработване на грешки, 98,7% точност, поддръжка на 100 езика
юни 2025 v11 v11 Анализ на кръвни тестове, крайна точка за здравен резултат, поддръжка на множество файлове
април 2025 v9 Модел api_parameters_v9, подобрено извличане на параметри
март 2025 v8 Поддръжка на качване на множество файлове, пакетна обработка

Стари крайни точки

Тези крайни точки се поддържат за обратна съвместимост, но не се препоръчват за нови интеграции.

ВерсияКрайна точкаСтатус
v10 /api/v10/health-score/analyze Стар
v9 /api/v9/14-04-2025/analyze Стар
v8 /api/v8/31-03-2025/analyze Стар
v6 /api/v6-1/21-11-2024/analyze Стар
v3 /api/v3/10-10-2024/analyze Стар
Забележка

Старите крайни точки се поддържат за обратна съвместимост, но не се препоръчват за нови интеграции. Моля, мигрирайте към текущите стабилни крайни точки за по-добра производителност и поддръжка.

Справка за поддържаните езици

Kantesti API поддържа 100 езика за локализация на отговори. Използвайте параметъра language с всеки ISO 639-1 код, изброен по-долу. Ако не е указан, отговорите са по подразбиране на английски (en).

Език по подразбиране

Ако не е предоставен параметър language, API връща отговори на английски (en).

Основни световни езици

КодЕзикРодно име
enАнглийскиEnglish
zhКитайски中文
esИспанскиEspañol
arАрабскиالعربية
hiХиндиहिन्दी
ptПортугалскиPortuguês
ruРускиРусский
jaЯпонски日本語
frФренскиFrançais
deНемскиDeutsch
koКорейски한국어
trТурскиTürkçe

Европейски езици

КодЕзикРодно име
itИталианскиItaliano
nlНидерландскиNederlands
plПолскиPolski
elГръцкиΕλληνικά
svШведскиSvenska
noНорвежкиNorsk
daДатскиDansk
fiФинландскиSuomi
csЧешкиČeština
ukУкраинскиУкраїнська
roРумънскиRomână
huУнгарскиMagyar
bgБългарскиБългарски
hrХърватскиHrvatski
skСловашкиSlovenčina
slСловенскиSlovenščina
srСръбскиСрпски
ltЛитовскиLietuvių
lvЛатвийскиLatviešu
etЕстонскиEesti
caКаталонскиCatalà
euБаскиEuskara
glГалисийскиGalego
cyУелскиCymraeg
gaИрландскиGaeilge
isИсландскиÍslenska
mtМалтийскиMalti
sqАлбанскиShqip
mkМакедонскиМакедонски
bsБосненскиBosanski
lbЛюксембургскиLëtzebuergesch
beБеларускиБеларуская

Близкоизточни и централноазиатски езици

КодЕзикРодно име
heИвритעברית
faПерсийскиفارسی
azАзербайджанскиAzərbaycan
kaГрузинскиქართული
hyАрменскиՀայերdelays
kkКазахскиҚазақша
uzУзбекскиOʻzbek
tgТаджикскиТоҷикӣ
kyКиргизкиКыргызча
tkТуркменскиTürkmen
mnМонголскиМонгол
psПущуپښتو
kuКюрдскиKurdî

Южноазиатски езици

КодЕзикРодно име
bnБенгалскиবাংলা
taТамилскиதமிழ்
teТелугуతెలుగు
mrМаратиमराठी
guГуджаратиગુજરાતી
knКаннадаಕನ್ನಡ
mlМалаяламമലയാളം
paПенджабиਪੰਜਾਬੀ
urУрдуاردو
neНепалскиनेपाली
siСинхалскиසිංහල
sdСиндхиسنڌي
asАсамскиঅসমীয়া
orОдияଓଡ଼ିଆ

Югоизточни азиатски езици

КодЕзикРодно име
idИндонезийскиBahasa Indonesia
thТайскиไทย
viВиетнамскиTiếng Việt
msМалайскиBahasa Melayu
myМианмарски (Бирмански)မြန်မာ
kmКхмерскиភាសាខ្មែរ
loЛаоскиລາວ
filФилипинскиFilipino
tlТагалогTagalog
jvЯванскиBasa Jawa
suСунданскиBasa Sunda

Африкански езици

КодЕзикРодно име
afАфрикаансАфрикаанс
swСуахилиKiswahili
amАмхарскиአማርኛ
haХаусаHausa
yoЙорубаYorùbá
igИгбоIgbo
zuЗулуisiZulu
xhКхосаisiXhosa
soСомалийскиSoomaali
mgМалгашкиMalagasy

Други езици

КодЕзикРодно име
laЛатинскиLatina
eoЕсперантоЕсперанто
yiИдишייִדיש
htХаитянски креолскиKreyòl Ayisyen
miМаорскиTe Reo Māori
smСамоанскиGagana Samoa
toТонганскиLea Faka-Tonga
hawХавайскиʻŌlelo Hawaiʻi

API за анализ на кръвни тестове

Анализирайте изображения на кръвни тестове или PDF-и с помощта на AI, за да извлечете параметри и да генерирате изчерпателни медицински интерпретации.

POST /api/v12/18-09-2026/analyze Най-нов

Производствена крайна точка за анализ на кръвни тестове. Качете едно или повече изображения на кръвен тест или PDF и получете структурирани параметри, метаданни за пациента и лабораторията, както и пълна клинична интерпретация на всеки от 100-те поддържани езика. Консумира 1 кредит на заявка.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
filefileДаИзображение на кръвен тест (PNG, JPG, WEBP) или PDF. Макс 20MB. Повторете полето, за да изпратите няколко изображения.
languagestringНеКод на езика за отговор (по подразбиране: en). Вижте поддържаните езици.
pdf_passwordstringНеПарола за шифровани PDF файлове

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze" \
  -F "username=YOUR_USERNAME" \
  -F "password=YOUR_PASSWORD" \
  -F "language=en" \
  -F "file=@blood_test.pdf"

Python пример

import requests

def analyze_blood_test(file_paths, username, password, language="en"):
    """
    Analyze a blood test with Kantesti Blood Test Analysis v12.

    Args:
        file_paths: One or more paths to blood test images, or a single PDF
        username: API username
        password: API password
        language: Report language code (default: en)

    Returns:
        dict: Structured parameters, metadata and clinical interpretation
    """
    url = "https://app.aibloodtestinterpret.com/api/v12/18-09-2026/analyze"

    handles = [open(path, "rb") for path in file_paths]
    try:
        files = [("file", (path, handle)) for path, handle in zip(file_paths, handles)]
        data = {"username": username, "password": password, "language": language}
        response = requests.post(url, files=files, data=data, timeout=300)
        response.raise_for_status()
        return response.json()
    finally:
        for handle in handles:
            handle.close()

# Example usage
if __name__ == "__main__":
    result = analyze_blood_test(
        file_paths=["blood_test.pdf"],
        username="your_username",
        password="your_password",
        language="en"
    )
    print(f"Status: {result['status']}")
    for param in result["data"]["parameters"]:
        print(f"  {param['short_name']}: {param['result']} {param['unit']} ({param['evaluation']})")

Примерен отговор

{
  "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 Стабилен

Производствена крайна точка за анализ на кръвни тестове. Консумира 1 кредит на заявка.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
filefileДаИзображение на кръвен тест (PNG, JPG, WEBP) или PDF. Макс 20MB.
languagestringНеКод на езика за отговор (по подразбиране: en). Вижте поддържаните езици.

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze" \
  -F "username=YOUR_USERNAME" \
  -F "password=YOUR_PASSWORD" \
  -F "language=en" \
  -F "file=@blood_test.pdf"

Python пример

import requests

def analyze_blood_test(file_path: str, username: str, password: str, language: str = "en"):
    """
    Analyze a blood test file using Kantesti API.

    Args:
        file_path: Path to the blood test PDF or image
        username: API username
        password: API password
        language: Response language code (default: en)

    Returns:
        dict: API response with analysis results
    """
    url = "https://app.aibloodtestinterpret.com/api/v11/01-06-2025/analyze"

    with open(file_path, "rb") as f:
        files = {"file": (file_path, f, "application/pdf")}
        data = {
            "username": username,
            "password": password,
            "language": language
        }

        response = requests.post(url, files=files, data=data, timeout=120)
        response.raise_for_status()
        return response.json()

# Example usage
if __name__ == "__main__":
    result = analyze_blood_test(
        file_path="blood_test.pdf",
        username="your_username",
        password="your_password",
        language="en"
    )
    print(f"Status: {result['status']}")
    print(f"Parameters found: {len(result['data']['parameters'])}")

C++ пример (libcurl)

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

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) {
    userp->append((char*)contents, size * nmemb);
    return size * nmemb;
}

std::string analyzeBloodTest(const std::string& filePath,
                              const std::string& username,
                              const std::string& password,
                              const std::string& language = "en") {
    CURL* curl = curl_easy_init();
    std::string response;

    if (curl) {
        curl_mime* form = curl_mime_init(curl);
        curl_mimepart* field;

        // Add username
        field = curl_mime_addpart(form);
        curl_mime_name(field, "username");
        curl_mime_data(field, username.c_str(), CURL_ZERO_TERMINATED);

        // Add password
        field = curl_mime_addpart(form);
        curl_mime_name(field, "password");
        curl_mime_data(field, password.c_str(), CURL_ZERO_TERMINATED);

        // Add language
        field = curl_mime_addpart(form);
        curl_mime_name(field, "language");
        curl_mime_data(field, language.c_str(), CURL_ZERO_TERMINATED);

        // Add file
        field = curl_mime_addpart(form);
        curl_mime_name(field, "file");
        curl_mime_filedata(field, filePath.c_str());

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

        CURLcode res = curl_easy_perform(curl);

        curl_mime_free(form);
        curl_easy_cleanup(curl);
    }
    return response;
}

int main() {
    std::string result = analyzeBloodTest("blood_test.pdf", "username", "password");
    std::cout << result << std::endl;
    return 0;
}

Postman конфигурация

{
  "info": {
    "name": "Kantesti Blood Test API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Analyze Blood Test",
      "request": {
        "method": "POST",
        "header": [],
        "body": {
          "mode": "formdata",
          "formdata": [
            {"key": "username", "value": "{{api_username}}", "type": "text"},
            {"key": "password", "value": "{{api_password}}", "type": "text"},
            {"key": "language", "value": "en", "type": "text"},
            {"key": "file", "type": "file", "src": "/path/to/blood_test.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"]
        }
      }
    }
  ]
}

Примерен отговор

{
  "status": "success",
  "data": {
    "metadata": {
      "patient_name": "Jan Novák",
      "lab_name": "BioLAB Medical Center",
      "lab_city": "Prague",
      "lab_country": "Czech Republic",
      "lab_date": "2025-05-11",
      "patient_age": "45",
      "patient_sex": "Male"
    },
    "parameters": [
      {
        "short_name": "WBC",
        "long_name": "White Blood Cell Count",
        "category": "Complete Blood Count",
        "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": "Measures the total white blood cells in blood.",
        "long_description": "White blood cells (leukocytes) are essential for immune function..."
      },
      {
        "short_name": "HGB",
        "long_name": "Hemoglobin",
        "category": "Complete Blood Count",
        "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 red blood cells that carries oxygen.",
        "long_description": "Hemoglobin is the iron-containing protein responsible for oxygen transport..."
      }
    ],
    "interpretation": [
      {
        "title": "Overall Health Assessment",
        "shortcode": "overall_health_assessment",
        "subsections": [
          {
            "subtitle": "Comprehensive Overview",
            "shortcode": "overall_health_assessment_overview",
            "items": [
              {"item": "The patient demonstrates preserved overall organ function with normal hematological parameters."},
              {"item": "No significant abnormalities detected in the complete blood count."}
            ]
          }
        ]
      }
    ]
  },
  "api_version": "v11",
  "timestamp": "2025-12-22T10:30:00Z"
}

Справка на полетата на отговора

Коренно ниво
ПолеТипОписание
statusstring"success" или "error"
dataobjectСъдържа всички резултати от анализа
timestampstringISO 8601 времеви печат на отговора
api_versionstringAPI версия, използвана за обработка
data.metadata обект
ПолеТипОписание
lab_datestringДата на вземане на кръвта (YYYY-MM-DD)
results_datestringДата на издаване на резултатите (YYYY-MM-DD)
lab_namestringИме на лабораторията
lab_citystringГрад на лабораторията
lab_countrystringДържава на лабораторията
patient_namestringПълно име на пациента (само метаданни, не се изпраща за интерпретация)
patient_agestringВъзраст на пациента
patient_sexstring"male", "female" или "other"
data.parameters елемент от масив
ПолеТипОписание
categorystringКатегория на параметъра (напр. "Complete Blood Count", "Lipid Panel")
long_namestringПълно име на параметър
short_namestringСъкратено име на параметър
resultstringИзмерена стойност
unitstringМерна единица
range_minstringМинимален референтен диапазон
range_maxstringМаксимален референтен диапазон
evaluationstringСтатус на резултата. Вижте стойностите на оценката
data.interpretation елемент от масив
ПолеТипОписание
titlestringЗаглавие на секцията (напр. "Overall Health Assessment")
contentstringAI-генерирана медицинска интерпретация

Пълен примерен отговор

{
  "status": "success",
  "data": {
    "metadata": {
      "patient_name": "Anna Müller",
      "lab_name": "MedLab Diagnostics International",
      "lab_city": "Munich",
      "lab_country": "Germany",
      "lab_date": "2025-12-15",
      "results_date": "2025-12-16",
      "patient_age": "38",
      "patient_sex": "female"
    },
    "parameters": [
      {
        "short_name": "WBC",
        "long_name": "White Blood Cell Count",
        "category": "Complete Blood Count",
        "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": "Measures the total number of white blood cells.",
        "long_description": "White blood cells (leukocytes) are essential components of the immune system..."
      },
      {
        "short_name": "RBC",
        "long_name": "Red Blood Cell Count",
        "category": "Complete Blood Count",
        "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": "Measures the total number of red blood cells.",
        "long_description": "Red blood cells (erythrocytes) carry oxygen from the lungs to body tissues..."
      },
      {
        "short_name": "HGB",
        "long_name": "Hemoglobin",
        "category": "Complete Blood Count",
        "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 red blood cells that carries oxygen.",
        "long_description": "Hemoglobin is the iron-containing protein in red blood cells responsible for oxygen transport..."
      },
      {
        "short_name": "HCT",
        "long_name": "Hematocrit",
        "category": "Complete Blood Count",
        "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": "Percentage of blood volume occupied by red blood cells.",
        "long_description": "Hematocrit measures the proportion of blood that consists of red blood cells..."
      },
      {
        "short_name": "PLT",
        "long_name": "Platelet Count",
        "category": "Complete Blood Count",
        "result": "245",
        "unit": "10^9/L",
        "evaluation": "normal",
        "range_min": "150",
        "range_max": "400",
        "range_normal_min": "150",
        "range_normal_max": "350",
        "short_description": "Measures the number of platelets in blood.",
        "long_description": "Platelets (thrombocytes) are essential for blood clotting and wound healing..."
      },
      {
        "short_name": "GLU",
        "long_name": "Fasting Glucose",
        "category": "Metabolic Panel",
        "result": "102",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "70",
        "range_max": "140",
        "range_normal_min": "70",
        "range_normal_max": "99",
        "short_description": "Measures blood sugar level after fasting.",
        "long_description": "Fasting glucose is a key indicator of how well the body metabolizes sugar..."
      },
      {
        "short_name": "TC",
        "long_name": "Total Cholesterol",
        "category": "Lipid Panel",
        "result": "218",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "0",
        "range_max": "300",
        "range_normal_min": "0",
        "range_normal_max": "200",
        "short_description": "Measures total cholesterol in blood.",
        "long_description": "Total cholesterol is the sum of HDL, LDL, and VLDL cholesterol levels..."
      },
      {
        "short_name": "HDL",
        "long_name": "HDL Cholesterol",
        "category": "Lipid Panel",
        "result": "58",
        "unit": "mg/dL",
        "evaluation": "normal",
        "range_min": "35",
        "range_max": "100",
        "range_normal_min": "50",
        "range_normal_max": "90",
        "short_description": "Measures 'good' cholesterol level.",
        "long_description": "HDL (high-density lipoprotein) cholesterol helps remove other forms of cholesterol..."
      },
      {
        "short_name": "LDL",
        "long_name": "LDL Cholesterol",
        "category": "Lipid Panel",
        "result": "142",
        "unit": "mg/dL",
        "evaluation": "high",
        "range_min": "0",
        "range_max": "200",
        "range_normal_min": "0",
        "range_normal_max": "100",
        "short_description": "Measures 'bad' cholesterol level.",
        "long_description": "LDL (low-density lipoprotein) cholesterol can build up in artery walls..."
      },
      {
        "short_name": "TRIG",
        "long_name": "Triglycerides",
        "category": "Lipid Panel",
        "result": "156",
        "unit": "mg/dL",
        "evaluation": "borderline_high",
        "range_min": "0",
        "range_max": "500",
        "range_normal_min": "0",
        "range_normal_max": "150",
        "short_description": "Measures fat in the blood.",
        "long_description": "Triglycerides are a type of fat found in the blood that stores excess energy..."
      }
    ],
    "interpretation": [
      {
        "title": "Overall Health Assessment",
        "shortcode": "overall_health_assessment",
        "subsections": [
          {
            "subtitle": "Comprehensive Overview",
            "shortcode": "overall_health_assessment_overview",
            "items": [
              {"item": "The patient demonstrates generally healthy hematological parameters with all blood count values within normal ranges."},
              {"item": "Complete blood count results indicate adequate oxygen-carrying capacity and immune function."},
              {"item": "Lipid panel shows areas requiring attention, particularly LDL cholesterol levels."}
            ]
          }
        ]
      },
      {
        "title": "Metabolic Analysis",
        "shortcode": "metabolic_analysis",
        "subsections": [
          {
            "subtitle": "Blood Sugar Assessment",
            "shortcode": "metabolic_analysis_glucose",
            "items": [
              {"item": "Fasting glucose at 102 mg/dL is slightly elevated, indicating pre-diabetic range."},
              {"item": "Recommend lifestyle modifications including regular exercise and reduced simple carbohydrate intake."},
              {"item": "Follow-up HbA1c testing recommended in 3 months to assess long-term glucose control."}
            ]
          }
        ]
      },
      {
        "title": "Cardiovascular Risk Assessment",
        "shortcode": "cardiovascular_risk",
        "subsections": [
          {
            "subtitle": "Lipid Profile Analysis",
            "shortcode": "cardiovascular_risk_lipids",
            "items": [
              {"item": "LDL cholesterol at 142 mg/dL exceeds optimal levels and warrants intervention."},
              {"item": "HDL cholesterol at 58 mg/dL provides moderate cardiovascular protection."},
              {"item": "Triglycerides slightly elevated; consider dietary modifications to reduce saturated fat intake."},
              {"item": "Total cholesterol to HDL ratio of 3.76 indicates moderate cardiovascular risk."}
            ]
          }
        ]
      },
      {
        "title": "Recommendations",
        "shortcode": "recommendations",
        "subsections": [
          {
            "subtitle": "Lifestyle Modifications",
            "shortcode": "recommendations_lifestyle",
            "items": [
              {"item": "Increase aerobic physical activity to at least 150 minutes per week."},
              {"item": "Adopt a Mediterranean-style diet rich in vegetables, fruits, and healthy fats."},
              {"item": "Limit processed foods, saturated fats, and added sugars."},
              {"item": "Consider consultation with a nutritionist for personalized dietary guidance."}
            ]
          },
          {
            "subtitle": "Follow-up Testing",
            "shortcode": "recommendations_followup",
            "items": [
              {"item": "Repeat lipid panel in 3 months after implementing lifestyle changes."},
              {"item": "HbA1c test recommended to assess average blood glucose levels."},
              {"item": "Annual comprehensive metabolic panel for ongoing monitoring."}
            ]
          }
        ]
      }
    ]
  },
  "api_version": "v11",
  "timestamp": "2025-12-16T14:32:18Z"
}
Ключови думи на отговора

Полето evaluation използва стандартизирани стойности. Вижте стойностите на оценката.

POST /api/v12/health-score/analyze Най-нов

Производствена крайна точка с изчерпателно изчисление на здравния резултат и анализ на риска от заболявания. Приема същата заявка като /api/v12/18-09-2026/analyze и добавя полетата по-долу към отговора. Консумира 1 кредит на заявка.

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v12/health-score/analyze" \
  -F "username=YOUR_USERNAME" \
  -F "password=YOUR_PASSWORD" \
  -F "language=en" \
  -F "file=@blood_test.pdf"

Допълнителни полета на отговора

{
  "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"}
  ]
}
Ключови думи на отговора

Полето score_interpretation използва стандартизирани стойности. Вижте стойностите на здравния резултат.

POST /api/v11/health-score/analyze Стабилен

Производствена крайна точка с изчерпателно изчисление на здравния резултат и анализ на риска от заболявания.

Допълнителни полета на отговора

{
  "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"}
  ]
}
Ключови думи на отговора

Полето score_interpretation използва стандартизирани стойности. Вижте стойностите на здравния резултат.

Sandbox крайни точки

Sandbox крайните точки връщат реалистични тестови данни без консумация на API квота. Използвайте ги за разработка и тестване на интеграция.

Sandbox предимства
  • Без консумация на квота
  • Връща реалистични тестови данни
  • Същият формат на заявка като в производството
  • Тествайте интеграцията преди пускане в производство
  • Налично за всички API версии
APISandbox крайна точка
Кръвен тест v12/api/v12/18-09-2026/sandbox
Кръвен тест v12-health/api/v12/health-score/sandbox
Карта на тялото/api/v1/body-map/sandbox
Биологична възраст на кръвта/api/v1/blood-age/sandbox
Интерпретация на ДНК тест/api/v1/dna-interpretation/sandbox
Здравен отчет ДНК + кръв/api/v1/dna-blood-report/sandbox
Консултант за хранителни добавки по ДНК/api/v1/dna-supplements/sandbox
Кръвен тест v11/api/v11/01-06-2025/sandbox
Кръвен тест v11-health/api/v11/health-score/sandbox
AI за хранителен режим/api/v1/nutrition/diet-plan/sandbox
Сравнение на кръвни тестове/api/v1/bloodtest/comparison/sandbox
Анализ на тенденции/api/v1/analytics/trends/sandbox
ICR извличане/api/icr/v1/sandbox
ICR Kan (кръвен тест)/api/icr/v1/kan/sandbox
API за сравнение срещу API за анализ на тенденции

Изберете правилния API за вашата употреба:

ХарактеристикаAI сравнение на кръвни тестовеАнализ на тенденции
Основен фокусAI наративно сравнениеСтатистически анализ на тенденции
AI обработкаПълен AI наративAI-подобрено + статистики
Изходен типНаративни резюметаГрафики, статистики, модели
Най-добър заКакво се е променило между тестоветеДългосрочно проследяване на параметри
Мин. тестове22
Макс. тестове2050

API за анализ на тенденции

Анализирайте тенденциите на здравните параметри във времето с помощта на AI-базирано разпознаване на модели. Идентифицирайте подобрения, влошавания и приложими прозрения от исторически данни за кръвни тестове.

AI за хранителен режим с добавки

Генериране на персонализирани хранителни планове, препоръки за диета и предложения за добавки въз основа на анализ на кръвни тестове с усъвършенствани AI алгоритми.

POST /api/v1/nutrition/diet-plan/analyze Ново

Генерира изчерпателни препоръки за хранене и добавки въз основа на параметрите на кръвните тестове и профила на пациента.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
languagestringНеЕзик на отговора (по подразбиране: en). Вижте поддържаните езици.
patientobjectДаДемографски и здравни данни за пациента
blood_testobjectДаПараметри на кръвни тестове
health_goalsarrayНеЗдравни цели. Вижте стойностите.
dietary_restrictionsarrayНеХранителни ограничения. Вижте стойностите.

Схема на обект пациент

Обект с демографски данни за пациента с gender (вижте стойностите) и activity_level (вижте стойностите).

ПолеТипЗадължителенПо подразбиранеОписание
ageintegerДа-Възраст на пациента в години (18-120)
genderstringДа-Пол на пациента. Вижте стойностите
weightnumberНеnullТегло в кг (за калорични изчисления)
heightnumberНеnullРъст в см (за изчисления на BMI)
conditionsarrayНе[]Медицински състояния (напр. ["diabetes", "hypertension"])
allergiesarrayНе[]Алергии към храни/добавки (напр. ["shellfish", "nuts"])
dietary_preferencesarrayНе[]Хранителни предпочитания. Вижте стойностите
activity_levelstringНе"moderate"Ниво на физическа активност. Вижте стойностите
dietary_restrictionsarrayНе[]Хранителни ограничения. Вижте стойностите
liked_foodsarrayНе[]Предпочитани храни за включване (напр. ["salmon", "spinach"])
disliked_foodsarrayНе[]Храни за избягване в препоръките (напр. ["broccoli"])
meal_frequencyintegerНе3Предпочитани хранения на ден (2-6)
budgetstringНе"moderate"Бюджет за препоръки. Вижте стойностите
medicationsarrayНе[]Текущи лекарства за проверки на взаимодействия
{
  "age": 45,
  "gender": "male",
  "weight": 82,
  "height": 178,
  "activity_level": "moderate",
  "medical_conditions": ["hypertension"],
  "current_medications": ["lisinopril"],
  "allergies": ["shellfish"]
}

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "YOUR_USERNAME",
    "password": "YOUR_PASSWORD",
    "language": "en",
    "patient": {
      "age": 45,
      "gender": "male",
      "weight": 82,
      "height": 178,
      "activity_level": "moderate",
      "medical_conditions": ["hypertension"],
      "allergies": ["shellfish"]
    },
    "blood_test": {
      "lab_date": "2025-12-01",
      "parameters": [
        {"short_name": "VITD", "result": 18, "unit": "ng/mL"},
        {"short_name": "FER", "result": 25, "unit": "ng/mL"},
        {"short_name": "B12", "result": 280, "unit": "pg/mL"},
        {"short_name": "CHOL", "result": 210, "unit": "mg/dL"},
        {"short_name": "HDL", "result": 42, "unit": "mg/dL"},
        {"short_name": "LDL", "result": 140, "unit": "mg/dL"}
      ]
    },
    "health_goals": ["lower_cholesterol", "increase_energy"],
    "dietary_restrictions": ["low_sodium"]
  }'

Python пример

import requests
from typing import Dict, List, Optional

def get_nutrition_plan(
    username: str,
    password: str,
    patient: Dict,
    blood_test: Dict,
    health_goals: Optional[List[str]] = None,
    dietary_restrictions: Optional[List[str]] = None,
    language: str = "en"
) -> Dict:
    """
    Get personalized nutrition and supplement recommendations.

    Args:
        username: API username
        password: API password
        patient: Patient demographics and health info
        blood_test: Blood test parameters
        health_goals: Optional health goals
        dietary_restrictions: Optional dietary restrictions
        language: Response language

    Returns:
        dict: Nutrition plan with supplements
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/nutrition/diet-plan/analyze"

    payload = {
        "username": username,
        "password": password,
        "language": language,
        "patient": patient,
        "blood_test": blood_test
    }

    if health_goals:
        payload["health_goals"] = health_goals
    if dietary_restrictions:
        payload["dietary_restrictions"] = dietary_restrictions

    response = requests.post(url, json=payload, timeout=120)
    response.raise_for_status()
    return response.json()

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

    blood_test = {
        "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"}
        ]
    }

    result = get_nutrition_plan(
        username="your_username",
        password="your_password",
        patient=patient,
        blood_test=blood_test,
        health_goals=["lower_cholesterol", "increase_energy"]
    )

    # Print supplement recommendations
    for supp in result['data']['supplements']:
        print(f"{supp['name']}: {supp['dosage']} - {supp['reason']}")

Примерен отговор

{
  "status": "success",
  "data": {
    "nutrition_plan": {
      "daily_calories": 2100,
      "macros": {
        "protein": {"grams": 105, "percentage": 20},
        "carbohydrates": {"grams": 236, "percentage": 45},
        "fats": {"grams": 82, "percentage": 35}
      },
      "meal_plan": {
        "breakfast": {
          "description": "Oatmeal with berries and walnuts",
          "calories": 420,
          "nutrients": ["fiber", "omega-3", "antioxidants"]
        },
        "lunch": {
          "description": "Grilled salmon salad with olive oil dressing",
          "calories": 550,
          "nutrients": ["omega-3", "protein", "vitamin D"]
        },
        "dinner": {
          "description": "Lean chicken with quinoa and steamed vegetables",
          "calories": 580,
          "nutrients": ["protein", "iron", "fiber"]
        },
        "snacks": [
          {"description": "Greek yogurt with almonds", "calories": 180},
          {"description": "Apple with almond butter", "calories": 200}
        ]
      }
    },
    "supplements": [
      {
        "name": "Vitamin D3",
        "dosage": "2000 IU daily",
        "reason": "Blood levels at 18 ng/mL indicate deficiency (optimal: 30-50 ng/mL)",
        "priority": "high",
        "timing": "With breakfast (fat-containing meal)",
        "duration": "3-6 months, then retest",
        "interactions": []
      },
      {
        "name": "Omega-3 Fish Oil",
        "dosage": "1000mg EPA+DHA daily",
        "reason": "Support cholesterol optimization and cardiovascular health",
        "priority": "medium",
        "timing": "With meals",
        "duration": "Ongoing",
        "interactions": []
      },
      {
        "name": "Coenzyme Q10",
        "dosage": "100mg daily",
        "reason": "Support energy production and heart health",
        "priority": "medium",
        "timing": "With breakfast",
        "duration": "Ongoing",
        "interactions": []
      }
    ],
    "dietary_recommendations": [
      {
        "category": "increase",
        "foods": ["fatty fish", "leafy greens", "nuts", "olive oil"],
        "reason": "Support vitamin D levels and cardiovascular health"
      },
      {
        "category": "decrease",
        "foods": ["processed foods", "red meat", "saturated fats"],
        "reason": "Help lower LDL cholesterol"
      },
      {
        "category": "avoid",
        "foods": ["shellfish", "high-sodium foods"],
        "reason": "Patient allergies and hypertension management"
      }
    ],
    "lifestyle_recommendations": [
      "30 minutes moderate exercise 5 days/week",
      "Sun exposure 15-20 minutes daily for vitamin D",
      "Stress management through meditation or yoga"
    ],
    "follow_up": {
      "retest_date": "2026-03-01",
      "parameters_to_monitor": ["VITD", "CHOL", "HDL", "LDL"]
    }
  },
  "api_version": "v1",
  "timestamp": "2025-12-22T10:30:00Z"
}

Справка на полетата на отговора

nutrition_plan.educational_insights обект
ПолеТипОписание
blood_marker_educationarrayОбразователно съдържание за кръвни маркери и тяхното значение
nutrition_principlesarrayПриложими хранителни принципи въз основа на анализа
blood_marker_education елемент от масив
ПолеТипОписание
markerstringИме на маркера със статус (напр. "Ferritin (Low)", "Vitamin D (Deficient)")
explanationstringПодробно образователно обяснение на маркера
normal_rangestringРеферентен диапазон (специфичен за пол, ако е приложимо)
food_recommendations.power_foods елемент от масив
ПолеТипОписание
foodstringИме на храната (напр. "Salmon", "Spinach")
nutrientsarrayСписък с ключови хранителни вещества (напр. ["omega-3", "vitamin D", "protein"])
servingstringПрепоръчителен размер/честота на порцията (напр. "100g, 3x per week")
whystringЗащо тази храна е препоръчана въз основа на кръвните маркери
supplement_recommendations елемент от масив
ПолеТипОписание
supplementstringИме на добавката (напр. "Vitamin D3", "Iron Bisglycinate")
dosagestringПрепоръчителна доза (напр. "2000 IU daily", "25mg twice daily")
timingstringКога да се приема (напр. "With breakfast", "On empty stomach")
durationstringПродължителност на приема (напр. "3 months then retest", "Ongoing")
reasonstringЗащо е препоръчано въз основа на кръвните маркери и здравните цели

Пълен cURL пример с отговор

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": "en",
    "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": 4,
      "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"},
        {"short_name": "B12", "result": 320, "unit": "pg/mL"},
        {"short_name": "FOLATE", "result": 8.5, "unit": "ng/mL"}
      ]
    },
    "health_goals": ["increase_energy", "improve_iron_levels"]
  }'
Отговор:
{
  "status": "success",
  "data": {
    "nutrition_plan": {
      "daily_calories": 1850,
      "macros": {
        "protein": {"grams": 92, "percentage": 20},
        "carbohydrates": {"grams": 208, "percentage": 45},
        "fats": {"grams": 72, "percentage": 35}
      },
      "educational_insights": {
        "blood_marker_education": [
          {
            "marker": "Ferritin (Low)",
            "explanation": "Ferritin is the storage form of iron in your body. Low levels indicate depleted iron stores, which can lead to fatigue, weakness, and anemia. Your current level of 12 ng/mL is below the optimal range.",
            "normal_range": "Women: 20-200 ng/mL (optimal: 50-150 ng/mL)"
          },
          {
            "marker": "Hemoglobin (Low)",
            "explanation": "Hemoglobin carries oxygen in your red blood cells. Low hemoglobin confirms iron deficiency anemia and explains symptoms like fatigue and shortness of breath.",
            "normal_range": "Women: 12.0-16.0 g/dL"
          },
          {
            "marker": "Vitamin D (Insufficient)",
            "explanation": "Vitamin D is essential for calcium absorption, immune function, and energy. Your level of 22 ng/mL is insufficient; optimal levels are 40-60 ng/mL.",
            "normal_range": "30-100 ng/mL (optimal: 40-60 ng/mL)"
          }
        ],
        "nutrition_principles": [
          "Pair iron-rich foods with vitamin C sources to enhance absorption",
          "Avoid calcium-rich foods and tea/coffee within 2 hours of iron-rich meals",
          "Focus on heme iron sources (meat, fish) which absorb better than plant sources",
          "Include vitamin D-rich foods and consider sun exposure for synthesis"
        ]
      },
      "food_recommendations": {
        "power_foods": [
          {
            "food": "Grass-fed Beef",
            "nutrients": ["heme iron", "B12", "zinc", "protein"],
            "serving": "120g, 3-4x per week",
            "why": "Highest bioavailable iron source to address your ferritin deficiency"
          },
          {
            "food": "Wild Salmon",
            "nutrients": ["vitamin D", "omega-3", "protein", "B12"],
            "serving": "150g, 2-3x per week",
            "why": "Excellent vitamin D source plus omega-3s for inflammation reduction"
          },
          {
            "food": "Spinach with Lemon",
            "nutrients": ["non-heme iron", "folate", "vitamin C"],
            "serving": "100g cooked, daily",
            "why": "Iron plus vitamin C combination maximizes iron absorption"
          },
          {
            "food": "Quinoa",
            "nutrients": ["iron", "protein", "fiber", "magnesium"],
            "serving": "1 cup cooked, daily",
            "why": "Gluten-free grain with good iron content and complete protein"
          },
          {
            "food": "Pumpkin Seeds",
            "nutrients": ["iron", "zinc", "magnesium"],
            "serving": "30g (2 tbsp), daily",
            "why": "Concentrated iron source for snacking, supports energy production"
          }
        ],
        "foods_to_limit": [
          {"food": "Coffee/Tea with meals", "reason": "Tannins block iron absorption by up to 60%"},
          {"food": "Dairy with iron-rich meals", "reason": "Calcium competes with iron for absorption"}
        ]
      }
    },
    "supplement_recommendations": [
      {
        "supplement": "Iron Bisglycinate",
        "dosage": "25mg elemental iron",
        "timing": "Take with vitamin C on empty stomach, 2 hours away from other supplements",
        "duration": "3-6 months, retest ferritin after 3 months",
        "reason": "Ferritin at 12 ng/mL requires supplementation; bisglycinate form is gentle on stomach",
        "priority": "high"
      },
      {
        "supplement": "Vitamin D3",
        "dosage": "2000-4000 IU daily",
        "timing": "With breakfast (fat-containing meal) for absorption",
        "duration": "Ongoing, retest in 3 months to adjust dose",
        "reason": "Level of 22 ng/mL is insufficient; goal is 40-60 ng/mL for optimal health",
        "priority": "high"
      },
      {
        "supplement": "Vitamin C",
        "dosage": "500mg",
        "timing": "Take with iron supplement to enhance absorption",
        "duration": "While taking iron supplements",
        "reason": "Enhances non-heme iron absorption by up to 6x",
        "priority": "medium"
      }
    ],
    "meal_plan": {
      "breakfast": {
        "description": "Quinoa porridge with pumpkin seeds, berries, and coconut milk",
        "calories": 420,
        "key_nutrients": ["iron", "vitamin C", "fiber"]
      },
      "lunch": {
        "description": "Grilled salmon with roasted vegetables and quinoa",
        "calories": 520,
        "key_nutrients": ["vitamin D", "omega-3", "protein"]
      },
      "snack": {
        "description": "Orange slices with pumpkin seeds and dark chocolate",
        "calories": 220,
        "key_nutrients": ["vitamin C", "iron", "magnesium"]
      },
      "dinner": {
        "description": "Grass-fed beef stir-fry with spinach and bell peppers",
        "calories": 480,
        "key_nutrients": ["heme iron", "vitamin C", "B12"]
      }
    },
    "lifestyle_recommendations": [
      "Take iron supplements on an empty stomach for best absorption",
      "Get 15-20 minutes of midday sun exposure for vitamin D synthesis",
      "Space iron supplements 2 hours away from coffee, tea, and calcium",
      "Light exercise can help with energy; avoid intense workouts until iron improves"
    ],
    "follow_up": {
      "retest_date": "2026-03-20",
      "parameters_to_monitor": ["FER", "HGB", "VITD", "iron saturation"],
      "expected_improvements": "Ferritin should increase 20-30 ng/mL, hemoglobin normalize to 12+ g/dL"
    }
  },
  "api_version": "v1",
  "timestamp": "2025-12-20T14:45:22Z"
}

API за сравнение на кръвни тестове

Сравнете множество кръвни тестове, за да идентифицирате промени, подобрения и области, изискващи внимание, с AI-базиран анализ. Получете пълни AI наративни резюмета, обясняващи какво се е променило между тестовете.

POST /api/v1/bloodtest/comparison/analyze

Анализира 2-20 кръвни теста и предоставя подробно сравнение с AI-генерирани наративни прозрения.

Изисквания
  • Изискват се минимум 2 кръвни теста
  • Максимум 20 кръвни теста на заявка
  • Всеки тест трябва да включва lab_date или results_date
  • Поне един общ параметър във всички тестове

Параметри на заявката

ПараметърТипЗадължителенПо подразбиранеОписание
usernamestringДа-Вашето API потребителско име
passwordstringДа-Вашата API парола
languagestringНеenЕзик на отговора. Вижте поддържаните езици
blood_testsarrayДа-Масив от обекти с кръвни тестове (2-20 теста)

blood_tests структура на масив

ПолеТипЗадължителенОписание
lab_datestringДа*Дата на тестването във формат YYYY-MM-DD
results_datestringДа*Алтернатива на lab_date (YYYY-MM-DD)
parametersarrayДаМасив от параметри на кръвни тестове
metadataobjectНеДопълнителни метаданни (lab_name, notes и др.)

*За всеки кръвен тест се изисква или lab_date, или results_date.

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "YOUR_USERNAME",
    "password": "YOUR_PASSWORD",
    "language": "en",
    "blood_tests": [
      {
        "lab_date": "2025-06-15",
        "lab_name": "City Medical Lab",
        "parameters": [
          {"short_name": "HGB", "result": 12.8, "unit": "g/dL"},
          {"short_name": "WBC", "result": 8.2, "unit": "10^9/L"},
          {"short_name": "PLT", "result": 245, "unit": "10^9/L"}
        ]
      },
      {
        "lab_date": "2025-12-15",
        "lab_name": "City Medical Lab",
        "parameters": [
          {"short_name": "HGB", "result": 14.2, "unit": "g/dL"},
          {"short_name": "WBC", "result": 7.1, "unit": "10^9/L"},
          {"short_name": "PLT", "result": 238, "unit": "10^9/L"}
        ]
      }
    ]
  }'

Python пример

import requests
from typing import Dict, List

def compare_blood_tests(
    username: str,
    password: str,
    blood_tests: List[Dict],
    language: str = "en"
) -> Dict:
    """
    Compare multiple blood tests with AI-powered narrative analysis.

    Args:
        username: API username
        password: API password
        blood_tests: List of blood test objects (2-20 tests)
        language: Response language

    Returns:
        dict: Comparison results with AI narrative insights
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/bloodtest/comparison/analyze"

    if len(blood_tests) < 2:
        raise ValueError("Minimum 2 blood tests required")
    if len(blood_tests) > 20:
        raise ValueError("Maximum 20 blood tests allowed")

    payload = {
        "username": username,
        "password": password,
        "language": language,
        "blood_tests": blood_tests
    }

    response = requests.post(url, json=payload, timeout=120)
    response.raise_for_status()
    return response.json()

# Example usage
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"}
            ]
        }
    ]

    result = compare_blood_tests("your_username", "your_password", tests)

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

Справка на полетата на отговора

ПолеТипОписание
comparison_idstringУникален идентификатор за това сравнение (формат: CMP-XXXXXXXX)
comparison_summaryobjectОбщо обобщение: key_findings, overall_trend, дати на отчетите, time_interval
parameter_analysisarrayПодробен анализ за всеки параметър с тип промяна и клинично значение
health_assessmentobjectОбласти на загриженост, подобрение, положителни развития, рискови фактори
recommendationsobjectПоследващи тестове, незабавни действия, промени в начина на живот, насочвания към специалисти
detailed_interpretationobjectAI наративни секции с резюме за ръководството и клинични препоръки

parameter_analysis структура на обект

ПолеТипОписание
parameter_namestringИме на параметър
report1_valuestringСтойност от първия отчет с единица
report2_valuestringСтойност от втория отчет с единица
change_typestringincreased, decreased или stable
change_magnitudestringsignificant, moderate или minor
clinical_significancestringAI обяснение какво означава промяната
trend_assessmentstringpositive, negative или neutral

Примерен отговор

{
  "api_version": "1.0.0",
  "status": "success",
  "message": "Blood test comparison completed successfully",
  "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": "improved",
      "report1_date": "2024-06-15",
      "report2_date": "2024-12-15",
      "time_interval": "183 days between reports",
      "key_findings": [
        "Hemoglobin and RBC levels normalized indicating resolution of anemia",
        "Glucose and HbA1c improved to normal range suggesting better glycemic control",
        "Lipid profile improved with total cholesterol, LDL, HDL, and triglycerides normalized"
      ]
    },
    "parameter_analysis": [
      {
        "parameter_name": "Hemoglobin",
        "report1_value": "12.2 g/dL",
        "report2_value": "14.5 g/dL",
        "change_type": "increased",
        "change_magnitude": "significant",
        "clinical_significance": "Improvement from anemia to normal hemoglobin levels",
        "trend_assessment": "positive"
      },
      {
        "parameter_name": "LDL Cholesterol",
        "report1_value": "155 mg/dL",
        "report2_value": "98 mg/dL",
        "change_type": "decreased",
        "change_magnitude": "significant",
        "clinical_significance": "LDL near optimal range, reducing atherosclerosis risk",
        "trend_assessment": "positive"
      },
      {
        "parameter_name": "HDL Cholesterol",
        "report1_value": "38 mg/dL",
        "report2_value": "55 mg/dL",
        "change_type": "increased",
        "change_magnitude": "significant",
        "clinical_significance": "Improved HDL protective against heart disease",
        "trend_assessment": "positive"
      }
    ],
    "health_assessment": {
      "overall_health_trend": "improved",
      "areas_of_improvement": [
        "Anemia correction",
        "Glycemic control",
        "Lipid profile normalization",
        "Vitamin D and iron status"
      ],
      "areas_of_concern": [],
      "positive_developments": [
        "Resolution of anemia",
        "Normal glucose and HbA1c",
        "Improved cardiovascular risk profile"
      ],
      "risk_factors": [
        "Previous iron deficiency anemia",
        "Prior dyslipidemia",
        "History of impaired glucose metabolism"
      ]
    },
    "recommendations": {
      "immediate_actions": [
        "Continue current supplementation for iron and vitamin D",
        "Maintain glycemic and lipid control with diet and exercise"
      ],
      "follow_up_tests": [
        "Repeat CBC and iron studies in 3 months",
        "Monitor fasting glucose and HbA1c quarterly",
        "Lipid panel recheck in 6 months"
      ],
      "lifestyle_modifications": [
        "Adopt heart-healthy diet low in saturated fats",
        "Increase physical activity to maintain metabolic health"
      ],
      "specialist_referrals": [
        "Consult hematologist if anemia recurs",
        "Endocrinologist referral if glucose control worsens"
      ],
      "monitoring_frequency": "3 months"
    },
    "detailed_interpretation": {
      "sections": [
        {
          "title": "Executive Summary",
          "content": "The patient shows marked improvement in anemia, glucose metabolism, lipid profile, and vitamin status over 6 months."
        },
        {
          "title": "Clinical Recommendations",
          "content": "Continue supplementation and lifestyle measures. Monitor blood counts, iron, glucose, and lipids regularly."
        }
      ]
    },
    "summary": {
      "improved_parameters": 13,
      "stable_parameters": 0,
      "worsened_parameters": 0,
      "overall_trend": "improved"
    },
    "sandbox_mode": false
  }
}
Ключови думи на отговора

Полетата на отговора използват стандартизирани стойности: overall_trend и trend_assessment (вижте оценката на тенденцията), change_type (increased, decreased, stable).

Справка на ключови думи

Пълна справка за всички стойности на ключови думи за вход, използвани във всички крайни точки на Kantesti API. Използвайте тези точни стойности при отправяне на API заявки.

analysis_type API за анализ на тенденции

Определя типа на анализа на тенденцията, който ще се извърши.

СтойностПо подразбиранеОписание
comprehensive✓Пълен анализ със статистики, графики и AI интерпретация
statisticalСамо статистически анализ
summaryСамо обобщение на високо ниво

health_goals API за хранене

Здравни цели за персонализирани хранителни препоръки. Множество стойности могат да се предоставят като масив.

СтойностОписание
maintainПоддържане на текущото здраве (по подразбиране)
improve_energyФокус върху енергийните нива
weight_managementЗдравословно управление на теглото
heart_healthСърдечно-съдово здраве
immune_supportПоддръжка на имунната система
digestive_healthХраносмилателно здраве
bone_healthЗдраве на костите
mental_clarityКогнитивна функция

dietary_restrictions API за хранене

Хранителни ограничения и алергии. Множество стойности могат да се предоставят като масив. Свободен текст също е приемлив за персонализирани ограничения.

СтойностОписание
low_sodiumНамален прием на натрий
low_sugarНамален прием на захар
low_fatНамален прием на мазнини
gluten_freeБез глутен
dairy_freeБез млечни продукти
nut_freeБез ядки
soy_freeБез соя
egg_freeБез яйца
halalХалал-съвместим
kosherКашерно-съвместим
Забележка

Свободен текст също е приемлив за персонализирани хранителни ограничения, които не са изброени по-горе.

dietary_preferences API за хранене

Хранителни предпочитания за планиране на хранене.

СтойностОписание
omnivoreБез ограничения (по подразбиране)
vegetarianБез месо
veganБез животински продукти
pescatarianВегетарианска + риба
ketoКетогенна диета
paleoПалеолитна диета
mediterraneanСредиземноморска диета

activity_level API за хранене

Ниво на физическа активност за калорични и хранителни изчисления.

СтойностОписание
sedentaryМалко или никакво упражнение
lightЛеки упражнения 1-3 дни/седмица
moderateУмерено натоварване 3-5 дни/седмица (по подразбиране)
activeТежки упражнения 6-7 дни/седмица
very_activeМного тежки упражнения или физическа работа

budget API за хранене

Бюджет за препоръки за храна и добавки.

СтойностОписание
lowИкономични опции
moderateБалансирани опции (по подразбиране)
highПремиум опции

gender Всички API-та

Пол на пациента за персонализирани референтни диапазони и препоръки.

СтойностОписание
maleМъж пациент
femaleЖена пациент
otherДруго или неопределено

Изходни ключови думи

Следните ключови думи се появяват в API отговорите. Разбирането на тези стойности ви помага да интерпретирате и показвате резултатите правилно.

evaluation API за кръвни тестове и сравнение

Състояние на оценката на параметъра, показващо как резултатът се сравнява с референтните диапазони.

СтойностОписание
normalВ нормалния референтен диапазон
lowПод нормалния диапазон
highНад нормалния диапазон
critical_lowКритично ниско (изисква незабавно внимание)
critical_highКритично високо (изисква незабавно внимание)
borderline_lowЛеко под нормалния диапазон
borderline_highЛеко над нормалния диапазон

trend_assessment API за сравнение и тенденции

Обща оценка на тенденциите на параметрите между тестовете.

СтойностОписание
positiveПодобрен (движи се към нормалния диапазон)
negativeВлошен (отдалечаващ се от нормалния диапазон)
stableОтносително непроменен между тестовете
improvingОбща тенденция на подобрение
worseningОбща тенденция на влошаване

trend_direction API за анализ на тенденции

Посока на промените на стойностите на параметрите с течение на времето.

СтойностОписание
upwardСтойности, нарастващи с течение на времето
downwardСтойности, намаляващи с течение на времето
stableМинимална промяна с течение на времето

trend_strength API за анализ на тенденции

Величина на наблюдаваната тенденция.

СтойностОписание
strong>15% промяна между периодите
moderate5-15% промяна между периодите
mild<5% промяна между периодите

health_score / score_interpretation API за здравен резултат

Интерпретация на общия здравен резултат въз основа на анализираните параметри.

СтойностОписание
excellentВсички маркери в оптимален диапазон
goodПовечето маркери в нормалния диапазон
fairНякои маркери изискват внимание
poorМножество маркери изискват внимание

Служебни крайни точки

GET /api/info

Връща информация за API платформата, наличните версии и поддържаните функции. Не се изисква удостоверяване.

Примерен отговор

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

Крайна точка за здравна проверка за мониторинг. Връща статуса на услугата. Не се изисква удостоверяване.

Примерен отговор

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

Проверете оставащата си API квота. Изисква удостоверяване.

cURL пример

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

Примерен отговор

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

API за оценка на семейния здравен риск

Издаден: 23 март 2026

API за оценка на семейния здравен риск на Kantesti е AI-базирана платформа за анализ на наследствен здравен риск. Тя генерира изчерпателни отчети за семейно здраве чрез анализ на семейна медицинска история, здравни профили на пациенти и данни за кръвни тестове, за да идентифицира наследствени рискови фактори и да предостави персонализирани препоръки за превантивни грижи.

100+
Езици
9
Категории състояния
14
Семейни отношения

AI-базиран анализ на наследствен риск

API за семейно здраве използва усъвършенствани AI модели за кръстосано съпоставяне на семейна медицинска история с данни за кръвни тестове на пациента, идентифицирайки модели на наследствен риск в категориите сърдечно-съдови, метаболитни, онкологични, неврологични, респираторни, автоимунни, генетични, психично здраве и бъбречно-чернодробни състояния. Отчетите включват оценка на риска, времеви линии за превантивни грижи, препоръки за генетичен скрининг и насоки за начин на живот — всички локализирани на 100+ езика.

Основни характеристики
  • Анализ на наследствен риск — Класификация на висок, умерен и нисък риск с подробна оценка
  • Анализ на семейно дърво — Картографиране на риска по бащина и майчина линия с комбинирани рискови фактори
  • Корелация на кръвни тестове — Кръстосано съпоставяне на семейна история с параметри на кръвни тестове
  • Препоръки за генетичен скрининг — Персонализирани предложения за генетично тестване
  • График на превантивни грижи — Подходящи за възрастта графици за скрининг въз основа на семейния риск
  • Анализ на лекарства — Оценка на взаимодействия между лекарства и наследствена чувствителност
  • Поддръжка на 100+ езика — Пълна локализация на отчета на над 100 езика
  • Sandbox режим — Тествайте интеграцията без консумация на кредити
  • 9 категории състояния — Сърдечно-съдови, метаболитни, онкологични, неврологични, респираторни, автоимунни, генетични, психично здраве, бъбречно-чернодробни
  • 14 семейни отношения — Баща, майка, братя/сестри, баби/дядовци, чичовци, лели, деца

Резюме на крайните точки

Крайна точкаМетодОписаниеУдостоверяване
/api/v1/family-health/analyze POST Генериране на изчерпателен отчет за оценка на семейния здравен риск Задължително (1 кредит)
/api/v1/family-health/validate POST Валидирайте данните на заявката преди анализ (без консумация на квота) Задължително (безплатно)
/api/v1/family-health/supported-languages GET Списък на всички 100+ поддържани езика Не е задължително
/api/v1/family-health/condition-categories GET Списък на всички категории медицински състояния Не е задължително
/api/v1/family-health/family-relations GET Списък на всички поддържани типове семейни отношения Не е задължително
/api/v1/family-health/sandbox/analyze POST Sandbox тестване с примерни данни (без консумация на квота) Задължително (безплатно)
POST /api/v1/family-health/analyze Издаден 23.03.2026

Генерирайте изчерпателен AI-базиран отчет за оценка на семейния здравен риск. Анализира семейна медицинска история, здравни профили на пациенти и данни за кръвни тестове, за да идентифицира наследствени рискови фактори с персонализирани препоръки за превантивни грижи.

Параметри на заявката (JSON тяло)

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
patient_dataobjectДаИнформация за пациента (виж по-долу)
family_membersarrayДа*Масив от обекти на семейни членове (макс 100). *Задължителен, ако health_profile отсъства
health_profileobjectДа*Здравен профил на пациента. *Задължителен, ако family_members отсъства
blood_test_dataarrayНеМасив от обекти с данни за кръвни тестове за корелационен анализ
languagestringНеКод на езика за отговор (по подразбиране: en). Поддържат се 100+ езика

patient_data обект

ПолеТипЗадължителенОписание
namestringНеПълно име на пациента
ageintegerДаВъзраст на пациента в години
genderstringДаmale, female или other
dobstringНеДата на раждане (YYYY-MM-DD)

family_members елемент от масив

ПолеТипЗадължителенОписание
relationstringДаТип на отношението: father, mother, brother, sister, paternal_grandfather, paternal_grandmother, maternal_grandfather, maternal_grandmother, paternal_uncle, paternal_aunt, maternal_uncle, maternal_aunt, son, daughter
ageintegerНеВъзраст на семеен член
conditionsarrayНеМасив от известни медицински състояния (низове)
age_at_diagnosisintegerНеВъзраст при диагностициране на състоянието
deceasedbooleanНеДали семейният член е починал
age_at_deathintegerНеВъзраст при смъртта (ако е починал)
cause_of_deathstringНеПричина за смъртта (ако е починал)

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "YOUR_USERNAME",
    "password": "YOUR_PASSWORD",
    "patient_data": {
      "name": "Jane Doe",
      "age": 42,
      "gender": "female",
      "dob": "1984-03-15"
    },
    "family_members": [
      {
        "relation": "father",
        "age": 70,
        "conditions": ["hypertension", "type2_diabetes"],
        "deceased": false
      },
      {
        "relation": "mother",
        "age": 67,
        "conditions": ["breast_cancer", "osteoporosis"],
        "deceased": false
      },
      {
        "relation": "paternal_grandfather",
        "conditions": ["coronary_artery_disease"],
        "deceased": true,
        "age_at_death": 72,
        "cause_of_death": "heart_attack"
      }
    ],
    "health_profile": {
      "current_medications": ["metformin"],
      "allergies": ["penicillin"],
      "chronic_conditions": ["prediabetes"],
      "lifestyle_factors": ["sedentary", "non_smoker"]
    },
    "blood_test_data": [
      {"parameter": "glucose", "value": 110, "unit": "mg/dL"},
      {"parameter": "HbA1c", "value": 5.9, "unit": "%"},
      {"parameter": "total_cholesterol", "value": 220, "unit": "mg/dL"}
    ],
    "language": "en"
  }'

Python пример

import requests

def family_health_analyze(username: str, password: str, patient_data: dict,
                          family_members: list = None, health_profile: dict = None,
                          blood_test_data: list = None, language: str = "en"):
    """
    Generate a family health risk assessment report using Kantesti API.
    AI-powered hereditary risk analysis with 100+ language support.

    Args:
        username: API username
        password: API password
        patient_data: Patient info dict with 'age' and 'gender' (required)
        family_members: List of family member dicts with medical history
        health_profile: Patient health profile dict
        blood_test_data: Optional blood test data for correlation
        language: Report language code (default: en)

    Returns:
        dict: Full family health risk assessment report
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze"

    payload = {
        "username": username,
        "password": password,
        "patient_data": patient_data,
        "language": language
    }

    if family_members:
        payload["family_members"] = family_members
    if health_profile:
        payload["health_profile"] = health_profile
    if blood_test_data:
        payload["blood_test_data"] = blood_test_data

    response = requests.post(url, json=payload, timeout=120)
    response.raise_for_status()
    return response.json()

# Example usage
if __name__ == "__main__":
    result = family_health_analyze(
        username="your_username",
        password="your_password",
        patient_data={"name": "Jane Doe", "age": 42, "gender": "female"},
        family_members=[
            {"relation": "father", "age": 70, "conditions": ["hypertension", "type2_diabetes"]},
            {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]},
        ],
        health_profile={"chronic_conditions": ["prediabetes"]},
        blood_test_data=[{"parameter": "glucose", "value": 110, "unit": "mg/dL"}],
        language="en"
    )
    print(f"Status: {result['status']}")
    report = result["data"]["report_data"]
    print(f"Risk Level: {report['risk_assessment']['overall_risk_level']}")
    for category, risk in report["risk_assessment"].items():
        if isinstance(risk, dict):
            print(f"  {category}: {risk.get('level', 'N/A')} (score: {risk.get('score', 'N/A')})")

C++ пример (libcurl)

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

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) {
    userp->append((char*)contents, size * nmemb);
    return size * nmemb;
}

std::string familyHealthAnalyze(const std::string& username,
                                 const std::string& password,
                                 const std::string& jsonPayload) {
    CURL* curl = curl_easy_init();
    std::string response;

    if (curl) {
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL,
            "https://app.aibloodtestinterpret.com/api/v1/family-health/analyze");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonPayload.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 120L);

        CURLcode res = curl_easy_perform(curl);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return response;
}

int main() {
    std::string payload = R"({
        "username": "your_username",
        "password": "your_password",
        "patient_data": {"name": "Jane Doe", "age": 42, "gender": "female"},
        "family_members": [
            {"relation": "father", "age": 70, "conditions": ["hypertension"]},
            {"relation": "mother", "age": 67, "conditions": ["breast_cancer"]}
        ],
        "language": "en"
    })";
    std::string result = familyHealthAnalyze("user", "pass", payload);
    std::cout << result << std::endl;
    return 0;
}

Postman пример

Method: POST
URL: https://app.aibloodtestinterpret.com/api/v1/family-health/analyze
Headers:
  Content-Type: application/json
Body (raw JSON):
{
  "username": "YOUR_USERNAME",
  "password": "YOUR_PASSWORD",
  "patient_data": {
    "age": 42,
    "gender": "female"
  },
  "family_members": [
    {"relation": "father", "age": 70, "conditions": ["hypertension"]}
  ],
  "language": "en"
}

Примерен отговор

{
  "status": "success",
  "data": {
    "report_data": {
      "report_title": "Family Health Risk Assessment Report",
      "executive_summary": "Based on family medical history analysis...",
      "hereditary_risk_analysis": {
        "high_risk": [
          {
            "condition": "Cardiovascular Disease",
            "risk_score": 75,
            "contributing_factors": ["Paternal hypertension", "Grandfather coronary artery disease"],
            "recommendation": "Regular cardiac screening recommended"
          }
        ],
        "moderate_risk": [
          {
            "condition": "Type 2 Diabetes",
            "risk_score": 60,
            "contributing_factors": ["Paternal type 2 diabetes", "Elevated glucose levels"],
            "recommendation": "Annual HbA1c and fasting glucose monitoring"
          }
        ],
        "low_risk": []
      },
      "medication_analysis": {
        "current_medications": ["metformin"],
        "hereditary_sensitivities": [],
        "recommendations": ["Continue metformin for prediabetes management"]
      },
      "blood_test_family_correlation": {
        "correlated_findings": [
          "Elevated glucose (110 mg/dL) correlates with paternal diabetes history",
          "Cholesterol level (220 mg/dL) warrants monitoring given cardiovascular family history"
        ]
      },
      "genetic_screening_recommendations": [
        "BRCA1/BRCA2 genetic testing (maternal breast cancer history)",
        "Cardiovascular genetic panel (strong paternal cardiac history)"
      ],
      "lifestyle_recommendations": [
        "Adopt heart-healthy Mediterranean diet",
        "150 minutes weekly moderate aerobic exercise",
        "Maintain healthy BMI (18.5-24.9)"
      ],
      "family_tree_summary": {
        "paternal_lineage": {"risk_factors": ["hypertension", "type2_diabetes", "coronary_artery_disease"]},
        "maternal_lineage": {"risk_factors": ["breast_cancer", "osteoporosis"]},
        "combined_risk_factors": ["cardiovascular", "metabolic", "oncological"]
      },
      "preventive_care_timeline": [
        {"age_range": "40-45", "screenings": ["Annual mammogram", "Cardiac stress test", "HbA1c every 6 months"]},
        {"age_range": "45-50", "screenings": ["Colonoscopy baseline", "Bone density scan", "Lipid panel annually"]},
        {"age_range": "50+", "screenings": ["Biennial mammogram", "Annual cardiac checkup", "Diabetes screening"]}
      ]
    }
  },
  "message": "Family health risk assessment completed successfully",
  "timestamp": "2026-03-23T10:30:00Z",
  "api_version": "1.0.0"
}

Кодове за грешки на API за семейно здраве

Код на грешкаHTTP статусОписание
AUTH_1001401Липсващи идентификационни данни за удостоверяване
AUTH_1002401Невалидно потребителско име или парола
QUOTA_1101403Недостатъчна API квота
QUOTA_1103429Лимитът на скоростта е превишен
VAL_2001400Липсва задължително поле (patient_data.age, patient_data.gender)
VAL_2002400Невалиден формат на данните
VAL_2003400Неподдържан код на език
VAL_2005400Данните на заявката не могат да са празни
VAL_2006400Масивът надвишава максималния размер (макс 100 семейни членове)
VAL_2007400Невалидна структура на данните на пациента
PROC_3001500Генерирането на отчета е неуспешно
PROC_3003500AI грешка при обработка
SRV_5001500Вътрешна сървърна грешка
POST /api/v1/family-health/validate

Валидирайте данните на заявката си преди изпращане за анализ. Не се консумира квота. Използвайте тази крайна точка, за да проверите дали структурата на вашия payload е правилна преди извикване на /analyze.

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/family-health/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "YOUR_USERNAME",
    "password": "YOUR_PASSWORD",
    "patient_data": {"age": 42, "gender": "female"},
    "family_members": [{"relation": "father", "conditions": ["hypertension"]}],
    "language": "en"
  }'

Примерен отговор

{
  "status": "success",
  "data": {
    "validation": {
      "valid": true,
      "data_validation": {"valid": true, "error": null},
      "language_valid": true
    }
  },
  "message": "Validation completed",
  "timestamp": "2026-03-23T10:30:00Z",
  "api_version": "1.0.0"
}

Sandbox крайна точка за семейно здраве

Тествайте интеграцията на API за семейно здраве без консумация на кредити. Sandbox крайната точка връща реалистични примерни данни от отчет.

APISandbox крайна точкаОписание
Анализ на семейно здраве/api/v1/family-health/sandbox/analyzeВръща примерни данни за отчет за оценка на семейния здравен риск

Референтни крайни точки (не се изисква удостоверяване)

Тези крайни точки предоставят референтни данни за изграждане на вашата интеграция. Не се изисква удостоверяване.

Крайна точкаМетодОписание
/api/v1/family-health/supported-languages GET Връща всички 100+ поддържани езикови кодове и имена
/api/v1/family-health/condition-categories GET Връща всички 9 категории състояния с техните състояния (Сърдечно-съдови, Метаболитни, Онкологични, Неврологични, Респираторни, Автоимунни, Генетични, Психично здраве, Бъбречно-чернодробни)
/api/v1/family-health/family-relations GET Връща всички 14 поддържани типа семейни отношения

API за карта на тялото

Издаден: 18 септември 2026

Kantesti API за карта на тялото превръща лабораторния панел в анатомия. Всеки резултат извън референтните граници и всеки граничен резултат се поставя върху една от 13 телесни зони, а API връща както легендата — коя зона, колко тежко и кои маркери са я поставили там — така и URL адрес към съответстваща илюстрация на тялото.

13
Телесни зони
39
Входни езика
0
Извиквания на модел по подразбиране

Детерминистичен по подразбиране

Имената на маркерите се съпоставят с многоезични таблици с псевдоними, покриващи 39 езика на отчети, включително нелатински писмености — изпращате имената на аналитите точно както ги е отпечатала вашата лаборатория, на какъвто и език да ги е отпечатала. Не се извиква модел и не се генерира илюстрация, освен ако не поискате, така че заявката по подразбиране е без AI разход и връща един и същ отговор всеки път за един и същ панел.

Основни характеристики
  • 13 анатомични зони — Мозък и нерви, щитовидна жлеза, сърце и съдове, черен дроб, панкреас, надбъбречни жлези, бъбреци, черва, репродуктивна система, кръв, имунна система, кости, мускули
  • Нива на тежест — Ниво 2 за резултати извън границите, ниво 1 за гранични, така че легендата може да бъде оцветена без допълнителна логика
  • Приписване на маркери — Всяка зона изброява маркерите, които са я поставили там, като най-тежките са първи
  • Изход без език — Ключове на зони и вашите собствени имена на маркери; илюстрацията не съдържа текст, така че една картина обслужва всички езици
  • Подписани URL адреси на илюстрации — Всеки URL адрес на илюстрация носи HMAC подпис, така че никой не може да ги изброи или фалшифицира
  • Честни празни състояния — Чист панел връща споделеното тяло "всичко е наред"; панел, чиито маркирани маркери не могат да бъдат поставени, връща грешка вместо подвеждащо зелено тяло
  • Детерминистичен режим — По подразбиране. Без извикване на модел, без кредит за изображение, възпроизводим изход
  • Sandbox режим — Тествайте интеграцията без консумация на кредити

Резюме на крайните точки

Крайна точкаМетодОписаниеУдостоверяване
/api/v1/body-map/analyze POST Изграждане на карта на тялото от лабораторен панел Задължително (1 кредит)
/api/v1/body-map/validate POST Валидиране на данните и преглед кои маркери са разпознати (без консумация на квота) Задължително (безплатно)
/api/v1/body-map/sandbox POST Sandbox тестване с примерни данни (без консумация на квота) Задължително (безплатно)
/api/v1/body-map/regions GET Списък на всички 13 телесни зони и нивата на тежест Не е задължително
/api/v1/body-map/info GET Метаданни за възможностите, ограничения и детайли за удостоверяване Не е задължително
POST /api/v1/body-map/analyze Издаден 18.09.2026

Поставя всеки маркиран резултат от лабораторен панел върху тялото. Консумира 1 кредит на успешна заявка. Заявка, която не премине валидация, или чиито маркирани маркери не могат да бъдат поставени, не се таксува.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
parametersarrayДаОбекти с лабораторни резултати. Макс. 500. Всеки се нуждае от име на аналит и evaluation.
interpretationarrayНеКлинична интерпретация, използвана само като контекст, когато ai_assist е активиран
ai_assistbooleanНеПозволете на модела да постави маркери, които таблиците с псевдоними не разпознават (по подразбиране: false)
include_imagebooleanНеЗаявете изобразената илюстрация (по подразбиране: false)
image_waitintegerНеСекунди изчакване за новогенерирана илюстрация, 0-30 (по подразбиране: 0)

Полета на обекта параметър

ПолеТипЗадължителноОписание
short_namestringДа*Име на аналита, както е отпечатано от лабораторията. *Изисква се поне едно от short_name, long_name, name, parameter_name или parameter.
long_namestringНеПълно име на аналита; подобрява съпоставянето на съкращения
evaluationstringНеЕдно от high, low, bad, slightly_high, slightly_low, normal. Само маркираните стойности се появяват на картата.
resultstring|numberНеИзмерената стойност; използва се за подреждане кои зони да бъдат изрисувани
unitstringНеМерна единица на резултата, в произволен изпис
range_normal_minnumberНеДолна граница на референтния диапазон
range_normal_maxnumberНеГорна граница на референтния диапазон
categorystringНеЛабораторна категория; използва се като резервен вариант, когато името на аналита е непознато

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "YOUR_USERNAME",
    "password": "YOUR_PASSWORD",
    "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 пример

import requests

def build_body_map(parameters, username, password, include_image=False):
    """
    Map out-of-range blood test results onto the body.

    Args:
        parameters: List of laboratory result objects
        username: API username
        password: API password
        include_image: Request the rendered illustration (spends image credit)

    Returns:
        dict: Body map block with regions, legend and illustration URLs
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/body-map/analyze"

    response = requests.post(url, json={
        "username": username,
        "password": password,
        "parameters": parameters,
        "include_image": include_image,
    }, timeout=60)
    response.raise_for_status()
    return response.json()

# Example usage
if __name__ == "__main__":
    result = build_body_map(
        parameters=[
            {"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"},
        ],
        username="your_username",
        password="your_password",
    )

    body_map = result["data"]["body_map"]
    if result["data"]["all_clear"]:
        print("All clear — nothing flagged.")
    for region in body_map["regions"]:
        severity = "out of range" if region["level"] == 2 else "borderline"
        print(f"  {region['key']}: {severity} ({', '.join(region['markers'])})")
    print(f"Illustration: {body_map['image_url'] or body_map['fallback_url']}")

Примерен отговор

{
  "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"
}

Справка за полетата на отговора

ПолеТипОписание
body_map.specstringКаноничен идентификатор за тази комбинация от зони и нива на тежест. Идентични панели споделят един spec и следователно споделят кеширана илюстрация.
body_map.regions[].keystringЕдин от 13-те ключа на зони
body_map.regions[].levelinteger2 = извън границите, 1 = гранично
body_map.regions[].drawnbooleanДали тази зона е изрисувана върху илюстрацията. Легендата винаги изброява всяка зона; изрисуват се най-много шест.
body_map.regions[].markersarrayИмена на маркерите, които поставят тази зона на картата, най-тежките първи
body_map.unmappedintegerМаркирани маркери, които не могат да бъдат поставени в никоя зона
body_map.image_urlstring|nullКеширана илюстрация. null, докато файлът не съществува — използвайте fallback_url.
body_map.fallback_urlstringПодписан URL адрес за генериране. Винаги присъства. Отговаря с 503 и Retry-After, докато илюстрацията все още се произвежда.
all_clearbooleantrue, когато нищо не е маркирано; прилага се споделеното тяло "всичко е наред"
modestringdeterministic или ai_assisted
Изобразяване на легендата

Отговорът е без език по замисъл: той носи ключове на зони и собствените имена на маркери на вашата лаборатория. Преведете 13-те ключа на зони във вашия собствен клиент и предпочитайте легендата пред илюстрацията — ако моделът за изображения някога изрисува грешен орган, легендата до него все още е вярна.

POST /api/v1/body-map/validate Издаден 18.09.2026

Проверява данните, без да изпълнява анализа, и докладва кои от вашите имена на аналити разпознава двигателят. Изисква се удостоверяване; не се консумира квота и крайната точка продължава да работи в акаунт без останали кредити.

cURL пример

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

Примерен отговор

{
  "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"
}

Референтни крайни точки

И двете референтни крайни точки са без удостоверяване и безплатни.

GET /api/v1/body-map/regions

Изброява 13-те телесни зони в каноничен ред, заедно с нивата на тежест. Използвайте я, за да изградите свои собствени преводи на легендата.

cURL пример

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

Примерен отговор

{
  "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

Метаданни за възможностите: дали двигателят е активиран в това внедряване, ограниченията на заявките, схемата за удостоверяване и пълния списък с крайни точки.

cURL пример

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

Sandbox

POST /api/v1/body-map/sandbox връща примерен отговор точно във формата, който произвежда /analyze, така че клиент, написан срещу sandbox, работи без промяна срещу производствената среда. Изисква се удостоверяване, така че извикването доказва и вашите идентификационни данни, но не се консумира квота и не се извършва анализ.

Код на грешкаHTTPЗначение
AUTH_1001401Липсващи идентификационни данни за удостоверяване
AUTH_1002401Невалидно потребителско име или парола
AUTH_1004400Неправилно форматирани идентификационни данни (грешен тип или прекалено голям размер)
QUOTA_1101403Недостатъчна API квота
VAL_2001400Липсва parameters
VAL_2002400Невалиден формат на данните
VAL_2005400parameters е празен
VAL_2006400Повече от 500 параметъра
VAL_2008400Ред с параметър е неправилно форматиран или без име
RES_4004422Съществуват маркирани резултати, но нито един не се съпоставя с телесна зона
RES_4005503Двигателят за карта на тялото е изключен в това внедряване

API за биологична възраст на кръвта

Издаден: 18 септември 2026

Kantesti API за биологична възраст на кръвта отговаря на въпрос, на който референтният диапазон не може: на колко години изглежда тази кръв? Той изчислява биологичната възраст от рутинен панел чрез публикувания модел PhenoAge на Levine, а наред с това извежда до 18 клинични индекса — FIB-4, HOMA-IR, TyG, eGFR, AIP, NLR, анионна разлика и други — които лабораторният отчет рядко отпечатва.

9
PhenoAge маркери
18
Изведени индекса
39
Входни езика

Число дори от непълен панел

PhenoAge се нуждае от девет маркера, а повечето панели съдържат по-малко. Когато и деветте присъстват, API връща публикуваната формула непроменена. Когато не присъстват, липсващите входни стойности се попълват от популационни медиани и отговорът се връща като source: "partial", така че винаги знаете кое от двете сте получили. И двата пътя са детерминистични: без извикване на модел, без допълнителен разход, един и същ отговор всеки път за един и същ панел.

Основни характеристики
  • Levine PhenoAge — Публикуваният модел, изчислен непроменен, когато и деветте маркера присъстват
  • Плавно влошаване — Непълен панел все пак дава число, ясно обозначено като такова, с изброени липсващи маркери
  • 18 клинични индекса — FIB-4, De Ritis, съотношение A/G, HOMA-IR, TyG, eAG, eGFR, анионна разлика, BUN/креатинин, не-HDL, TG/HDL, AIP, TC/HDL, ремнантен холестерол, NLR, Mentzer, насищане на трансферина, коригиран калций
  • Автоматично конвертиране на единици — SI и конвенционални единици, в произволен изпис, с проверки за физиологична правдоподобност, които отхвърлят невъзможни стойности
  • Многоезично съпоставяне на маркери — Имена на аналити на 39 езика на отчети, включително нелатински писмености; никога не изпращате вътрешни ключове
  • Детерминистичен режим — По подразбиране. Без мрежово извикване, без AI разход, възпроизводим изход
  • Опционални слоеве с модел — Идентифициране на редове, подобрена оценка и персонална бележка, всеки зад собствен флаг. Пълна PhenoAge с девет маркера никога не се замества от модела.
  • 100 езика — За опционалната персонална бележка
  • Sandbox режим — Тествайте интеграцията без консумация на кредити

Резюме на крайните точки

Крайна точкаМетодОписаниеУдостоверяване
/api/v1/blood-age/analyze POST Изчисляване на биологична възраст на кръвта и изведени клинични индекси Задължително (1 кредит)
/api/v1/blood-age/validate POST Валидиране на данните и преглед кои маркери поддържа панелът (без консумация на квота) Задължително (безплатно)
/api/v1/blood-age/sandbox POST Sandbox тестване с примерни данни (без консумация на квота) Задължително (безплатно)
/api/v1/blood-age/biomarkers GET Списък на маркерите, които двигателят чете, и техните целеви единици Не е задължително
/api/v1/blood-age/info GET Метаданни за възможностите, ограничения и детайли за удостоверяване Не е задължително
POST /api/v1/blood-age/analyze Издаден 18.09.2026

Изчислява биологичната възраст на кръвта и изведените индекси от лабораторен панел. Консумира 1 кредит на успешна заявка. Заявка, която не премине валидация, или чийто панел не дава нищо изчислимо, не се таксува.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
parametersarrayДаОбекти с лабораторни резултати. Макс. 500. Всеки се нуждае от име на аналит и резултат.
metadataobjectНеЗаглавна част на отчета. Силно препоръчително: PhenoAge съдържа член за хронологичната възраст. Чете patient_age, patient_sex, dob, lab_date.
patientobjectНе{"age": 42, "gender": "female"} — използва се, когато метаданните не ги съдържат
interpretationarrayНеКлинична интерпретация, използвана само като контекст за модела
languagestringНеЕзик за опционалната персонална бележка (по подразбиране: en). Вижте поддържаните езици.
ai_assistbooleanНеПозволете на модела да разпознава необичайни имена на аналити (по подразбиране: false)
ai_estimatebooleanНеПозволете на модела да подобри частична възраст (по подразбиране: false)
ai_notebooleanНеЗаявете персонална бележка на езика от language (по подразбиране: false)

Деветте маркера на PhenoAge

Изпратете ги под имената, които вашата лаборатория е отпечатала — съпоставянето е по име, на всеки от 39-те поддържани езика на отчети, а единиците се конвертират автоматично.

МаркерТипично имеЦелева единица
albuminАлбуминg/L
creatinineКреатининµmol/L
glucoseГлюкоза / Кръвна захар на гладноmmol/L
crpС-реактивен протеинmg/L
lymphЛимфоцити%
mcvСреден обем на еритроцитаfL
rdwРазпределение на еритроцитите по обем%
alpАлкална фосфатазаU/L
wbcБрой левкоцити10⁹/L

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "YOUR_USERNAME",
    "password": "YOUR_PASSWORD",
    "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 пример

import requests

def biological_blood_age(parameters, metadata, username, password):
    """
    Compute biological blood age from a routine blood panel.

    Args:
        parameters: List of laboratory result objects
        metadata: Report header carrying patient_age and patient_sex
        username: API username
        password: API password

    Returns:
        dict: Blood age block, derived indices, and a flat summary
    """
    url = "https://app.aibloodtestinterpret.com/api/v1/blood-age/analyze"

    response = requests.post(url, json={
        "username": username,
        "password": password,
        "parameters": parameters,
        "metadata": metadata,
    }, timeout=60)
    response.raise_for_status()
    return response.json()

# Example usage
if __name__ == "__main__":
    result = biological_blood_age(
        parameters=[
            {"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"},
        ],
        metadata={"patient_age": "40", "patient_sex": "Male"},
        username="your_username",
        password="your_password",
    )

    summary = result["data"]["summary"]
    if summary["status"] != "ok":
        print(f"No age computed: {summary['status']}")
    else:
        print(f"Chronological: {summary['chronological_age']}")
        print(f"Biological:    {summary['biological_age']} ({summary['source']})")
        print(f"Difference:    {summary['delta_years']:+} years")

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

Примерен отговор

{
  "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"
}

Справка за полетата на отговора

ПолеТипОписание
summary.statusstringok, missing_age, missing_markers, needs_markers или unavailable
summary.sourcestringformula (и деветте маркера), partial (импутирани медиани) или ai (оценка от модела, само с ai_estimate)
summary.chronological_ageinteger|nullВъзраст, прочетена от метаданните или от обекта patient
summary.biological_agenumber|nullИзчислената възраст на кръвта, в години
summary.delta_yearsnumber|nullБиологична минус хронологична. Отрицателна стойност означава по-млада от календарната.
summary.markers_missingarrayКои от деветте маркера на PhenoAge панелът не е предоставил
blood_age.age.inputsobjectРеално използваните конвертирани стойности, в целевите единици
blood_age.age.labelsobjectСобственото име на вашата лаборатория за всеки маркер, който двигателят е съпоставил
blood_age.indices[].bandstringok, borderline, high, low или info
blood_age.indices[].fromarrayЛабораторните редове, от които е изведен този индекс
modestringdeterministic или ai_assisted
Подайте хронологична възраст

PhenoAge съдържа член за възрастта, така че без хронологична възраст отговорът се връща със status: "missing_age" и без число. Изпратете я в metadata.patient_age, или в patient.age, или като дата на раждане в patient.dob. Формулата е приложима за възрасти между 18 и 100 години.

POST /api/v1/blood-age/validate Издаден 18.09.2026

Проверява данните, без да изпълнява анализа, и докладва кои от деветте маркера на PhenoAge предоставя вашият панел и дали е разчетена хронологична възраст — двете неща, които решават дали ще получите пълната формула или частичната оценка. Изисква се удостоверяване; не се консумира квота и крайната точка продължава да работи в акаунт без останали кредити.

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/v1/blood-age/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "YOUR_USERNAME",
    "password": "YOUR_PASSWORD",
    "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": "%"}
    ]
  }'

Примерен отговор

{
  "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"
}

Референтни крайни точки

И двете референтни крайни точки са без удостоверяване и безплатни.

GET /api/v1/blood-age/biomarkers

Изброява деветте входни стойности за PhenoAge, всеки маркер, който двигателят може да прочете, с неговата целева единица, и възрастовия диапазон, за който е приложима формулата.

cURL пример

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

Примерен отговор

{
  "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

Метаданни за възможностите: дали двигателят е активиран в това внедряване, двата режима и какво струва всеки от тях, ограниченията на заявките, схемата за удостоверяване и поддържаните езици.

cURL пример

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

Sandbox

POST /api/v1/blood-age/sandbox връща примерен отговор точно във формата, който произвежда /analyze, така че клиент, написан срещу sandbox, работи без промяна срещу производствената среда. Изисква се удостоверяване, така че извикването доказва и вашите идентификационни данни, но не се консумира квота и не се извършва анализ.

Код на грешкаHTTPЗначение
AUTH_1001401Липсващи идентификационни данни за удостоверяване
AUTH_1002401Невалидно потребителско име или парола
AUTH_1004400Неправилно форматирани идентификационни данни (грешен тип или прекалено голям размер)
QUOTA_1101403Недостатъчна API квота
VAL_2001400Липсва parameters
VAL_2002400Невалиден формат на данните
VAL_2003400Неподдържан езиков код
VAL_2005400parameters е празен
VAL_2006400Повече от 500 параметъра
VAL_2007400Невалиден обект patient
VAL_2008400Ред с параметър е неправилно форматиран или без име
VAL_2009400Неподдържана стойност на patient.gender
RES_4004422Нищо изчислимо от тези параметри
RES_4005503Двигателят за възраст на кръвта е изключен в това внедряване

API за ДНК здраве: интерпретация на ДНК тест, отчет ДНК + кръв и консултант за хранителни добавки

Издаден: 23 септември 2026

С гордост представяме Kantesti API за ДНК здраве: три нови AI модула, които превръщат ДНК теста на пациента в клинични отчети. Интерпретацията на ДНК тест чете файл с необработен генотип или генетичен отчет и изготвя изчерпателен генетичен здравен отчет. Здравният отчет ДНК + кръв съчетава този отчет с интерпретирано кръвно изследване и показва къде гените и лабораторните стойности се потвърждават взаимно и къде си противоречат. Консултантът за хранителни добавки превръща ДНК данните, кръвното изследване и кратък въпросник в персонализиран план за хранителни добавки, изграден върху собствените продукти на вашата клиника.

334
Подбрани ДНК маркера
20
Здравни категории
100+
Езика на отчетите

Проверено спрямо вашия файл

Файлът с необработен генотип се обработва на сървъра и се сравнява с подбран панел от 334 маркера в 20 категории — от гените на метилирането, сърдечно-съдовите и липидните гени до фармакогеномиката, метаболизма на хранителните вещества, носителството и дълголетието. Всяка находка, която AI записва, се проверява спрямо качения файл: rsID, който файлът не съдържа, се премахва, а всеки генотип се привързва към стойността, записана във файла, така че отчетът не може да измисли резултат.

Основни характеристики
  • Всички разпространени източници на ДНК данни — Необработени файлове от 23andMe, AncestryDNA, MyHeritage, FTDNA и LivingDNA, VCF файлове, включително в .zip или .gz; поставени редове с rsID; или генетичен отчет като до 6 PDF, JPG или PNG файла
  • Изчерпателен генетичен отчет — Находки по здравни области, рискове от заболявания, носителство, фармакогеномика (прогнозирани фенотипове на метаболизиране и засегнати класове лекарства), нутригеномика, наследствени признаци, препоръчани последващи изследвания и тревожни сигнали
  • Гени и лабораторни стойности заедно — Отчетът ДНК + кръв отбелязва всяка връзка между генетична находка и лабораторен резултат като confirms, contradicts, neutral или watch, с матрица на риска, приоритетни действия и план за проследяване
  • Планове за добавки с правила за безопасност — Доза, форма, време на прием, продължителност, взаимодействия и дати за повторни изследвания; дозите остават в рамките на допустимите горни граници на прием, прилагат се безопасни граници при бременност, а всичко, което изисква решение на предписващ лекар, попада в clinician_review_required
  • Вашият собствен продуктов каталог — Консултантът препоръчва продуктите, които клиниката ви предлага, отбелязва ги като clinic_library, а в режим „само продукти на клиниката“ изброява нуждите, които каталогът ви не покрива
  • Свързване във верига, без запазване на състояние — Изпратете отчета от модул 1 директно към модули 2 и 3. Нищо не се съхранява към профила на пациента, а файловете с необработен генотип се изтриват след обработката
  • 100+ езика на отчетите — Отчетът се изготвя на езика, който поискате
  • Асинхронен режим — Добавете ?async=1 и проверявайте /api/jobs/<job_id>, така че продължителен анализ никога да не надхвърли времето за изчакване на шлюза
  • Sandbox режим — Тествайте интеграцията без консумация на кредити
Как работят заедно трите модула

1. POST /api/v1/dna-interpretation/analyze с ДНК файла връща data.report. 2. Изпратете този отчет заедно с интерпретирано кръвно изследване към /api/v1/dna-blood-report/analyze. 3. Изпратете същия отчет, отговорите от въпросника и по избор кръвното изследване към /api/v1/dna-supplements/analyze. Модули 2 и 3 приемат ДНК отчета така, както е върнат: обекта report, целия обект data или пълния отговор.

Резюме на крайните точки

Крайна точкаМетодОписаниеУдостоверяване
/api/v1/dna-interpretation/analyzePOSTДНК файл, поставени редове с rsID или страници от отчет → изчерпателен генетичен здравен отчетЗадължително (1 кредит)
/api/v1/dna-interpretation/validatePOSTОбработка на качения файл и преглед на откритото, без извикване на AIЗадължително (безплатно)
/api/v1/dna-interpretation/sandboxPOSTПримерен генетичен отчетЗадължително (безплатно)
/api/v1/dna-interpretation/infoGETПриемани входни данни, ограничения и езици на отчетитеНе е задължително
/api/v1/dna-blood-report/analyzePOSTДНК отчет + интерпретирано кръвно изследване → комбиниран здравен отчетЗадължително (1 кредит)
/api/v1/dna-blood-report/validatePOSTПроверка на данните без извикване на AIЗадължително (безплатно)
/api/v1/dna-blood-report/sandboxPOSTПримерен комбиниран отчетЗадължително (безплатно)
/api/v1/dna-blood-report/infoGETПолета на заявката и ограниченияНе е задължително
/api/v1/dna-supplements/analyzePOSTДНК отчет + кръвно изследване (по избор) + въпросник → план за хранителни добавкиЗадължително (1 кредит)
/api/v1/dna-supplements/validatePOSTПроверка на данните и отговорите без извикване на AIЗадължително (безплатно)
/api/v1/dna-supplements/sandboxPOSTПримерен план за хранителни добавкиЗадължително (безплатно)
/api/v1/dna-supplements/questionnaireGET25-те въпроса и допустимите отговориНе е задължително
/api/v1/dna-supplements/settingsGET PUTЧетене или актуализиране на продуктовия каталог на клиниката и настройките на консултантаЗадължително (безплатно)
/api/v1/dna-supplements/infoGETПолета на заявката и ограниченияНе е задължително
POST /api/v1/dna-interpretation/analyze Издаден 23.09.2026

Интерпретира един ДНК тест и връща изчерпателен генетичен здравен отчет. Изпратете файл като multipart/form-data или поставени редове с генотип като JSON. Каченият файл се обработва, докато чакате, така че нечетим файл получава незабавен отговор 400 и не струва нищо. Един кредит се таксува едва след като отчетът е изготвен.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име (или използвайте HTTP Basic удостоверяване)
passwordstringДаВашата API парола
filefileДа*Един файл с необработен генотип (.txt, .csv, .tsv, .vcf, .zip, .gz, до 80 MB) или до 6 файла с отчети (PDF до 20 MB, JPG/PNG до 10 MB всеки). *Изпратете или file, или genotype_text.
genotype_textstringДа*Поставени редове с генотип (rsID, хромозома, позиция, генотип), до 2 000 000 символа
languagestringНеКод на езика на отчета, напр. en, de, ar (по подразбиране: en). Вижте поддържаните езици.
patientobjectНеage, sex, diagnoses, comorbidities, medications, treatments, notes. В multipart заявка го изпратете като JSON низ.
source_labelstringНеВаше собствено наименование на източника, до 120 символа

cURL пример

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

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

Python пример

import time
import requests

BASE = "https://app.aibloodtestinterpret.com"
AUTH = ("YOUR_USERNAME", "YOUR_PASSWORD")


def run(path, poll=True, **kwargs):
    """POST in async mode, then poll /api/jobs/<id> until the report is ready."""
    resp = requests.post(f"{BASE}{path}?async=1", auth=AUTH, timeout=60, **kwargs)
    body = resp.json()
    if resp.status_code != 202:
        return body                      # an error, or a synchronous answer
    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"])

Примерен отговор

{
  "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"
}

Справка за полетата на отговора

ПолеТипОписание
sourceobjectКакво е прочетено: kind (raw, text или document), разпознат формат и версия на референтния геном, брой записи и определени генотипове, колко от 334-те маркера на панела са открити, както и предупреждения при обработката
report.overall_assessment.levelstringtypical, slightly_elevated, elevated или high
report.sections[]arrayПо един запис за всяка здравна област с risk_level и нейните 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[]arrayПрогнозиран фенотип на метаболизиране за всеки ген и класовете лекарства, които може да засегне. Отчетът никога не посочва дози за предписване.
report.carrier_status[]arraycarrier, not_detected, affected_pattern или inconclusive, винаги за потвърждение с клинично генетично изследване
report.disease_risks[], nutrigenomics[], traits[]arrayРискове от заболявания, находки за хранителните вещества и наследствени признаци заедно с гените, които стоят зад тях
report.recommended_tests[], red_flags[]arrayПоследващи изследвания с посочена причина и находки, които изискват незабавно внимание
POST /api/v1/dna-interpretation/validate Издаден 23.09.2026

Обработва качения файл точно като /analyze и докладва какво е открито, без извикване на AI. Изисква се удостоверяване; не се консумира кредит. Използвайте я, за да проверите файла, преди да изразходвате кредит.

Примерен отговор

{
  "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 Издаден 23.09.2026

Съчетава ДНК отчет с интерпретирано кръвно изследване в един здравен отчет. Всяка връзка между генетична находка и лабораторна стойност се класифицира, а след това следват матрица на риска, приоритетни действия и план за проследяване. Един кредит на успешна заявка.

Параметри на заявката

ПараметърТипЗадължителенОписание
dna_reportobjectДаОтчетът от /api/v1/dna-interpretation/analyze: data.report, целият data или пълният отговор
blood_testobject|arrayДаИнтерпретирано кръвно изследване във вида, в който го връща API за кръвни изследвания (metadata, parameters, interpretation), или само списък с до 500 параметъра с име и result
languagestringНеКод на езика на отчета (по подразбиране: en)
patientobjectНеСъщите полета като при интерпретацията на ДНК тест

Python пример

# 2) DNA + blood health report (uses run() and dna from the example above)
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"])

Примерен отговор

{
  "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."
    }
  }
}

Справка за полетата на отговора

ПолеТипОписание
report.overall_status.levelstringgood, watch, attention или urgent
report.correlations[].concordancestringconfirms, contradicts, neutral или watch
report.risk_matrix[]arrayЗа всяка област: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) и комбинирана оценка
report.priority_actions[]arraypriority (high, medium, low), действието и причината за него
report.monitoring_plan[]arrayКой маркер да се изследва повторно, кога и защо
POST /api/v1/dna-supplements/analyze Издаден 23.09.2026

Изготвя персонализиран план за хранителни добавки от ДНК отчета, отговорите от въпросника и, по избор, интерпретирано кръвно изследване. Продуктовият каталог на клиниката и настройките на консултанта се прилагат автоматично. Един кредит на успешна заявка.

Параметри на заявката

ПараметърТипЗадължителенОписание
dna_reportobjectДаОтчетът от /api/v1/dna-interpretation/analyze
answersobjectДаОтговори от въпросника. diet_type и pregnancy са задължителни; всички 25 въпроса са описани в GET /api/v1/dna-supplements/questionnaire. Непознатите ключове и стойности се пропускат.
blood_testobject|arrayНеСъщият формат като при отчета ДНК + кръв
use_clinic_cataloguebooleanНеПрилагане на продуктовия каталог и настройките на клиниката (по подразбиране: true)
languagestringНеКод на езика на отчета (по подразбиране: en)
patientobjectНеСъщите полета като при интерпретацията на ДНК тест. Посочените тук лекарства се проверяват за взаимодействия.

cURL пример

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

Python пример

# 3) Supplement plan (uses run(), dna and blood_test from the examples above)
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"])

Примерен отговор

{
  "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."
    }
  }
}

Справка за полетата на отговора

ПолеТипОписание
catalogueobjectПриложеният режим на каталога (prefer, only, off) и колко продукта на клиниката са били налични
report.recommendations[]arrayname, form, dose, timing, duration, priority, обосновката rationale (генетична / лабораторна / от въпросника), evidence, cautions, interactions и retest
report.recommendations[].sourcestringclinic_library за продукт от вашия каталог (посочен в product), в противен случай evidence_based
report.uncovered_needs[]arrayВ режим „само продукти на клиниката“: нуждите, които каталогът ви не покрива
report.clinician_review_required[]arrayВсичко, което изисква решение на предписващ лекар: взаимодействия, бременност, бъбречно или чернодробно заболяване, антикоагуланти, дози близо до горната граница на прием
report.avoid_or_caution[], dietary_sources[], retest_plan[]arrayКакво да се избягва, хранителни източници за всяко хранително вещество и кога да се направи повторно изследване
GET PUT /api/v1/dna-supplements/settings Издаден 23.09.2026

Чете или актуализира продуктовия каталог на клиниката и настройките на консултанта. Това е същият каталог като в панела на клиниката и в AI за хранителен режим, така че продукт, добавен на едно място, е наличен навсякъде. Изисква се удостоверяване; не се консумира кредит. Изпратете catalogue, settings или и двете; каталогът заменя целия списък.

ПолеТипОписание
catalogue[]arrayДо 200 продукта: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description
settings.modestringprefer (продукти на клиниката, където са подходящи, а в останалите случаи научно обосновани предложения), only (само продукти на клиниката) или off (каталогът не се използва)
settings.instructionsstringВаши собствени инструкции към AI, до 1 500 символа. Правилата за безопасност винаги имат предимство.
settings.max_itemsintegerМаксимален брой препоръки в един план, от 3 до 12

cURL пример

curl -X PUT "https://app.aibloodtestinterpret.com/api/v1/dna-supplements/settings" \
  -u "YOUR_USERNAME:YOUR_PASSWORD" \
  -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}
  }'

Референтни крайни точки

GET /api/v1/dna-supplements/questionnaire изброява 25-те въпроса (хранителен режим, хранения, плодове и зеленчуци, риба, червено месо, млечни продукти, алкохол, тютюнопушене, кофеин, излагане на слънце, физическа активност, сън, стрес, храносмилане, енергия, приемани в момента добавки, лекарства, алергии, заболявания, бременност, цели, бюджет, предпочитана форма и бележки) с техните типове и допустими стойности. Трите крайни точки /info връщат приеманите входни данни, ограниченията, цената в кредити и пълния списък с езици на отчетите. Нито една от тях не изисква удостоверяване.

Sandbox и асинхронен режим

POST /api/v1/dna-interpretation/sandbox, /api/v1/dna-blood-report/sandbox и /api/v1/dna-supplements/sandbox връщат примерен отчет точно във формата, който произвежда /analyze. Изисква се удостоверяване; не се консумира кредит.

Изготвянето на AI отчет обикновено отнема от една до три минути. Добавете ?async=1 (или заглавката X-Async: 1) и заявката веднага отговаря с 202 и job_id. Проверявайте GET /api/jobs/<job_id> със същите идентификационни данни, докато status стане completed или failed. Крайният отговор се намира в result.response и е идентичен със синхронния.

Код на грешкаHTTPЗначение
AUTH_1001401Липсващи идентификационни данни за удостоверяване
AUTH_1002401Невалидно потребителско име или парола
QUOTA_1101403Недостатъчна API квота
VAL_2001400Липсва задължително поле: file или genotype_text, dna_report, blood_test или задължителен отговор
VAL_2002400Нечетими данни за генотипа, неподдържан тип файл, невалиден JSON или невалиден dna_report
VAL_2003400Неподдържан език на отчета
VAL_2006400Прекалено голям обем: поставен текст, кръвни параметри (500) или каталог (200 продукта)
VAL_2007400Невалиден обект patient
VAL_2008400Няма използваем параметър от кръвното изследване (име и резултат)
PROC_3003500Отговорът на AI не можа да бъде изготвен или валидиран; опитайте отново. Не се таксува кредит.
RES_4005503ДНК модулите са изключени в това внедряване
Подкрепа на клиничните решения

API за ДНК здраве предоставя генерирана от AI информация за лекуващия лекар. Това не е диагноза и не е рецепта. Потребителските ДНК чипове за генотипиране не са клинично секвениране: потвърдете находките, които налагат действие, и находките за носителство с валидирано клинично генетично изследване, преди да предприемете действия въз основа на тях.

ICR - API за интелигентно разпознаване на символи

Издаден: 14 февруари 2026

Kantesti ICR (Интелигентно разпознаване на символи) API е усъвършенствана технология за извличане на текст от документи, която надхвърля далеч традиционния OCR. Захранван от собствения AI двигател на Kantesti, ICR предоставя структуриран JSON изход от всякакъв тип документи, включително медицински отчети, фактури, формуляри и др.

79%
По-бързо от OCR
99,7%
Процент на точност
100+
Езици

Kantesti ICR срещу традиционен OCR

В сравнителни тестове Kantesti ICR демонстрира 79% по-висока производителност в сравнение с традиционните OCR решения. ICR разбира структурата на документа, запазва оформленията на таблици, извлича метаданни и връща чист структуриран JSON — докато OCR предоставя само необработен неструктуриран текст. ICR използва AI-базирано интелигентно разпознаване, за да разбира контекста, да открива автоматично типовете документи и да предоставя структурирани данни, готови за интеграция.

Основни характеристики на ICR
  • Структуриран JSON изход — Таблици, секции, метаданни и необработен текст в чист JSON формат
  • Откриване на тип документ — Автоматично идентифициране на медицински отчети, фактури, формуляри, писма и др.
  • Извличане на таблици — Запазва заглавията на таблиците и данните на редовете с пълна структура
  • Мултиформатна поддръжка — Обработка на документи PDF, JPG, JPEG, PNG
  • Интеграция на кръвен тест (Kan) — Специализирана крайна точка за извличане на документи с кръвни тестове
  • Sandbox режим — Тествайте интеграцията без консумация на кредити
  • Обработка, безопасна за нишки — Едновременна обработка на документи с RLock
  • Кредитна система — 0,5 кредита на API извикване

Резюме на ICR крайните точки

Крайна точкаМетодОписаниеЦена
/api/icr/v1/extract POST ICR извличане на текст от документи 0,5 кредита
/api/icr/v1/sandbox POST ICR sandbox тестване (без обработка) Безплатно
/api/icr/v1/kan POST Анализ на документи с кръвни тестове 0,5 кредита
/api/icr/v1/kan/sandbox POST Sandbox тестване на кръвни тестове Безплатно
/api/icr/info GET API документация и функции Безплатно
/api/icr/health GET Крайна точка за здравна проверка Безплатно
/api/icr/v1/quota POST Проверка на оставащи ICR кредити Безплатно
POST /api/icr/v1/extract Издаден 14.02.2026

Извличане на цялото текстово съдържание от качените документи с помощта на технологията Kantesti ICR. Връща структуриран JSON с откриване на типа на документа, извличане на таблици, парсване на секции и метаданни.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
filefileДаФайл на документа (PDF, JPG, JPEG, PNG)
languagestringНеКод на изходния език (по подразбиране: en). Вижте поддържаните езици.

cURL пример

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

Python пример

import requests

def icr_extract(file_path: str, username: str, password: str, language: str = "en"):
    """
    Extract text from a document using Kantesti ICR API.
    79% faster and more accurate than traditional OCR.

    Args:
        file_path: Path to the document (PDF, JPG, JPEG, PNG)
        username: API username
        password: API password
        language: Output language code (default: en)

    Returns:
        dict: Structured JSON with document content, tables, sections, metadata
    """
    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()

# Example usage
if __name__ == "__main__":
    result = icr_extract(
        file_path="medical_report.pdf",
        username="your_username",
        password="your_password",
        language="en"
    )
    print(f"Status: {result['status']}")
    print(f"Document Type: {result['data']['document_type']}")
    print(f"Pages: {result['data']['page_count']}")
    for page in result['data']['pages']:
        print(f"  Page {page['page_number']}: {len(page['content']['sections'])} sections")
        for table in page['content'].get('tables', []):
            print(f"    Table: {len(table['rows'])} rows x {len(table['headers'])} cols")

C++ пример (libcurl)

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

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) {
    userp->append((char*)contents, size * nmemb);
    return size * nmemb;
}

std::string icrExtract(const std::string& filePath,
                        const std::string& username,
                        const std::string& password,
                        const std::string& language = "en") {
    CURL* curl = curl_easy_init();
    std::string response;

    if (curl) {
        curl_mime* form = curl_mime_init(curl);
        curl_mimepart* field;

        field = curl_mime_addpart(form);
        curl_mime_name(field, "username");
        curl_mime_data(field, username.c_str(), CURL_ZERO_TERMINATED);

        field = curl_mime_addpart(form);
        curl_mime_name(field, "password");
        curl_mime_data(field, password.c_str(), CURL_ZERO_TERMINATED);

        field = curl_mime_addpart(form);
        curl_mime_name(field, "language");
        curl_mime_data(field, language.c_str(), CURL_ZERO_TERMINATED);

        field = curl_mime_addpart(form);
        curl_mime_name(field, "file");
        curl_mime_filedata(field, filePath.c_str());

        curl_easy_setopt(curl, CURLOPT_URL,
            "https://app.aibloodtestinterpret.com/api/icr/v1/extract");
        curl_easy_setopt(curl, CURLOPT_MIMEPOST, form);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 120L);

        CURLcode res = curl_easy_perform(curl);
        curl_mime_free(form);
        curl_easy_cleanup(curl);
    }
    return response;
}

int main() {
    std::string result = icrExtract("medical_report.pdf", "username", "password");
    std::cout << result << std::endl;
    return 0;
}

Примерен отговор

{
  "status": "success",
  "data": {
    "document_type": "blood_test_report",
    "page_count": 1,
    "pages": [
      {
        "page_number": 1,
        "content": {
          "raw_text": "Cologne University Hospital - Blutbild\n\nPatient: Max Mustermann\nDOB: 15.03.1990\nGender: Male\nDate: 10.01.2026\n\nGlucose: 92 mg/dL (74-100)\nALT: 22 U/L (<35)\nCreatinine: 0.9 mg/dL (0.7-1.2)\nWBC: 7.2 10*9/L (3.8-10)\nHGB: 148 g/L (130-175)\nPLT: 230 10*9/L (150-400)",
          "sections": [
            {"type": "header", "content": "Cologne University Hospital - Blutbild"},
            {"type": "paragraph", "content": "Patient: Max Mustermann, DOB: 15.03.1990, Male"},
            {"type": "table", "content": "Blood test results with 6 parameters"}
          ],
          "tables": [
            {
              "headers": ["Test", "Result", "Unit", "Reference Range"],
              "rows": [
                ["Glucose", "92", "mg/dL", "74 - 100"],
                ["ALT", "22", "U/L", "< 35"],
                ["Creatinine", "0.9", "mg/dL", "0.7 - 1.2"],
                ["WBC", "7.2", "10*9/L", "3.8 - 10"],
                ["HGB", "148", "g/L", "130 - 175"],
                ["PLT", "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 кодове за грешки

Код на грешкаHTTP статусОписание
ICR_AUTH_1001401Липсващи идентификационни данни за удостоверяване
ICR_AUTH_1002401Невалидно потребителско име или парола
ICR_QUOTA_1101403Недостатъчно кредити (изисквани са 0,5 кредита на извикване)
ICR_VAL_2001400Не е качен файл
ICR_VAL_2002400Невалиден формат на файл (поддържани: PDF, JPG, JPEG, PNG)
ICR_VAL_2003400Не се разрешават множество PDF файлове в една заявка
ICR_VAL_2004400Не могат да се смесват PDF и изображения в една заявка
ICR_PROC_3001500ICR извличането на текст е неуспешно
ICR_PROC_3004504Изтекло време на обработка
ICR_SRV_5001500Вътрешна сървърна грешка
ICR_SRV_5002503ICR услугата е временно недостъпна
POST /api/icr/v1/kan Издаден 14.02.2026

Анализ на документи с кръвни тестове с помощта на двигателя Kantesti Kan. Обработва документи с кръвни тестове и извлича структурирани тестови параметри, информация за пациента и метаданни.

Параметри на заявката

ПараметърТипЗадължителенОписание
usernamestringДаВашето API потребителско име
passwordstringДаВашата API парола
filefileДаФайл с кръвен тест (PDF, JPG, JPEG, PNG)
languagestringНеКод на езика на отчета (по подразбиране: en)
pdf_passwordstringНеПарола за криптирани PDF файлове

cURL пример

curl -X POST "https://app.aibloodtestinterpret.com/api/icr/v1/kan" \
  -F "username=YOUR_USERNAME" \
  -F "password=YOUR_PASSWORD" \
  -F "language=en" \
  -F "file=@blood_test.pdf"

Python пример

import requests

def icr_kan_analyze(file_path: str, username: str, password: str,
                     language: str = "en", pdf_password: str = None):
    """
    Analyze blood test document using Kantesti ICR Kan engine.

    Args:
        file_path: Path to blood test document (PDF, JPG, JPEG, PNG)
        username: API username
        password: API password
        language: Report language code (default: en)
        pdf_password: Password for encrypted PDFs (optional)

    Returns:
        dict: Structured blood test parameters with patient info
    """
    url = "https://app.aibloodtestinterpret.com/api/icr/v1/kan"

    with open(file_path, "rb") as f:
        files = {"file": (file_path, f)}
        data = {
            "username": username,
            "password": password,
            "language": language
        }
        if pdf_password:
            data["pdf_password"] = pdf_password

        response = requests.post(url, files=files, data=data, timeout=120)
        response.raise_for_status()
        return response.json()

# Example usage
if __name__ == "__main__":
    result = icr_kan_analyze(
        file_path="blood_test_report.pdf",
        username="your_username",
        password="your_password",
        language="en"
    )
    print(f"Status: {result['status']}")
    params = result['data']['test_parameters']
    print(f"Parameters found: {len(params)}")
    for param in params:
        print(f"  {param['name']}: {param['value']} {param['unit']} ({param['reference_range']})")

Примерен отговор

{
  "status": "success",
  "data": {
    "institute_info": {
      "name": "Cologne University Hospital"
    },
    "test_metadata": {
      "report_date": "10.01.2026",
      "sample_type": "Blood",
      "test_date": "10.01.2026"
    },
    "test_parameters": [
      {"name": "Glucose (Fasting Blood Sugar)", "value": "92", "unit": "mg/dL", "reference_range": "74 - 100", "type": "range"},
      {"name": "Alanine aminotransferase (ALT)", "value": "22", "unit": "U/L", "reference_range": "< 35", "type": "range"},
      {"name": "Creatinine", "value": "0.9", "unit": "mg/dL", "reference_range": "0.7 - 1.2", "type": "range"},
      {"name": "Cholesterol", "value": "185", "unit": "mg/dL", "reference_range": "< 200", "type": "range"},
      {"name": "TSH", "value": "2.1", "unit": "mIU/L", "reference_range": "0.38 - 5.33", "type": "range"},
      {"name": "WBC (White Blood Cell Count)", "value": "7.2", "unit": "10*9/L", "reference_range": "3.8 - 10", "type": "range"},
      {"name": "RBC (Red Blood Cell Count)", "value": "4.9", "unit": "10*12/L", "reference_range": "4.5 - 5.5", "type": "range"},
      {"name": "HGB (Hemoglobin)", "value": "148", "unit": "g/L", "reference_range": "130 - 175", "type": "range"},
      {"name": "PLT (Platelet Count)", "value": "230", "unit": "10*9/L", "reference_range": "150 - 400", "type": "range"},
      {"name": "HBsAg", "value": "Negative", "unit": "", "reference_range": "", "type": "binary"}
    ],
    "tester_info": {
      "age": "35 (Calculated from 15.03.1990 to 10.01.2026)",
      "gender": "Male"
    },
    "kan_metadata": {
      "engine": "kantesti-kan",
      "version": "1.0.0",
      "language": "en",
      "timestamp": "2026-02-14T10:30:00Z"
    }
  },
  "credit_cost": 0.5,
  "api_version": "icr-v1",
  "timestamp": "2026-02-14T10:30:00Z"
}

ICR Sandbox крайни точки

Тествайте ICR интеграцията без консумация на кредити. Sandbox крайните точки връщат реалистични примерни данни.

APISandbox крайна точкаОписание
ICR извличане/api/icr/v1/sandboxВръща примерни ICR данни за извличане
ICR Kan/api/icr/v1/kan/sandboxВръща примерни данни за параметри на кръвен тест

ICR срещу OCR сравнение на производителността

Резултати от сравнителен тест — Kantesti ICR срещу традиционен OCR
МетрикаKantesti ICRТрадиционен OCRПодобрение
Скорост на обработкасредно 1,2 сексредно 5,7 сек79% по-бързо
Точност на текста99,7%92,1%+7,6%
Откриване на таблици98,9%71,2%+27,7%
Структуриран изходJSON със секции, таблици, метаданниСуров неструктуриран текстПълна структура
Откриване на тип документАвтоматичноНе е наличноAI-базиран
Многоезична поддръжка100+ езика30-50 езика2x+ покритие
Поддръжка на медицински документиСпециализиранОбщОпит в областта