# SDKs

> Die Dart / Flutter (anpheros_sdk) und TypeScript (@anpheros/sdk) Clients: gleiche Struktur, idempotente Creates, Retries, Token-Aktualisierung und der Consent Flow.

Source: https://developers.anpheros.com/de/guides/sdks

> Offizielle Client-Bibliotheken für eine FHIR R4 Healthcare API mit einer kostenlosen FHIR Sandbox: Patienten, Beobachtungen, Laborergebnisse, Zustände, Medikamente, International Patient Summary, Patientenzustimmung und KI-Kontext, in TypeScript und Dart / Flutter.

**Anpheros ist eine interoperable medizinische Dateninfrastruktur zum Erstellen von Healthcare-Anwendungen, medizinischer Software und KI-Diensten.** Jeder Patient hat einen HL7 FHIR R4 Datensatz, den er kontrolliert; Anwendungen, Kliniken, Labore und KI-Agenten lesen und schreiben ihn über die Anpheros Platform API – mit Patientenzustimmung (OAuth 2.1 / SMART on FHIR), Provenienz bei jedem Schreibvorgang und einem Zugriffsprotokoll, das der Patient einsehen kann. Dieses Repository enthält die offiziellen Client-Bibliotheken und ausführbare Beispiele.

| Sprache | Paket | Installation | Quelle |
|---|---|---|---|
| Dart / Flutter | [`anpheros_sdk`](https://pub.dev/packages/anpheros_sdk) | `dart pub add anpheros_sdk` | [`dart/anpheros_sdk`](https://github.com/anpheros/anpheros-sdk/tree/main/dart/anpheros_sdk) |
| TypeScript (Node 18+, Browser, Deno, Bun) | [`@anpheros/sdk`](https://www.npmjs.com/package/@anpheros/sdk) | `npm install @anpheros/sdk` | [`ts`](https://github.com/anpheros/anpheros-sdk/tree/main/ts) |

## Schnelleinstieg in 2 Minuten

1. **Holen Sie sich einen kostenlosen Sandbox-Schlüssel:** Melden Sie sich auf dem [Dashboard](https://platform.anpheros.com/dashboard/) an und klicken Sie auf **Sandbox-Schlüssel erhalten** (`sk_test_…`). Ihre Sandbox enthält 30 synthetische Patienten.
2. **Überprüfen Sie die Funktionsfähigkeit:**

   ```bash
   curl -H "Authorization: Bearer $ANPHEROS_KEY" "https://platform.anpheros.com/fhir/R4/Patient?_count=3"
   ```

3. **Installieren Sie ein SDK und lesen Sie einen Datensatz:** `npm install @anpheros/sdk` oder `dart pub add anpheros_sdk`, führen Sie dann den Code unter [Verbinden](#connect) aus oder klonen Sie [quickstart-ts](https://github.com/anpheros/anpheros-sdk/tree/main/examples/quickstart-ts).

## Für wen ist das gedacht

Entwickler, die Apps für Patienten und Angehörige, medizinische App-Backends, Klinik- und Laborintegrationen sowie KI-Assistenten oder -Agenten erstellen, die den strukturierten medizinischen Kontext eines Patienten benötigen – ohne eine medizinische Datenbank, ein Zustimmungssystem und eine Audit-Trail von Grund auf neu entwerfen zu müssen.

## Sandbox-Schlüssel erhalten

Die Sandbox ist kostenlos und self-service. Melden Sie sich mit Google auf dem [Dashboard](https://platform.anpheros.com/dashboard/) an und klicken Sie auf **Sandbox-Schlüssel erhalten**: Sie erhalten sofort ein Sandbox-Projekt und einen Schlüssel. Jedes Sandbox-Projekt enthält 30 synthetische Patienten – sechs Monate an Bedingungen, Medikamenten, Allergien, Laborergebnissen und Vitalwerten –, die Sie jederzeit frei ändern und zurücksetzen können. Sandbox-Schlüssel (`sk_test_…`) greifen niemals auf echte Patientendaten zu.

Wenn Sie live gehen, ist die Produktion für verifizierte Organisationen mit einer Datenverarbeitungsvereinbarung vorgesehen und beginnt bei 99 € pro Monat, wobei der erste Monat kostenlos ist ([Preise](https://developers.anpheros.com/de/guides/pricing)).

## Verbinden

```ts
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' });
```

```dart
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);
```

API-Schlüssel gehören auf Server. Eine App, die im Auftrag einer Person handelt, verwendet stattdessen OAuth: Beide SDKs implementieren den Consent-Flow (Authorization Code + PKCE) und aktualisieren Tokens automatisch.

## Was die SDKs abdecken

Beide decken die gesamte öffentliche Oberfläche (`/v1`, `/fhir/R4`, `/oauth/token`, `/oauth/revoke`) mit der
gleichen Struktur ab: `patients`, `observations`, `conditions`, `medications`, `documents`, `timeline`,
`provenance`, `context`, `grants`, `terminology` und rohe `fhir`. Ein Test schlägt den
Build fehl, wenn eine öffentliche Route in einem der SDKs fehlt oder wenn ein SDK eine Route aufruft, die der Server nicht hat.

Beide SDKs: automatisches `Idempotency-Key` bei Erstellungen, Wiederholungsversuche mit Backoff bei 429/5xx, ein Token-Refresh bei 401, typisierte Fehler mit der Request ID, PKCE-Helfer und der Consent Flow.

## Medizinische Daten und FHIR

Der Datensatz besteht aus Standard-FHIR-R4-Ressourcen – 26 Typen, darunter `Observation`, `Condition`, `MedicationStatement`, `DocumentReference`, `Immunization` und `AllergyIntolerance` – kodiert mit LOINC, ICD-10, ATC und UCUM. Die REST API (`/v1`) und die FHIR API (`/fhir/R4`) lesen und schreiben dieselben Ressourcen mit denselben IDs; `fhir` in beiden SDKs ermöglicht den direkten FHIR-Zugriff (Suche, Transaktionen, `$everything`, `$summary`, `$validate`).

## Beispiele

| Beispiel | Zeigt |
|---|---|
| [quickstart-ts](https://github.com/anpheros/anpheros-sdk/tree/main/examples/quickstart-ts) | Schreiben und Lesen eines Datensatzes: Messungen, Laborergebnis, Diagnose, Medikament, Zeitachse, FHIR-Suche, IPS, KI-Kontext |
| [quickstart-dart](https://github.com/anpheros/anpheros-sdk/tree/main/examples/quickstart-dart) | dasselbe aus Dart / Flutter |
| [consent-app-ts](https://github.com/anpheros/anpheros-sdk/tree/main/examples/consent-app-ts) | eine Web-App, die um Zustimmung bittet (OAuth 2.1 + PKCE) und den Datensatz der Person liest |
| [ai-context-llm](https://github.com/anpheros/anpheros-sdk/tree/main/examples/ai-context-llm) | eine Frage zu einem Datensatz, beantwortet von einem Modell Ihrer Wahl (lokal oder gehostet) |
| [fhir-transaction](https://github.com/anpheros/anpheros-sdk/tree/main/examples/fhir-transaction) | ein FHIR R4 Transaktionsbundle und die daraus resultierende International Patient Summary |

Die Beispiele laufen gegen die kostenlose Sandbox, wobei jedes Sandbox-Projekt seine eigenen 30 synthetischen Patienten hat – siehe [Sandbox-Schlüssel erhalten](#get-a-sandbox-key).

## Verwandte Repositories

| Repository | Was es ist |
|---|---|
| [fhir-api-openapi](https://github.com/anpheros/fhir-api-openapi) | OpenAPI 3.1 Spec und Postman Collection der API |
| [mcp-server](https://github.com/anpheros/mcp-server) | der gehostete FHIR MCP Server für KI-Agenten: Konfigurationen für Claude, Cursor, VS Code |
| [agent-skills](https://github.com/anpheros/agent-skills) | Agent Skill, Claude Code Plugin, Cursor Rules und AGENTS.md |
| [fhir-synthetic-patients](https://github.com/anpheros/fhir-synthetic-patients) | die 30 synthetischen Patienten als FHIR R4 Bundles und NDJSON |
| [ips-examples](https://github.com/anpheros/ips-examples) | International Patient Summary Dokumente in FHIR R4 |
| [fhir-validate-action](https://github.com/anpheros/fhir-validate-action) | GitHub Action, die FHIR R4 JSON in CI validiert |
| [lab-results-to-fhir](https://github.com/anpheros/lab-results-to-fhir) | CLI: CSV / HL7 v2 Laborberichte → FHIR Observations |
| [healthcare-app-starters](https://github.com/anpheros/healthcare-app-starters) | Next.js und Flutter Health App Vorlagen |

## Konformität

Rohe Testergebnisse, veröffentlicht zur Überprüfung (Testergebnisse, keine Zertifizierungen): [conformance/](https://github.com/anpheros/anpheros-sdk/tree/main/conformance). Am 28. September 2026 bestand die Standalone Launch-Gruppe des Inferno SMART App Launch STU2 Testkits (v1.0.3) 22 von 22 Tests gegen die Plattform. EHR-Launch wird nicht unterstützt.

## Dokumentation

- [Entwicklerhandbücher](https://developers.anpheros.com/guides/)
- [Erste Schritte](https://developers.anpheros.com/de/guides/getting-started)
- [FHIR-Sandbox](https://developers.anpheros.com/de/guides/fhir-sandbox)
- [Healthcare API](https://developers.anpheros.com/de/guides/healthcare-api)
- [Healthcare API-Plattform](https://developers.anpheros.com/de/guides/healthcare-api-platform)
- [FHIR-Plattform](https://developers.anpheros.com/de/guides/fhir)
- [SDK-Handbuch](https://developers.anpheros.com/de/guides/sdks)
- [API-Referenz (OpenAPI)](https://developers.anpheros.com/docs)
- [Für KI-Assistenten](https://developers.anpheros.com/llms.txt)
- [Anpheros](https://anpheros.com/)

## Probleme und Sicherheit

Melden Sie Fehler im Issues-Bereich dieses Repositories. Fügen Sie niemals API-Schlüssel, Token oder Patientendaten in ein Issue ein. Sicherheitsberichte: contact@anpheros.com.

## Lizenz

Apache License 2.0 — siehe die `LICENSE` Datei jedes Pakets. Copyright 2026 Anpheros.

## @anpheros/sdk

TypeScript-Client für die **Anpheros Platform**: ein FHIR R4 Health Record pro Patient, Projektisolation, Patienteneinwilligung (OAuth 2.1 / SMART on FHIR), Provenienz bei jedem Schreibvorgang und eine KI-Kontext-API. Läuft überall dort, wo `fetch` existiert (Node 18+, Browser, Deno, Bun).

```ts
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' });
```

Handeln im Auftrag einer Person:

```ts
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 }) });
```

Fehler sind `AnpherosError` (`status`, `type`, `message`, `field`, `requestId`). Erstellungen senden eine `Idempotency-Key`; 429/5xx werden wiederholt; abgelaufene Token werden einmal aktualisiert und der Aufruf wiederholt.

## anpheros_sdk

Dart / Flutter Client für die **Anpheros Platform**: ein Gesundheitsdaten-Backend mit einem FHIR R4 Record
pro Patient, Projektisolation, Patienteneinwilligung (OAuth 2.1 / SMART on FHIR), Provenienz bei jedem
Schreibvorgang und einer AI Context API.

```dart
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));
```

## Handeln im Auftrag einer Person (Apps)

```dart
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!);
```

Jedes Objekt trägt `fhir` (seinen `/fhir/R4`-Referenz); `anpheros.fhir` gibt direkten FHIR-Zugriff
(read, search, create, transaction, `$everything`, `$summary`, `$validate`).

Fehler werden `AnpherosException` mit `status`, `type`, `message`, `field` und `requestId` behandelt.
Creates senden automatisch eine `Idempotency-Key`; 429/5xx werden mit Backoff wiederholt; abgelaufene OAuth-Token
werden einmal aktualisiert und der Aufruf wiederholt.
