AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Начало работы

От API-ключа до чтения и записи FHIR R4 записи пациента в sandbox: ключи, первые вызовы, записи с указанием происхождения, документы, ИИ-контекст, IPS, согласие, вебхуки и лабораторные отчеты.

Anpheros Platform — это бэкенд для медицинских данных: запись FHIR R4 на пациента, изоляция проектов, указание происхождения при каждой записи и простой REST API поверх тех же данных. Это руководство проведет вас от нуля до чтения и записи записи пациента в песочнице.

Базовый URL (песочница и продакшн используют один и тот же; ключ определяет плоскость данных):

https://platform.anpheros.com

Интерактивный справочник: /docs (OpenAPI) и /fhir/R4/metadata (CapabilityStatement).

1. Получите ключ (1 минута)

Песочница предоставляется в режиме самообслуживания. Войдите в панель управления (https://platform.anpheros.com/dashboard/) через Google и нажмите Получить ключ песочницы: вы получите организацию, проект песочницы с собственными синтетическими пациентами и ключ — отображается один раз. То же самое через Admin API, используя ваш токен пользователя Firebase:

curl -X POST $BASE/admin/sandbox/quickstart -H "Authorization: Bearer $FIREBASE_ID_TOKEN"
# {"organization": {…}, "project": {"id": "proj_…", "environment": "sandbox", …}, "key": {"key": "sk_test_…", …}, "sandbox": {…}}

Или пошагово:

# 1. an organization (you become its owner)
curl -X POST $BASE/admin/organizations -H "Authorization: Bearer $FIREBASE_ID_TOKEN" \
     -H 'content-type: application/json' -d '{"name":"CardioAI SRL","kind":"developer","country":"RO"}'
# 2. a sandbox project (it comes with its own synthetic patients)
curl -X POST $BASE/admin/organizations/org_…/projects -H "Authorization: Bearer $FIREBASE_ID_TOKEN" \
     -H 'content-type: application/json' -d '{"name":"CardioAI dev","environment":"sandbox"}'
# 3. a key — the plain key is returned exactly once
curl -X POST $BASE/admin/projects/proj_…/keys -H "Authorization: Bearer $FIREBASE_ID_TOKEN" \
     -H 'content-type: application/json' -d '{"name":"local dev","scopes":["read","write"]}'

Вы получите sk_test_…. Ключи песочницы видят только данные песочницы. Производственные ключи (sk_live_…) выдаются проверенным организациям с подписанным DPA — напишите на [email protected]. Песочница бесплатна; производство начинается с 99 евро в месяц, первый месяц бесплатно (см. Цены).

2. Первый вызов (1 минута)

В вашем проекте песочницы уже есть своя копия из 30 синтетических пациентов с шестимесячной историей до дня создания проекта: взрослые, дети и пожилые люди со всей Европы, с заболеваниями (ICD-10), лекарствами (ATC), аллергиями, результатами лабораторных исследований и жизненными показателями (LOINC). Копия принадлежит вашему проекту: изменяйте или удаляйте что угодно — другие проекты этого не увидят. Сброс тестовых пациентов на панели управления (или POST /admin/projects/{id}/sandbox/reset) возвращает их в исходное состояние с новыми идентификаторами; пациенты, созданные вами самостоятельно, не затрагиваются. Каждый синтетический пациент сохраняет стабильный идентификатор при сбросах: Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 всегда является Еленой Ионеску.

export KEY=sk_test_…
curl $BASE/v1/patients -H "Authorization: Bearer $KEY"
{"data":[{"id":"…","given":"Elena","family":"Ionescu","birth_date":"1985-09-03","gender":"female",…,"fhir":"Patient/…"}, …],"total":30,"next_cursor":null}

Лимиты песочницы щедры, но конечны: 10 000 операций записи ресурсов в день на проект, 50 собственных пациентов помимо синтетических, 250 МБ документов (см. лимиты).

3. Чтение записи

# lab results, newest first
curl "$BASE/v1/patients/$PID/observations?category=laboratory&limit=10" -H "Authorization: Bearer $KEY"
# active medications
curl "$BASE/v1/patients/$PID/medications?status=active" -H "Authorization: Bearer $KEY"
# everything on one timeline
curl "$BASE/v1/patients/$PID/timeline?from=2026-06-01" -H "Authorization: Bearer $KEY"
# the same data, strict FHIR
curl "$BASE/fhir/R4/Observation?patient=$PID&code=http://loinc.org|4548-4&_sort=-date" -H "Authorization: Bearer $KEY"

Идентификаторы идентичны в /v1 и /fhir/R4; каждый объект v1 несет свою fhir ссылку. _summary=count возвращает только общее количество; _elements=code,effectiveDateTime возвращает компактные ресурсы с тегом SUBSETTED.

4. Запись

Укажите автора. author_type — это patient, practitioner, device, import или ai; если вы его опустите, платформа запишет import, но никогда не patient по умолчанию. Записи с author_type ai соответствуют HL7 AI Transparency on FHIR: ресурс несет метку безопасности AIAST (Artificial Intelligence asserted) и в его Provenance указана причина AIAST, роль агента Artificial-Intelligence и профиль AI-Provenance. Чтобы назвать модель, зарегистрируйте ее как Device (тип Artificial-Intelligence, имя, версия, производитель) и отправьте X-Anpheros-Author-Ref: Device/<id>.

curl -X POST "$BASE/v1/patients/$PID/observations" -H "Authorization: Bearer $KEY" \
     -H 'content-type: application/json' -H "Idempotency-Key: $(uuidgen)" -d '{
  "code": "2339-0", "display": "Glucose", "category": "laboratory",
  "value": 112, "unit": "mg/dL", "effective_at": "2026-09-19T08:10:00Z",
  "author_type": "device"
}'

