Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
SDK
Les clients Dart / Flutter (anpheros_sdk) et TypeScript (@anpheros/sdk) : même structure, créations idempotentes, nouvelles tentatives, actualisation des tokens et flux de consentement.
Bibliothèques clientes officielles pour une API FHIR R4 de santé avec un bac à sable FHIR gratuit : patients, observations, résultats de laboratoire, conditions, médicaments, International Patient Summary, consentement du patient et contexte IA, en TypeScript et Dart / Flutter.
Anpheros est une infrastructure de données médicales interopérable pour la création d'applications de santé, de logiciels médicaux et de services d'IA. Chaque patient possède un enregistrement HL7 FHIR R4 qu'il contrôle ; les applications, cliniques, laboratoires et agents d'IA le lisent et l'écrivent via l'API Anpheros Platform — avec le consentement du patient (OAuth 2.1 / SMART on FHIR), la provenance sur chaque écriture et un journal d'accès que le patient peut consulter. Ce dépôt contient les bibliothèques clientes officielles et des exemples exécutables.
| Langage | Package | Installation | Source |
|---|---|---|---|
| Dart / Flutter | anpheros_sdk |
dart pub add anpheros_sdk |
dart/anpheros_sdk |
| TypeScript (Node 18+, navigateurs, Deno, Bun) | @anpheros/sdk |
npm install @anpheros/sdk |
ts |
Démarrage rapide en 2 minutes
- Obtenez une clé sandbox gratuite : connectez-vous sur le tableau de bord et appuyez sur Obtenir une clé sandbox (
sk_test_…). Votre sandbox contient 30 patients synthétiques. - Vérifiez que cela fonctionne :
bash
curl -H "Authorization: Bearer $ANPHEROS_KEY" "https://platform.anpheros.com/fhir/R4/Patient?_count=3"
- Installez un SDK et lisez un enregistrement :
npm install @anpheros/sdkoudart pub add anpheros_sdk, puis exécutez le code sous Connect, ou clonez quickstart-ts.
À qui s'adresse ce guide
Développeurs créant des applications de santé pour les patients et leurs familles, des backends d'applications médicales, des intégrations de cliniques et de laboratoires, ainsi que des assistants ou agents IA nécessitant le contexte médical structuré d'un patient — sans avoir à concevoir de zéro une base de données médicale, un système de consentement et une piste d'audit.
Obtenir une clé de sandbox
La sandbox est gratuite et en libre-service. Connectez-vous avec Google sur le tableau de bord et appuyez sur Obtenir une clé de sandbox : vous obtenez instantanément un projet de sandbox et une clé. Chaque projet de sandbox est livré avec ses propres 30 patients synthétiques — six mois de conditions, médicaments, allergies, résultats de laboratoire et signes vitaux — que vous pouvez modifier librement et réinitialiser à tout moment. Les clés de sandbox (sk_test_…) n'accèdent jamais à de véritables données de patients.
Lorsque vous passez en production, celle-ci est réservée aux organisations vérifiées disposant d'un accord de traitement des données, et la production commence à 99 € par mois avec le premier mois gratuit (tarifs).
Connexion
import { Anpheros, apiKey } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) }); // sk_test_… in the sandbox
const { data: patients } = await anpheros.patients.list();
const labs = await anpheros.observations.list(patients[0].id, { category: 'laboratory', limit: 10 });
const ctx = await anpheros.context.build({ patient: patients[0].id, task: 'weekly check-in', budget_tokens: 1500, format: 'text' });
import 'package:anpheros_sdk/anpheros_sdk.dart';
final anpheros = Anpheros(auth: AnpherosAuth.apiKey('sk_test_…'));
final patients = await anpheros.patients.list();
final labs = await anpheros.observations.list(patients.data.first.id, category: 'laboratory', limit: 10);
Les clés d'API appartiennent aux serveurs. Une application agissant pour une personne utilise OAuth à la place : les deux SDK implémentent le flux de consentement (code d'autorisation + PKCE) et les jetons de rafraîchissement automatiquement.
Ce que les SDK couvrent
Les deux couvrent toute la surface publique (/v1, /fhir/R4, /oauth/token, /oauth/revoke) avec la
même structure : patients, observations, conditions, medications, documents, timeline,
provenance, context, grants, terminology et le fhir brut. Un test échoue la
compilation lorsqu'une route publique est manquante dans l'un ou l'autre SDK, ou lorsqu'un SDK appelle une route que le serveur
ne possède pas.
Les deux SDK : Idempotency-Key automatique sur les créations, tentatives avec backoff sur 429/5xx, un rafraîchissement de token sur 401, erreurs typées avec l'ID de requête, assistants PKCE et le flux de consentement.
Données médicales et FHIR
Le dossier est composé de ressources FHIR R4 standard — 26 types, dont Observation, Condition, MedicationStatement, DocumentReference, Immunization et AllergyIntolerance — codées avec LOINC, ICD-10, ATC et UCUM. L'API REST (/v1) et l'API FHIR (/fhir/R4) lisent et écrivent les mêmes ressources avec les mêmes identifiants ; fhir dans les deux SDK donne un accès FHIR brut (recherche, transactions, $everything, $summary, $validate).
Exemples
| Exemple | Montre |
|---|---|
| quickstart-ts | écrire et lire un enregistrement : mesures, résultat de laboratoire, diagnostic, médicament, chronologie, recherche FHIR, IPS, contexte IA |
| quickstart-dart | le même depuis Dart / Flutter |
| consent-app-ts | une application web qui demande le consentement (OAuth 2.1 + PKCE) et lit l'enregistrement de la personne |
| ai-context-llm | une question sur un enregistrement à laquelle répond un modèle de votre choix (local ou hébergé) |
| fhir-transaction | un bundle de transaction FHIR R4 et le résumé international du patient résultant |
Les exemples s'exécutent sur le sandbox gratuit, où chaque projet sandbox dispose de ses propres 30 patients synthétiques — voir Obtenir une clé sandbox.
Dépôts associés
| Dépôt | Description |
|---|---|
| fhir-api-openapi | Spécification OpenAPI 3.1 et collection Postman de l'API |
| mcp-server | Le serveur FHIR MCP hébergé pour les agents IA : configurations pour Claude, Cursor, VS Code |
| agent-skills | Agent Skill, plugin Claude Code, règles Cursor et AGENTS.md |
| fhir-synthetic-patients | Les 30 patients synthétiques sous forme de Bundles FHIR R4 et NDJSON |
| ips-examples | Documents International Patient Summary en FHIR R4 |
| fhir-validate-action | Action GitHub qui valide le JSON FHIR R4 en CI |
| lab-results-to-fhir | CLI : Rapports de laboratoire CSV / HL7 v2 → Observations FHIR |
| healthcare-app-starters | Modèles d'applications de santé Next.js et Flutter |
Conformité
Résultats bruts des tests, publiés pour vérification (résultats des tests, pas certifications) : conformance/. Le 28 septembre 2026, le groupe Standalone Launch du kit de test Inferno SMART App Launch STU2 (v1.0.3) a réussi 22 tests sur 22 contre la plateforme. Le lancement EHR n'est pas pris en charge.
Documentation
- Guides développeur
- Démarrage rapide
- Sandbox FHIR
- API Healthcare
- Plateforme API Healthcare
- Plateforme FHIR
- Guide SDK
- Référence API (OpenAPI)
- Pour les assistants IA
- Anpheros
Problèmes et sécurité
Signalez les bugs dans les issues de ce dépôt. N'incluez jamais de clés API, de jetons ou de données de patients dans une issue. Rapports de sécurité : [email protected].
Licence
Licence Apache 2.0 — voir le fichier LICENSE de chaque paquet. Copyright 2026 Anpheros.
@anpheros/sdk
Client TypeScript pour Anpheros Platform : un dossier de santé FHIR R4 par patient, isolation de projet, consentement patient (OAuth 2.1 / SMART on FHIR), provenance sur chaque écriture et une API de contexte IA. Fonctionne partout où fetch existe (Node 18+, navigateurs, Deno, Bun).
import { Anpheros, apiKey } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });
const { data: patients } = await anpheros.patients.list();
const labs = await anpheros.observations.list(patients[0].id, { category: 'laboratory', limit: 10 });
const ctx = await anpheros.context.build({ patient: patients[0].id, task: 'weekly check-in', budget_tokens: 1500, format: 'text' });
Agir pour une personne :
import { OAuthFlow, OAuthAuth, generatePkce } from '@anpheros/sdk';
const flow = new OAuthFlow({ baseUrl: BASE, clientId: 'client_…', redirectUri: 'https://myapp.example/callback' });
const pkce = await generatePkce();
location.href = flow.authorizeUrl({ scopes: ['patient/Observation.rs?category=laboratory', 'offline_access'], state, pkce, lang: 'ro' });
// on the callback:
const tokens = await flow.exchange(code, pkce);
const anpheros = new Anpheros({ auth: new OAuthAuth({ tokens, onRefresh: flow.refresh, onTokens: persist }) });
Les erreurs sont AnpherosError (status, type, message, field, requestId). Les créations envoient un
Idempotency-Key ; les 429/5xx sont retentées ; les jetons expirés sont actualisés une fois et l'appel est retenté.
anpheros_sdk
Client Dart / Flutter pour la Plateforme Anpheros : un backend de données de santé avec un enregistrement FHIR R4 par patient, isolation des projets, consentement du patient (OAuth 2.1 / SMART on FHIR), provenance sur chaque écriture et une API de contexte IA.
import 'package:anpheros_sdk/anpheros_sdk.dart';
final anpheros = Anpheros(auth: AnpherosAuth.apiKey('sk_test_…')); // server / sandbox
final patients = await anpheros.patients.list();
final elena = patients.data.first;
final labs = await anpheros.observations.list(elena.id, category: 'laboratory', limit: 10);
final ctx = await anpheros.context.build(ContextRequest(patient: elena.id, task: 'weekly check-in', budgetTokens: 1500));
Agir pour une personne (applications)
final flow = OAuthFlow(baseUrl: 'https://…', clientId: 'client_…', redirectUri: 'myapp://callback');
final pkce = Pkce.generate();
final url = flow.authorizeUrl(scopes: ['patient/Observation.rs?category=laboratory', 'patient/MedicationStatement.r', 'offline_access'],
state: 'abc', pkce: pkce, lang: 'ro');
// open `url`; on return with ?code=…:
final tokens = await flow.exchange(code: code, pkce: pkce);
final anpheros = Anpheros(auth: AnpherosAuth.oauth(
accessToken: tokens.accessToken, refreshToken: tokens.refreshToken, expiresAt: tokens.expiresAt,
onRefresh: flow.refresh, onTokens: persist));
final meds = await anpheros.medications.listMedications(tokens.patient!);
Chaque objet porte fhir (sa référence /fhir/R4) ; anpheros.fhir donne un accès FHIR brut
(read, search, create, transaction, $everything, $summary, $validate).
Les erreurs sont AnpherosException avec status, type, message, field et requestId.
Les Creates envoient un Idempotency-Key automatiquement ; les 429/5xx sont retentés avec backoff ; les tokens OAuth expirés sont rafraîchis une fois et l'appel retenté.
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card