API guide · webhooks
Verify every delivery, then act on it once.
Ambition POSTs signed, refs-only events to the https receivers you register. A delivery carries ids, your own externalReference, a coarse status, amounts and times, never a patient's details or anything clinical. This page is the receiver contract: what is signed, how to check it, how retries behave and what each event carries.
Status
On this deployment: Webhooks to your receivers: Sandbox only
- Webhooks to your receivers: Sandbox only. What runs now: Signing, retries (19 attempts over at least about 74 hours; every 4xx but 410 retried, 410 disables the receiver), dead letters, replay and delivery receipts against the in-process synthetic receiver (.demo.invalid) on synthetic deployments; a self-serve developer connection for brands with no partner integration; and, built but not yet exercised on a deployed sandbox, sandbox delivery of synthetic events to a developer's own https receiver while the developer_webhooks sandbox rail is open; and, written and unit-tested but with its migration not yet applied and its pgTAP suite not yet run, lifecycle event producers with refs-only payloads carrying the enrollment id and externalReference (enrollment.created, subscription.created, subscription.canceled, payment.failed, and enrollment.status_changed produced only under the brand-to-entity BAA and downstream-systems attestation and re-checked at every send).
The signature
Each v1= entry of ambition-signature is a lowercase hex HMAC-SHA256, keyed with your receiver's signing secret (whsec_…, shown once when you register it), over this exact string:
${ambition-event-id}.${ambition-timestamp}.${raw request body}The event id and timestamp are inside the signed material, so neither can be changed in transit and a captured delivery cannot be replayed under a fresh timestamp. Use the body exactly as it arrived: parsing and re-serializing JSON changes its bytes and the signature no longer matches. Refuse a timestamp more than 5 minutes from your clock.
Headers
| Header | Signed | Meaning |
|---|---|---|
ambition-event-id | yes | The event's id, evt_ and 24 hex characters. The same on every attempt, at every receiver of the event and in every redelivery. Deduplicate on it. |
ambition-timestamp | yes | When this attempt was signed, in Unix seconds. Refuse one more than five minutes from your clock. |
ambition-signature | yes | One or more v1=<hex> entries, comma-separated. During a signing-key rotation there is one entry per key you may still hold; accept the delivery when any one matches. |
ambition-delivery-attempt | no | The attempt number, from 1. Informational: the signed body carries the same number as attempt. |
content-type | no | Always application/json. |
Verify a delivery
Each verifier below uses only its language's standard library and is tested against deliveries the platform signs: a plain delivery, both kinds of key rotation and a multibyte body verify; a changed body, id or timestamp, a stale timestamp and a wrong secret are refused. Answer 401 when verification fails. It is retried, so a receiver mid-rotation loses nothing.
Python · Python 3.8 or later
"""Verify an Ambition webhook delivery. Python 3.8+, standard library only."""
import hashlib
import hmac
import json
import re
import time
EVENT_ID = re.compile(r"^evt_[A-Za-z0-9_-]{6,120}$")
DIGITS = re.compile(r"^[0-9]+$")
class InvalidAmbitionWebhook(Exception):
"""The delivery is not authentic. Answer 401: Ambition retries it."""
def verify_ambition_webhook(raw_body, event_id, timestamp, signature, secret,
tolerance_seconds=300, now=None):
"""Return the parsed event, or raise InvalidAmbitionWebhook.
raw_body is the request body exactly as received, as bytes, never a
re-serialized object. event_id, timestamp and signature are the
ambition-event-id, ambition-timestamp and ambition-signature headers.
"""
if not event_id or not EVENT_ID.match(event_id):
raise InvalidAmbitionWebhook("event id is missing or invalid")
if not timestamp or not DIGITS.match(timestamp):
raise InvalidAmbitionWebhook("timestamp is missing")
current = time.time() if now is None else now
if abs(current - int(timestamp)) > tolerance_seconds:
raise InvalidAmbitionWebhook("timestamp is outside tolerance")
if not signature:
raise InvalidAmbitionWebhook("signature is missing")
signed = (event_id + "." + timestamp + ".").encode("utf-8") + raw_body
expected = hmac.new(secret.encode("utf-8"), signed, hashlib.sha256).hexdigest()
matched = False
# During a key rotation there is one v1= entry per key; any one may match.
for entry in signature.split(","):
entry = entry.strip()
if entry.startswith("v1=") and hmac.compare_digest(
entry[3:].lower().encode("utf-8"), expected.encode("utf-8")):
matched = True
if not matched:
raise InvalidAmbitionWebhook("signature does not match")
return json.loads(raw_body)
event = verify_ambition_webhook(request.get_data(), request.headers.get("ambition-event-id"), request.headers.get("ambition-timestamp"), request.headers.get("ambition-signature"), os.environ["AMBITION_WEBHOOK_SECRET"])Go · Go 1.20 or later
// Package ambitionwebhook verifies Ambition webhook deliveries.
// Go 1.20+, standard library only.
package ambitionwebhook
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"errors"
"regexp"
"strconv"
"strings"
"time"
)
var (
eventIDPattern = regexp.MustCompile(`^evt_[A-Za-z0-9_-]{6,120}$`)
timestampPattern = regexp.MustCompile(`^[0-9]+$`)
)
// ErrInvalidWebhook means the delivery is not authentic. Answer 401:
// Ambition retries it.
var ErrInvalidWebhook = errors.New("ambition webhook: invalid delivery")
// Verify checks one delivery. rawBody is the request body exactly as
// received. eventID, timestamp and signature are the ambition-event-id,
// ambition-timestamp and ambition-signature headers. Pass time.Now() as now
// and 5*time.Minute as tolerance.
func Verify(rawBody []byte, eventID, timestamp, signature, secret string, tolerance time.Duration, now time.Time) error {
if !eventIDPattern.MatchString(eventID) || !timestampPattern.MatchString(timestamp) {
return ErrInvalidWebhook
}
sent, err := strconv.ParseInt(timestamp, 10, 64)
if err != nil {
return ErrInvalidWebhook
}
skew := now.Unix() - sent
if skew < 0 {
skew = -skew
}
if time.Duration(skew)*time.Second > tolerance {
return ErrInvalidWebhook
}
mac := hmac.New(sha256.New, []byte(secret))
mac.Write([]byte(eventID + "." + timestamp + "."))
mac.Write(rawBody)
expected := mac.Sum(nil)
matched := false
// During a key rotation there is one v1= entry per key; any one may match.
for _, entry := range strings.Split(signature, ",") {
entry = strings.TrimSpace(entry)
if !strings.HasPrefix(entry, "v1=") {
continue
}
provided, err := hex.DecodeString(entry[3:])
if err == nil && hmac.Equal(provided, expected) {
matched = true
}
}
if !matched {
return ErrInvalidWebhook
}
return nil
}
err := ambitionwebhook.Verify(body, r.Header.Get("ambition-event-id"), r.Header.Get("ambition-timestamp"), r.Header.Get("ambition-signature"), os.Getenv("AMBITION_WEBHOOK_SECRET"), 5*time.Minute, time.Now())Ruby · Ruby 2.6 or later
# Verifies an Ambition webhook delivery. Ruby 2.6+, standard library only.
require "json"
require "openssl"
module AmbitionWebhook
EVENT_ID = /\Aevt_[A-Za-z0-9_-]{6,120}\z/.freeze
DIGITS = /\A[0-9]+\z/.freeze
# The delivery is not authentic. Answer 401: Ambition retries it.
class InvalidSignature < StandardError; end
# Returns the parsed event, or raises InvalidSignature. raw_body is the
# request body exactly as received (request.raw_post in Rails), never a
# re-serialized object. event_id, timestamp and signature are the
# ambition-event-id, ambition-timestamp and ambition-signature headers.
def self.verify!(raw_body:, event_id:, timestamp:, signature:, secret:, tolerance: 300, now: Time.now.to_i)
raise InvalidSignature, "event id is missing or invalid" unless event_id.is_a?(String) && EVENT_ID.match?(event_id)
raise InvalidSignature, "timestamp is missing" unless timestamp.is_a?(String) && DIGITS.match?(timestamp)
raise InvalidSignature, "timestamp is outside tolerance" if (now - timestamp.to_i).abs > tolerance
raise InvalidSignature, "signature is missing" unless signature.is_a?(String)
signed = "#{event_id}.#{timestamp}.".b + raw_body.b
expected = OpenSSL::HMAC.hexdigest("SHA256", secret, signed)
matched = false
# During a key rotation there is one v1= entry per key; any one may match.
signature.split(",").each do |entry|
entry = entry.strip
next unless entry.start_with?("v1=")
matched = true if secure_compare(entry[3..-1].downcase, expected)
end
raise InvalidSignature, "signature does not match" unless matched
JSON.parse(raw_body)
end
def self.secure_compare(provided, expected)
return false unless provided.bytesize == expected.bytesize
difference = 0
provided.bytes.zip(expected.bytes) { |left, right| difference |= left ^ right }
difference.zero?
end
private_class_method :secure_compare
end
event = AmbitionWebhook.verify!(raw_body: request.raw_post, event_id: request.headers["ambition-event-id"], timestamp: request.headers["ambition-timestamp"], signature: request.headers["ambition-signature"], secret: ENV.fetch("AMBITION_WEBHOOK_SECRET"))Node.js · Node.js 20 or later
// Verifies an Ambition webhook delivery. Node 20+, no dependencies.
import { createHmac, timingSafeEqual } from "node:crypto";
const EVENT_ID = /^evt_[A-Za-z0-9_-]{6,120}$/u;
const DIGITS = /^[0-9]+$/u;
/**
* Returns the parsed event, or throws. rawBody is the request body exactly as
* received (a Buffer or the string from request.text()), never a
* re-serialized object. Answer 401 when it throws: Ambition retries it.
*/
export function verifyDelivery({ rawBody, eventId, timestamp, signature, secret, toleranceSeconds = 300, nowSeconds = Date.now() / 1000 }) {
if (!eventId || !EVENT_ID.test(eventId)) throw new Error("event id is missing or invalid");
if (!timestamp || !DIGITS.test(timestamp)) throw new Error("timestamp is missing");
if (Math.abs(nowSeconds - Number(timestamp)) > toleranceSeconds) throw new Error("timestamp is outside tolerance");
if (!signature) throw new Error("signature is missing");
const expected = createHmac("sha256", secret)
.update(`${eventId}.${timestamp}.`)
.update(rawBody)
.digest();
let matched = false;
// During a key rotation there is one v1= entry per key; any one may match.
for (const entry of signature.split(",").map((value) => value.trim())) {
if (!entry.startsWith("v1=")) continue;
const provided = Buffer.from(entry.slice(3), "hex");
if (provided.length === expected.length && timingSafeEqual(provided, expected)) matched = true;
}
if (!matched) throw new Error("signature does not match");
return JSON.parse(Buffer.isBuffer(rawBody) ? rawBody.toString("utf8") : rawBody);
}
const event = verifyDelivery({ rawBody: await request.text(), eventId: request.headers.get("ambition-event-id"), timestamp: request.headers.get("ambition-timestamp"), signature: request.headers.get("ambition-signature"), secret: process.env.AMBITION_WEBHOOK_SECRET });The typed client's verifyAmbitionWebhook checks the same things and is async: await it. The client is not yet published.
Deduplicate on the event id, not the body id
Two ids travel with a delivery and they mean different things. ambition-event-id (and the body's originalRequestId) names the event: it is the same on every attempt, at every receiver the event fans out to and in every redelivery. The body's id names this delivery: each receiver of one event gets its own, and a redelivery gets a new one.
Record ambition-event-id durably before you apply anything, answer 2xx to an id you have already processed without applying it again, and never deduplicate on a hash of the body: it carries the attempt number, which changes on every retry.
Answers and retries
| Your receiver answers | What happens |
|---|---|
| 2xx | Delivered. Nothing is sent again unless you ask for a redelivery. |
| Any 4xx except 410, including 401 for a bad signature | Retried on the schedule below. A 401 while you rotate your signing secret does not lose the event. |
| 410 Gone | Not retried. The delivery is dead-lettered and the receiver that answered is disabled: nothing more goes to it, redeliveries included, until you resume it on Integrations or on Developers, Webhooks. |
| 5xx, a timeout or a connection failure | Retried on the schedule below. |
| Still failing after the last attempt | Dead-lettered. Send it again with POST /v1/deliveries/replay once your receiver is fixed. |
A delivery gets 19 attempts. Each wait is drawn at random from half its ceiling to the whole ceiling, so retries spread out and none comes early. A receiver that is down for less than 3d 1h always gets the event when it comes back; nothing is retried for longer than 6d 3h.
| Attempt | Wait after the previous failure | Since the first attempt |
|---|---|---|
| 1 | — | 0s |
| 2 | 30s to 1m | 30s to 1m |
| 3 | 2m 30s to 5m | 3m to 6m |
| 4 | 15m to 30m | 18m to 36m |
| 5 | 30m to 1h | 48m to 1h 36m |
| 6 | 1h to 2h | 1h 48m to 3h 36m |
| 7 | 2h to 4h | 3h 48m to 7h 36m |
| 8 | 4h to 8h | 7h 48m to 15h 36m |
| 9 | 6h to 12h | 13h 48m to 1d 3h |
| 10 | 6h to 12h | 19h 48m to 1d 15h |
| 11 | 6h to 12h | 1d 1h to 2d 3h |
| 12 | 6h to 12h | 1d 7h to 2d 15h |
| 13 | 6h to 12h | 1d 13h to 3d 3h |
| 14 | 6h to 12h | 1d 19h to 3d 15h |
| 15 | 6h to 12h | 2d 1h to 4d 3h |
| 16 | 6h to 12h | 2d 7h to 4d 15h |
| 17 | 6h to 12h | 2d 13h to 5d 3h |
| 18 | 6h to 12h | 2d 19h to 5d 15h |
| 19 | 6h to 12h | 3d 1h to 6d 3h |
Answer within a few seconds and do slow work afterwards. A delivery that dead-letters can be sent again with the same event id: see below.
Dead letters and redelivery
A delivery is dead-lettered when its last attempt fails, or at once on a 410. Nothing more is sent for it on its own. Once your receiver is fixed, ask for it again with POST /v1/deliveries/replay (scope deliveries.replay), naming the ambition-event-id your receiver saw or the delivery's outboxId, and why. A delivery that was delivered can be sent again the same way, for example after you restore your own database.
POST /v1/deliveries/replay
Authorization: Bearer <your API key with deliveries.replay>
Content-Type: application/json
{
"eventId": "evt_3f9a1c0d5b7e2a4c6d8e0f12",
"reason": "Receiver was down 09:00-10:30 UTC"
}- It keeps the event: the same
ambition-event-id, type, payload and digest. The body'sidis new, andattemptstarts again at 1. A delivered delivery's redelivery keeps the originalidwith one new suffix; a dead letter's replay adds a suffix each time it is replayed, so never parse the body'sid. - It goes to the receiver the event went to, and only while that receiver is active and still subscribed to the type. A paused or disabled receiver (a 410 disables it) answers
409 receiver_not_active: resume it in the console (Integrations, or Developers, Webhooks), or register another receiver, and catch up fromGET /v1/events. - An event that went to several of your receivers needs
endpointId(409 endpoint_required). ByeventId, the newest delivery of the event to that receiver is the one sent again: prefer it. Naming a dead-lettered delivery'soutboxIdafter it was replayed returns that replay (created: false), even once it was delivered. - A redelivery is never queued while the event is already on its way to that receiver. Asking again while a redelivery is queued returns it (
created: false) and costs nothing; while the original is still being retried the answer is409 delivery_in_flight. - A dead-lettered delivery is replayed once per dead letter, and its dead letter is resolved with your reason. A resolved or discarded dead letter, and a reconciled delivery, are
409 not_replayable. - A redelivery gets the full retry schedule above. The budget is per API key: each key may queue a limited number per window (
429 replay_budget_exhaustedwithRetry-After); a repeat, and a replay an operator queued, cost it nothing. - A clinical event names a patient, so its redelivery needs a phi_server key with
clinical_events.read(403 phi_key_required), a verified clinical receiver (409 receiver_not_activeotherwise) and the gate to hold now:409 phi_gate_closed,409 phi_suspended,409 entity_baa_missingfor a case whose BAA is not in force,409 clinical_event_heldfor an event Ambition holds. Every such request, allowed or refused, is recorded in the access log with your key as the actor. - The key decides the scope: its brand and its environment. A sandbox key never addresses a production delivery, and another brand's delivery is a
404like a missing one. Your reason and key are recorded on the redelivery; never put patient data in the reason.
Each API key may queue 30 redeliveries in any 1h window. Because a redelivery carries the original event id, a receiver that records ambition-event-id before acting answers 2xx to one it already applied and does nothing twice.
The delivery log
Everything about your deliveries is readable with your API key, scoped to its brand and environment. No call returns a payload, a response body or a secret.
| Call | Scope | Use |
|---|---|---|
GET /v1/deliveries | deliveries.read | Every attempt, successes included, newest first. Filter by status, orderId, eventType, endpointId, createdAfter (inclusive) and createdBefore (exclusive); pass meta.nextCursor as startingAfter for the next page. The first page counts the matching attempts in meta.total (up to 10,000, meta.totalCapped beyond); later pages answer null. An attempt recorded while you page can land before your cursor, so the log is for operating, not for completeness: dedupe on ambition-event-id and use GET /v1/events to catch up. Each attempt names its outboxId, eventId and endpointId. |
GET /v1/deliveries/{id} | deliveries.read | One delivery (its outboxId): status, every attempt with its response code and class, failure class and next retry, when the next attempt is due, and its redeliveries. Never a payload, a response body or a secret, and a redelivery's reason only when your own API key queued it (an operator's stays with the operator). |
POST /v1/deliveries/replay | deliveries.replay | Send a delivered or dead-lettered delivery again to the receiver it went to, by outboxId or by the eventId your receiver saw (with endpointId when the event went to several receivers), with a reason. |
GET /v1/events | events.read | Backfill: the events your receivers were or would have been sent, oldest first, ids equal to ambition-event-id. |
Events
Every event shares one envelope; events with a producer also carry data, a refs-only payload. The database checks each payload against its schema before recording it, so a payload cannot carry a field listed nowhere below.
order.acknowledgedPlanned: nothing sends it yetOrder acknowledged
A fulfilment partner acknowledged an order. Carries the order id and a payload reference only. Not sent yet: receivers can subscribe now, and deliveries start when its producer ships.
Payload schema 2026-08-09
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "order.acknowledged",
"schemaVersion": "2026-08-09",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}order.acceptedPlanned: nothing sends it yetOrder accepted
A fulfilment partner accepted an order. Carries the order id and a payload reference only. Not sent yet: receivers can subscribe now, and deliveries start when its producer ships.
Payload schema 2026-08-09
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "order.accepted",
"schemaVersion": "2026-08-09",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}order.in_productionPlanned: nothing sends it yetOrder in production
A fulfilment partner started producing an order. Carries the order id and a payload reference only. Not sent yet: receivers can subscribe now, and deliveries start when its producer ships.
Payload schema 2026-08-09
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "order.in_production",
"schemaVersion": "2026-08-09",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}order.shippedPlanned: nothing sends it yetOrder shipped
A fulfilment partner shipped an order. Carries the order id and a payload reference only. Not sent yet: receivers can subscribe now, and deliveries start when its producer ships.
Payload schema 2026-08-09
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "order.shipped",
"schemaVersion": "2026-08-09",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}order.deliveredPlanned: nothing sends it yetOrder delivered
A fulfilment partner reported an order delivered. Carries the order id and a payload reference only. Not sent yet: receivers can subscribe now, and deliveries start when its producer ships.
Payload schema 2026-08-09
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "order.delivered",
"schemaVersion": "2026-08-09",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}order.exceptionPlanned: nothing sends it yetOrder exception
A fulfilment partner reported a problem with an order. Carries the order id and a payload reference only. Not sent yet: receivers can subscribe now, and deliveries start when its producer ships.
Payload schema 2026-08-09
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "order.exception",
"schemaVersion": "2026-08-09",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}payment.capturedHas a producerA patient payment was captured
Stripe confirmed a captured payment on the brand's connected account. data carries ids (with the enrollment id and your externalReference when the payment belongs to an enrollment and the receiver may be sent them), amount, currency, status and time only, never patient, product, program or clinical detail. Delivered as commerce.v2 (with enrollmentId and externalReference) only while the person who registered the receiver holds patient.read.minimum_necessary and the brand's business associate agreement and downstream-systems attestation are in force, checked again at every send, because a subscription exists only for an approved patient; otherwise, and for events recorded before 2026-11-01, as commerce.v1, which names neither. Branch on schemaVersion.
Payload schema commerce.v2 or commerce.v1 (branch on schemaVersion)
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data · commerce.v2
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
enrollmentId | string | null | yes | The enrollment the payment or subscription belongs to, when there is one. |
externalReference | string | null | yes | Your own customer identifier on that enrollment, when you supplied one. |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
data · commerce.v1
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "payment.captured",
"schemaVersion": "commerce.v2",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"id": "00000000-0000-4000-8000-00000000e001",
"type": "example-type",
"livemode": false,
"subject": {
"type": "transaction",
"id": "00000000-0000-4000-8000-00000000e001"
},
"enrollmentId": "00000000-0000-4000-8000-00000000e001",
"externalReference": "example-external-reference",
"stripeObjectId": "example_stripeObjectId",
"amountCents": 1,
"currency": "example-currency",
"status": "example-status",
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}payment.failedHas a producerA patient payment failed
Stripe reported a failed invoice payment for a patient subscription on the brand's connected account. Refs only: the subscription (with the enrollment id and your externalReference when the receiver may be sent them), the amount due, currency, status and time. Dunning stays Stripe's; the subscription's own status arrives as subscription.updated. Delivered as commerce.v2 (with enrollmentId and externalReference) only while the person who registered the receiver holds patient.read.minimum_necessary and the brand's business associate agreement and downstream-systems attestation are in force, checked again at every send, because a subscription exists only for an approved patient; otherwise, and for events recorded before 2026-11-01, as commerce.v1, which names neither. Branch on schemaVersion.
Payload schema commerce.v2 or commerce.v1 (branch on schemaVersion)
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data · commerce.v2
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
enrollmentId | string | null | yes | The enrollment the payment or subscription belongs to, when there is one. |
externalReference | string | null | yes | Your own customer identifier on that enrollment, when you supplied one. |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
data · commerce.v1
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "payment.failed",
"schemaVersion": "commerce.v2",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"id": "00000000-0000-4000-8000-00000000e001",
"type": "example-type",
"livemode": false,
"subject": {
"type": "transaction",
"id": "00000000-0000-4000-8000-00000000e001"
},
"enrollmentId": "00000000-0000-4000-8000-00000000e001",
"externalReference": "example-external-reference",
"stripeObjectId": "example_stripeObjectId",
"amountCents": 1,
"currency": "example-currency",
"status": "example-status",
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}subscription.createdHas a producerA patient subscription was created
Sent once per patient subscription, with the first transition Stripe confirms for it on the brand's connected account. Refs only: the subscription (with the enrollment id and your externalReference when the receiver may be sent them), status and time. Delivered as commerce.v2 (with enrollmentId and externalReference) only while the person who registered the receiver holds patient.read.minimum_necessary and the brand's business associate agreement and downstream-systems attestation are in force, checked again at every send, because a subscription exists only for an approved patient; otherwise, and for events recorded before 2026-11-01, as commerce.v1, which names neither. Branch on schemaVersion.
Payload schema commerce.v2 or commerce.v1 (branch on schemaVersion)
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data · commerce.v2
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
enrollmentId | string | null | yes | The enrollment the payment or subscription belongs to, when there is one. |
externalReference | string | null | yes | Your own customer identifier on that enrollment, when you supplied one. |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
data · commerce.v1
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "subscription.created",
"schemaVersion": "commerce.v2",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"id": "00000000-0000-4000-8000-00000000e001",
"type": "example-type",
"livemode": false,
"subject": {
"type": "transaction",
"id": "00000000-0000-4000-8000-00000000e001"
},
"enrollmentId": "00000000-0000-4000-8000-00000000e001",
"externalReference": "example-external-reference",
"stripeObjectId": "example_stripeObjectId",
"amountCents": 1,
"currency": "example-currency",
"status": "example-status",
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}subscription.updatedHas a producerA patient subscription changed status
Stripe confirmed a subscription status change on the brand's connected account. data carries ids (with the enrollment id and your externalReference when the receiver may be sent them), status and time only, never patient, product, program or clinical detail. Delivered as commerce.v2 (with enrollmentId and externalReference) only while the person who registered the receiver holds patient.read.minimum_necessary and the brand's business associate agreement and downstream-systems attestation are in force, checked again at every send, because a subscription exists only for an approved patient; otherwise, and for events recorded before 2026-11-01, as commerce.v1, which names neither. Branch on schemaVersion.
Payload schema commerce.v2 or commerce.v1 (branch on schemaVersion)
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data · commerce.v2
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
enrollmentId | string | null | yes | The enrollment the payment or subscription belongs to, when there is one. |
externalReference | string | null | yes | Your own customer identifier on that enrollment, when you supplied one. |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
data · commerce.v1
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "subscription.updated",
"schemaVersion": "commerce.v2",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"id": "00000000-0000-4000-8000-00000000e001",
"type": "example-type",
"livemode": false,
"subject": {
"type": "transaction",
"id": "00000000-0000-4000-8000-00000000e001"
},
"enrollmentId": "00000000-0000-4000-8000-00000000e001",
"externalReference": "example-external-reference",
"stripeObjectId": "example_stripeObjectId",
"amountCents": 1,
"currency": "example-currency",
"status": "example-status",
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}subscription.canceledHas a producerA patient subscription was canceled
Sent once per patient subscription, when Stripe confirms it canceled on the brand's connected account. Refs only: the subscription (with the enrollment id and your externalReference when the receiver may be sent them), status and time. Delivered as commerce.v2 (with enrollmentId and externalReference) only while the person who registered the receiver holds patient.read.minimum_necessary and the brand's business associate agreement and downstream-systems attestation are in force, checked again at every send, because a subscription exists only for an approved patient; otherwise, and for events recorded before 2026-11-01, as commerce.v1, which names neither. Branch on schemaVersion.
Payload schema commerce.v2 or commerce.v1 (branch on schemaVersion)
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data · commerce.v2
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
enrollmentId | string | null | yes | The enrollment the payment or subscription belongs to, when there is one. |
externalReference | string | null | yes | Your own customer identifier on that enrollment, when you supplied one. |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
data · commerce.v1
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The commerce event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the Stripe object is live. |
subject | object | yes | |
stripeObjectId | string | null | yes | The opaque Stripe object id, when there is one. |
amountCents | integer | null | yes | The amount in the smallest currency unit, for payments. |
currency | string | null | yes | ISO 4217, lowercase, for payments. |
status | string | yes | The subject's status after the change. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "subscription.canceled",
"schemaVersion": "commerce.v2",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"id": "00000000-0000-4000-8000-00000000e001",
"type": "example-type",
"livemode": false,
"subject": {
"type": "transaction",
"id": "00000000-0000-4000-8000-00000000e001"
},
"enrollmentId": "00000000-0000-4000-8000-00000000e001",
"externalReference": "example-external-reference",
"stripeObjectId": "example_stripeObjectId",
"amountCents": 1,
"currency": "example-currency",
"status": "example-status",
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}enrollment.createdHas a producerAn enrollment was created
An enrollment was created for the brand. Refs only: the enrollment id, the brand's externalReference, the status created and the time. Never a program, product or clinical field.
Payload schema enrollment.v1
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The enrollment event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the enrollment is in production. |
subject | object | yes | |
enrollmentId | string | yes | The enrollment id. |
externalReference | string | null | yes | Your own customer identifier, when you supplied one. |
status | "created" | "account_verified" | "intake_started" | "intake_submitted" | "in_review" | "needs_info" | "approved" | "not_approved" | "canceled" | "expired" | yes | The coarse status after the change (`created` for enrollment.created). |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "enrollment.created",
"schemaVersion": "enrollment.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"id": "00000000-0000-4000-8000-00000000e001",
"type": "example-type",
"livemode": false,
"subject": {
"type": "enrollment",
"id": "00000000-0000-4000-8000-00000000e001"
},
"enrollmentId": "00000000-0000-4000-8000-00000000e001",
"externalReference": "example-external-reference",
"status": "created",
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}enrollment.status_changedHas a producerAn enrollment's coarse status changed
An enrollment's coarse status changed: the enrollment id, the brand's externalReference, the new coarse status and the time. Coarse status is treated as PHI: it is produced only while the brand-to-entity BAA and downstream-systems attestation are in force, and a receiver is subscribed, and sent it, only while the brand-to-entity BAA and the brand's downstream-systems attestation are in force and the person who registered the receiver holds patient.read.minimum_necessary. Never forward it to ad-platform conversion APIs or audience tools. Subscribing needs patient.read.minimum_necessary and the brand's business associate agreement and downstream-systems attestation in force.
Payload schema enrollment.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | The enrollment event's id. |
type | string | yes | The event type, as in the envelope. |
livemode | boolean | yes | Whether the enrollment is in production. |
subject | object | yes | |
enrollmentId | string | yes | The enrollment id. |
externalReference | string | null | yes | Your own customer identifier, when you supplied one. |
status | "created" | "account_verified" | "intake_started" | "intake_submitted" | "in_review" | "needs_info" | "approved" | "not_approved" | "canceled" | "expired" | yes | The coarse status after the change (`created` for enrollment.created). |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "enrollment.status_changed",
"schemaVersion": "enrollment.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"id": "00000000-0000-4000-8000-00000000e001",
"type": "example-type",
"livemode": false,
"subject": {
"type": "enrollment",
"id": "00000000-0000-4000-8000-00000000e001"
},
"enrollmentId": "00000000-0000-4000-8000-00000000e001",
"externalReference": "example-external-reference",
"status": "created",
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}webhook.testHas a producerSigned test delivery
A synthetic, signed delivery an integration operator asked for, sent only to that sandbox receiver. Names no order and carries no data. Never subscribed.
Payload schema 2026-08-09 · never subscribed
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "webhook.test",
"schemaVersion": "2026-08-09",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}webhook.verificationHas a producerClinical receiver verification
The signed handshake a clinical receiver must pass before its first clinical delivery (20261103140000): sent only to the receiver being verified, it carries verification.challenge, a random 64-character value your integration operator enters back in the console within 24 hours. Names no patient. Never subscribed.
Payload schema 2026-11-03 · never subscribed
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
verification | object | yes |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "webhook.verification",
"schemaVersion": "2026-11-03",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"verification": {
"challenge": "example-challenge"
}
}clinical.patient.createdHas a producerPatient created
A patient was created for your external reference. Refs: the patient. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.patient.created",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.patient.updatedHas a producerPatient updated
The patient's record changed. Refs: the patient; read it for what changed. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.patient.updated",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.patient.deactivatedHas a producerPatient deactivated
The patient was deactivated; no new case can be opened for them. Refs: the patient. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.patient.deactivated",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.contact.verifiedHas a producerContact verified by Ambition
Ambition verified one of the patient's contact points with a code it sent. Refs: the contact point. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.contact.verified",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.identity_verification.completedHas a producerIdentity verified
The patient's identity verification passed. Refs: the identity verification. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.identity_verification.completed",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.identity_verification.failedHas a producerIdentity verification failed
The patient's identity verification failed; read it for its coarse reason code. Refs: the identity verification. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.identity_verification.failed",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.identity_verification.review_requiredHas a producerIdentity verification needs review
The patient's identity verification needs a manual review: the covering physician group's reviewer decides it, and clinical.identity_verification.completed or .failed follows. Refs: the identity verification. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.identity_verification.review_required",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.referral.acceptedHas a producerThe medical group accepted a referral
The medical group covering your brand accepted your referral of the patient, by a member's review or by the group's written policy (20261111000000). The patient can now accept it (POST /patients/{patientId}/referrals/{referralId}/accept). Refs: the referral. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.referral.accepted",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.referral.declinedHas a producerThe medical group declined a referral
The medical group declined your referral of the patient; read it for its coarse declineReason (20261111000000). Refs: the referral. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.referral.declined",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.referral.expiredHas a producerA referral expired without its next step
A referral waiting for the medical group, or accepted and waiting for the patient, passed its 30 days without the next step (20261111000000). Refer again if the patient still wants care. Refs: the referral. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.referral.expired",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.document.availableHas a producerA patient document is available
A document joined the patient's record: a signed prescription, a care record with the clinician's decision, or a lab report the clinician signed off (20261103213000). Refs: documentId (and prescriptionId for a prescription); read it with GET /patients/{patientId}/documents/{documentId}/content, which takes the bare id. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.document.available",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.consent.recordedHas a producerA consent was recorded
A brand-rendered legal-kit consent was recorded against its presentation nonce. Refs: the consent; read it for its scope and status.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.consent.recorded",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.consent.withdrawnHas a producerA consent was withdrawn
The patient withdrew a legal-kit consent. Refs: the withdrawn consent; read it for its successor and scope.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.consent.withdrawn",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.intake.submittedHas a producerAn intake was submitted
A headless intake created a case. Refs: the submission (and the envelope's caseId); read it for its status (in_review or awaiting_identity).
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.intake.submitted",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.intake.identity_requiredHas a producerA case waits for identity verification
The case was accepted but waits before the clinician queue until identity is verified; it closes after 14 days. Refs: the submission and the envelope's caseId.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.intake.identity_required",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.intake.queuedHas a producerA waiting case entered the clinician queue
Identity was verified and the case is now with the clinical team. Refs: the submission and the envelope's caseId.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.intake.queued",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.intake.expiredHas a producerA waiting case closed unverified
Identity was not verified within 14 days and the case closed. refundExpected (clinical.decision.v1) is true when you are merchant of record (billing mode B): the platform terms require a full refund of the medication charge. Refs: the submission and the envelope's caseId.
Payload schema clinical.decision.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
refundExpected | boolean | yes | True when you are merchant of record for this program (billing mode B): refund the patient's medication charge in full. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.intake.expired",
"schemaVersion": "clinical.decision.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z",
"refundExpected": false
}
}clinical.safety_report.receivedHas a producerA safety report was received
The patient filed an adverse-event or product report. Refs: the safety report (reportId) and the envelope's caseId.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.safety_report.received",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.fill.requestedHas a producerA brand-requested fill was sent toward the pharmacy
The fill you requested passed every check and its refill order was created. Refs: the fill and its prescription; read the fill for its order.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.fill.requested",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.fill.heldHas a producerA brand-requested fill is held
The fill was held, or its hold reason changed. Read the fill for its coarse holdReason; repeat the cycleRef once it clears.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.fill.held",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.fill.transmittedHas a producerA fill reached the pharmacy
The refill order was transmitted to the pharmacy. Follow shipping through the order's events.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.fill.transmitted",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.prescription.refills_exhaustedHas a producerA prescription has no refills left
The last authorized refill is spoken for. Offer the patient a renewal. Sent once per prescription.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.prescription.refills_exhausted",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.renewal.requestedHas a producerA renewal request opened a case
Your renewal request opened a renewal-kind case for the clinician. Refs: the request and its prescription (the case is the envelope's caseId).
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.renewal.requested",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.checkin.dueHas a producerA therapy check-in is due
A check-in entered the physician group's notice period. Collect it and submit it; an overdue check-in holds fills.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.checkin.due",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.monitoring.labs_dueHas a producerMonitoring labs are due
Monitoring labs fall due under the program's cadence. Read the lab requirements and arrange them; the labs gate decides whether fills wait.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.monitoring.labs_due",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.createdHas a producerA case was created
The patient's intake opened a case. Refs: the case. Read it for its stage.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.created",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.assignedHas a producerA clinician was assigned
A licensed clinician of the physician group took the case. Read the case for the clinician's disclosure.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.assigned",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.needs_infoHas a producerThe clinician needs more information
Read the case's outstanding actions for the clinician's prompt and answer with more-info-responses.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.needs_info",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.info_receivedHas a producerThe patient's answer reached the clinician
The answer was posted to the case's care-team thread and the review resumed.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.info_received",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.labs_requiredHas a producerThe clinician needs labs
Labs are needed before the clinician decides. Read the lab requirements.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.labs_required",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.approvedHas a producerThe clinician approved
Read the case for the decision's patient-facing note and its prescriptions.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.approved",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.declinedHas a producerThe clinician declined
Read the case for the patient-facing note. refundExpected (clinical.decision.v1) is true when you are merchant of record (billing mode B): the platform terms require a full refund of the medication charge.
Payload schema clinical.decision.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
refundExpected | boolean | yes | True when you are merchant of record for this program (billing mode B): refund the patient's medication charge in full. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.declined",
"schemaVersion": "clinical.decision.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z",
"refundExpected": false
}
}clinical.case.cancelledHas a producerThe request was cancelled
The case was withdrawn before a decision.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.cancelled",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.case.closedHas a producerThe case was closed by the care team
No clinician of the network can serve the request now; the patient may start a new one. refundExpected (clinical.decision.v1) is true when you are merchant of record (billing mode B): refund the medication charge in full.
Payload schema clinical.decision.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
refundExpected | boolean | yes | True when you are merchant of record for this program (billing mode B): refund the patient's medication charge in full. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.case.closed",
"schemaVersion": "clinical.decision.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z",
"refundExpected": false
}
}clinical.prescription.signedHas a producerA prescription was signed
The clinician signed a prescription. Read it for the product, directions and refills.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.prescription.signed",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.prescription.heldHas a producerA prescription is held
Read the prescription for its coarse hold (regulatory, contact_unverified, ...).
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.prescription.held",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.prescription.releasedHas a producerA prescription hold was released
The hold cleared; the prescription continues to the pharmacy.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.prescription.released",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.prescription.cancelledHas a producerA prescription was cancelled
The clinician cancelled the prescription.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.prescription.cancelled",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.order.createdHas a producerA pharmacy order was created
An order for the prescription was created. Follow it through the orders read.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.order.created",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.order.acknowledgedHas a producerThe pharmacy acknowledged the order
The pharmacy received the order.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.order.acknowledged",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.order.acceptedHas a producerThe pharmacy accepted the order
The pharmacy accepted the order for dispensing.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.order.accepted",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.order.in_productionHas a producerThe order is being prepared
The pharmacy is compounding or preparing the order.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.order.in_production",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.order.shippedHas a producerThe order shipped
Read the order for its tracking number.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.order.shipped",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.order.deliveredHas a producerThe order was delivered
The carrier reported delivery.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.order.delivered",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.order.exceptionHas a producerThe order has a problem
Read the order for its coarse exception code; Ambition's operations team is working on it.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.order.exception",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.message.createdHas a producerA message was posted
A message on one of the patient's threads. Refs: threadId and messageId; read the message, and who sent it, through the API.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.message.created",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.lab.result_receivedHas a producerA lab result was received
A lab result for one of your patients' cases was recorded (by your server, or by the clinician from a report the patient supplied) and is waiting for the clinician's sign-off. Refs: the lab result and its case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.lab.result_received",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.lab.criticalHas a producerA lab result has a critical value
A received result has a value past a critical limit. The case's clinician and Care operations were alerted; prescribing and fills hold (labs_critical) until the clinician signs it off. Make sure the patient can be reached. Refs: the lab result and its case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.lab.critical",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.lab.reviewedHas a producerA lab result was signed off
The case's clinician signed off a lab result. Read the result for the disposition and the clinician's note to the patient, and the lab requirements for the gate. Refs: the lab result and its case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.lab.reviewed",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.lab.order_signedHas a producerA lab order was signed
The case's clinician signed a lab requisition for one of your patients (a panel of the program's lab protocol, or one the clinician ordered). Tell the patient how to complete the draw: read the order with GET /v1/patients/{patientId}/lab-orders/{id} for the lab, the collection mode, fasting and instructions. Refs: the lab order and its case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.lab.order_signed",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.lab.order_updatedHas a producerA lab order's status changed
A lab order moved: sent to the lab, accepted, specimen collected or received, partial or final results, or rejected, cancelled or expired. Read its status with GET /v1/patients/{patientId}/lab-orders/{id}. Refs: the lab order and its case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.lab.order_updated",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.lab.releasedHas a producerA lab result was released to the patient
A lab result was released to the patient under the physician group's release policy (after the clinician's review, after the policy's hold, or at once). Show it to the patient now. Refs: the lab result and its case.
Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | null | yes | The patient notice, when the event concerns one; otherwise null. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.lab.released",
"schemaVersion": "clinical.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z"
}
}clinical.notification.requestedHas a producerA care notice is due to your patient
Something in the patient's care needs telling them (a clinician message, a decision, a recall, a visit to book, ...): send your own email, SMS or push for templateKey, then acknowledge it with POST /patients/{patientId}/notifications/{notificationId}/delivered. A clinically required notice not acknowledged by ackDeadline (4 hours urgent, 24 hours otherwise) is followed by a content-free notice Ambition sends from your domain to the patient's verified contact. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.notification.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | yes | The patient notice. Acknowledge it with POST /patients/{patientId}/notifications/{notificationId}/delivered. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
templateKey | string | yes | Which notice (see the notification templates); render your own copy for it. |
clinicallyRequired | boolean | yes | A clinically required notice must be acknowledged by `ackDeadline`, or Ambition sends a content-free fallback from your domain. |
ackDeadline | string | null | yes | When the acknowledgment is due, UTC; null for a courtesy notice. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.notification.requested",
"schemaVersion": "clinical.notification.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z",
"templateKey": "example-template-key",
"clinicallyRequired": false,
"ackDeadline": "example-ack-deadline"
}
}clinical.notification.fallback_sentHas a producerAmbition sent your patient a content-free fallback notice
A clinically required notice was not acknowledged by its deadline, so Ambition told the patient, from your domain and with no clinical content, to sign in to your app. Clinical tier: names the patient, so it is sent only to a verified clinical receiver while your patient data access (PHI gate) is open and your BAA covers the physician group responsible for the case.
Payload schema clinical.notification.v1 · needs the business associate agreement and downstream-systems attestation
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
data | object | yes | The event's refs-only payload. |
data
| Field | Type | Required | Notes |
|---|---|---|---|
object | string | yes | What the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...). |
id | string | yes | Ambition's id of that object. |
patientId | string | yes | The Ambition patient id (from POST /patients). |
caseId | string | null | yes | The case, when the event concerns one; otherwise null. |
prescriptionId | string | null | yes | The prescription, when the event concerns one; otherwise null. |
orderId | string | null | yes | The pharmacy order, when the event concerns one; otherwise null. |
threadId | string | null | yes | The message thread, when the event concerns one; otherwise null. |
messageId | string | null | yes | The message, when the event concerns one; otherwise null. |
visitId | string | null | yes | The visit, when the event concerns one; otherwise null. |
documentId | string | null | yes | The document, when the event concerns one; otherwise null. |
reportId | string | null | yes | The safety report, when the event concerns one; otherwise null. |
notificationId | string | yes | The patient notice. Acknowledge it with POST /patients/{patientId}/notifications/{notificationId}/delivered. |
sequence | integer | yes | Per-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object. |
occurredAt | string | yes | When it happened, UTC. |
templateKey | string | yes | Which notice (see the notification templates); render your own copy for it. |
clinicallyRequired | boolean | yes | A clinically required notice must be acknowledged by `ackDeadline`, or Ambition sends a content-free fallback from your domain. |
ackDeadline | string | null | yes | When the acknowledgment is due, UTC; null for a courtesy notice. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "clinical.notification.fallback_sent",
"schemaVersion": "clinical.notification.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1,
"data": {
"object": "example-object",
"id": "00000000-0000-4000-8000-00000000e001",
"patientId": "00000000-0000-4000-8000-00000000e001",
"caseId": "00000000-0000-4000-8000-00000000e001",
"prescriptionId": "00000000-0000-4000-8000-00000000e001",
"orderId": "00000000-0000-4000-8000-00000000e001",
"threadId": "00000000-0000-4000-8000-00000000e001",
"messageId": "00000000-0000-4000-8000-00000000e001",
"visitId": "00000000-0000-4000-8000-00000000e001",
"documentId": "00000000-0000-4000-8000-00000000e001",
"reportId": "00000000-0000-4000-8000-00000000e001",
"notificationId": "00000000-0000-4000-8000-00000000e001",
"sequence": 1,
"occurredAt": "2026-01-01T00:00:00.000Z",
"templateKey": "example-template-key",
"clinicallyRequired": false,
"ackDeadline": "example-ack-deadline"
}
}formulary.policy_changedHas a producerA regulatory policy your catalog relies on changed
A regulatory policy a program of yours stands on changed state (put in effect, withdrawn) or held or released its substance. Sent once per affected program. Carries payloadRef = formulary:<program handle>:<substance> only: re-read the program's regulatory catalog and take the SKU down when it is no longer offered.
Payload schema formulary.v1
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "formulary.policy_changed",
"schemaVersion": "formulary.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}formulary.state_availability_changedHas a producerA program's State availability changed
A State became available or unavailable for a program of yours: a pharmacy's State attestation for the substance there was recorded, revoked or reviewed, or a State bar was set or lifted. Carries payloadRef = formulary:<program handle>:<substance>:<STATE> only: re-read the program's regulatory catalog.
Payload schema formulary.v1
Envelope
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | This delivery's request id. Each receiver of one event gets its own; a retry keeps it. |
originalRequestId | string | yes | The event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header. |
type | string | yes | The event type. |
schemaVersion | string | yes | The payload schema version of this delivery's `data`. |
orderId | string | null | yes | The order the event concerns, for order events; otherwise null. |
payloadRef | string | yes | An opaque reference to what the event is about. |
payloadDigest | string | yes | SHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`). |
attempt | integer | yes | Attempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header. |
{
"id": "example_id",
"originalRequestId": "example_originalRequestId",
"type": "formulary.state_availability_changed",
"schemaVersion": "formulary.v1",
"orderId": "example_orderId",
"payloadRef": "example-payload-ref",
"payloadDigest": "example-payload-digest",
"attempt": 1
}The test event
webhook.test is a signed, synthetic delivery you ask for from the Integrations page, sent only to the sandbox receiver you chose. It names no order and carries no data, and no receiver subscribes to it. Use it to prove your verification before a real event arrives: it is signed and carries an event id exactly like any other delivery.
Receivers and swaps
- Up to 5 receivers can be active per connection and plane, and every active receiver gets every event it subscribed to, with the same event id.
- To move to a new receiver with no downtime, register the new one, send it a test event, confirm it verifies, then pause the old one. Registering never pauses a receiver that is already active.
- To rotate a receiver's signing secret, rotate it with an overlap: until the overlap ends, every delivery carries a
v1=entry for both secrets, so you can deploy the new one at any point inside it. - Subscribing to
enrollment.status_changedneeds your business associate agreement and downstream-systems attestation in force, and a registrar who holds minimum-necessary patient access. They are checked again at every send. - Never forward an event, or anything derived from one, to an ad-platform conversion API or audience tool.