Sequences API
The Sequences API lets you manage email/SMS drip campaigns, enroll contacts, track enrollment status, view analytics, and manage unsubscribes programmatically. This is especially useful for enrolling contacts from external systems into Orbit sequences without using Orbit forms. Requires sequences:read, sequences:write, or sequences:delete scopes.
Sequences
A sequence is a multi-step email or SMS campaign that contacts are enrolled into. Each sequence contains ordered steps with configurable delays.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/sequences | List sequences |
| GET | /v1/sequences/{id} | Get sequence with steps |
| POST | /v1/sequences | Create a new sequence |
| PATCH | /v1/sequences/{id} | Update a sequence |
| DELETE | /v1/sequences/{id} | Delete a sequence |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| page | integer | Page number (default: 1) |
| per_page | integer | Results per page (default: 20, max: 100) |
| status | string | Filter: draft, active, paused, or archived |
List Sequences
curl https://api.orbitforms.ai/v1/sequences?status=active \
-H "Authorization: Bearer YOUR_API_KEY"{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Outbound SDR Sequence",
"description": "5-step cold outreach campaign",
"status": "active",
"total_enrollments": 142,
"active_enrollments": 38,
"created_at": "2026-01-15T10:00:00Z",
"updated_at": "2026-02-01T14:30:00Z"
}
],
"meta": {
"total": 1,
"page": 1,
"per_page": 20,
"total_pages": 1
}
}Get Sequence
Returns the sequence with its steps, settings, and exit criteria.
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Outbound SDR Sequence",
"description": "5-step cold outreach campaign",
"status": "active",
"settings": {
"sending_window_start": "09:00",
"sending_window_end": "17:00",
"timezone": "America/New_York",
"business_days_only": true,
"thread_emails": true
},
"exit_criteria": [
{ "type": "reply_received", "enabled": true },
{ "type": "meeting_booked", "enabled": true }
],
"total_enrollments": 142,
"active_enrollments": 38,
"steps": [
{
"id": "660e8400-e29b-41d4-a716-446655440001",
"step_order": 0,
"step_type": "email",
"delay_days": 0,
"config": {
"subject": "Quick question about {{contact.company}}",
"body_html": "<p>Hi {{contact.first_name}},</p>..."
}
},
{
"id": "660e8400-e29b-41d4-a716-446655440002",
"step_order": 1,
"step_type": "email",
"delay_days": 3,
"config": {
"subject": "Following up",
"body_html": "<p>Just wanted to follow up...</p>"
}
}
],
"created_at": "2026-01-15T10:00:00Z",
"updated_at": "2026-02-01T14:30:00Z"
}
}Create Sequence
Creates a new sequence in draft status. Add steps and then use the Publish endpoint to activate it.
curl -X POST https://api.orbitforms.ai/v1/sequences \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "New Outbound Campaign",
"description": "Follow-up sequence for demo requests"
}'{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440099",
"name": "New Outbound Campaign",
"description": "Follow-up sequence for demo requests",
"status": "draft",
"settings": {
"sending_window_start": "09:00",
"sending_window_end": "17:00",
"timezone": "America/New_York",
"business_days_only": true,
"thread_emails": true
},
"exit_criteria": [],
"total_enrollments": 0,
"active_enrollments": 0,
"steps": [],
"created_at": "2026-02-08T12:00:00Z",
"updated_at": "2026-02-08T12:00:00Z"
}
}Update Sequence
Updates a sequence's name, description, settings, or exit criteria. All fields are optional -- only include the fields you want to change.
curl -X PATCH https://api.orbitforms.ai/v1/sequences/{id} \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Campaign Name",
"description": "Updated description",
"settings": {
"sending_window_start": "08:00",
"sending_window_end": "18:00",
"timezone": "America/Chicago",
"business_days_only": true,
"thread_emails": false
},
"exit_criteria": [
{ "type": "reply_received", "enabled": true },
{ "type": "meeting_booked", "enabled": false }
]
}'Delete Sequence
Permanently deletes a sequence and all its steps. Active enrollments will be exited with reason "sequence_deleted". This action cannot be undone.
curl -X DELETE https://api.orbitforms.ai/v1/sequences/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Steps
Steps define the individual messages in a sequence. Each step has a type (email or SMS), a delay from the previous step, and content configuration.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/sequences/{id}/steps | List steps for a sequence |
| POST | /v1/sequences/{id}/steps | Create a step |
| PATCH | /v1/sequences/{id}/steps/{stepId} | Update a step |
| DELETE | /v1/sequences/{id}/steps/{stepId} | Delete a step |
Create Step
Adds a new step to a sequence. The sequence must be in draft or paused status. Set step_order to control where the step appears (0-indexed). Existing steps at or after that position will be shifted forward.
curl -X POST https://api.orbitforms.ai/v1/sequences/{id}/steps \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "email",
"step_order": 0,
"subject": "Quick question about {{contact.company}}",
"body": "<p>Hi {{contact.first_name}},</p><p>I noticed...</p>",
"delay_days": 0,
"delay_hours": 0,
"delay_minutes": 0
}'{
"data": {
"id": "660e8400-e29b-41d4-a716-446655440099",
"sequence_id": "550e8400-e29b-41d4-a716-446655440099",
"step_order": 0,
"step_type": "email",
"delay_days": 0,
"delay_hours": 0,
"delay_minutes": 0,
"config": {
"subject": "Quick question about {{contact.company}}",
"body_html": "<p>Hi {{contact.first_name}},</p><p>I noticed...</p>"
},
"created_at": "2026-02-08T12:05:00Z",
"updated_at": "2026-02-08T12:05:00Z"
}
}Update Step
Updates a step's subject, body, delay, or other configuration. All fields are optional -- only include the fields you want to change. The sequence must be in draft or paused status.
curl -X PATCH https://api.orbitforms.ai/v1/sequences/{id}/steps/{stepId} \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "Updated subject line",
"body": "<p>Updated email body...</p>",
"delay_days": 2
}'Delete Step
Removes a step from the sequence. Remaining steps will have their step_order values re-indexed automatically. The sequence must be in draft or paused status.
curl -X DELETE https://api.orbitforms.ai/v1/sequences/{id}/steps/{stepId} \
-H "Authorization: Bearer YOUR_API_KEY"Enrollments
Enrollments represent contacts actively going through a sequence. Use the POST endpoint to enroll contacts from external systems -- this is the primary integration point for teams using their own forms or CRM.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/sequences/{id}/enrollments | List enrollments |
| POST | /v1/sequences/{id}/enrollments | Enroll contacts |
| DELETE | /v1/sequences/{id}/enrollments/{enrollmentId} | Unenroll a contact |
Query Parameters (list enrollments)
| Parameter | Type | Description |
|---|---|---|
| page | integer | Page number (default: 1) |
| per_page | integer | Results per page (default: 20, max: 100) |
| status | string | Filter: active, completed, exited, paused, bounced, or failed |
Enroll Contacts
Enroll up to 100 contacts at once. The sequence must be active. Contacts must already exist in your contacts table (use the Contacts API to create them first if needed). Unsubscribed or already-enrolled contacts will be skipped with an error in the results.
curl -X POST https://api.orbitforms.ai/v1/sequences/{id}/enrollments \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contact_ids": [
"770e8400-e29b-41d4-a716-446655440010",
"770e8400-e29b-41d4-a716-446655440011"
]
}'{
"data": {
"results": [
{
"contact_id": "770e8400-e29b-41d4-a716-446655440010",
"success": true,
"enrollment_id": "880e8400-e29b-41d4-a716-446655440020"
},
{
"contact_id": "770e8400-e29b-41d4-a716-446655440011",
"success": false,
"error": "Contact is unsubscribed"
}
],
"summary": {
"total": 2,
"enrolled": 1,
"failed": 1
}
}
}Unenroll a Contact
Exits an active enrollment with reason "manual". The enrollment must be in active status.
curl -X DELETE https://api.orbitforms.ai/v1/sequences/{id}/enrollments/{enrollmentId} \
-H "Authorization: Bearer YOUR_API_KEY"Publish
Activate or pause a sequence. A sequence must have at least one step before it can be activated. Pausing a sequence will stop all pending step executions for active enrollments (enrollments remain in "active" status and will resume when the sequence is re-activated).
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /v1/sequences/{id}/publish | Activate or pause a sequence |
Activate a Sequence
Set action to "activate" to start the sequence, or "pause" to pause it.
curl -X POST https://api.orbitforms.ai/v1/sequences/{id}/publish \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "activate"
}'{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440099",
"name": "New Outbound Campaign",
"status": "active",
"updated_at": "2026-02-08T12:10:00Z"
}
}Analytics
Get performance metrics for a sequence including reply rates, meetings booked, and per-step breakdowns.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/sequences/{id}/analytics | Get sequence analytics |
Response
{
"data": {
"overview": {
"total_enrolled": 142,
"active_enrollments": 38,
"total_replied": 23,
"reply_rate": 16.2,
"meetings_booked": 8,
"meetings_rate": 5.6
},
"step_analytics": [
{
"step_id": "660e8400-...",
"step_order": 0,
"step_type": "email",
"subject": "Quick question",
"total_sent": 142,
"replied": 15,
"reply_rate": 10.6,
"meetings_booked": 5
}
],
"status_breakdown": {
"active": 38,
"completed": 67,
"exited": 31,
"failed": 2,
"bounced": 4,
"paused": 0
}
}
}Unsubscribes
Manage unsubscribed emails. Adding an email to the unsubscribe list will automatically exit any active enrollments for that contact. Unsubscribes can be global (all sequences) or scoped to a specific sequence.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/sequences/unsubscribes | List unsubscribed emails |
| POST | /v1/sequences/unsubscribes | Add emails to unsubscribe list |
Add Unsubscribes
Add up to 100 emails per request. Set scope to "all_sequences" (default) to block all sequences, or "specific" with a sequence_id to block a single sequence.
curl -X POST https://api.orbitforms.ai/v1/sequences/unsubscribes \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"emails": ["jane@example.com", "john@example.com"],
"scope": "all_sequences"
}'Required Scopes
| Scope | Description |
|---|---|
| sequences:read | Read sequences, steps, enrollments, analytics, and unsubscribes |
| sequences:write | Create/update sequences and steps, enroll contacts, publish, and manage unsubscribes |
| sequences:delete | Delete sequences, delete steps, and unenroll contacts |