Start building

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:

Signed 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

Headers on every delivery
HeaderSignedMeaning
ambition-event-idyesThe 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-timestampyesWhen this attempt was signed, in Unix seconds. Refuse one more than five minutes from your clock.
ambition-signatureyesOne 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-attemptnoThe attempt number, from 1. Informational: the signed body carries the same number as attempt.
content-typenoAlways 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

ambition_webhook.py
"""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)
Calling it
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

ambitionwebhook/verify.go
// 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
}
Calling it
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

ambition_webhook.rb
# 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
Calling it
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

ambition-webhook.mjs
// 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);
}
Calling it
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

What happens after your receiver answers
Your receiver answersWhat happens
2xxDelivered. Nothing is sent again unless you ask for a redelivery.
Any 4xx except 410, including 401 for a bad signatureRetried on the schedule below. A 401 while you rotate your signing secret does not lose the event.
410 GoneNot 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 failureRetried on the schedule below.
Still failing after the last attemptDead-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.

The retry schedule
AttemptWait after the previous failureSince the first attempt
1—0s
230s to 1m30s to 1m
32m 30s to 5m3m to 6m
415m to 30m18m to 36m
530m to 1h48m to 1h 36m
61h to 2h1h 48m to 3h 36m
72h to 4h3h 48m to 7h 36m
84h to 8h7h 48m to 15h 36m
96h to 12h13h 48m to 1d 3h
106h to 12h19h 48m to 1d 15h
116h to 12h1d 1h to 2d 3h
126h to 12h1d 7h to 2d 15h
136h to 12h1d 13h to 3d 3h
146h to 12h1d 19h to 3d 15h
156h to 12h2d 1h to 4d 3h
166h to 12h2d 7h to 4d 15h
176h to 12h2d 13h to 5d 3h
186h to 12h2d 19h to 5d 15h
196h to 12h3d 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.

Redeliver by event id · synthetic values
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's id is new, and attempt starts again at 1. A delivered delivery's redelivery keeps the original id with one new suffix; a dead letter's replay adds a suffix each time it is replayed, so never parse the body's id.
  • 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 from GET /v1/events.
  • An event that went to several of your receivers needs endpointId (409 endpoint_required). By eventId, the newest delivery of the event to that receiver is the one sent again: prefer it. Naming a dead-lettered delivery's outboxId after 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 is 409 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_exhausted with Retry-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_active otherwise) and the gate to hold now: 409 phi_gate_closed, 409 phi_suspended, 409 entity_baa_missing for a case whose BAA is not in force, 409 clinical_event_held for 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 404 like 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.

Operate your receiver over the API
CallScopeUse
GET /v1/deliveriesdeliveries.readEvery 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.readOne 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/replaydeliveries.replaySend 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/eventsevents.readBackfill: 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 yet

Order 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 yet

Order 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 yet

Order 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 yet

Order 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 yet

Order 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 yet

Order 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data · commerce.v2

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
enrollmentIdstring | nullyesThe enrollment the payment or subscription belongs to, when there is one.
externalReferencestring | nullyesYour own customer identifier on that enrollment, when you supplied one.
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.

data · commerce.v1

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data · commerce.v2

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
enrollmentIdstring | nullyesThe enrollment the payment or subscription belongs to, when there is one.
externalReferencestring | nullyesYour own customer identifier on that enrollment, when you supplied one.
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.

data · commerce.v1

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data · commerce.v2

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
enrollmentIdstring | nullyesThe enrollment the payment or subscription belongs to, when there is one.
externalReferencestring | nullyesYour own customer identifier on that enrollment, when you supplied one.
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.

data · commerce.v1

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data · commerce.v2

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
enrollmentIdstring | nullyesThe enrollment the payment or subscription belongs to, when there is one.
externalReferencestring | nullyesYour own customer identifier on that enrollment, when you supplied one.
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.

data · commerce.v1

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data · commerce.v2

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
enrollmentIdstring | nullyesThe enrollment the payment or subscription belongs to, when there is one.
externalReferencestring | nullyesYour own customer identifier on that enrollment, when you supplied one.
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.

data · commerce.v1

FieldTypeRequiredNotes
idstringyesThe commerce event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the Stripe object is live.
subjectobjectyes
stripeObjectIdstring | nullyesThe opaque Stripe object id, when there is one.
amountCentsinteger | nullyesThe amount in the smallest currency unit, for payments.
currencystring | nullyesISO 4217, lowercase, for payments.
statusstringyesThe subject's status after the change.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

An 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
idstringyesThe enrollment event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the enrollment is in production.
subjectobjectyes
enrollmentIdstringyesThe enrollment id.
externalReferencestring | nullyesYour own customer identifier, when you supplied one.
status"created" | "account_verified" | "intake_started" | "intake_submitted" | "in_review" | "needs_info" | "approved" | "not_approved" | "canceled" | "expired"yesThe coarse status after the change (`created` for enrollment.created).
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

An 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
idstringyesThe enrollment event's id.
typestringyesThe event type, as in the envelope.
livemodebooleanyesWhether the enrollment is in production.
subjectobjectyes
enrollmentIdstringyesThe enrollment id.
externalReferencestring | nullyesYour own customer identifier, when you supplied one.
status"created" | "account_verified" | "intake_started" | "intake_submitted" | "in_review" | "needs_info" | "approved" | "not_approved" | "canceled" | "expired"yesThe coarse status after the change (`created` for enrollment.created).
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Signed 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 producer

Clinical 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
verificationobjectyes
Example body · synthetic values
{
  "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 producer

Patient 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Patient 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Patient 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Contact 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Identity 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Identity 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Identity 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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.intake.submittedHas a producer

An 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
refundExpectedbooleanyesTrue when you are merchant of record for this program (billing mode B): refund the patient's medication charge in full.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

Monitoring 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
refundExpectedbooleanyesTrue when you are merchant of record for this program (billing mode B): refund the patient's medication charge in full.
Example body · synthetic values
{
  "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 producer

The request was cancelled

The case was withdrawn before a decision.

Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation

Envelope

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
refundExpectedbooleanyesTrue when you are merchant of record for this program (billing mode B): refund the patient's medication charge in full.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A prescription was cancelled

The clinician cancelled the prescription.

Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation

Envelope

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The pharmacy acknowledged the order

The pharmacy received the order.

Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation

Envelope

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The order shipped

Read the order for its tracking number.

Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation

Envelope

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The order was delivered

The carrier reported delivery.

Payload schema clinical.v1 · needs the business associate agreement and downstream-systems attestation

Envelope

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

The 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstring | nullyesThe patient notice, when the event concerns one; otherwise null.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstringyesThe patient notice. Acknowledge it with POST /patients/{patientId}/notifications/{notificationId}/delivered.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
templateKeystringyesWhich notice (see the notification templates); render your own copy for it.
clinicallyRequiredbooleanyesA clinically required notice must be acknowledged by `ackDeadline`, or Ambition sends a content-free fallback from your domain.
ackDeadlinestring | nullyesWhen the acknowledgment is due, UTC; null for a courtesy notice.
Example body · synthetic values
{
  "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 producer

Ambition 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
dataobjectyesThe event's refs-only payload.

data

FieldTypeRequiredNotes
objectstringyesWhat the event is about: the second segment of the type (`case`, `prescription`, `notification`, ...).
idstringyesAmbition's id of that object.
patientIdstringyesThe Ambition patient id (from POST /patients).
caseIdstring | nullyesThe case, when the event concerns one; otherwise null.
prescriptionIdstring | nullyesThe prescription, when the event concerns one; otherwise null.
orderIdstring | nullyesThe pharmacy order, when the event concerns one; otherwise null.
threadIdstring | nullyesThe message thread, when the event concerns one; otherwise null.
messageIdstring | nullyesThe message, when the event concerns one; otherwise null.
visitIdstring | nullyesThe visit, when the event concerns one; otherwise null.
documentIdstring | nullyesThe document, when the event concerns one; otherwise null.
reportIdstring | nullyesThe safety report, when the event concerns one; otherwise null.
notificationIdstringyesThe patient notice. Acknowledge it with POST /patients/{patientId}/notifications/{notificationId}/delivered.
sequenceintegeryesPer-object, strictly increasing: apply an event only when its sequence is higher than the last you applied for that object.
occurredAtstringyesWhen it happened, UTC.
templateKeystringyesWhich notice (see the notification templates); render your own copy for it.
clinicallyRequiredbooleanyesA clinically required notice must be acknowledged by `ackDeadline`, or Ambition sends a content-free fallback from your domain.
ackDeadlinestring | nullyesWhen the acknowledgment is due, UTC; null for a courtesy notice.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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 producer

A 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

FieldTypeRequiredNotes
idstringyesThis delivery's request id. Each receiver of one event gets its own; a retry keeps it.
originalRequestIdstringyesThe event this delivery carries: the same at every receiver and in every replay. Dedupe on it, or on the `ambition-event-id` header.
typestringyesThe event type.
schemaVersionstringyesThe payload schema version of this delivery's `data`.
orderIdstring | nullyesThe order the event concerns, for order events; otherwise null.
payloadRefstringyesAn opaque reference to what the event is about.
payloadDigeststringyesSHA-256 of this delivery's `data` (of the recorded payload, for an event without `data`).
attemptintegeryesAttempt number, starting at 1. Also in the unsigned `ambition-delivery-attempt` header.
Example body · synthetic values
{
  "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_changed needs 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.