Ответом является сохраненное наблюдение с id, fhir и updated_at. Повторение точно такого же запроса с тем же Idempotency-Key возвращает тот же ответ и ничего не создает.

5. Документы

# 1. create the document → upload target
curl -X POST "$BASE/v1/patients/$PID/documents" -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
     -d '{"title":"Analize 2026-09-14","kind":"lab_report","content_type":"application/pdf","date":"2026-09-14"}'
# 2. upload the bytes to the returned url (direct to storage, or through the platform)
curl -X PUT "$BASE/v1/documents/$DOC/content" -H "Authorization: Bearer $KEY" -H 'content-type: application/pdf' --data-binary @analize.pdf

Оригинал никогда не изменяется после этого; sha256 и size записываются, и любые значения, которые вы позже извлечете, будут ссылаться на документ через derived_from.

6. Provenance

curl "$BASE/v1/patients/$PID/provenance/Observation/$OBS" -H "Authorization: Bearer $KEY"

Одна запись на версию: кто (тип автора и проект), когда, из какой исходной системы.

Важные правила

7. Контекст для модели ИИ

Вместо извлечения необработанных записей и принятия решения о том, что соответствует запросу, запросите у платформы контекст:

curl -X POST "$BASE/v1/context" -H "Authorization: Bearer $KEY" -H 'content-type: application/json' -d '{
  "patient": "'$PID'",
  "task": "medication review before a cardiology visit",
  "question": "How did blood pressure evolve over the last 3 months?",
  "budget_tokens": 1500,
  "format": "text"
}'

Вы получаете разделы (сводная карточка, состояния, лекарства, аллергии, лабораторные анализы, жизненные показатели с еженедельными тенденциями и маркерами до/после лечения, симптомы, временная шкала, документы), каждый элемент помечен author_type и source, списком того, что было опущено, чтобы уложиться в бюджет, предупреждениями и manifest_id, которая связывает вызов с журналом аудита. Значения, полученные ИИ, никогда не смешиваются с фактами: они появляются только под ai_notes. Также принимаются явные запросы: "needs": ["labs:4548-4", "vitals:trend:85354-9", "timeline:180d"].

8. Стандарты

9. Согласие пациента (OAuth 2.1 + SMART on FHIR)

