AnpherosAnpheros PlatformDevelopers

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

Começar

De uma chave de API à leitura e escrita do registo FHIR R4 de um paciente na sandbox: chaves, primeiras chamadas, escritas com proveniência, documentos, contexto de IA, IPS, consentimento, webhooks e relatórios de laboratório.

A Plataforma Anpheros é um backend de dados de saúde: um registo FHIR R4 por paciente, isolamento de projetos, proveniência em cada escrita e uma API REST simples sobre os mesmos dados. Este guia leva-o do zero à leitura e escrita do registo de um paciente na sandbox.

URL base (sandbox e produção partilham-no; a chave decide o plano de dados):

https://platform.anpheros.com

Referência interativa: /docs (OpenAPI) e /fhir/R4/metadata (CapabilityStatement).

1. Obter uma chave (1 minuto)

O sandbox é self-service. Inicie sessão no dashboard (https://platform.anpheros.com/dashboard/) com o Google e prima Obter uma chave de sandbox: obtém uma organização, um projeto de sandbox com os seus próprios pacientes sintéticos e uma chave — mostrada uma vez. O mesmo através da Admin API, com o seu token de utilizador 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": {…}}

Ou passo a passo:

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

Obtém sk_test_…. As chaves de sandbox apenas veem dados de sandbox. As chaves de produção (sk_live_…) são emitidas a organizações verificadas com um DPA assinado — escreva para [email protected]. O sandbox é gratuito; a produção começa em 99 € por mês e o primeiro mês é gratuito (ver Preços).

2. Primeira chamada (1 minuto)

O seu projeto sandbox já tem a sua própria cópia de 30 pacientes sintéticos, com seis meses de histórico até ao dia em que o projeto foi criado: adultos, crianças e idosos de toda a UE, com condições (ICD-10), medicamentos (ATC), alergias, resultados de laboratório e sinais vitais (LOINC). A cópia pertence ao seu projeto: altere ou elimine qualquer coisa — nenhum outro projeto a vê. Repor pacientes de teste no dashboard (ou POST /admin/projects/{id}/sandbox/reset) devolve-os ao estado original, com novos IDs; os pacientes que criou pessoalmente não são afetados. Cada paciente sintético mantém um identificador estável entre reposições: Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02 é sempre Elena Ionescu.

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}

Os limites do sandbox são generosos mas finitos: 10 000 escritas de recursos por dia por projeto, 50 pacientes seus além dos sintéticos, 250 MB de documentos (ver limites).

3. Ler um registo

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

Os IDs são idênticos em /v1 e /fhir/R4; cada objeto v1 carrega a sua referência fhir. _summary=count retorna apenas o total; _elements=code,effectiveDateTime retorna recursos slim marcados com SUBSETTED.

4. Escrever

Indique quem é o autor. author_type é patient, practitioner, device, import ou ai; se omitir, a plataforma regista import, nunca patient por defeito. Escrever com author_type ai segue a HL7 AI Transparency on FHIR: o recurso transporta o rótulo de segurança AIAST (Artificial Intelligence asserted) e a sua Provenance tem a razão AIAST, o papel do agente Artificial-Intelligence e o perfil AI-Provenance. Para nomear o modelo, registe-o como um Device (tipo Artificial-Intelligence, nome, versão, fabricante) e envie 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"
}'

A resposta é a observação armazenada com id, fhir e updated_at. Repetir o exato mesmo pedido com o mesmo Idempotency-Key retorna a mesma resposta e não cria nada.

5. Documentos

# 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

O original nunca é modificado após isso; sha256 e size são registados, e quaisquer valores que posteriormente extraia apontam de volta para o documento através de derived_from.

6. Proveniência

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

Uma entrada por versão: quem (tipo de autor e projeto), quando, de que sistema de origem.

Regras a saber

7. Contexto para um modelo de IA

Em vez de extrair registos brutos e decidir o que se adequa a um prompt, peça à plataforma um contexto:

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

Obtém secções (cartão de resumo, condições, medicamentos, alergias, exames laboratoriais, sinais vitais com tendências semanais e marcadores antes/depois do tratamento, sintomas, linha cronológica, documentos), cada item rotulado com author_type e source, uma lista do que foi omitido para caber no orçamento, avisos e um manifest_id que liga a chamada ao registo de auditoria. Os valores produzidos pela IA nunca são misturados com factos: aparecem apenas em ai_notes. Necessidades explícitas também são aceites: "needs": ["labs:4548-4", "vitals:trend:85354-9", "timeline:180d"].

