Fires when a patient receives a message from the clinical team. ownerEntity is the Patient; targetEntity is the Affiliate. The eventType is message-from-admin-practitioner-received.
⚠️ Conditional — set only for recognized sender ids
message in v2
⛔ Not delivered — blocked as PHI
patient_conversation_id, message_type in v2
✅ Always present when set in eventData
🚧
The message body is v1-only. v2 correctly strips message (PHI). v2 delivers patient_conversation_id and message_type (from eventData.type) so you can correlate the thread and message category — see Field Guarantees.
v1 payload (legacy)
{
"ownerEntity": { "id": "pat::ebbd2a07-xxxx-xxxx-xxxx-affaecf2b315", "firstName": "<PATIENT_FIRST_NAME>", "…": "patient document" },
"ownerModel": "Patient",
"targetEntity": "aff::96d23b23-xxxx-xxxx-xxxx-7759de5abcbb",
"targetEntityModel": "Affiliate",
"eventTitle": "Message Received.",
"eventDescription": "Webhook event to inform patient that they received a message.",
"eventType": "message-from-admin-practitioner-received",
"eventData": {
"patientConversationId": "pcv::bd6e11fd-xxxx-xxxx-xxxx-a35959104ec3",
"message": "HELLO!",
"type": "MESG",
"sender": "admin_1",
"senderRole": "admin"
}
}
eventData field
Type
Always?
Notes
patientConversationId
string
✅
Conversation id
message
string
✅
Message body (PHI)
type
string
✅
MESG (normal) or ADMN (automated)
sender
string
✅
Sender identifier
senderRole
string
⚠️
Only set for recognized sender ids
v2 payload
Sanitized envelope. message is blocked as PHI; type/sender/senderRole aren't on the ORDER allowlist. patientConversationId aliases to patient_conversation_id.