Webhooks and notification outbox
NextUp does not yet push signed business events to your HTTPS endpoint. The outbound path is an internal notification outbox. The inbound webhook that exists today is Twilio SMS status.
Outbox row shape
Each queued notification stores roughly:
channel:sms|telegram|viber|discord|email|pushtoAddress: phone, email, or chat target stringtemplateKey: logical template namepayload: JSON object (often{ body: "…" }for SMS)status:pending|sending|sent|failed|cancelledproviderMessageId,errorMessage,attempts,scheduledAt,sentAt
What enqueues today
| Trigger | Channel | templateKey | Notes |
|---|---|---|---|
| Ticket issued with phone | sms | ticket_issued | Body includes track URL /t/{token} |
| Ticket called with phone | sms | ticket_called | |
| Almost your turn with phone | sms | almost_your_turn | |
| Appointment created with phone | sms | appointment_reminder | Scheduled about 1 hour before start |
| Owner / team invite | owner_invite / team_invite | Invite URL in payload |
Ticket flows use SMS body text. Rich HTML ticket email builders exist in the product but are not wired into those guest SMS paths today.
Delivery and drain
- Many paths enqueue and attempt immediate send.
- Failures leave the row
pendingwith an error message. GET/POST/api/cron/outboxdrains due pending rows (batch of 50).- After 5 failed attempts on drain, status becomes
failed.
There is no exponential backoff beyond scheduledAt.
Inbound: Twilio
Point Twilio’s messaging status callback to /api/webhooks/twilio. See Public HTTP and Security for auth gaps and retry behavior.