Sequences API
API Reference

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

MethodEndpointDescription
GET/v1/sequencesList sequences
GET/v1/sequences/{id}Get sequence with steps
POST/v1/sequencesCreate a new sequence
PATCH/v1/sequences/{id}Update a sequence
DELETE/v1/sequences/{id}Delete a sequence

Query Parameters

ParameterTypeDescription
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 20, max: 100)
statusstringFilter: draft, active, paused, or archived

List Sequences

cURL
curl https://api.orbitforms.ai/v1/sequences?status=active \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "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.

Response
{
  "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
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"
  }'
Response
{
  "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
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
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

MethodEndpointDescription
GET/v1/sequences/{id}/stepsList steps for a sequence
POST/v1/sequences/{id}/stepsCreate 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
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
  }'
Response
{
  "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
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
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

MethodEndpointDescription
GET/v1/sequences/{id}/enrollmentsList enrollments
POST/v1/sequences/{id}/enrollmentsEnroll contacts
DELETE/v1/sequences/{id}/enrollments/{enrollmentId}Unenroll a contact

Query Parameters (list enrollments)

ParameterTypeDescription
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 20, max: 100)
statusstringFilter: 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
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"
    ]
  }'
Response
{
  "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
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

MethodEndpointDescription
POST/v1/sequences/{id}/publishActivate or pause a sequence

Activate a Sequence

Set action to "activate" to start the sequence, or "pause" to pause it.

cURL
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"
  }'
Response
{
  "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

MethodEndpointDescription
GET/v1/sequences/{id}/analyticsGet sequence analytics

Response

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

MethodEndpointDescription
GET/v1/sequences/unsubscribesList unsubscribed emails
POST/v1/sequences/unsubscribesAdd 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
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

ScopeDescription
sequences:readRead sequences, steps, enrollments, analytics, and unsubscribes
sequences:writeCreate/update sequences and steps, enroll contacts, publish, and manage unsubscribes
sequences:deleteDelete sequences, delete steps, and unenroll contacts
Next: Rate Limits
Sequences API: Enroll Contacts in Drip Campaigns Programmatically | Orbit AI | Orbit AI