Workflow Triggers and Payload Guide

This guide lists the workflow triggers supported by the portal, what each trigger is for, the useful payload fields, sample payload shapes, and common ways to use each trigger in workflow conditions and actions.

Do not paste real patient information, tokens, API keys, or PHI into workflow documentation, test payloads, email templates, SMS templates, or webhook examples.

How to Use Payload Fields

Workflow conditions use plain payload paths:

order.status equals PROCESSING
payment.status equals FAILED
intake.status equals PENDING
cart.converted equals false
event.daysUntilRenewal equals 5

Merge tags in email, SMS, and webhook body fields use double braces:

{{patient.firstName}}
{{patient.email}}
{{order.orderNumber}}
{{order.total}}
{{subscription.id}}
{{intake.formName}}
{{paymentRecovery.recoveryUrl}}

For wait-based workflows, enable refresh/latest payload on the condition step after the wait when available. This is important for abandoned cart, intake pending, payment recovery, and delayed follow-up workflows.

Condition Operators

Supported operators:

OperatorUse
equalsExact value match
not_equalsExact value does not match
containsText/array contains a value
existsField has a non-empty value
not_existsField is missing or empty
greater_thanNumeric comparison
less_thanNumeric comparison

Common Payload Objects

Most triggers include one or more of these objects:

ObjectMeaning
eventTrigger-specific event metadata
patientPatient/contact details
customerCheckout/cart customer details before a full patient exists
leadCRM lead details
orderOrder status, totals, source, intake summary, and subscription links
subscriptionPrimary subscription details
subscriptionsRelated subscriptions array
invoiceInvoice details
paymentPayment details
paymentRecoveryRecovery/dunning fields for failed payments
cartCart or checkout session details
productsProducts/line items involved in the event
lineItemsOrder line item details
intakeIntake/form response details
formResponseRaw form response summary
formIntake form metadata
appointmentAppointment details
prescriptionPrescription details
belugaBeluga webhook/event details

Trigger Summary

TriggerFires WhenCommon Condition FieldsCommon Merge Tags
lead.createdNew CRM lead is createdlead.source, lead.status{{lead.firstName}}, {{lead.email}}
lead.status_changedLead status changespreviousStatus, newStatus, lead.status{{lead.email}}, {{newStatus}}
patient.createdNew patient is createdpatient.email, patient.mrn{{patient.firstName}}, {{patient.email}}
patient.updatedPatient is updatedpatient.city, patient.state, patient.phone{{patient.firstName}}, {{patient.phone}}
subscription.createdNew subscription is createdsubscription.status, subscription.product.id{{subscription.id}}, {{patient.email}}
subscription.cancelledSubscription is cancelledsubscription.status{{patient.firstName}}, {{subscription.id}}
subscription.pausedSubscription is pausedsubscription.status{{patient.email}}, {{subscription.id}}
subscription.activatedSubscription becomes active againsubscription.status{{patient.email}}, {{subscription.id}}
subscription.upcomingrenewalBefore next billing dateevent.daysUntilRenewal, subscription.nextBillingDate{{event.nextBillingDate}}, {{patient.email}}
subscription.order.createdSubscription billing creates an orderorder.status, subscription.id{{order.orderNumber}}, {{subscription.id}}
order.createdNew order is createdorder.source, order.intakeRequired, order.pendingFormIds{{order.orderNumber}}, {{order.total}}
order.updatedOrder is updatedpreviousStatus, order.status, order.intakeSubmitted{{order.orderNumber}}, {{order.status}}
order.cancelledOrder is cancelledorder.status, event.reason{{order.orderNumber}}, {{event.reason}}
order.refundedOrder is refundedorder.status, payment.status{{order.orderNumber}}, {{payment.amount}}
beluga.webhook_receivedBeluga webhook arrivesbeluga.event, beluga.visitOutcome, beluga.masterId{{beluga.event}}, {{order.id}}
checkout.startedCart/checkout session startscart.converted, cart.status{{cart.cartId}}, {{customer.email}}
cart.viewedCart page is opened/fetchedcart.status, cart.total{{cart.cartId}}, {{customer.email}}
cart.abandonedOpen cart is marked abandonedcart.status, event.idleMinutes{{cart.cartId}}, {{customer.email}}
cart.failedCart checkout/payment failscart.status, payment.status{{cart.cartId}}, {{payment.status}}
payment.succeededPayment succeedspayment.status, order.status{{payment.transactionId}}, {{order.orderNumber}}
payment.failedPayment failspayment.status, order.recoveryStatus, order.retryCount{{paymentRecovery.recoveryUrl}}, {{patient.email}}
intake.pendingIntake is assigned/required and pendingintake.status, intake.isPending, intake.formId{{intake.formName}}, {{patient.email}}
intake.completedPatient submits intakeintake.review.status, intake.formId{{intake.formName}}, {{patient.email}}
intake.resubmittedPatient resubmits after correctionintake.isResubmission, intake.review.status{{intake.formName}}, {{patient.email}}
intake.reviewedStaff reviews intakeintake.review.status{{intake.review.status}}, {{patient.email}}
intake.approvedStaff approves intakeintake.review.status{{patient.firstName}}, {{intake.formName}}
intake.needs_correctionStaff requests correctionintake.review.status, event.reason{{intake.review.note}}, {{patient.email}}
intake.rejectedStaff rejects intakeintake.review.status, event.reason{{event.reason}}, {{patient.email}}
appointment.createdAppointment is createdappointment.status, appointment.id{{appointment.title}}, {{patient.email}}
appointment.completedAppointment is completedappointment.status{{appointment.title}}, {{patient.email}}
prescription.createdPrescription is createdprescription.medication, prescription.sentAt{{prescription.medication}}, {{patient.email}}
prescription.updatedPrescription is updatedprescription.dosage, prescription.instructions{{prescription.medication}}, {{prescription.dosage}}
prescription.sentPrescription is sentprescription.sentAt{{prescription.medication}}, {{patient.email}}
manualManual workflow test onlyAny field in test payloadAny field in test payload