API ключи видят пациентов, созданных вашим проектом. Чтобы получить доступ к существующей записи человека, попросите его:

  1. Зарегистрировать приложение: POST /admin/projects/{id}/applications с вашим URI перенаправления (public для мобильных/веб-приложений с PKCE, confidential для серверов; секрет отображается один раз).
  2. Отправить человека на страницу согласия: GET /oauth/authorize?response_type=code&client_id=…&redirect_uri=…&state=…&code_challenge=…&code_challenge_method=S256&scope=patient/Observation.rs?category=laboratory patient/MedicationStatement.r offline_access&purpose=treatment&lang=ro Он входит в Anpheros, видит, что вы запрашиваете, на понятном языке, выбирает запись (свою, зависимого или ту, которую ваше приложение создало для него) и определяет срок действия доступа.
  3. Обменять код: POST /oauth/token (authorization_code + code_verifier). Вы получаете токен доступа (30 минут), токен обновления (30 дней, ротируется при использовании) и идентификатор пациента.
  4. Вызывать API с Authorization: Bearer at_…. Вы видите только этого пациента, только типы ресурсов и действия в рамках областей действия (scopes); запросы на чтение вне областей действия отвечают 403, поисковые запросы фильтруются.

Человек может отозвать согласие в любое время из Anpheros; следующий вызов ответит 401. Каждое предоставленное согласие отражается как FHIR ресурс Consent, и каждый доступ по нему регистрируется и виден человеку. Поиск: /.well-known/smart-configuration.

10. Webhooks

Пусть платформа вызывает вас вместо опроса:

curl -X POST $BASE/v1/webhooks -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"url": "https://your.app/anpheros/hook", "events": ["*"]}'

Сохраняйте secret из ответа и проверяйте Anpheros-Signature при каждой доставке (verifyWebhookSignature в обоих SDK). События содержат идентификаторы и версии, а не клинические данные. Подробности, повторные попытки и примеры: webhooks.md.

11. Организации и специалисты

Клиники, лаборатории и работающие там люди являются ресурсами первого класса: Organization, Practitioner, PractitionerRole. Это справочные ресурсы: не связанные с пациентом, читаемые каждым проектом в одной среде и изменяемые только проектом, который их создал.

curl -X POST $BASE/fhir/R4/Practitioner -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
  -d '{"resourceType":"Practitioner","active":true,"name":[{"family":"Popescu","given":["Ana"],"prefix":["Dr."]}]}'

Укажите специалиста, стоящего за записью, с помощью X-Anpheros-Author-Ref: Practitioner/<id> (или PractitionerRole, Organization, Device): сгенерированный сервером Provenance затем будет содержать agent.who.reference, а GET /fhir/R4/Provenance?agent=Practitioner/<id> перечислит все, что этот человек записал. Поиск: Organization?name=, ?identifier=, ?type=, Practitioner?name=, ?family=, ?given=, PractitionerRole?practitioner=, ?organization=, ?role=, ?specialty=, ?active=.

Кто стоит за вашим приложением? Отправьте X-Anpheros-Acting-As: PractitionerRole/<id> (или Practitioner/<id>) в любом запросе /v1 или /fhir/R4, сделанном с ключом проекта. Специалист должен существовать в справочнике и быть активным. Ссылка записывается в журнал доступа, становится автором записей этого запроса (если вы не установили X-Anpheros-Author-Ref) и отображается пациенту по имени в его подключениях ("Д-р Ана Попеску · Клиника Денте прочитала ваши результаты анализов").

12. Лабораторные отчеты одним вызовом

Отправьте полный лабораторный отчет (CSV, HL7 v2 ORU^R01 или JSON) и получите лабораторные наблюдения с кодами LOINC и референсными диапазонами; повторная отправка безопасна. Подробности: lab-connector.md.

curl -X POST "$BASE/v1/patients/$PATIENT/labs/import" -H "Authorization: Bearer $KEY" -H "Content-Type: text/csv" --data-binary @report.csv

Обратная связь о соответствии при записи данных

Каждый POST/PUT клинического ресурса проверяется на соответствие профилю IPS для его раздела, а для лабораторных наблюдений — на соответствие правилам HL7 Europe для лабораторных отчетов. Запись никогда не отклоняется по причинам, связанным с профилем (структурные ошибки FHIR по-прежнему приводят к отклонению); когда что-то отсутствует, ответ содержит

Anpheros-Conformance: warnings=2; IPS Condition: Condition without code | ...

Исправьте то, что указано, и ресурс будет включен в $summary пациента. Типы ресурсов, добавленные 22 сентября 2026 года: Immunization, MedicationAdministration (поиск statement=MedicationStatement/{id}), RelatedPerson, QuestionnaireResponse, Basic. Записи, сделанные другими проектами в запись, которую вы можете видеть, поступают в виде событий веб-перехватчика с data.external = true — см. docs/webhooks.md.

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy