Data retention
What is kept, what is pruned, erase on request, and what stays in analytics.
curl -X DELETE $SEQ/v1/contacts/p_7 -H "Authorization: Bearer $ADMIN_KEY" # erase a person
curl -X PUT $SEQ/v1/project/settings -H "Authorization: Bearer $ADMIN_KEY" -H "Content-Type: application/json" \
-d '{"store_inbound_bodies":false,"retention_days":365}'What is stored
| Data | Stored | Notes |
|---|---|---|
| Contacts, senders | what you send | attrs included |
| Outbound messages | subject and body as rendered, addresses, provider ids, thread reference | needed to match replies and to show the timeline |
| Inbound replies | addresses, subject, thread reference, provider id; the body only when store_inbound_bodies is true (default false) | the service never stores a mailbox beyond its own threads |
| Calendar bookings | the event id, start time and the matched attendee's email | never the title, description or other attendees |
| Runs | node, status, branch, the facts a condition read, the values a template rendered, provider references | the journey |
| Signals | kind, channel, source, external id, attribution, a small payload | |
| Tasks | title, body, link as rendered, outcome, note (an Allo call summary when auto-completed) | |
| Webhook deliveries | the full event payload, attempts, errors | pruned 30 days after delivery |
| Secrets | encrypted, write-only |
What is pruned automatically
The daily retention job deletes idempotency keys after 1 day, dead-letter queue rows after 30 days and delivered webhook deliveries after 30 days.
retention_days (7 to 3650, default 365) is accepted in the project settings but not enforced yet: runs, messages, signals and tasks are kept until the contact is erased. Plan your own pruning or wait for the engine to honour the setting.Erase on request
DELETE /v1/contacts/{id} (scope admin) exits the contact's active enrollments with reason deleted (an enrollment.exited webhook is delivered so your systems follow), then deletes the contact and everything attached: messages, runs, signals and their effects, tasks, suppressions. The webhook deliveries already made still contain the payloads that named the contact until they are pruned. Analytics counts (enrolled, replies, meetings per sequence) are computed from what remains, so an erased contact leaves the totals.
What leaves the service
Webhook payloads carry contact ids, external ids, emails, phones and names (signal.received), rendered task titles (task.created) and message subjects (run.done). Your endpoints hold what they received; delete it there under your own policy.