Recommended Workflow Patterns

Intake reminder after 5 minutes

Use this when you want to remind a patient if a required or assigned intake is still pending.

Trigger: intake.pending
Step 1: Wait 5 minutes
Step 2: Condition, refresh latest payload enabled
Condition: intake.status equals PENDING
True path: send SMS/email/webhook reminder
False path: exit

Useful fields:

intake.status
intake.isPending
intake.formId
intake.formName
patient.email
patient.phone
order.id
order.orderNumber
subscription.id

Abandoned checkout follow-up

Use this when checkout starts but the cart has not converted after a wait.

Trigger: checkout.started
Step 1: Wait 30 minutes
Step 2: Condition, refresh latest payload enabled
Condition: cart.converted equals false
True path: send recovery email/SMS
False path: exit

Useful fields:

cart.cartId
cart.status
cart.converted
cart.orderId
customer.email
patient.email
products.0.name
marketing.source

Failed payment recovery

Use this for dunning, failed subscription renewals, and recovery links.

Trigger: payment.failed
Condition: order.recoveryStatus equals RETRY_SCHEDULED
Action: send email/SMS with paymentRecovery.recoveryUrl

Useful fields:

payment.status
order.recoveryStatus
order.retryCount
order.nextRetryAt
paymentRecovery.recoveryUrl
patient.email
subscription.id

Upcoming renewal reminder

Use this when subscription renewal reminders should go out before the next billing date.

Trigger: subscription.upcomingrenewal
Condition: event.daysUntilRenewal equals 5
Action: send reminder

Useful fields:

event.daysUntilRenewal
event.nextBillingDate
subscription.nextBillingDate
subscription.product.name
patient.email

Intake review decision

Use this for approval, rejection, or correction workflows.

Trigger: intake.reviewed
Condition: intake.review.status equals NEEDS_CORRECTION
Action: send correction instructions

For simpler workflows, use the specific trigger:

intake.approved
intake.needs_correction
intake.rejected

Sample Payloads

The examples below are intentionally short. Real payloads may include more fields such as billing, shipping, line items, marketing attribution, invoice, payment, subscriptions, and review history.

lead.created

{
  "lead": {
    "id": "lead_test_1",
    "firstName": "Test",
    "lastName": "Lead",
    "email": "[email protected]",
    "phone": "+15551234567",
    "status": "NEW",
    "source": "Landing Page"
  }
}

lead.status_changed

{
  "lead": {
    "id": "lead_test_1",
    "email": "[email protected]",
    "status": "QUALIFIED"
  },
  "previousStatus": "NEW",
  "newStatus": "QUALIFIED"
}

patient.created

{
  "patient": {
    "id": "pat_test_1",
    "mrn": "MRN-TEST",
    "firstName": "Test",
    "lastName": "Patient",
    "email": "[email protected]",
    "phone": "+15551234567"
  }
}

patient.updated

{
  "patient": {
    "id": "pat_test_1",
    "firstName": "Test",
    "lastName": "Patient",
    "email": "[email protected]",
    "phone": "+15557654321",
    "city": "San Diego",
    "state": "CA"
  }
}

subscription.created

{
  "subscription": {
    "id": "sub_test_1",
    "status": "ACTIVE",
    "amount": 199,
    "interval": "monthly",
    "nextBillingDate": "2026-06-20T12:00:00.000Z",
    "product": {
      "id": "prod_test_1",
      "name": "Weight Loss Program"
    },
    "currentPhase": {
      "id": "phase_1",
      "name": "Starter Phase",
      "belugaVisitType": "weightloss"
    }
  },
  "phaseInfo": {
    "cycleInPhase": 1,
    "totalPhases": 3
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

subscription.cancelled

{
  "subscription": {
    "id": "sub_test_1",
    "status": "CANCELLED",
    "cancelledAt": "2026-05-22T12:00:00.000Z"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

subscription.paused

{
  "subscription": {
    "id": "sub_test_1",
    "status": "PAUSED"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

subscription.activated

{
  "subscription": {
    "id": "sub_test_1",
    "status": "ACTIVE"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

subscription.upcomingrenewal

{
  "event": {
    "source": "SUBSCRIPTION_UPCOMING_RENEWAL",
    "subscriptionId": "sub_test_1",
    "daysUntilRenewal": 5,
    "nextBillingDate": "2026-06-20T12:00:00.000Z"
  },
  "subscription": {
    "id": "sub_test_1",
    "status": "ACTIVE",
    "nextBillingDate": "2026-06-20T12:00:00.000Z"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

subscription.order.created

{
  "event": {
    "source": "SUBSCRIPTION_CYCLE",
    "subscriptionId": "sub_test_1",
    "cycleNumber": 3
  },
  "order": {
    "id": "ord_test_1",
    "orderNumber": "ORD-TEST",
    "status": "AWAITING_FULFILLMENT",
    "subscriptionId": "sub_test_1",
    "total": 199
  },
  "subscription": {
    "id": "sub_test_1",
    "status": "ACTIVE"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

order.created

{
  "event": {
    "source": "CHECKOUT_CART",
    "cartId": "crt_test_123"
  },
  "order": {
    "id": "ord_test_1",
    "orderNumber": "ORD-TEST",
    "status": "PENDING",
    "total": 299,
    "source": "BUY_URL",
    "sourceContext": "CHECKOUT",
    "subscriptionId": "sub_test_1",
    "intakeRequired": true,
    "intakeSubmitted": false,
    "intakeComplete": false,
    "requiredFormIds": ["form_weight_history", "form_medical_screening"],
    "submittedFormIds": ["form_weight_history"],
    "pendingFormIds": ["form_medical_screening"]
  },
  "payment": {
    "id": "pay_test_1",
    "status": "SUCCEEDED",
    "amount": 299
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

order.updated

{
  "previousStatus": "PENDING",
  "order": {
    "id": "ord_test_1",
    "orderNumber": "ORD-TEST",
    "status": "PROCESSING",
    "intakeRequired": true,
    "intakeSubmitted": true,
    "pendingFormIds": []
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

order.cancelled

{
  "event": {
    "source": "ORDER_STATUS_CHANGE",
    "orderId": "ord_test_1",
    "previousStatus": "PENDING",
    "newStatus": "CANCELLED",
    "reason": "Patient requested cancellation"
  },
  "order": {
    "id": "ord_test_1",
    "orderNumber": "ORD-TEST",
    "status": "CANCELLED"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

order.refunded

{
  "order": {
    "id": "ord_test_1",
    "orderNumber": "ORD-TEST",
    "status": "REFUNDED",
    "total": 299
  },
  "payment": {
    "id": "pay_test_1",
    "status": "REFUNDED",
    "amount": 299
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

beluga.webhook_received

{
  "event": {
    "source": "BELUGA",
    "type": "beluga.webhook_received",
    "orderId": "ord_test_1",
    "masterId": "ord_test_1",
    "belugaEvent": "BOOKING_CREATED"
  },
  "beluga": {
    "event": "BOOKING_CREATED",
    "masterId": "ord_test_1",
    "docName": "Dr. Test Beluga",
    "scheduledDate": "2026-05-22T12:00:00.000Z",
    "location": "Virtual",
    "bookingLink": "https://booking.example.test"
  },
  "order": {
    "id": "ord_test_1"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

checkout.started

{
  "event": {
    "source": "BUY_URL",
    "cartId": "crt_test_123",
    "sourcePath": "/buy/test",
    "sourceDomain": "google.com"
  },
  "cart": {
    "cartId": "crt_test_123",
    "status": "OPEN",
    "converted": false,
    "isConverted": false,
    "orderId": null,
    "total": 199,
    "currency": "USD"
  },
  "customer": {
    "email": "[email protected]"
  },
  "products": [
    {
      "id": "prod_test_1",
      "name": "Test Product",
      "type": "subscription",
      "price": 199
    }
  ]
}

cart.viewed

{
  "event": {
    "source": "CART_PAGE_VIEW",
    "cartId": "crt_test_123",
    "viewedAt": "2026-05-22T12:00:00.000Z"
  },
  "cart": {
    "cartId": "crt_test_123",
    "status": "OPEN",
    "total": 199,
    "currency": "USD"
  },
  "customer": {
    "email": "[email protected]"
  }
}

cart.abandoned

{
  "event": {
    "source": "CART_PROCESSOR",
    "status": "ABANDONED",
    "reason": "IDLE_TIMEOUT",
    "idleMinutes": 95
  },
  "cart": {
    "cartId": "crt_test_123",
    "status": "ABANDONED",
    "total": 199,
    "currency": "USD"
  },
  "customer": {
    "email": "[email protected]"
  }
}

cart.failed

{
  "event": {
    "source": "CHECKOUT_CART",
    "status": "FAILED",
    "reason": "PAYMENT_FAILED"
  },
  "cart": {
    "cartId": "crt_test_123",
    "status": "FAILED",
    "total": 199
  },
  "payment": {
    "id": "pay_test_1",
    "status": "FAILED"
  }
}

payment.succeeded

{
  "payment": {
    "id": "pay_test_1",
    "status": "SUCCEEDED",
    "amount": 299,
    "gateway": "STRIPE",
    "transactionId": "ch_test_123"
  },
  "order": {
    "id": "ord_test_1",
    "orderNumber": "ORD-TEST",
    "status": "PENDING",
    "total": 299
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

payment.failed

{
  "payment": {
    "id": "pay_test_1",
    "status": "FAILED",
    "amount": 299,
    "gateway": "STRIPE"
  },
  "order": {
    "id": "ord_test_1",
    "orderNumber": "ORD-TEST",
    "recoveryStatus": "RETRY_SCHEDULED",
    "retryCount": 1,
    "maxRetryCount": 3,
    "nextRetryAt": "2026-05-23T12:00:00.000Z",
    "recoveryUrl": "/patient/invoices?recovery=1"
  },
  "paymentRecovery": {
    "status": "RETRY_SCHEDULED",
    "retryCount": 1,
    "maxRetryCount": 3,
    "recoveryUrl": "/patient/invoices?recovery=1",
    "autoChargeStatus": "FAILED",
    "autoChargeMessage": "Gateway declined the renewal charge"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

intake.pending

{
  "event": {
    "source": "INTAKE_ASSIGNED",
    "patientId": "pat_test_1",
    "orderId": "ord_test_1",
    "formId": "form_weight_history",
    "assignedAt": "2026-05-22T12:00:00.000Z"
  },
  "intake": {
    "responseId": "fr_test_1",
    "status": "PENDING",
    "isPending": true,
    "isSubmitted": false,
    "formId": "form_weight_history",
    "formName": "Weight History",
    "formSlug": "weight-history",
    "assignment": {
      "status": "PENDING",
      "source": "STAFF_ASSIGNED",
      "orderId": "ord_test_1",
      "subscriptionId": "sub_test_1"
    },
    "reachedFinalStep": false
  },
  "form": {
    "id": "form_weight_history",
    "name": "Weight History"
  },
  "order": {
    "id": "ord_test_1",
    "pendingFormIds": ["form_weight_history"]
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

intake.completed

{
  "event": {
    "source": "PATIENT_INTAKE_SUBMIT",
    "orderId": "ord_test_1",
    "formId": "form_weight_history"
  },
  "intake": {
    "responseId": "fr_test_1",
    "status": "SUBMITTED",
    "isPending": false,
    "isSubmitted": true,
    "submittedAt": "2026-05-22T12:00:00.000Z",
    "formId": "form_weight_history",
    "formName": "Weight History",
    "answers": {
      "qualifies": true,
      "bmi": 32
    },
    "review": {
      "status": "PENDING_REVIEW"
    },
    "reachedFinalStep": true
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

intake.resubmitted

{
  "event": {
    "source": "PATIENT_INTAKE_RESUBMIT",
    "orderId": "ord_test_1",
    "formId": "form_weight_history",
    "previousReviewStatus": "NEEDS_CORRECTION"
  },
  "intake": {
    "responseId": "fr_test_1",
    "formId": "form_weight_history",
    "isResubmission": true,
    "review": {
      "status": "RESUBMITTED",
      "resubmittedAt": "2026-05-22T12:00:00.000Z"
    }
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

intake.reviewed

{
  "event": {
    "source": "EMR_INTAKE_REVIEW",
    "orderId": "ord_test_1",
    "formId": "form_weight_history",
    "reviewStatus": "APPROVED"
  },
  "intake": {
    "responseId": "fr_test_1",
    "formId": "form_weight_history",
    "review": {
      "status": "APPROVED",
      "reviewedAt": "2026-05-22T12:00:00.000Z",
      "reviewedBy": {
        "name": "Clinician Test",
        "role": "CLINICIAN"
      }
    }
  }
}

intake.approved

{
  "event": {
    "source": "EMR_INTAKE_REVIEW",
    "reviewStatus": "APPROVED"
  },
  "intake": {
    "responseId": "fr_test_1",
    "formName": "Weight History",
    "review": {
      "status": "APPROVED"
    }
  },
  "patient": {
    "email": "[email protected]"
  }
}

intake.needs_correction

{
  "event": {
    "source": "EMR_INTAKE_REVIEW",
    "reviewStatus": "NEEDS_CORRECTION",
    "reason": "Please correct answer 3"
  },
  "intake": {
    "responseId": "fr_test_1",
    "formName": "Weight History",
    "review": {
      "status": "NEEDS_CORRECTION",
      "note": "Please correct answer 3"
    }
  },
  "patient": {
    "email": "[email protected]"
  }
}

intake.rejected

{
  "event": {
    "source": "EMR_INTAKE_REVIEW",
    "reviewStatus": "REJECTED",
    "reason": "Patient is not eligible"
  },
  "intake": {
    "responseId": "fr_test_1",
    "formName": "Weight History",
    "answers": {
      "qualifies": false,
      "bmi": 17
    },
    "review": {
      "status": "REJECTED",
      "note": "Patient is not eligible"
    }
  },
  "order": {
    "id": "ord_test_1",
    "status": "REJECTED"
  },
  "patient": {
    "email": "[email protected]"
  }
}

appointment.created

{
  "appointment": {
    "id": "appt_test_1",
    "title": "Initial Consultation",
    "status": "SCHEDULED"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

appointment.completed

{
  "appointment": {
    "id": "appt_test_1",
    "title": "Initial Consultation",
    "status": "COMPLETED"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  }
}

prescription.created

{
  "prescription": {
    "id": "rx_test_1",
    "medication": "Semaglutide 0.25mg",
    "dosage": "0.25mg",
    "frequency": "Weekly",
    "duration": "12 weeks",
    "refills": 0,
    "sentAt": null
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  },
  "order": {
    "id": "ord_test_1"
  }
}

prescription.updated

{
  "prescription": {
    "id": "rx_test_1",
    "medication": "Semaglutide",
    "dosage": "0.5mg",
    "instructions": "Updated instructions"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  },
  "order": {
    "id": "ord_test_1"
  }
}

prescription.sent

{
  "prescription": {
    "id": "rx_test_1",
    "medication": "Semaglutide 0.25mg",
    "dosage": "0.25mg",
    "sentAt": "2026-05-22T12:00:00.000Z"
  },
  "patient": {
    "id": "pat_test_1",
    "email": "[email protected]"
  },
  "order": {
    "id": "ord_test_1"
  }
}

manual

{
  "event": {
    "source": "MANUAL_TEST"
  },
  "patient": {
    "email": "[email protected]"
  },
  "custom": {
    "note": "Manual test payload"
  }
}

Field Reference by Workflow Area

Lead

lead.id
lead.firstName
lead.lastName
lead.email
lead.phone
lead.status
lead.source
previousStatus
newStatus

Patient and Contact

patient.id
patient.mrn
patient.firstName
patient.lastName
patient.email
patient.phone
patient.gender
patient.dateOfBirth
patient.address
patient.city
patient.state
patient.zipCode
patient.country

Order

order.id
order.orderNumber
order.status
order.total
order.source
order.sourceContext
order.subscriptionId
order.subscriptionIds
order.primarySubscriptionId
order.intakeRequired
order.intakeSubmitted
order.intakeComplete
order.requiredFormIds
order.submittedFormIds
order.pendingFormIds
order.recoveryStatus
order.retryCount
order.maxRetryCount
order.nextRetryAt
order.recoveryUrl

Cart and Checkout

cart.id
cart.cartId
cart.status
cart.converted
cart.isConverted
cart.orderId
cart.orderIds
cart.total
cart.currency
cart.completedAt
cart.checkoutCompletedAt
customer.email
customer.phone
event.cartId
event.idleMinutes

Subscription

subscription.id
subscription.status
subscription.amount
subscription.interval
subscription.intervalCount
subscription.nextBillingDate
subscription.product.id
subscription.product.name
subscription.currentPhase.name
subscription.currentPhase.belugaVisitType
phaseInfo.currentPhaseIndex
phaseInfo.cycleInPhase
phaseInfo.totalPhases
event.daysUntilRenewal

Payment and Recovery

payment.id
payment.status
payment.amount
payment.gateway
payment.transactionId
paymentRecovery.status
paymentRecovery.retryCount
paymentRecovery.maxRetryCount
paymentRecovery.nextRetryAt
paymentRecovery.recoveryUrl
paymentRecovery.autoChargeStatus
paymentRecovery.autoChargeMessage

Intake

intake.responseId
intake.status
intake.isPending
intake.isSubmitted
intake.submittedAt
intake.assignedAt
intake.formId
intake.formName
intake.formSlug
intake.answers
intake.context
intake.assignment.status
intake.assignment.source
intake.assignment.orderId
intake.assignment.subscriptionId
intake.review.status
intake.review.note
intake.review.reviewedAt
intake.review.reviewedBy
intake.isResubmission
intake.reachedFinalStep
form.id
form.name
form.slug
formResponse.id
formResponse.formId

Beluga

beluga.event
beluga.masterId
beluga.orderId
beluga.visitOutcome
beluga.docName
beluga.docNpi
beluga.scheduledDate
beluga.location
beluga.bookingLink
beluga.carrier
beluga.tracking

Appointment

appointment.id
appointment.title
appointment.status

Prescription

prescription.id
prescription.medication
prescription.dosage
prescription.frequency
prescription.duration
prescription.refills
prescription.instructions
prescription.sentAt

Notes and Gotchas

  • Use plain field paths in condition fields, not merge tags. Correct: order.status. Incorrect: {{order.status}}.
  • Use merge tags only in content fields such as email body, SMS body, webhook body, or subject.
  • checkout.started can fire before full patient, billing, or shipping data exists.
  • cart.viewed may fire often. Add conditions or wait steps if you do not want repeated actions.
  • intake.pending is the best trigger for pending-intake reminders because it represents one specific form assignment/requirement.
  • order.created and order.updated include intake summary fields, but they are broader order events.
  • For intake.pending after a wait, refresh the latest payload before checking intake.status.
  • Failed payment recovery workflows should prefer paymentRecovery.recoveryUrl when available.
  • manual is for test-only workflows and does not fire from app events.