Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
वेबहुक
रिसोर्स राइट्स, सहमति परिवर्तनों और अंतिम दस्तावेज़ों के लिए हस्ताक्षरित, पुनः प्रयास किए गए, थिन इवेंट्स, TypeScript, Dart और Python में सिग्नेचर वेरिफिकेशन के साथ।
जब आपके प्रोजेक्ट में कुछ होता है तो Anpheros Platform आपके सर्वर को कॉल कर सकता है: एक संसाधन लिखा गया था, किसी व्यक्ति ने एक्सेस प्रदान या रद्द कर दिया था, एक दस्तावेज़ अंतिम रूप दिया गया था। ईवेंट पतले होते हैं: आईडी, प्रकार, संस्करण — कभी भी नैदानिक सामग्री नहीं। यदि आपको इसकी आवश्यकता है तो API के माध्यम से संसाधन पढ़ें। प्रत्येक डिलीवरी हस्ताक्षरित होती है; उस पर भरोसा करने से पहले हस्ताक्षर सत्यापित करें।
एक एंडपॉइंट पंजीकृत करें
curl -X POST $BASE/v1/webhooks -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"url": "https://your.app/anpheros/hook", "events": ["resource.created", "consent.revoked"], "description": "prod"}'
प्रतिक्रिया में secret (whsec_…) एक बार शामिल है। इसे सहेजें; आपको हस्ताक्षर सत्यापित करने के लिए इसकी आवश्यकता होगी।
events स्वीकार करता है ["*"] या इनमें से कोई भी:
| प्रकार | कब | data |
|---|---|---|
resource.created / resource.updated / resource.deleted |
आपके प्रोजेक्ट ने FHIR संसाधन (REST v1, FHIR API या बंडल) लिखा है (REST v1, FHIR API या बंडल) — या किसी अन्य प्रोजेक्ट ने ऐसे रिकॉर्ड में लिखा है जिस तक आपकी पहुँच है (आपने रोगी बनाया है, या आपके पास एक सक्रिय अनुदान है); तब data.external true है और data.source बताता है कि इसे किसने लिखा: author_type (रोगी / चिकित्सक / उपकरण / आयात / एआई), organization (वह प्रदर्शन नाम जिसके बदले लेखक ने कार्य किया), practitioner (निर्देशिका से नाम, जब ज्ञात हो), source_system |
resource_type, id, patient (आईडी जो आप देखते हैं), version, last_updated, और बाहरी लेखन के लिए external, source |
consent.granted |
किसी व्यक्ति ने सहमति पृष्ठ से आपके ऐप को एक्सेस प्रदान किया है (या एक विश्वसनीय ऐप ने इसका रिकॉर्ड लिंक किया है) | grant_id, patient, application_id, scopes, purpose, expires_at |
consent.revoked |
व्यक्ति (या प्लेटफ़ॉर्म) ने अनुदान समाप्त कर दिया | उपरोक्त के समान प्लस revoked_at, reason |
document.finalized |
एक दस्तावेज़ अपलोड अंतिम रूप दिया गया और चेकसम किया गया | id, patient, content_type, size, sha256 |
proposal.created |
एक एआई एजेंट ने आपके द्वारा देखे जा सकने वाले रिकॉर्ड में लिखने का प्रस्ताव दिया; यह व्यक्ति की मंजूरी की प्रतीक्षा करता है | id, patient, action, resource_type |
ping |
आपने परीक्षण वितरण का अनुरोध किया | endpoint |
एंडपॉइंट प्रति प्रोजेक्ट और वातावरण होते हैं: एक sk_test_ कुंजी सैंडबॉक्स एंडपॉइंट का प्रबंधन करती है,
एक sk_live_ कुंजी उत्पादन वाले। यूआरएल सार्वजनिक https:// एंडपॉइंट होने चाहिए। पंजीकरण (और url में कोई भी बाद का परिवर्तन) स्थानीय, निजी, लिंक-स्थानीय, मेटाडेटा और अन्य आरक्षित पतों को अस्वीकार करता है — localhost, 127.0.0.1, ::1, 10.0.0.0/8, 192.168.0.0/16, fd00::/8 और इसी तरह — और वे नाम जो उन्हें हल करते हैं, 400 invalid के साथ url फ़ील्ड पर; यह सैंडबॉक्स में भी लागू होता है। हर डिलीवरी पते को फिर से जांचती है और केवल उन आईपी पतों से जुड़ती है जिन्हें उसने अभी-अभी जांचा है, इसलिए एक नाम जो बाद में एक निजी नेटवर्क (डीएनएस रीबाइंडिंग) की ओर इशारा करता है, उसे कुछ भी नहीं मिलता है। विकास के दौरान अपने स्वयं के मशीन पर ईवेंट प्राप्त करने के लिए, इसे एक सार्वजनिक HTTPS टनल के माध्यम से उजागर करें और टनल के पते को पंजीकृत करें।
प्रति प्रोजेक्ट और वातावरण 10 एंडपॉइंट तक।
डिलीवरी
POST https://your.app/anpheros/hook
Content-Type: application/json
User-Agent: Anpheros-Webhooks/1.0
Anpheros-Event: resource.created
Anpheros-Event-Id: evt_…
Anpheros-Delivery: whd_…
Anpheros-Signature: t=1789800000,v1=5f3a…
{"id":"evt_…","type":"resource.created","created_at":"2026-09-19T12:00:00.000Z","environment":"production",
"project":"proj_…","data":{"resource_type":"Observation","id":"…","patient":"…","version":1,"last_updated":"…"}}
10 सेकंड के भीतर कोई भी 2xx के साथ प्रतिक्रिया दें। कुछ और (या टाइमआउट) विफलता है और डिलीवरी 24 घंटे (10 प्रयास) तक बैकऑफ़ के साथ पुनः प्रयास की जाती है, फिर exhausted के रूप में चिह्नित की जाती है। डिलीवरी कम से कम एक बार होती है और क्रम से बाहर आ सकती है: डी-डुप्लिकेट करने के लिए Anpheros-Event-Id और बासी अपडेट को अनदेखा करने के लिए data.version का उपयोग करें।
हस्ताक्षर सत्यापित करें
v1 आपके गुप्त कुंजी पर HMAC-SHA256 है <t>.<raw body> पर; यदि t 5 मिनट से पुराना है तो अस्वीकार करें।
import { verifyWebhookSignature } from '@anpheros/sdk';
app.post('/anpheros/hook', express.raw({ type: 'application/json' }), async (req, res) => {
const ok = await verifyWebhookSignature({ secret: process.env.ANPHEROS_WEBHOOK_SECRET!, header: req.header('anpheros-signature'), body: req.body });
if (!ok) return res.status(400).end();
const event = JSON.parse(req.body.toString());
// … enqueue and return quickly
res.status(204).end();
});
import 'package:anpheros_sdk/anpheros_sdk.dart';
final ok = verifyWebhookSignature(secret: secret, header: request.headers['anpheros-signature'], body: rawBodyBytes);
import hmac, hashlib, time
def verify(secret: str, header: str, body: bytes, tolerance=300) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
if abs(time.time() - int(parts["t"])) > tolerance:
return False
expected = hmac.new(secret.encode(), f"{parts['t']}.".encode() + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, parts["v1"])
ऑपरेट करें
GET /v1/webhooks/{id}/deliveries?status=failed— लॉग, सबसे नया पहले, स्टेटस कोड और एरर के साथ।POST /v1/webhooks/{id}/deliveries/{delivery_id}/redeliver— अभी एक को फिर से भेजें।POST /v1/webhooks/{id}/ping— एक टेस्ट इवेंट।POST /v1/webhooks/{id}/rotate— नया सीक्रेट (पुराना तुरंत बंद हो जाता है; यदि आप गैप का जोखिम नहीं उठा सकते हैं तो पहले अपना सर्वर अपडेट करें: दूसरा एंडपॉइंट रजिस्टर करें, फिर पुराना डिलीट करें)।PATCH /v1/webhooks/{id}के साथ{"active": false}डिलीवरी को रोकता है; जब आप एंडपॉइंट डिलीट करते हैं तो पेंडिंग वाले ड्रॉप हो जाते हैं।
दोनों SDKs इसे webhooks (create, list, get, update, delete, rotateSecret, ping, deliveries, redeliver) के तहत एक्सपोज़ करते हैं।
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card