8. Normas

9. Consentimento do Paciente (OAuth 2.1 + SMART on FHIR)

As chaves de API veem os pacientes que o seu projeto criou. Para aceder ao registo existente de uma pessoa, peça-lhe:

  1. Registe uma aplicação: POST /admin/projects/{id}/applications com o seu URI de redirecionamento (public para aplicações móveis/web com PKCE, confidential para servidores; o segredo é mostrado uma vez).
  2. Envie a pessoa para a página de consentimento: 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 Ela inicia sessão no Anpheros, vê o que pede em linguagem clara, escolhe o registo (o seu próprio, o de um dependente ou o que a sua aplicação criou para ela) e por quanto tempo o acesso dura.
  3. Troque o código: POST /oauth/token (authorization_code + code_verifier). Recebe um token de acesso (30 min), um token de atualização (30 dias, rotacionado a cada utilização) e o ID do paciente.
  4. Chame a API com Authorization: Bearer at_…. Vê apenas esse paciente, apenas os tipos de recursos e ações nos escopos; leituras fora do escopo respondem com 403, as pesquisas são filtradas.

A pessoa pode revogar a qualquer momento a partir do Anpheros; a próxima chamada responderá com 401. Cada concessão é refletida como um recurso FHIR Consent, e cada acesso sob ela é registado e visível para a pessoa. Descoberta: /.well-known/smart-configuration.

10. Webhooks

Deixe a plataforma chamá-lo em vez de fazer polling:

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

Mantenha o secret da resposta e verifique Anpheros-Signature em cada entrega (verifyWebhookSignature em ambos os SDKs). Os eventos transportam IDs e versões, não dados clínicos. Detalhes, retentativas e exemplos: webhooks.md.

11. Organizações e Praticantes

Clínicas, laboratórios e as pessoas que trabalham neles são recursos de primeira classe: Organization, Practitioner, PractitionerRole. São recursos de diretório: nenhum paciente, legível por cada projeto no mesmo ambiente, alterável apenas pelo projeto que os criou.

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."]}]}'

Nomeie o praticante por trás de uma escrita com X-Anpheros-Author-Ref: Practitioner/<id> (ou um PractitionerRole, Organization, Device): a Provenance gerada pelo servidor então carrega agent.who.reference, e GET /fhir/R4/Provenance?agent=Practitioner/<id> lista tudo que essa pessoa registou. Pesquisa: Organization?name=, ?identifier=, ?type=, Practitioner?name=, ?family=, ?given=, PractitionerRole?practitioner=, ?organization=, ?role=, ?specialty=, ?active=.

Quem está a trabalhar por trás da sua aplicação? Envie X-Anpheros-Acting-As: PractitionerRole/<id> (ou Practitioner/<id>) em qualquer pedido /v1 ou /fhir/R4 feito com uma chave de projeto. A pessoa deve existir no diretório e estar ativa. A referência é escrita no log de acesso, torna-se o autor das escritas desse pedido (a menos que defina X-Anpheros-Author-Ref) e é mostrada ao paciente pelo nome nas suas conexões ("Dr. Ana Popescu · Clínica Dente leu os seus resultados de laboratório").

12. Relatórios de laboratório numa única chamada

Envie um relatório de laboratório completo (CSV, HL7 v2 ORU^R01 ou JSON) e obtenha Observações laboratoriais com LOINC e intervalos de referência; reenviar é seguro. Detalhes: 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

Feedback de Conformidade em Escritas

Cada POST/PUT de um recurso clínico é verificado em relação ao perfil IPS da sua secção e, para observações de laboratório, às regras de relatório de laboratório da HL7 Europe. A escrita nunca é rejeitada por motivos de perfil (erros estruturais FHIR ainda o são); quando algo está em falta, a resposta transporta

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

Corrija o que é nomeado e o recurso será incluído no $summary do paciente. Tipos de recursos adicionados em 22 de setembro de 2026: Immunization, MedicationAdministration (pesquisa statement=MedicationStatement/{id}), RelatedPerson, QuestionnaireResponse, Basic. Escritas feitas por outros projetos num registo que pode ver chegam como eventos webhook com data.external = true — consulte 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