Крайни точки на API за кръвни изследвания
Пълна справка за всички крайни точки на Kantesti Blood Test API с примери за код на множество езици.
С гордост представяме три ДНК модула за Kantesti API. Интерпретацията на ДНК тест превръща необработени ДНК данни или генетичен отчет в изчерпателен генетичен здравен отчет, Здравният отчет ДНК + кръв го съчетава с кръвно изследване, а Консултантът за хранителни добавки изготвя персонализиран план за хранителни добавки с продуктите на вашата клиника. Прочетете справката за API за ДНК здраве.
https://app.aibloodtestinterpret.com
Дневник на промените
Проследявайте API версии, актуализации и информация за миграция. Използвайте препоръчителните крайни точки за нови интеграции.
И трите актуализации от 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, за да извлечете параметри и да генерирате изчерпателни медицински интерпретации.
Производствена крайна точка за анализ на кръвни тестове. Качете едно или повече изображения на кръвен тест или PDF и получете структурирани параметри, метаданни за пациента и лабораторията, както и пълна клинична интерпретация на всеки от 100-те поддържани езика. Консумира 1 кредит на заявка.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
file | file | Да | Изображение на кръвен тест (PNG, JPG, WEBP) или PDF. Макс 20MB. Повторете полето, за да изпратите няколко изображения. |
language | string | Не | Код на езика за отговор (по подразбиране: en). Вижте поддържаните езици. |
pdf_password | string | Не | Парола за шифровани 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"
}
Производствена крайна точка за анализ на кръвни тестове. Консумира 1 кредит на заявка.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
file | file | Да | Изображение на кръвен тест (PNG, JPG, WEBP) или PDF. Макс 20MB. |
language | string | Не | Код на езика за отговор (по подразбиране: 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"
}
Справка на полетата на отговора
Коренно ниво
| Поле | Тип | Описание |
|---|---|---|
status | string | "success" или "error" |
data | object | Съдържа всички резултати от анализа |
timestamp | string | ISO 8601 времеви печат на отговора |
api_version | string | API версия, използвана за обработка |
data.metadata обект
| Поле | Тип | Описание |
|---|---|---|
lab_date | string | Дата на вземане на кръвта (YYYY-MM-DD) |
results_date | string | Дата на издаване на резултатите (YYYY-MM-DD) |
lab_name | string | Име на лабораторията |
lab_city | string | Град на лабораторията |
lab_country | string | Държава на лабораторията |
patient_name | string | Пълно име на пациента (само метаданни, не се изпраща за интерпретация) |
patient_age | string | Възраст на пациента |
patient_sex | string | "male", "female" или "other" |
data.parameters елемент от масив
| Поле | Тип | Описание |
|---|---|---|
category | string | Категория на параметъра (напр. "Complete Blood Count", "Lipid Panel") |
long_name | string | Пълно име на параметър |
short_name | string | Съкратено име на параметър |
result | string | Измерена стойност |
unit | string | Мерна единица |
range_min | string | Минимален референтен диапазон |
range_max | string | Максимален референтен диапазон |
evaluation | string | Статус на резултата. Вижте стойностите на оценката |
data.interpretation елемент от масив
| Поле | Тип | Описание |
|---|---|---|
title | string | Заглавие на секцията (напр. "Overall Health Assessment") |
content | string | AI-генерирана медицинска интерпретация |
Пълен примерен отговор
{
"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 използва стандартизирани стойности. Вижте стойностите на оценката.
Производствена крайна точка с изчерпателно изчисление на здравния резултат и анализ на риска от заболявания. Приема същата заявка като /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 използва стандартизирани стойности. Вижте стойностите на здравния резултат.
Производствена крайна точка с изчерпателно изчисление на здравния резултат и анализ на риска от заболявания.
Допълнителни полета на отговора
{
"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 квота. Използвайте ги за разработка и тестване на интеграция.
- Без консумация на квота
- Връща реалистични тестови данни
- Същият формат на заявка като в производството
- Тествайте интеграцията преди пускане в производство
- Налично за всички API версии
| API | Sandbox крайна точка |
|---|---|
| Кръвен тест 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 за вашата употреба:
| Характеристика | AI сравнение на кръвни тестове | Анализ на тенденции |
|---|---|---|
| Основен фокус | AI наративно сравнение | Статистически анализ на тенденции |
| AI обработка | Пълен AI наратив | AI-подобрено + статистики |
| Изходен тип | Наративни резюмета | Графики, статистики, модели |
| Най-добър за | Какво се е променило между тестовете | Дългосрочно проследяване на параметри |
| Мин. тестове | 2 | 2 |
| Макс. тестове | 20 | 50 |
API за анализ на тенденции
Анализирайте тенденциите на здравните параметри във времето с помощта на AI-базирано разпознаване на модели. Идентифицирайте подобрения, влошавания и приложими прозрения от исторически данни за кръвни тестове.
Анализира тенденциите на параметрите на кръвните тестове през множество дати на тестване за идентифициране на модели и предоставяне на здравни прозрения.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
language | string | Не | Език на отговора (по подразбиране: en). Вижте поддържаните езици. |
blood_tests | array | Да | Масив от обекти с кръвни тестове (мин: 2, макс: 50) |
analysis_type | string | Не | Тип на анализа. Вижте стойностите. |
analysis_options | object | Не | Опции за конфигуриране на анализа |
analysis_options обект
| Поле | Тип | По подразбиране | Описание |
|---|---|---|---|
include_predictions | boolean | true | Включване на AI прогнози за тенденции |
include_statistics | boolean | true | Включване на статистически анализ (средно, мин, макс, стандартно отклонение) |
include_charts | boolean | true | Включване на конфигурационни данни за диаграми за визуализация |
blood_tests структура на масив
- Минимум: 2 изисквани кръвни теста
- Максимум: 50 кръвни теста на заявка
- Всеки тест трябва да има
lab_dateИЛИresults_date - Използвайте последователни имена на параметри във всички тестове за точно проследяване на тенденциите
| Поле | Тип | Задължителен | Описание |
|---|---|---|---|
lab_date | string | Да* | Дата на тестването във формат YYYY-MM-DD |
results_date | string | Да* | Алтернатива на lab_date (YYYY-MM-DD) |
parameters | array | Да | Масив от параметри на кръвни тестове |
metadata | object | Не | Допълнителни метаданни (lab_name, notes и др.) |
*За всеки кръвен тест се изисква или lab_date, или results_date.
blood_tests[].parameters структура на масив
| Поле | Тип | Задължителен | Описание |
|---|---|---|---|
name | string | Да | Име на параметър (използвайте последователно именуване във всички тестове!) |
short_name | string | Не | Кратък код на параметъра (напр. HGB, GLU, CHOL) |
value | number | Да | Измерена стойност (може също да се използва result) |
unit | string | Да | Мерна единица (напр. g/dL, mg/dL, %) |
range_min | number | Не | Минимална стойност на референтния диапазон |
range_max | number | Не | Максимална стойност на референтния диапазон |
category | string | Не | Категория на параметъра (напр. "Lipid Panel", "Complete Blood Count") |
evaluation | string | Не | Предварително оценен статус. Вижте стойностите на оценката |
cURL пример
curl -X POST "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze" \
-H "Content-Type: application/json" \
-d '{
"username": "YOUR_USERNAME",
"password": "YOUR_PASSWORD",
"language": "en",
"analysis_type": "comprehensive",
"analysis_options": {
"include_predictions": true,
"include_statistics": true,
"include_charts": true
},
"blood_tests": [
{
"lab_date": "2024-01-15",
"parameters": [
{"name": "Fasting Glucose", "short_name": "GLU", "value": 98, "unit": "mg/dL"},
{"name": "Hemoglobin A1c", "short_name": "HBA1C", "value": 5.6, "unit": "%"},
{"name": "Total Cholesterol", "short_name": "CHOL", "value": 185, "unit": "mg/dL"},
{"name": "LDL Cholesterol", "short_name": "LDL", "value": 110, "unit": "mg/dL"},
{"name": "HDL Cholesterol", "short_name": "HDL", "value": 52, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-05-20",
"parameters": [
{"name": "Fasting Glucose", "short_name": "GLU", "value": 92, "unit": "mg/dL"},
{"name": "Hemoglobin A1c", "short_name": "HBA1C", "value": 5.4, "unit": "%"},
{"name": "Total Cholesterol", "short_name": "CHOL", "value": 178, "unit": "mg/dL"},
{"name": "LDL Cholesterol", "short_name": "LDL", "value": 102, "unit": "mg/dL"},
{"name": "HDL Cholesterol", "short_name": "HDL", "value": 55, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-09-10",
"parameters": [
{"name": "Fasting Glucose", "short_name": "GLU", "value": 88, "unit": "mg/dL"},
{"name": "Hemoglobin A1c", "short_name": "HBA1C", "value": 5.3, "unit": "%"},
{"name": "Total Cholesterol", "short_name": "CHOL", "value": 168, "unit": "mg/dL"},
{"name": "LDL Cholesterol", "short_name": "LDL", "value": 92, "unit": "mg/dL"},
{"name": "HDL Cholesterol", "short_name": "HDL", "value": 58, "unit": "mg/dL"}
]
},
{
"lab_date": "2024-12-18",
"parameters": [
{"name": "Fasting Glucose", "short_name": "GLU", "value": 85, "unit": "mg/dL"},
{"name": "Hemoglobin A1c", "short_name": "HBA1C", "value": 5.2, "unit": "%"},
{"name": "Total Cholesterol", "short_name": "CHOL", "value": 162, "unit": "mg/dL"},
{"name": "LDL Cholesterol", "short_name": "LDL", "value": 85, "unit": "mg/dL"},
{"name": "HDL Cholesterol", "short_name": "HDL", "value": 62, "unit": "mg/dL"}
]
}
]
}'
Python пример
import requests
from typing import List, Dict, Optional
def analyze_trends(
username: str,
password: str,
blood_tests: List[Dict],
language: str = "en",
analysis_type: str = "comprehensive"
) -> Dict:
"""
Analyze blood test trends over time.
Args:
username: API username
password: API password
blood_tests: List of blood test objects with lab_date and parameters
language: Response language code
analysis_type: comprehensive, quick, or focused
Returns:
dict: Trend analysis results
"""
url = "https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze"
payload = {
"username": username,
"password": password,
"language": language,
"analysis_type": analysis_type,
"blood_tests": blood_tests
}
response = requests.post(url, json=payload, timeout=120)
response.raise_for_status()
return response.json()
# Example usage
if __name__ == "__main__":
blood_tests = [
{
"lab_date": "2025-01-15",
"parameters": [
{"short_name": "HGB", "result": 12.5, "unit": "g/dL"},
{"short_name": "CHOL", "result": 220, "unit": "mg/dL"}
]
},
{
"lab_date": "2025-06-15",
"parameters": [
{"short_name": "HGB", "result": 13.2, "unit": "g/dL"},
{"short_name": "CHOL", "result": 195, "unit": "mg/dL"}
]
},
{
"lab_date": "2025-12-01",
"parameters": [
{"short_name": "HGB", "result": 14.1, "unit": "g/dL"},
{"short_name": "CHOL", "result": 180, "unit": "mg/dL"}
]
}
]
result = analyze_trends(
username="your_username",
password="your_password",
blood_tests=blood_tests
)
print(f"Overall trend: {result['data']['overall_trend']}")
for trend in result['data']['parameter_trends']:
print(f"{trend['parameter']}: {trend['direction']} ({trend['change_percent']}%)")
C++ пример (libcurl + nlohmann/json)
#include <iostream>
#include <string>
#include <curl/curl.h>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
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 analyzeTrends(const std::string& username,
const std::string& password,
const json& bloodTests,
const std::string& language = "en") {
CURL* curl = curl_easy_init();
std::string response;
if (curl) {
json payload = {
{"username", username},
{"password", password},
{"language", language},
{"analysis_type", "comprehensive"},
{"blood_tests", bloodTests}
};
std::string jsonStr = payload.dump();
struct curl_slist* headers = nullptr;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL,
"https://app.aibloodtestinterpret.com/api/v1/analytics/trends/analyze");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonStr.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() {
json bloodTests = json::array({
{{"lab_date", "2025-01-15"}, {"parameters", {{{"short_name", "HGB"}, {"result", 12.5}, {"unit", "g/dL"}}}}},
{{"lab_date", "2025-06-15"}, {"parameters", {{{"short_name", "HGB"}, {"result", 13.2}, {"unit", "g/dL"}}}}},
{{"lab_date", "2025-12-01"}, {"parameters", {{{"short_name", "HGB"}, {"result", 14.1}, {"unit", "g/dL"}}}}}
});
std::string result = analyzeTrends("username", "password", bloodTests);
std::cout << result << std::endl;
return 0;
}
Справка на полетата на отговора
| Поле | Тип | Описание |
|---|---|---|
analysis_id | string | Уникален идентификатор за този анализ (формат: TRD-XXXXXXXX) |
analysis_period | object | Детайли за времевия период: start_date, end_date, span_months, total_tests |
categories | array | Списък с намерените категории параметри (напр. "Lipid Panel", "Complete Blood Count") |
chart_config | object | Готови за диаграми данни: dates, raw_dates, simple_dates за визуализация |
overall_health_trend | object | Обобщение, масив health_risks и препоръки |
parameter_trends | array | Подробен анализ за всеки параметър със статистики |
risk_factors | array | Идентифицирани рискови фактори за здравето |
parameter_trends структура на обект
| Поле | Тип | Описание |
|---|---|---|
parameter | string | Стандартизирано име на параметър |
short_name | string | Съкратено име на параметър |
category | string | Категория на параметъра (напр. "Lipid Panel") |
unit | string | Мерна единица |
trend_data | array | Масив от обекти {date, value} за изграждане на диаграми |
statistical_analysis | object | average, min, max, standard_deviation, trend_direction, trend_strength |
analysis | object | AI интерпретация: description, significant_variations, trend |
interpretation | string | Разбираемо за хората описание на параметъра |
Примерен отговор
{
"api_version": "1.0.0",
"status": "success",
"message": "Trend analysis completed successfully",
"timestamp": "2025-12-22T01:12:49.262700Z",
"data": {
"analysis_id": "TRD-49B4C616",
"analysis_period": {
"start_date": "2024-01-15",
"end_date": "2024-12-18",
"span_months": 11,
"total_tests": 4
},
"categories": [
"Metabolic Panel",
"Vitamins",
"Diabetes Markers",
"Iron Studies",
"Lipid Panel",
"Complete Blood Count"
],
"chart_config": {
"dates": ["Jan 2024", "May 2024", "Sep 2024", "Dec 2024"],
"raw_dates": ["2024-01-15", "2024-05-20", "2024-09-10", "2024-12-18"]
},
"language": "en",
"overall_health_trend": {
"summary": "Overall, the blood test parameters show positive trends with improvements in hemoglobin, lipid profile including LDL and HDL cholesterol, vitamin D status, and iron stores.",
"health_risks": [],
"recommendations": []
},
"parameter_trends": [
{
"parameter": "Hemoglobin (Hb)",
"short_name": "Hemoglobin",
"category": "Complete Blood Count",
"unit": "g/dL",
"original_names": ["Hemoglobin", "HGB"],
"trend_data": [
{"date": "2024-01-15", "value": 12.8},
{"date": "2024-05-20", "value": 13.5},
{"date": "2024-09-10", "value": 14.2},
{"date": "2024-12-18", "value": 14.8}
],
"statistical_analysis": {
"average": 13.82,
"min": 12.8,
"max": 14.8,
"standard_deviation": 0.87,
"trend_direction": "upward",
"trend_strength": "moderate"
},
"analysis": {
"description": "Hemoglobin measures the oxygen-carrying protein in red blood cells.",
"significant_variations": "Initially low at 12.8 g/dL, then gradually increased to 14.8 g/dL.",
"trend": "increasing",
"unit": "g/dL"
},
"interpretation": "Hemoglobin measures the oxygen-carrying protein in red blood cells."
},
{
"parameter": "Low-Density Lipoprotein Cholesterol (LDL-C)",
"short_name": "Low-Densit",
"category": "Lipid Panel",
"unit": "mg/dL",
"trend_data": [
{"date": "2024-01-15", "value": 110.0},
{"date": "2024-05-20", "value": 102.0},
{"date": "2024-09-10", "value": 92.0},
{"date": "2024-12-18", "value": 85.0}
],
"statistical_analysis": {
"average": 97.25,
"min": 85.0,
"max": 110.0,
"standard_deviation": 11.0,
"trend_direction": "downward",
"trend_strength": "strong"
},
"analysis": {
"description": "LDL-C is the 'bad' cholesterol associated with increased heart disease risk.",
"significant_variations": "LDL-C shifted from high (110 mg/dL) to normal (85 mg/dL).",
"trend": "decreasing"
}
}
],
"risk_factors": [],
"sandbox_mode": false
}
}
Полетата на отговора използват стандартизирани стойности: trend_direction (вижте стойностите), trend_strength (вижте стойностите).
AI за хранителен режим с добавки
Генериране на персонализирани хранителни планове, препоръки за диета и предложения за добавки въз основа на анализ на кръвни тестове с усъвършенствани AI алгоритми.
Генерира изчерпателни препоръки за хранене и добавки въз основа на параметрите на кръвните тестове и профила на пациента.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
language | string | Не | Език на отговора (по подразбиране: en). Вижте поддържаните езици. |
patient | object | Да | Демографски и здравни данни за пациента |
blood_test | object | Да | Параметри на кръвни тестове |
health_goals | array | Не | Здравни цели. Вижте стойностите. |
dietary_restrictions | array | Не | Хранителни ограничения. Вижте стойностите. |
Схема на обект пациент
Обект с демографски данни за пациента с gender (вижте стойностите) и activity_level (вижте стойностите).
| Поле | Тип | Задължителен | По подразбиране | Описание |
|---|---|---|---|---|
age | integer | Да | - | Възраст на пациента в години (18-120) |
gender | string | Да | - | Пол на пациента. Вижте стойностите |
weight | number | Не | null | Тегло в кг (за калорични изчисления) |
height | number | Не | null | Ръст в см (за изчисления на BMI) |
conditions | array | Не | [] | Медицински състояния (напр. ["diabetes", "hypertension"]) |
allergies | array | Не | [] | Алергии към храни/добавки (напр. ["shellfish", "nuts"]) |
dietary_preferences | array | Не | [] | Хранителни предпочитания. Вижте стойностите |
activity_level | string | Не | "moderate" | Ниво на физическа активност. Вижте стойностите |
dietary_restrictions | array | Не | [] | Хранителни ограничения. Вижте стойностите |
liked_foods | array | Не | [] | Предпочитани храни за включване (напр. ["salmon", "spinach"]) |
disliked_foods | array | Не | [] | Храни за избягване в препоръките (напр. ["broccoli"]) |
meal_frequency | integer | Не | 3 | Предпочитани хранения на ден (2-6) |
budget | string | Не | "moderate" | Бюджет за препоръки. Вижте стойностите |
medications | array | Не | [] | Текущи лекарства за проверки на взаимодействия |
{
"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_education | array | Образователно съдържание за кръвни маркери и тяхното значение |
nutrition_principles | array | Приложими хранителни принципи въз основа на анализа |
blood_marker_education елемент от масив
| Поле | Тип | Описание |
|---|---|---|
marker | string | Име на маркера със статус (напр. "Ferritin (Low)", "Vitamin D (Deficient)") |
explanation | string | Подробно образователно обяснение на маркера |
normal_range | string | Референтен диапазон (специфичен за пол, ако е приложимо) |
food_recommendations.power_foods елемент от масив
| Поле | Тип | Описание |
|---|---|---|
food | string | Име на храната (напр. "Salmon", "Spinach") |
nutrients | array | Списък с ключови хранителни вещества (напр. ["omega-3", "vitamin D", "protein"]) |
serving | string | Препоръчителен размер/честота на порцията (напр. "100g, 3x per week") |
why | string | Защо тази храна е препоръчана въз основа на кръвните маркери |
supplement_recommendations елемент от масив
| Поле | Тип | Описание |
|---|---|---|
supplement | string | Име на добавката (напр. "Vitamin D3", "Iron Bisglycinate") |
dosage | string | Препоръчителна доза (напр. "2000 IU daily", "25mg twice daily") |
timing | string | Кога да се приема (напр. "With breakfast", "On empty stomach") |
duration | string | Продължителност на приема (напр. "3 months then retest", "Ongoing") |
reason | string | Защо е препоръчано въз основа на кръвните маркери и здравните цели |
Пълен 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 наративни резюмета, обясняващи какво се е променило между тестовете.
Анализира 2-20 кръвни теста и предоставя подробно сравнение с AI-генерирани наративни прозрения.
- Изискват се минимум 2 кръвни теста
- Максимум 20 кръвни теста на заявка
- Всеки тест трябва да включва
lab_dateилиresults_date - Поне един общ параметър във всички тестове
Параметри на заявката
| Параметър | Тип | Задължителен | По подразбиране | Описание |
|---|---|---|---|---|
username | string | Да | - | Вашето API потребителско име |
password | string | Да | - | Вашата API парола |
language | string | Не | en | Език на отговора. Вижте поддържаните езици |
blood_tests | array | Да | - | Масив от обекти с кръвни тестове (2-20 теста) |
blood_tests структура на масив
| Поле | Тип | Задължителен | Описание |
|---|---|---|---|
lab_date | string | Да* | Дата на тестването във формат YYYY-MM-DD |
results_date | string | Да* | Алтернатива на lab_date (YYYY-MM-DD) |
parameters | array | Да | Масив от параметри на кръвни тестове |
metadata | object | Не | Допълнителни метаданни (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_id | string | Уникален идентификатор за това сравнение (формат: CMP-XXXXXXXX) |
comparison_summary | object | Общо обобщение: key_findings, overall_trend, дати на отчетите, time_interval |
parameter_analysis | array | Подробен анализ за всеки параметър с тип промяна и клинично значение |
health_assessment | object | Области на загриженост, подобрение, положителни развития, рискови фактори |
recommendations | object | Последващи тестове, незабавни действия, промени в начина на живот, насочвания към специалисти |
detailed_interpretation | object | AI наративни секции с резюме за ръководството и клинични препоръки |
parameter_analysis структура на обект
| Поле | Тип | Описание |
|---|---|---|
parameter_name | string | Име на параметър |
report1_value | string | Стойност от първия отчет с единица |
report2_value | string | Стойност от втория отчет с единица |
change_type | string | increased, decreased или stable |
change_magnitude | string | significant, moderate или minor |
clinical_significance | string | AI обяснение какво означава промяната |
trend_assessment | string | positive, 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% промяна между периодите |
moderate | 5-15% промяна между периодите |
mild | <5% промяна между периодите |
health_score / score_interpretation API за здравен резултат
Интерпретация на общия здравен резултат въз основа на анализираните параметри.
| Стойност | Описание |
|---|---|
excellent | Всички маркери в оптимален диапазон |
good | Повечето маркери в нормалния диапазон |
fair | Някои маркери изискват внимание |
poor | Множество маркери изискват внимание |
Служебни крайни точки
Връща информация за 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"
}
Крайна точка за здравна проверка за мониторинг. Връща статуса на услугата. Не се изисква удостоверяване.
Примерен отговор
{
"status": "healthy",
"timestamp": "2025-12-22T10:30:00Z",
"uptime": "99.99%"
}
Проверете оставащата си 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 за оценка на семейния здравен риск
API за оценка на семейния здравен риск на Kantesti е AI-базирана платформа за анализ на наследствен здравен риск. Тя генерира изчерпателни отчети за семейно здраве чрез анализ на семейна медицинска история, здравни профили на пациенти и данни за кръвни тестове, за да идентифицира наследствени рискови фактори и да предостави персонализирани препоръки за превантивни грижи.
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 тестване с примерни данни (без консумация на квота) | Задължително (безплатно) |
Генерирайте изчерпателен AI-базиран отчет за оценка на семейния здравен риск. Анализира семейна медицинска история, здравни профили на пациенти и данни за кръвни тестове, за да идентифицира наследствени рискови фактори с персонализирани препоръки за превантивни грижи.
Параметри на заявката (JSON тяло)
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
patient_data | object | Да | Информация за пациента (виж по-долу) |
family_members | array | Да* | Масив от обекти на семейни членове (макс 100). *Задължителен, ако health_profile отсъства |
health_profile | object | Да* | Здравен профил на пациента. *Задължителен, ако family_members отсъства |
blood_test_data | array | Не | Масив от обекти с данни за кръвни тестове за корелационен анализ |
language | string | Не | Код на езика за отговор (по подразбиране: en). Поддържат се 100+ езика |
patient_data обект
| Поле | Тип | Задължителен | Описание |
|---|---|---|---|
name | string | Не | Пълно име на пациента |
age | integer | Да | Възраст на пациента в години |
gender | string | Да | male, female или other |
dob | string | Не | Дата на раждане (YYYY-MM-DD) |
family_members елемент от масив
| Поле | Тип | Задължителен | Описание |
|---|---|---|---|
relation | string | Да | Тип на отношението: father, mother, brother, sister, paternal_grandfather, paternal_grandmother, maternal_grandfather, maternal_grandmother, paternal_uncle, paternal_aunt, maternal_uncle, maternal_aunt, son, daughter |
age | integer | Не | Възраст на семеен член |
conditions | array | Не | Масив от известни медицински състояния (низове) |
age_at_diagnosis | integer | Не | Възраст при диагностициране на състоянието |
deceased | boolean | Не | Дали семейният член е починал |
age_at_death | integer | Не | Възраст при смъртта (ако е починал) |
cause_of_death | string | Не | Причина за смъртта (ако е починал) |
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_1001 | 401 | Липсващи идентификационни данни за удостоверяване |
AUTH_1002 | 401 | Невалидно потребителско име или парола |
QUOTA_1101 | 403 | Недостатъчна API квота |
QUOTA_1103 | 429 | Лимитът на скоростта е превишен |
VAL_2001 | 400 | Липсва задължително поле (patient_data.age, patient_data.gender) |
VAL_2002 | 400 | Невалиден формат на данните |
VAL_2003 | 400 | Неподдържан код на език |
VAL_2005 | 400 | Данните на заявката не могат да са празни |
VAL_2006 | 400 | Масивът надвишава максималния размер (макс 100 семейни членове) |
VAL_2007 | 400 | Невалидна структура на данните на пациента |
PROC_3001 | 500 | Генерирането на отчета е неуспешно |
PROC_3003 | 500 | AI грешка при обработка |
SRV_5001 | 500 | Вътрешна сървърна грешка |
Валидирайте данните на заявката си преди изпращане за анализ. Не се консумира квота. Използвайте тази крайна точка, за да проверите дали структурата на вашия 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 крайната точка връща реалистични примерни данни от отчет.
| API | Sandbox крайна точка | Описание |
|---|---|---|
| Анализ на семейно здраве | /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 за карта на тялото
Kantesti API за карта на тялото превръща лабораторния панел в анатомия. Всеки резултат извън референтните граници и всеки граничен резултат се поставя върху една от 13 телесни зони, а API връща както легендата — коя зона, колко тежко и кои маркери са я поставили там — така и URL адрес към съответстваща илюстрация на тялото.
Детерминистичен по подразбиране
Имената на маркерите се съпоставят с многоезични таблици с псевдоними, покриващи 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 | Метаданни за възможностите, ограничения и детайли за удостоверяване | Не е задължително |
Поставя всеки маркиран резултат от лабораторен панел върху тялото. Консумира 1 кредит на успешна заявка. Заявка, която не премине валидация, или чиито маркирани маркери не могат да бъдат поставени, не се таксува.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
parameters | array | Да | Обекти с лабораторни резултати. Макс. 500. Всеки се нуждае от име на аналит и evaluation. |
interpretation | array | Не | Клинична интерпретация, използвана само като контекст, когато ai_assist е активиран |
ai_assist | boolean | Не | Позволете на модела да постави маркери, които таблиците с псевдоними не разпознават (по подразбиране: false) |
include_image | boolean | Не | Заявете изобразената илюстрация (по подразбиране: false) |
image_wait | integer | Не | Секунди изчакване за новогенерирана илюстрация, 0-30 (по подразбиране: 0) |
Полета на обекта параметър
| Поле | Тип | Задължително | Описание |
|---|---|---|---|
short_name | string | Да* | Име на аналита, както е отпечатано от лабораторията. *Изисква се поне едно от short_name, long_name, name, parameter_name или parameter. |
long_name | string | Не | Пълно име на аналита; подобрява съпоставянето на съкращения |
evaluation | string | Не | Едно от high, low, bad, slightly_high, slightly_low, normal. Само маркираните стойности се появяват на картата. |
result | string|number | Не | Измерената стойност; използва се за подреждане кои зони да бъдат изрисувани |
unit | string | Не | Мерна единица на резултата, в произволен изпис |
range_normal_min | number | Не | Долна граница на референтния диапазон |
range_normal_max | number | Не | Горна граница на референтния диапазон |
category | string | Не | Лабораторна категория; използва се като резервен вариант, когато името на аналита е непознато |
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.spec | string | Каноничен идентификатор за тази комбинация от зони и нива на тежест. Идентични панели споделят един spec и следователно споделят кеширана илюстрация. |
body_map.regions[].key | string | Един от 13-те ключа на зони |
body_map.regions[].level | integer | 2 = извън границите, 1 = гранично |
body_map.regions[].drawn | boolean | Дали тази зона е изрисувана върху илюстрацията. Легендата винаги изброява всяка зона; изрисуват се най-много шест. |
body_map.regions[].markers | array | Имена на маркерите, които поставят тази зона на картата, най-тежките първи |
body_map.unmapped | integer | Маркирани маркери, които не могат да бъдат поставени в никоя зона |
body_map.image_url | string|null | Кеширана илюстрация. null, докато файлът не съществува — използвайте fallback_url. |
body_map.fallback_url | string | Подписан URL адрес за генериране. Винаги присъства. Отговаря с 503 и Retry-After, докато илюстрацията все още се произвежда. |
all_clear | boolean | true, когато нищо не е маркирано; прилага се споделеното тяло "всичко е наред" |
mode | string | deterministic или ai_assisted |
Отговорът е без език по замисъл: той носи ключове на зони и собствените имена на маркери на вашата лаборатория. Преведете 13-те ключа на зони във вашия собствен клиент и предпочитайте легендата пред илюстрацията — ако моделът за изображения някога изрисува грешен орган, легендата до него все още е вярна.
Проверява данните, без да изпълнява анализа, и докладва кои от вашите имена на аналити разпознава двигателят. Изисква се удостоверяване; не се консумира квота и крайната точка продължава да работи в акаунт без останали кредити.
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"
}
Референтни крайни точки
И двете референтни крайни точки са без удостоверяване и безплатни.
Изброява 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
}
}
Метаданни за възможностите: дали двигателят е активиран в това внедряване, ограниченията на заявките, схемата за удостоверяване и пълния списък с крайни точки.
cURL пример
curl "https://app.aibloodtestinterpret.com/api/v1/body-map/info"
Sandbox
POST /api/v1/body-map/sandbox връща примерен отговор точно във формата, който произвежда /analyze, така че клиент, написан срещу sandbox, работи без промяна срещу производствената среда. Изисква се удостоверяване, така че извикването доказва и вашите идентификационни данни, но не се консумира квота и не се извършва анализ.
| Код на грешка | HTTP | Значение |
|---|---|---|
AUTH_1001 | 401 | Липсващи идентификационни данни за удостоверяване |
AUTH_1002 | 401 | Невалидно потребителско име или парола |
AUTH_1004 | 400 | Неправилно форматирани идентификационни данни (грешен тип или прекалено голям размер) |
QUOTA_1101 | 403 | Недостатъчна API квота |
VAL_2001 | 400 | Липсва parameters |
VAL_2002 | 400 | Невалиден формат на данните |
VAL_2005 | 400 | parameters е празен |
VAL_2006 | 400 | Повече от 500 параметъра |
VAL_2008 | 400 | Ред с параметър е неправилно форматиран или без име |
RES_4004 | 422 | Съществуват маркирани резултати, но нито един не се съпоставя с телесна зона |
RES_4005 | 503 | Двигателят за карта на тялото е изключен в това внедряване |
API за биологична възраст на кръвта
Kantesti API за биологична възраст на кръвта отговаря на въпрос, на който референтният диапазон не може: на колко години изглежда тази кръв? Той изчислява биологичната възраст от рутинен панел чрез публикувания модел PhenoAge на Levine, а наред с това извежда до 18 клинични индекса — FIB-4, HOMA-IR, TyG, eGFR, AIP, NLR, анионна разлика и други — които лабораторният отчет рядко отпечатва.
Число дори от непълен панел
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 | Метаданни за възможностите, ограничения и детайли за удостоверяване | Не е задължително |
Изчислява биологичната възраст на кръвта и изведените индекси от лабораторен панел. Консумира 1 кредит на успешна заявка. Заявка, която не премине валидация, или чийто панел не дава нищо изчислимо, не се таксува.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
parameters | array | Да | Обекти с лабораторни резултати. Макс. 500. Всеки се нуждае от име на аналит и резултат. |
metadata | object | Не | Заглавна част на отчета. Силно препоръчително: PhenoAge съдържа член за хронологичната възраст. Чете patient_age, patient_sex, dob, lab_date. |
patient | object | Не | {"age": 42, "gender": "female"} — използва се, когато метаданните не ги съдържат |
interpretation | array | Не | Клинична интерпретация, използвана само като контекст за модела |
language | string | Не | Език за опционалната персонална бележка (по подразбиране: en). Вижте поддържаните езици. |
ai_assist | boolean | Не | Позволете на модела да разпознава необичайни имена на аналити (по подразбиране: false) |
ai_estimate | boolean | Не | Позволете на модела да подобри частична възраст (по подразбиране: false) |
ai_note | boolean | Не | Заявете персонална бележка на езика от 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.status | string | ok, missing_age, missing_markers, needs_markers или unavailable |
summary.source | string | formula (и деветте маркера), partial (импутирани медиани) или ai (оценка от модела, само с ai_estimate) |
summary.chronological_age | integer|null | Възраст, прочетена от метаданните или от обекта patient |
summary.biological_age | number|null | Изчислената възраст на кръвта, в години |
summary.delta_years | number|null | Биологична минус хронологична. Отрицателна стойност означава по-млада от календарната. |
summary.markers_missing | array | Кои от деветте маркера на PhenoAge панелът не е предоставил |
blood_age.age.inputs | object | Реално използваните конвертирани стойности, в целевите единици |
blood_age.age.labels | object | Собственото име на вашата лаборатория за всеки маркер, който двигателят е съпоставил |
blood_age.indices[].band | string | ok, borderline, high, low или info |
blood_age.indices[].from | array | Лабораторните редове, от които е изведен този индекс |
mode | string | deterministic или ai_assisted |
PhenoAge съдържа член за възрастта, така че без хронологична възраст отговорът се връща със status: "missing_age" и без число. Изпратете я в metadata.patient_age, или в patient.age, или като дата на раждане в patient.dob. Формулата е приложима за възрасти между 18 и 100 години.
Проверява данните, без да изпълнява анализа, и докладва кои от деветте маркера на 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"
}
Референтни крайни точки
И двете референтни крайни точки са без удостоверяване и безплатни.
Изброява деветте входни стойности за 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."
}
}
Метаданни за възможностите: дали двигателят е активиран в това внедряване, двата режима и какво струва всеки от тях, ограниченията на заявките, схемата за удостоверяване и поддържаните езици.
cURL пример
curl "https://app.aibloodtestinterpret.com/api/v1/blood-age/info"
Sandbox
POST /api/v1/blood-age/sandbox връща примерен отговор точно във формата, който произвежда /analyze, така че клиент, написан срещу sandbox, работи без промяна срещу производствената среда. Изисква се удостоверяване, така че извикването доказва и вашите идентификационни данни, но не се консумира квота и не се извършва анализ.
| Код на грешка | HTTP | Значение |
|---|---|---|
AUTH_1001 | 401 | Липсващи идентификационни данни за удостоверяване |
AUTH_1002 | 401 | Невалидно потребителско име или парола |
AUTH_1004 | 400 | Неправилно форматирани идентификационни данни (грешен тип или прекалено голям размер) |
QUOTA_1101 | 403 | Недостатъчна API квота |
VAL_2001 | 400 | Липсва parameters |
VAL_2002 | 400 | Невалиден формат на данните |
VAL_2003 | 400 | Неподдържан езиков код |
VAL_2005 | 400 | parameters е празен |
VAL_2006 | 400 | Повече от 500 параметъра |
VAL_2007 | 400 | Невалиден обект patient |
VAL_2008 | 400 | Ред с параметър е неправилно форматиран или без име |
VAL_2009 | 400 | Неподдържана стойност на patient.gender |
RES_4004 | 422 | Нищо изчислимо от тези параметри |
RES_4005 | 503 | Двигателят за възраст на кръвта е изключен в това внедряване |
API за ДНК здраве: интерпретация на ДНК тест, отчет ДНК + кръв и консултант за хранителни добавки
С гордост представяме Kantesti API за ДНК здраве: три нови AI модула, които превръщат ДНК теста на пациента в клинични отчети. Интерпретацията на ДНК тест чете файл с необработен генотип или генетичен отчет и изготвя изчерпателен генетичен здравен отчет. Здравният отчет ДНК + кръв съчетава този отчет с интерпретирано кръвно изследване и показва къде гените и лабораторните стойности се потвърждават взаимно и къде си противоречат. Консултантът за хранителни добавки превръща ДНК данните, кръвното изследване и кратък въпросник в персонализиран план за хранителни добавки, изграден върху собствените продукти на вашата клиника.
Проверено спрямо вашия файл
Файлът с необработен генотип се обработва на сървъра и се сравнява с подбран панел от 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/analyze | POST | ДНК файл, поставени редове с rsID или страници от отчет → изчерпателен генетичен здравен отчет | Задължително (1 кредит) |
/api/v1/dna-interpretation/validate | POST | Обработка на качения файл и преглед на откритото, без извикване на AI | Задължително (безплатно) |
/api/v1/dna-interpretation/sandbox | POST | Примерен генетичен отчет | Задължително (безплатно) |
/api/v1/dna-interpretation/info | GET | Приемани входни данни, ограничения и езици на отчетите | Не е задължително |
/api/v1/dna-blood-report/analyze | POST | ДНК отчет + интерпретирано кръвно изследване → комбиниран здравен отчет | Задължително (1 кредит) |
/api/v1/dna-blood-report/validate | POST | Проверка на данните без извикване на AI | Задължително (безплатно) |
/api/v1/dna-blood-report/sandbox | POST | Примерен комбиниран отчет | Задължително (безплатно) |
/api/v1/dna-blood-report/info | GET | Полета на заявката и ограничения | Не е задължително |
/api/v1/dna-supplements/analyze | POST | ДНК отчет + кръвно изследване (по избор) + въпросник → план за хранителни добавки | Задължително (1 кредит) |
/api/v1/dna-supplements/validate | POST | Проверка на данните и отговорите без извикване на AI | Задължително (безплатно) |
/api/v1/dna-supplements/sandbox | POST | Примерен план за хранителни добавки | Задължително (безплатно) |
/api/v1/dna-supplements/questionnaire | GET | 25-те въпроса и допустимите отговори | Не е задължително |
/api/v1/dna-supplements/settings | GET PUT | Четене или актуализиране на продуктовия каталог на клиниката и настройките на консултанта | Задължително (безплатно) |
/api/v1/dna-supplements/info | GET | Полета на заявката и ограничения | Не е задължително |
Интерпретира един ДНК тест и връща изчерпателен генетичен здравен отчет. Изпратете файл като multipart/form-data или поставени редове с генотип като JSON. Каченият файл се обработва, докато чакате, така че нечетим файл получава незабавен отговор 400 и не струва нищо. Един кредит се таксува едва след като отчетът е изготвен.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име (или използвайте HTTP Basic удостоверяване) |
password | string | Да | Вашата API парола |
file | file | Да* | Един файл с необработен генотип (.txt, .csv, .tsv, .vcf, .zip, .gz, до 80 MB) или до 6 файла с отчети (PDF до 20 MB, JPG/PNG до 10 MB всеки). *Изпратете или file, или genotype_text. |
genotype_text | string | Да* | Поставени редове с генотип (rsID, хромозома, позиция, генотип), до 2 000 000 символа |
language | string | Не | Код на езика на отчета, напр. en, de, ar (по подразбиране: en). Вижте поддържаните езици. |
patient | object | Не | age, sex, diagnoses, comorbidities, medications, treatments, notes. В multipart заявка го изпратете като JSON низ. |
source_label | string | Не | Ваше собствено наименование на източника, до 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"
}
Справка за полетата на отговора
| Поле | Тип | Описание |
|---|---|---|
source | object | Какво е прочетено: kind (raw, text или document), разпознат формат и версия на референтния геном, брой записи и определени генотипове, колко от 334-те маркера на панела са открити, както и предупреждения при обработката |
report.overall_assessment.level | string | typical, slightly_elevated, elevated или high |
report.sections[] | array | По един запис за всяка здравна област с risk_level и нейните findings |
report.sections[].findings[] | array | gene, rsid, genotype, phenotype, risk_level (protective, typical, informational, slightly_elevated, elevated, high), evidence (established, probable, preliminary), explanation, recommendation |
report.pharmacogenomics[] | array | Прогнозиран фенотип на метаболизиране за всеки ген и класовете лекарства, които може да засегне. Отчетът никога не посочва дози за предписване. |
report.carrier_status[] | array | carrier, not_detected, affected_pattern или inconclusive, винаги за потвърждение с клинично генетично изследване |
report.disease_risks[], nutrigenomics[], traits[] | array | Рискове от заболявания, находки за хранителните вещества и наследствени признаци заедно с гените, които стоят зад тях |
report.recommended_tests[], red_flags[] | array | Последващи изследвания с посочена причина и находки, които изискват незабавно внимание |
Обработва качения файл точно като /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": []}
}
}
Съчетава ДНК отчет с интерпретирано кръвно изследване в един здравен отчет. Всяка връзка между генетична находка и лабораторна стойност се класифицира, а след това следват матрица на риска, приоритетни действия и план за проследяване. Един кредит на успешна заявка.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
dna_report | object | Да | Отчетът от /api/v1/dna-interpretation/analyze: data.report, целият data или пълният отговор |
blood_test | object|array | Да | Интерпретирано кръвно изследване във вида, в който го връща API за кръвни изследвания (metadata, parameters, interpretation), или само списък с до 500 параметъра с име и result |
language | string | Не | Код на езика на отчета (по подразбиране: en) |
patient | object | Не | Същите полета като при интерпретацията на ДНК тест |
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.level | string | good, watch, attention или urgent |
report.correlations[].concordance | string | confirms, contradicts, neutral или watch |
report.risk_matrix[] | array | За всяка област: genetic_risk, lab_status (normal, borderline, abnormal, not_measured) и комбинирана оценка |
report.priority_actions[] | array | priority (high, medium, low), действието и причината за него |
report.monitoring_plan[] | array | Кой маркер да се изследва повторно, кога и защо |
Изготвя персонализиран план за хранителни добавки от ДНК отчета, отговорите от въпросника и, по избор, интерпретирано кръвно изследване. Продуктовият каталог на клиниката и настройките на консултанта се прилагат автоматично. Един кредит на успешна заявка.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
dna_report | object | Да | Отчетът от /api/v1/dna-interpretation/analyze |
answers | object | Да | Отговори от въпросника. diet_type и pregnancy са задължителни; всички 25 въпроса са описани в GET /api/v1/dna-supplements/questionnaire. Непознатите ключове и стойности се пропускат. |
blood_test | object|array | Не | Същият формат като при отчета ДНК + кръв |
use_clinic_catalogue | boolean | Не | Прилагане на продуктовия каталог и настройките на клиниката (по подразбиране: true) |
language | string | Не | Код на езика на отчета (по подразбиране: en) |
patient | object | Не | Същите полета като при интерпретацията на ДНК тест. Посочените тук лекарства се проверяват за взаимодействия. |
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."
}
}
}
Справка за полетата на отговора
| Поле | Тип | Описание |
|---|---|---|
catalogue | object | Приложеният режим на каталога (prefer, only, off) и колко продукта на клиниката са били налични |
report.recommendations[] | array | name, form, dose, timing, duration, priority, обосновката rationale (генетична / лабораторна / от въпросника), evidence, cautions, interactions и retest |
report.recommendations[].source | string | clinic_library за продукт от вашия каталог (посочен в product), в противен случай evidence_based |
report.uncovered_needs[] | array | В режим „само продукти на клиниката“: нуждите, които каталогът ви не покрива |
report.clinician_review_required[] | array | Всичко, което изисква решение на предписващ лекар: взаимодействия, бременност, бъбречно или чернодробно заболяване, антикоагуланти, дози близо до горната граница на прием |
report.avoid_or_caution[], dietary_sources[], retest_plan[] | array | Какво да се избягва, хранителни източници за всяко хранително вещество и кога да се направи повторно изследване |
Чете или актуализира продуктовия каталог на клиниката и настройките на консултанта. Това е същият каталог като в панела на клиниката и в AI за хранителен режим, така че продукт, добавен на едно място, е наличен навсякъде. Изисква се удостоверяване; не се консумира кредит. Изпратете catalogue, settings или и двете; каталогът заменя целия списък.
| Поле | Тип | Описание |
|---|---|---|
catalogue[] | array | До 200 продукта: name, brand, form, dosage, category (vitamin, mineral, probiotic, omega, herbal, other), description |
settings.mode | string | prefer (продукти на клиниката, където са подходящи, а в останалите случаи научно обосновани предложения), only (само продукти на клиниката) или off (каталогът не се използва) |
settings.instructions | string | Ваши собствени инструкции към AI, до 1 500 символа. Правилата за безопасност винаги имат предимство. |
settings.max_items | integer | Максимален брой препоръки в един план, от 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_1001 | 401 | Липсващи идентификационни данни за удостоверяване |
AUTH_1002 | 401 | Невалидно потребителско име или парола |
QUOTA_1101 | 403 | Недостатъчна API квота |
VAL_2001 | 400 | Липсва задължително поле: file или genotype_text, dna_report, blood_test или задължителен отговор |
VAL_2002 | 400 | Нечетими данни за генотипа, неподдържан тип файл, невалиден JSON или невалиден dna_report |
VAL_2003 | 400 | Неподдържан език на отчета |
VAL_2006 | 400 | Прекалено голям обем: поставен текст, кръвни параметри (500) или каталог (200 продукта) |
VAL_2007 | 400 | Невалиден обект patient |
VAL_2008 | 400 | Няма използваем параметър от кръвното изследване (име и резултат) |
PROC_3003 | 500 | Отговорът на AI не можа да бъде изготвен или валидиран; опитайте отново. Не се таксува кредит. |
RES_4005 | 503 | ДНК модулите са изключени в това внедряване |
API за ДНК здраве предоставя генерирана от AI информация за лекуващия лекар. Това не е диагноза и не е рецепта. Потребителските ДНК чипове за генотипиране не са клинично секвениране: потвърдете находките, които налагат действие, и находките за носителство с валидирано клинично генетично изследване, преди да предприемете действия въз основа на тях.
ICR - API за интелигентно разпознаване на символи
Kantesti ICR (Интелигентно разпознаване на символи) API е усъвършенствана технология за извличане на текст от документи, която надхвърля далеч традиционния OCR. Захранван от собствения AI двигател на Kantesti, ICR предоставя структуриран JSON изход от всякакъв тип документи, включително медицински отчети, фактури, формуляри и др.
Kantesti ICR срещу традиционен OCR
В сравнителни тестове Kantesti ICR демонстрира 79% по-висока производителност в сравнение с традиционните OCR решения. ICR разбира структурата на документа, запазва оформленията на таблици, извлича метаданни и връща чист структуриран JSON — докато OCR предоставя само необработен неструктуриран текст. ICR използва AI-базирано интелигентно разпознаване, за да разбира контекста, да открива автоматично типовете документи и да предоставя структурирани данни, готови за интеграция.
- Структуриран 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 кредити | Безплатно |
Извличане на цялото текстово съдържание от качените документи с помощта на технологията Kantesti ICR. Връща структуриран JSON с откриване на типа на документа, извличане на таблици, парсване на секции и метаданни.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
file | file | Да | Файл на документа (PDF, JPG, JPEG, PNG) |
language | string | Не | Код на изходния език (по подразбиране: 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_1001 | 401 | Липсващи идентификационни данни за удостоверяване |
ICR_AUTH_1002 | 401 | Невалидно потребителско име или парола |
ICR_QUOTA_1101 | 403 | Недостатъчно кредити (изисквани са 0,5 кредита на извикване) |
ICR_VAL_2001 | 400 | Не е качен файл |
ICR_VAL_2002 | 400 | Невалиден формат на файл (поддържани: PDF, JPG, JPEG, PNG) |
ICR_VAL_2003 | 400 | Не се разрешават множество PDF файлове в една заявка |
ICR_VAL_2004 | 400 | Не могат да се смесват PDF и изображения в една заявка |
ICR_PROC_3001 | 500 | ICR извличането на текст е неуспешно |
ICR_PROC_3004 | 504 | Изтекло време на обработка |
ICR_SRV_5001 | 500 | Вътрешна сървърна грешка |
ICR_SRV_5002 | 503 | ICR услугата е временно недостъпна |
Анализ на документи с кръвни тестове с помощта на двигателя Kantesti Kan. Обработва документи с кръвни тестове и извлича структурирани тестови параметри, информация за пациента и метаданни.
Параметри на заявката
| Параметър | Тип | Задължителен | Описание |
|---|---|---|---|
username | string | Да | Вашето API потребителско име |
password | string | Да | Вашата API парола |
file | file | Да | Файл с кръвен тест (PDF, JPG, JPEG, PNG) |
language | string | Не | Код на езика на отчета (по подразбиране: en) |
pdf_password | string | Не | Парола за криптирани 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 крайните точки връщат реалистични примерни данни.
| API | Sandbox крайна точка | Описание |
|---|---|---|
| ICR извличане | /api/icr/v1/sandbox | Връща примерни ICR данни за извличане |
| ICR Kan | /api/icr/v1/kan/sandbox | Връща примерни данни за параметри на кръвен тест |
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+ покритие |
| Поддръжка на медицински документи | Специализиран | Общ | Опит в областта |