Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Ξεκινώντας
Από ένα κλειδί API έως την ανάγνωση και εγγραφή του αρχείου FHIR R4 ενός ασθενούς στο sandbox: κλειδιά, πρώτες κλήσεις, εγγραφές με προέλευση, έγγραφα, περιβάλλον AI, IPS, συναίνεση, webhooks και εργαστηριακές αναφορές.
Η πλατφόρμα Anpheros είναι ένα backend υγειονομικών δεδομένων: ένα αρχείο FHIR R4 ανά ασθενή, απομόνωση έργου, προέλευση σε κάθε εγγραφή και ένα απλό REST API πάνω από τα ίδια δεδομένα. Αυτός ο οδηγός σας μεταφέρει από το μηδέν στην ανάγνωση και εγγραφή του αρχείου ενός ασθενούς στο sandbox.
Βασικό URL (το sandbox και η παραγωγή το μοιράζονται· το κλειδί αποφασίζει το επίπεδο δεδομένων):
https://platform.anpheros.com
Διαδραστική αναφορά: /docs (OpenAPI) και /fhir/R4/metadata (CapabilityStatement).
1. Λήψη κλειδιού (1 λεπτό)
Το sandbox είναι αυτοεξυπηρετούμενο. Συνδεθείτε στον πίνακα ελέγχου (https://platform.anpheros.com/dashboard/)
με τον λογαριασμό σας Google και πατήστε Λήψη κλειδιού sandbox: θα λάβετε έναν οργανισμό, ένα έργο sandbox με τους δικούς του
συνθετικούς ασθενείς και ένα κλειδί — που εμφανίζεται μία φορά. Το ίδιο μέσω του Admin API, με το Firebase user token σας:
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_…. Τα κλειδιά sandbox βλέπουν μόνο δεδομένα sandbox. Τα κλειδιά παραγωγής (sk_live_…)
εκδίδονται σε επαληθευμένους οργανισμούς με υπογεγραμμένη συμφωνία DPA — γράψτε στο [email protected]. Το sandbox είναι δωρεάν·
η παραγωγή ξεκινά από 99€ το μήνα και ο πρώτος μήνας είναι δωρεάν (δείτε Τιμολόγηση).
2. Πρώτη κλήση (1 λεπτό)
Το project sandbox σας έχει ήδη τη δική του αντιγραφή 30 συνθετικών ασθενών, με έξι μήνες ιστορικό
μέχρι την ημέρα δημιουργίας του project: ενήλικες, παιδιά και ηλικιωμένους από όλη την ΕΕ, με
παθήσεις (ICD-10), φαρμακευτική αγωγή (ATC), αλλεργίες, εργαστηριακά αποτελέσματα και ζωτικά σημεία (LOINC). Η αντιγραφή
ανήκει στο project σας: αλλάξτε ή διαγράψτε οτιδήποτε — κανένα άλλο project δεν το βλέπει. Η επιλογή Επαναφορά δοκιμαστικών ασθενών
στο dashboard (ή POST /admin/projects/{id}/sandbox/reset) τους επαναφέρει όπως ήταν, με νέα ids· οι ασθενείς που δημιουργήσατε μόνοι σας δεν επηρεάζονται. Κάθε συνθετικός ασθενής διατηρεί ένα
σταθερό αναγνωριστικό μετά από επαναφορές: η Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02
είναι πάντα η 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}
Τα όρια του Sandbox είναι γενναιόδωρα αλλά πεπερασμένα: 10.000 εγγραφές πόρων την ημέρα ανά project, 50 δικοί σας ασθενείς εκτός από τους συνθετικούς, 250 MB εγγράφων (βλ. όρια).
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, τον ρόλο του πράκτορα (agent role) 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. Προέλευση
curl "$BASE/v1/patients/$PID/provenance/Observation/$OBS" -H "Authorization: Bearer $KEY"
Μία καταχώρηση ανά έκδοση: ποιος (τύπος συγγραφέα και έργο), πότε, από ποιο σύστημα πηγής.
Κανόνες που αξίζει να γνωρίζετε
- Απομόνωση: ένα project βλέπει τους ασθενείς που δημιούργησε (συν τους κοινόχρηστους ασθενείς του sandbox). Ο ασθενής κάποιου άλλου δεν υπάρχει για εσάς:
404, ποτέ403. - Αντίστοιχα αναγνωριστικά (Pairwise ids): το αναγνωριστικό ασθενούς που βλέπετε είναι δικό σας. Ένα άλλο project βλέπει το ίδιο άτομο με διαφορετικό αναγνωριστικό. Αποθηκεύστε ελεύθερα τα αναγνωριστικά μας· ποτέ μην προσπαθήσετε να τα συσχετίσετε.
- Προέλευση (Provenance): κάθε εγγραφή αφήνει έναν πόρο Provenance. Τίποτα δεν αντικαθίσταται σιωπηλά· το ιστορικό είναι διαθέσιμο στο
/fhir/R4/{Type}/{id}/_history. - Σφάλματα: τα FHIR endpoints επιστρέφουν
OperationOutcome· τα/v1και/adminεπιστρέφουν{"error": {"type", "message", "field"}}. Κάθε απόκριση φέρειAnpheros-Request-Id· παραθέστε το όταν επικοινωνείτε μαζί μας. - Όρια: 600 αιτήματα/λεπτό ανά κλειδί από προεπιλογή, 200 στοιχεία ανά σελίδα, 25 MB ανά έγγραφο.
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. Πρότυπα
- Το
GET /fhir/R4/Patient/{id}/$summaryεπιστρέφει ένα έγγραφο International Patient Summary Bundle. - Το
POST /fhir/R4/Observation/$validate?profile=eu-labαναφέρει πώς ένα εργαστηριακό αποτέλεσμα συγκρίνεται με το προφίλ αποτελέσματος HL7 Europe Laboratory Report 2.1.0 (σφάλματα, προειδοποιήσεις, πληροφορίες): κατηγορία, κωδικός (προτιμάται LOINC), υποκείμενο, χρόνος ισχύος, εκτελεστής και τιμή, εκτός αν το αποτέλεσμα έχει μόνο καταχωρηθεί ή ακυρωθεί. - Το
GET /v1/terminology/loinc?q=hba1cαναζητά το ομαδοποιημένο υποσύνολο LOINC και τοGET /v1/search?q=metforminτον κατάλογο συμπτωμάτων, καταστάσεων και φαρμάκων. Οι παρατηρήσεις που δημιουργούνται χωρίς όνομα εμφάνισης λαμβάνουν αυτόματα το όνομα LOINC.
9. Συγκατάθεση ασθενούς (OAuth 2.1 + SMART on FHIR)
Τα κλειδιά API βλέπουν τους ασθενείς που δημιούργησε το έργο σας. Για να αποκτήσετε πρόσβαση σε υπάρχον αρχείο ενός ατόμου, ζητήστε του:
- Εγγραφή μιας εφαρμογής:
POST /admin/projects/{id}/applicationsμε το redirect URI σας (publicγια εφαρμογές κινητών/web με PKCE,confidentialγια διακομιστές· το μυστικό εμφανίζεται μία φορά). - Στείλτε το άτομο στη σελίδα συγκατάθεσης:
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, βλέπει τι ζητάτε σε απλή γλώσσα, επιλέγει το αρχείο (το δικό του, ενός εξαρτώμενου, ή αυτό που δημιούργησε η εφαρμογή σας για αυτόν) και πόσο διαρκεί η πρόσβαση. - Ανταλλαγή του κωδικού:
POST /oauth/token(authorization_code+code_verifier). Λαμβάνετε ένα access token (30 λεπτά), ένα refresh token (30 ημέρες, εναλλάσσεται κατά τη χρήση) και το αναγνωριστικό ασθενούς. - Κλήση του API με
Authorization: Bearer at_…. Βλέπετε μόνο αυτόν τον ασθενή, μόνο τους τύπους πόρων και τις ενέργειες στα scopes· οι αναγνώσεις εκτός scope απαντούν403, οι αναζητήσεις φιλτράρονται.
Το άτομο μπορεί να ανακαλέσει ανά πάσα στιγμή από το Anpheros· η επόμενη κλήση απαντά 401. Κάθε παραχώρηση αντικατοπτρίζεται ως πόρος FHIR Consent, και κάθε πρόσβαση υπό αυτήν καταγράφεται και είναι ορατή στο
άτομο. Ανακάλυψη: /.well-known/smart-configuration.
10. Webhooks
Αφήστε την πλατφόρμα να σας καλέσει αντί να κάνετε polling:
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 και στα δύο SDKs). Τα γεγονότα φέρουν αναγνωριστικά και εκδόσεις, όχι κλινικά δεδομένα.
Λεπτομέρειες, επαναδοκιμές και παραδείγματα: 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) και εμφανίζεται στον ασθενή με το όνομα στις συνδέσεις του ("Δρ. Άννα Παπαδοπούλου · Clinica Dente διάβασε τα εργαστηριακά σας αποτελέσματα").
12. Εργαστηριακές αναφορές σε μία κλήση
Στείλτε μια ολόκληρη εργαστηριακή αναφορά (CSV, HL7 v2 ORU^R01 ή JSON) και λάβετε εργαστηριακές Παρατηρήσεις (Observations) με 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. Εγγραφές που γίνονται από άλλα έργα σε ένα αρχείο που μπορείτε να
δείτε, φτάνουν ως συμβάντα webhook με data.external = true — δείτε docs/webhooks.md.
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card