openapi: 3.2.0 info: title: Explorer Campaign Subsequence API description: The entire API V2 documentation is interactive and can be tested here. To the right side of every endpoint you will see a box with an example request. You can click on the "Try it" button to send a request to the server right from the docs. You will need to provide an API key by clicking the `ApiKeyAuth_token` blue text. version: 2.0.0 servers: - url: https://api.instantly.ai description: Instantly API Server security: - ApiKeyAuth: [] tags: - name: CampaignSubsequence description: A subsequence entity representing a follow-up sequence x-group: Campaign Subsequence paths: /api/v2/subsequences: post: operationId: createCampaignSubsequence summary: Create campaign subsequence tags: - CampaignSubsequence description: 'Requires one of the following scopes: `subsequences:create`, `subsequences:all`, `all:create`, `all:all`' requestBody: content: application/json: schema: title: CreateCampaign Subsequence description: The Campaign Subsequence to create type: object properties: parent_campaign: type: string description: ID of the parent campaign format: uuid example: 019ffad2-5cc7-76f5-9fd3-25f990e43646 name: type: string description: Name of the subsequence example: Follow-up sequence conditions: type: object description: Conditions that trigger the subsequence properties: crm_status: type: array description: Lead CRM statuses that trigger the subsequence. Accepts the built-in statuses listed below, or the interest status of a custom lead label. items: type: number minimum: -30000 maximum: 30000 x-enumDescriptions: '0': Out of Office '1': Interested '2': Meeting Booked '3': Meeting Completed '4': Won '-1': Not Interested '-2': Wrong Person '-3': Lost '-4': No Show example: 1 lead_activity: type: array description: Lead activities that trigger the subsequence. items: type: number enum: - 4 - 91 - 2 x-enumDescriptions: '2': Email Opened - Triggered when a lead opens an email '4': Email Link Clicked - Triggered when a lead clicks a link in an email '91': Campaign Completed Without Reply - Triggered when a campaign completes for a lead without receiving a reply example: 4 reply_contains: type: string example: 'yes' subsequence_schedule: type: object description: Schedule configuration for the subsequence. When omitted on create, inherits the parent campaign's schedule. properties: start_date: type: - string - 'null' format: date description: Start date in YYYY-MM-DD format. Uses the campaign's timezone. example: '2025-09-25' end_date: type: - string - 'null' format: date description: End date in YYYY-MM-DD format. Uses the campaign's timezone. example: '2025-09-25' schedules: type: array items: type: object properties: name: type: string example: My Schedule timing: type: object properties: from: type: string pattern: ^([01][0-9]|2[0-3]):([0-5][0-9])$ example: 09:00 to: type: string pattern: ^([01][0-9]|2[0-3]):([0-5][0-9])$ example: '17:00' required: - from - to days: type: object minProperties: 1 properties: '0': type: boolean example: true '1': type: boolean example: true '2': type: boolean example: true '3': type: boolean example: true '4': type: boolean example: true '5': type: boolean example: false '6': type: boolean example: false timezone: type: string enum: - Etc/GMT+12 - Etc/GMT+11 - Etc/GMT+10 - America/Anchorage - America/Dawson - America/Creston - America/Chihuahua - America/Boise - America/Belize - America/Chicago - America/Bahia_Banderas - America/Regina - America/Bogota - America/Detroit - America/Indiana/Marengo - America/Caracas - America/Asuncion - America/Glace_Bay - America/Campo_Grande - America/Anguilla - America/Santiago - America/St_Johns - America/Sao_Paulo - America/Argentina/La_Rioja - America/Araguaina - America/Godthab - America/Montevideo - America/Bahia - America/Noronha - America/Scoresbysund - Atlantic/Cape_Verde - Africa/Casablanca - America/Danmarkshavn - Europe/Isle_of_Man - Atlantic/Canary - Africa/Abidjan - Arctic/Longyearbyen - Europe/Belgrade - Africa/Ceuta - Europe/Sarajevo - Africa/Algiers - Africa/Windhoek - Asia/Nicosia - Asia/Beirut - Africa/Cairo - Asia/Damascus - Europe/Bucharest - Africa/Blantyre - Europe/Helsinki - Europe/Istanbul - Asia/Jerusalem - Africa/Tripoli - Asia/Amman - Asia/Baghdad - Europe/Kaliningrad - Asia/Aden - Africa/Addis_Ababa - Europe/Kirov - Europe/Astrakhan - Asia/Tehran - Asia/Dubai - Asia/Baku - Indian/Mahe - Asia/Tbilisi - Asia/Yerevan - Asia/Kabul - Antarctica/Mawson - Asia/Yekaterinburg - Asia/Karachi - Asia/Kolkata - Asia/Colombo - Asia/Kathmandu - Antarctica/Vostok - Asia/Dhaka - Asia/Rangoon - Antarctica/Davis - Asia/Novokuznetsk - Asia/Hong_Kong - Asia/Krasnoyarsk - Asia/Brunei - Australia/Perth - Asia/Taipei - Asia/Choibalsan - Asia/Irkutsk - Asia/Dili - Asia/Pyongyang - Australia/Adelaide - Australia/Darwin - Australia/Brisbane - Australia/Melbourne - Antarctica/DumontDUrville - Australia/Currie - Asia/Chita - Antarctica/Macquarie - Asia/Sakhalin - Pacific/Auckland - Etc/GMT-12 - Pacific/Fiji - Asia/Anadyr - Asia/Kamchatka - Etc/GMT-13 - Pacific/Apia example: Etc/GMT+12 required: - name - timing - days - timezone minItems: 1 required: - schedules sequences: type: array description: List of sequences (the actual email copy). Even though this field is an array, only the first element is used, so please provide only one array item, and add the steps to that array items: type: object properties: steps: type: array items: type: object properties: type: type: string enum: - email x-enumDescriptions: email: This steps represents an email description: Type of step. This has to be 'email' always - it's the only supported type for now example: email delay: type: number description: The delay value before sending the NEXT email. The unit is determined by the delay_unit field (defaults to days). example: 2 delay_unit: type: string enum: - minutes - hours - days default: days description: The unit of time for the delay value (minutes, hours, or days). Defaults to days for backward compatibility. example: days pre_delay: type: number description: The delay value before sending the FIRST email in a subsequence. **Only applicable to subsequences** - this field is ignored for regular campaigns. The unit is determined by the pre_delay_unit field (defaults to days). example: 2 pre_delay_unit: type: string enum: - minutes - hours - days default: days description: The unit of time for the pre_delay value (minutes, hours, or days). **Only applicable to subsequences** - this field is ignored for regular campaigns. Defaults to days for backward compatibility. example: days variants: type: array items: type: object properties: subject: type: string example: Hello {{firstName}} body: type: string description: Email body HTML. Use `
` tags for delivered email line breaks. example: Hey {{firstName}},

I hope you are doing well. v_disabled: type: boolean description: Whether this variant is disabled. By default, all the variants are enabled. Please set this to true if you want to disable this variant example: true required: - subject - body minItems: 1 maxItems: 26 contains: type: object not: properties: v_disabled: enum: - true required: - v_disabled required: - type - delay - variants required: - steps auto_variant_select: type: - object - 'null' description: Automatically select the winning variant for each step using open, click, or reply rate. Set to `null` to disable automatic selection. properties: trigger: type: string enum: - reply_rate - click_rate - open_rate examples: - click_rate example: click_rate required: - trigger daily_limit_mode: type: string description: Daily limit mode for the subsequence. "inherit" uses the parent campaign limit, "custom" uses a subsequence-specific limit, "unlimited" bypasses the campaign-level daily limit. enum: - inherit - custom - unlimited example: inherit daily_limit: type: - number - 'null' description: Custom daily limit for the subsequence. Only used when `daily_limit_mode` is "custom". example: 50 ignore_account_daily_limit: type: boolean description: When enabled, the subsequence will send even when sending accounts have reached their daily limit. example: false required: - parent_campaign - name - conditions additionalProperties: false required: true description: The Campaign Subsequence to create responses: '200': description: The Campaign Subsequence content: application/json: schema: $ref: '#/components/schemas/CampaignSubsequence' '400': description: Invalid request body (e.g. missing required fields, or invalid field values) content: application/json: schema: type: object properties: statusCode: type: number enum: - 400 examples: - 400 example: 400 error: type: string enum: - Bad Request examples: - Bad Request example: Bad Request message: type: string examples: - body must have required property 'name' example: body must have required property 'name' required: - statusCode - error - message '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message get: operationId: listCampaignSubsequence summary: List campaign subsequence tags: - CampaignSubsequence description: 'Requires one of the following scopes: `subsequences:read`, `subsequences:all`, `all:read`, `all:all`' parameters: - schema: type: integer minimum: 1 maximum: 100 example: 10 example: 10 in: query name: limit required: false description: The number of items to return - schema: type: string example: 01956fbd-0eb1-72db-a565-82977a586084 example: 01956fbd-0eb1-72db-a565-82977a586084 in: query name: starting_after required: false description: The ID of the last item in the previous page - used for pagination. You can use the value of the `next_starting_after` field from the previous response. - schema: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 example: 123e4567-e89b-12d3-a456-426614174000 in: query name: parent_campaign required: false description: The ID of the campaign to list the subsequences of. - schema: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 example: 123e4567-e89b-12d3-a456-426614174000 in: query name: parent_campaign_not required: false description: The ID of a campaign to exclude subsequences of, returning reusable subsequences from the workspace's other campaigns instead. - schema: type: string example: test example: test in: query name: search required: false description: The search query to filter the subsequences by. responses: '200': description: The list of Campaign Subsequence content: application/json: schema: type: object properties: items: type: array description: The list of Campaign Subsequence items: $ref: '#/components/schemas/CampaignSubsequence' next_starting_after: type: string examples: - 019ffad2-9c89-793f-9322-7fbe7cac60bb - '2026-08-13T11:12:14.473Z' description: The filter for getting the next items after this one, this could either be a UUID, a timestamp, on an email depending on the specific API example: 019ffad2-9c89-793f-9322-7fbe7cac60bb additionalProperties: false required: - items '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message /api/v2/subsequences/{id}/duplicate: post: operationId: duplicateSubsequence summary: Duplicate a subsequence tags: - CampaignSubsequence description: 'Duplicate a subsequence with the same trigger conditions Requires one of the following scopes: `subsequences:create`, `subsequences:all`, `all:create`, `all:all`' requestBody: content: application/json: schema: type: object properties: parent_campaign: type: string format: uuid description: The ID of the campaign to duplicate the subsequence to. example: 123e4567-e89b-12d3-a456-426614174000 name: type: string description: The name of the duplicate subsequence. Defaults to the source subsequence name when omitted. example: My Duplicate Subsequence required: - parent_campaign required: true parameters: - schema: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 example: 123e4567-e89b-12d3-a456-426614174000 in: path name: id required: true description: The ID of the subsequence to duplicate. responses: '200': description: The requested Campaign Subsequence content: application/json: schema: $ref: '#/components/schemas/CampaignSubsequence' '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message /api/v2/subsequences/{id}/pause: post: operationId: pauseSubsequence summary: Pause a subsequence tags: - CampaignSubsequence description: 'Pause a subsequence Requires one of the following scopes: `subsequences:update`, `subsequences:all`, `all:update`, `all:all`' parameters: - schema: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 example: 123e4567-e89b-12d3-a456-426614174000 in: path name: id required: true description: Subsequence ID responses: '200': description: The requested Campaign Subsequence content: application/json: schema: $ref: '#/components/schemas/CampaignSubsequence' '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message /api/v2/subsequences/{id}/resume: post: operationId: resumeSubsequence summary: Resume a paused subsequence tags: - CampaignSubsequence description: 'Resume a paused subsequence Requires one of the following scopes: `subsequences:update`, `subsequences:all`, `all:update`, `all:all`' parameters: - schema: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 example: 123e4567-e89b-12d3-a456-426614174000 in: path name: id required: true description: The ID of the subsequence to resume. responses: '200': description: The requested Campaign Subsequence content: application/json: schema: $ref: '#/components/schemas/CampaignSubsequence' '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message /api/v2/subsequences/analytics: get: operationId: getSubsequenceAnalytics summary: Get subsequence analytics summary tags: - CampaignSubsequence description: 'Returns per-subsequence engagement totals (emails sent, unique opens, unique replies) for the subsequences of a campaign. Requires one of the following scopes: `subsequences:read`, `subsequences:all`, `all:read`, `all:all`' parameters: - schema: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 example: 123e4567-e89b-12d3-a456-426614174000 in: query name: campaign_id required: true description: The ID of the campaign to fetch subsequence analytics for. responses: '200': description: Per-subsequence analytics totals content: application/json: schema: type: array items: type: object properties: subsequence_id: type: string format: uuid examples: - 123e4567-e89b-12d3-a456-426614174000 example: 123e4567-e89b-12d3-a456-426614174000 emails_sent: type: number examples: - 100 example: 100 unique_opens: type: number examples: - 50 example: 50 unique_replies: type: number examples: - 10 example: 10 required: - subsequence_id - emails_sent - unique_opens - unique_replies '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message /api/v2/subsequences/{id}: get: operationId: getCampaignSubsequence summary: Get campaign subsequence tags: - CampaignSubsequence description: 'Requires one of the following scopes: `subsequences:read`, `subsequences:all`, `all:read`, `all:all`' parameters: - schema: type: string format: uuid example: 019ffad2-9c8b-7899-a0d0-1b19c0d82861 example: 019ffad2-9c8b-7899-a0d0-1b19c0d82861 in: path name: id required: true description: The ID of the requested item responses: '200': description: The requested Campaign Subsequence content: application/json: schema: $ref: '#/components/schemas/CampaignSubsequence' '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message patch: operationId: patchCampaignSubsequence summary: Patch campaign subsequence tags: - CampaignSubsequence description: 'Requires one of the following scopes: `subsequences:update`, `subsequences:all`, `all:update`, `all:all`' requestBody: content: application/json: schema: type: object properties: name: type: string description: Name of the subsequence example: Follow-up sequence conditions: type: object description: Conditions that trigger the subsequence properties: crm_status: type: array description: Lead CRM statuses that trigger the subsequence. Accepts the built-in statuses listed below, or the interest status of a custom lead label. items: type: number minimum: -30000 maximum: 30000 x-enumDescriptions: '0': Out of Office '1': Interested '2': Meeting Booked '3': Meeting Completed '4': Won '-1': Not Interested '-2': Wrong Person '-3': Lost '-4': No Show example: 1 lead_activity: type: array description: Lead activities that trigger the subsequence. items: type: number enum: - 4 - 91 - 2 x-enumDescriptions: '2': Email Opened - Triggered when a lead opens an email '4': Email Link Clicked - Triggered when a lead clicks a link in an email '91': Campaign Completed Without Reply - Triggered when a campaign completes for a lead without receiving a reply example: 4 reply_contains: type: string example: 'yes' subsequence_schedule: type: object description: Schedule configuration for the subsequence. When omitted on create, inherits the parent campaign's schedule. properties: start_date: type: - string - 'null' format: date description: Start date in YYYY-MM-DD format. Uses the campaign's timezone. example: '2025-09-25' end_date: type: - string - 'null' format: date description: End date in YYYY-MM-DD format. Uses the campaign's timezone. example: '2025-09-25' schedules: type: array items: type: object properties: name: type: string example: My Schedule timing: type: object properties: from: type: string pattern: ^([01][0-9]|2[0-3]):([0-5][0-9])$ example: 09:00 to: type: string pattern: ^([01][0-9]|2[0-3]):([0-5][0-9])$ example: '17:00' required: - from - to days: type: object minProperties: 1 properties: '0': type: boolean example: true '1': type: boolean example: true '2': type: boolean example: true '3': type: boolean example: true '4': type: boolean example: true '5': type: boolean example: false '6': type: boolean example: false timezone: type: string enum: - Etc/GMT+12 - Etc/GMT+11 - Etc/GMT+10 - America/Anchorage - America/Dawson - America/Creston - America/Chihuahua - America/Boise - America/Belize - America/Chicago - America/Bahia_Banderas - America/Regina - America/Bogota - America/Detroit - America/Indiana/Marengo - America/Caracas - America/Asuncion - America/Glace_Bay - America/Campo_Grande - America/Anguilla - America/Santiago - America/St_Johns - America/Sao_Paulo - America/Argentina/La_Rioja - America/Araguaina - America/Godthab - America/Montevideo - America/Bahia - America/Noronha - America/Scoresbysund - Atlantic/Cape_Verde - Africa/Casablanca - America/Danmarkshavn - Europe/Isle_of_Man - Atlantic/Canary - Africa/Abidjan - Arctic/Longyearbyen - Europe/Belgrade - Africa/Ceuta - Europe/Sarajevo - Africa/Algiers - Africa/Windhoek - Asia/Nicosia - Asia/Beirut - Africa/Cairo - Asia/Damascus - Europe/Bucharest - Africa/Blantyre - Europe/Helsinki - Europe/Istanbul - Asia/Jerusalem - Africa/Tripoli - Asia/Amman - Asia/Baghdad - Europe/Kaliningrad - Asia/Aden - Africa/Addis_Ababa - Europe/Kirov - Europe/Astrakhan - Asia/Tehran - Asia/Dubai - Asia/Baku - Indian/Mahe - Asia/Tbilisi - Asia/Yerevan - Asia/Kabul - Antarctica/Mawson - Asia/Yekaterinburg - Asia/Karachi - Asia/Kolkata - Asia/Colombo - Asia/Kathmandu - Antarctica/Vostok - Asia/Dhaka - Asia/Rangoon - Antarctica/Davis - Asia/Novokuznetsk - Asia/Hong_Kong - Asia/Krasnoyarsk - Asia/Brunei - Australia/Perth - Asia/Taipei - Asia/Choibalsan - Asia/Irkutsk - Asia/Dili - Asia/Pyongyang - Australia/Adelaide - Australia/Darwin - Australia/Brisbane - Australia/Melbourne - Antarctica/DumontDUrville - Australia/Currie - Asia/Chita - Antarctica/Macquarie - Asia/Sakhalin - Pacific/Auckland - Etc/GMT-12 - Pacific/Fiji - Asia/Anadyr - Asia/Kamchatka - Etc/GMT-13 - Pacific/Apia example: Etc/GMT+12 required: - name - timing - days - timezone minItems: 1 required: - schedules sequences: type: array description: List of sequences (the actual email copy). Even though this field is an array, only the first element is used, so please provide only one array item, and add the steps to that array items: type: object properties: steps: type: array items: type: object properties: type: type: string enum: - email x-enumDescriptions: email: This steps represents an email description: Type of step. This has to be 'email' always - it's the only supported type for now example: email delay: type: number description: The delay value before sending the NEXT email. The unit is determined by the delay_unit field (defaults to days). example: 2 delay_unit: type: string enum: - minutes - hours - days default: days description: The unit of time for the delay value (minutes, hours, or days). Defaults to days for backward compatibility. example: days pre_delay: type: number description: The delay value before sending the FIRST email in a subsequence. **Only applicable to subsequences** - this field is ignored for regular campaigns. The unit is determined by the pre_delay_unit field (defaults to days). example: 2 pre_delay_unit: type: string enum: - minutes - hours - days default: days description: The unit of time for the pre_delay value (minutes, hours, or days). **Only applicable to subsequences** - this field is ignored for regular campaigns. Defaults to days for backward compatibility. example: days variants: type: array items: type: object properties: subject: type: string example: Hello {{firstName}} body: type: string description: Email body HTML. Use `
` tags for delivered email line breaks. example: Hey {{firstName}},

I hope you are doing well. v_disabled: type: boolean description: Whether this variant is disabled. By default, all the variants are enabled. Please set this to true if you want to disable this variant example: true required: - subject - body minItems: 1 maxItems: 26 contains: type: object not: properties: v_disabled: enum: - true required: - v_disabled required: - type - delay - variants required: - steps auto_variant_select: type: - object - 'null' description: Automatically select the winning variant for each step using open, click, or reply rate. Set to `null` to disable automatic selection. properties: trigger: type: string enum: - reply_rate - click_rate - open_rate examples: - click_rate example: click_rate required: - trigger daily_limit_mode: type: string description: Daily limit mode for the subsequence. "inherit" uses the parent campaign limit, "custom" uses a subsequence-specific limit, "unlimited" bypasses the campaign-level daily limit. enum: - inherit - custom - unlimited example: inherit daily_limit: type: - number - 'null' description: Custom daily limit for the subsequence. Only used when `daily_limit_mode` is "custom". example: 50 ignore_account_daily_limit: type: boolean description: When enabled, the subsequence will send even when sending accounts have reached their daily limit. example: false required: [] additionalProperties: false minProperties: 1 parameters: - schema: type: string format: uuid example: 019ffad2-9c8c-7d69-9bc1-9209e81446e8 example: 019ffad2-9c8c-7d69-9bc1-9209e81446e8 in: path name: id required: true description: The ID of the item to update responses: '200': description: The updated Campaign Subsequence content: application/json: schema: $ref: '#/components/schemas/CampaignSubsequence' '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message delete: operationId: deleteCampaignSubsequence summary: Delete campaign subsequence tags: - CampaignSubsequence description: 'Requires one of the following scopes: `subsequences:delete`, `subsequences:all`, `all:delete`, `all:all`' requestBody: content: application/json: schema: type: 'null' example: null parameters: - schema: type: string format: uuid example: 019ffad2-9c8c-7d69-9bc1-920a739b3101 example: 019ffad2-9c8c-7d69-9bc1-920a739b3101 in: path name: id required: true description: The ID of the item to delete responses: '200': description: The deleted Campaign Subsequence content: application/json: schema: $ref: '#/components/schemas/CampaignSubsequence' '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message /api/v2/subsequences/{id}/analytics/steps: get: operationId: getSubsequenceStepsAnalytics summary: Get subsequence step and variant analytics tags: - CampaignSubsequence description: 'Returns engagement metrics grouped by zero-based step and variant for one subsequence. Results include only activity from the requested subsequence, excluding its parent campaign and sibling subsequences. Requires one of the following scopes: `subsequences:read`, `subsequences:all`, `all:read`, `all:all`' parameters: - schema: type: string example: '2024-01-01' examples: '2024-01-01': value: '2024-01-01' '2024-01-01T12:00:00.000Z': value: '2024-01-01T12:00:00.000Z' in: query name: start_date required: false description: Inclusive start of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or an ISO 8601 timestamp. Timestamps are normalized to their UTC calendar date. - schema: type: string example: '2024-01-31' examples: '2024-01-31': value: '2024-01-31' '2024-01-31T23:59:59.999Z': value: '2024-01-31T23:59:59.999Z' in: query name: end_date required: false description: Inclusive end of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or an ISO 8601 timestamp. Timestamps are normalized to their UTC calendar date. - schema: type: string format: uuid example: 019ffad2-9c8b-7899-a0d0-1b1ac5dedeb4 example: 019ffad2-9c8b-7899-a0d0-1b1ac5dedeb4 in: path name: id required: true description: The ID of the subsequence to analyze. responses: '200': description: Engagement metrics grouped by subsequence step and variant. content: application/json: schema: type: array description: Engagement metrics grouped by subsequence step and variant. items: type: object properties: step: type: - 'null' - string description: Zero-based step index. `0` is the first step. Null when the event could not be attributed to a step. example: '0' variant: type: - 'null' - string description: Zero-based variant index. `0` is variant A, `1` is variant B, and so on. Null when the event could not be attributed to a variant. example: '0' sent: type: integer description: Total emails sent from this step and variant. example: 100 opened: type: integer description: Total open events attributed to this step and variant. example: 45 unique_opened: type: integer description: Number of unique leads that opened an email from this step and variant. example: 40 replies: type: integer description: Total replies attributed to this step and variant. example: 12 unique_replies: type: integer description: Number of unique leads that replied to this step and variant. example: 11 replies_automatic: type: integer description: Total automatic replies attributed to this step and variant. example: 2 unique_replies_automatic: type: integer description: Number of unique leads that sent an automatic reply to this step and variant. example: 2 clicks: type: integer description: Total link click events attributed to this step and variant. example: 18 unique_clicks: type: integer description: Number of unique leads that clicked a link in this step and variant. example: 15 required: - step - variant - sent - opened - unique_opened - replies - unique_replies - replies_automatic - unique_replies_automatic - clicks - unique_clicks '400': description: The request is invalid (e.g. missing required fields, invalid field values, or an invalid state for the operation) content: application/json: schema: type: object properties: statusCode: type: number enum: - 400 examples: - 400 example: 400 error: type: string enum: - Bad Request examples: - Bad Request example: Bad Request message: type: string examples: - body must have required property 'name' example: body must have required property 'name' required: - statusCode - error - message '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '403': description: This request is forbidden (the API key scope or workspace plan does not allow this action) content: application/json: schema: type: object properties: statusCode: type: number enum: - 403 examples: - 403 example: 403 error: type: string enum: - Forbidden examples: - Forbidden example: Forbidden message: type: string examples: - Forbidden example: Forbidden required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message /api/v2/subsequences/{id}/sending-status: get: operationId: getSubsequenceSendingStatus summary: Get subsequence sending status tags: - CampaignSubsequence description: 'Returns sending status data explaining why a subsequence may not be sending emails or is sending slower than expected. Note: Some fields may be missing when the campaign is out of schedule. Always-present fields: campaign_id, subsequence_id, last_updated, status, issue_tracking. Requires one of the following scopes: `subsequences:read`, `subsequences:all`, `all:read`, `all:all`' parameters: - schema: type: boolean default: false example: false example: false in: query name: with_ai_summary required: false description: Include AI-generated summary - schema: type: string format: uuid example: 019ffad2-9c8d-75ac-a328-bf7520115109 example: 019ffad2-9c8d-75ac-a328-bf7520115109 in: path name: id required: true description: Subsequence ID responses: '200': description: Sending status data with human-readable summary. Returns null for both fields if no data is available. content: application/json: schema: type: object description: Sending status data with human-readable summary. Returns null for both fields if no data is available. properties: diagnostics: type: - 'null' - object additionalProperties: true description: Raw sending status data. Some fields may be missing when campaign is out of schedule. properties: campaign_id: type: string description: The campaign ID examples: - 019ffad2-8d52-7649-baa5-1601894e64fd example: 019ffad2-8d52-7649-baa5-1601894e64fd subsequence_id: type: string description: The subsequence ID (only present for subsequence endpoints) examples: - 019ffad2-8d52-7649-baa5-16026b2682a3 example: 019ffad2-8d52-7649-baa5-16026b2682a3 last_updated: type: string description: ISO timestamp of when this data was last updated examples: - '2026-08-13T11:12:10.578Z' example: '2026-08-13T11:12:10.578Z' status: type: - 'null' - string description: Status code explaining why the campaign is not sending or sending slower enum: - campaign_paused - campaign_draft - campaign_completed - campaign_running_subsequences - campaign_bounce_protect - campaign_accounts_unhealthy - campaign_account_suspended - out_of_schedule - waiting_for_leads - daily_limit_met - account_daily_limit_met - new_lead_limit_met - all_accounts_unhealthy - waiting_for_esp_match - domain_limit_reached - follow_up_delay_not_met - no_accounts_available - healthy examples: - healthy example: healthy issue_tracking: type: object description: Tracks persistence of the current issue properties: current_status_code: type: - 'null' - string description: Current status code examples: - healthy example: healthy issue_first_seen_at: type: - 'null' - string description: ISO timestamp when the issue was first detected examples: - '2026-08-13T11:12:10.578Z' example: '2026-08-13T11:12:10.578Z' consecutive_loops_with_issue: type: number description: Number of consecutive processing loops with this issue examples: - 0 example: 0 last_healthy_send_at: type: - 'null' - string description: ISO timestamp of last successful send examples: - '2026-08-13T11:12:10.578Z' example: '2026-08-13T11:12:10.578Z' accounts_summary: type: object description: Summary of sending account availability. May be missing when campaign is out of schedule. properties: total_connected: type: number description: Total number of connected sending accounts examples: - 5 example: 5 available: type: number description: Number of accounts available to send examples: - 3 example: 3 unavailable: type: object description: Breakdown of unavailable accounts by reason properties: daily_limit_hit: type: number description: Accounts that hit their configured daily sending limit examples: - 1 example: 1 slow_ramp_limit_hit: type: number description: Accounts that hit the dynamic slow ramp limit (warmup feature) examples: - 0 example: 0 disconnected: type: number description: Accounts that are disconnected examples: - 1 example: 1 global_gap_not_met: type: number description: Accounts waiting for global sending gap examples: - 0 example: 0 campaign_daily_limit: type: object description: Campaign daily sending limit status. May be missing when campaign is out of schedule. properties: limit: type: number description: Configured daily sending limit examples: - 100 example: 100 sent: type: number description: Number of emails sent today examples: - 50 example: 50 limit_hit: type: boolean description: Whether the daily limit has been reached examples: - false example: false new_lead_limit: type: object description: New lead daily limit status. May be missing when campaign is out of schedule. properties: enabled: type: boolean description: Whether new lead limiting is enabled examples: - true example: true limit: type: - 'null' - number description: Configured new lead limit per day examples: - 50 example: 50 contacted: type: number description: Number of new leads contacted today examples: - 25 example: 25 limit_hit: type: boolean description: Whether the new lead limit has been reached examples: - false example: false schedule_status: type: object description: Campaign schedule status properties: in_schedule: type: boolean description: Whether the campaign is currently within scheduled sending hours examples: - true example: true send_one_by_one: type: object description: Send one-by-one settings. May be missing when campaign is out of schedule. properties: enabled: type: boolean description: Whether send one-by-one mode is enabled examples: - false example: false single_account_per_wait_gap: type: boolean description: Whether to use single account per wait gap examples: - false example: false follow_ups_waiting: type: object description: Follow-up emails waiting status. May be missing when campaign is out of schedule. properties: count: type: number description: Number of follow-ups waiting to be sent examples: - 10 example: 10 earliest_wait_time_seconds: type: - 'null' - number description: Seconds until the earliest follow-up can be sent examples: - 3600 example: 3600 esp_routing_status: type: object description: ESP routing status. May be missing when campaign is out of schedule. properties: enabled: type: boolean description: Whether ESP routing is enabled examples: - false example: false waiting_for_match: type: boolean description: Whether waiting for an ESP-matched account examples: - false example: false connected_esps: type: array items: type: number examples: - 1 example: 1 description: List of connected ESP IDs domain_limiter: type: object description: Per-domain sending limit status. May be missing when campaign is out of schedule. properties: active: type: boolean description: Whether domain limiting is active examples: - false example: false domains_at_limit: type: number description: Number of domains that have reached their limit examples: - 0 example: 0 leads_status: type: object description: Lead availability status. May be missing when campaign is out of schedule. properties: no_leads_ready: type: boolean description: Whether there are no leads ready to receive emails examples: - false example: false account_unavailable_skips: type: number description: Number of leads skipped due to account unavailability examples: - 0 example: 0 delay_not_met_skips: type: number description: Number of leads skipped due to delay requirements not met examples: - 0 example: 0 summary: type: - 'null' - object additionalProperties: true description: Human-readable summary of the sending status properties: status: type: - 'null' - string description: The status code examples: - healthy example: healthy status_message: type: - 'null' - string description: Human-readable message explaining the status examples: - Campaign is sending normally example: Campaign is sending normally issue_started_at: type: - 'null' - string description: ISO timestamp when the issue was first detected examples: - '2026-08-13T11:12:10.578Z' example: '2026-08-13T11:12:10.578Z' last_healthy_send_at: type: - 'null' - string description: ISO timestamp of last successful send examples: - '2026-08-13T11:12:10.578Z' example: '2026-08-13T11:12:10.578Z' ai_summary: type: - 'null' - string description: AI-generated plain-English summary (only when with_ai_summary=true) examples: - Your campaign is sending emails normally. example: Your campaign is sending emails normally. '401': description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked) content: application/json: schema: type: object properties: statusCode: type: number enum: - 401 examples: - 401 example: 401 error: type: string enum: - Unauthorized examples: - Unauthorized example: Unauthorized message: type: string examples: - Missing Authorization header example: Missing Authorization header required: - statusCode - error - message '402': description: This request cannot be fulfilled because the workspace does not have an active paid plan content: application/json: schema: type: object properties: statusCode: type: number enum: - 402 examples: - 402 example: 402 error: type: string enum: - Payment Required examples: - Payment Required example: Payment Required message: type: string examples: - Workspace does not have an active paid plan example: Workspace does not have an active paid plan required: - statusCode - error - message '404': description: The requested resource was not found content: application/json: schema: type: object properties: statusCode: type: number enum: - 404 examples: - 404 example: 404 error: type: string enum: - Not Found examples: - Not Found example: Not Found message: type: string examples: - Resource not found example: Resource not found required: - statusCode - error - message '429': description: You have exceeded the rate limit. Please check the rate limit docs for more information. content: application/json: schema: type: object properties: statusCode: type: number enum: - 429 examples: - 429 example: 429 error: type: string enum: - Too Many Requests examples: - Too Many Requests example: Too Many Requests message: type: string examples: - Rate limit exceeded example: Rate limit exceeded required: - statusCode - error - message components: schemas: CampaignSubsequence: title: Campaign Subsequence description: A subsequence entity representing a follow-up sequence x-tags: - Schemas - CampaignSubsequence type: object properties: id: type: string description: Unique identifier for the subsequence readOnly: true format: uuid example: 019ffad2-5cc7-76f5-9fd3-25f814e7aa6b timestamp_created: type: string description: Timestamp when the subsequence was created readOnly: true format: date-time example: '2026-08-13T11:11:58.151Z' parent_campaign: type: string description: ID of the parent campaign format: uuid example: 019ffad2-5cc7-76f5-9fd3-25f990e43646 workspace: type: string description: ID of the workspace this subsequence belongs to readOnly: true format: uuid example: 019ffad2-5cc7-76f5-9fd3-25fa299a0c6f status: type: number description: Status of the subsequence readOnly: true enum: - -99 - -1 - -2 - 0 - 1 - 2 - 3 - 4 x-enumDescriptions: '0': Draft - The subsequence is in draft mode and not yet active '1': Active - The subsequence is currently running '2': Paused - The subsequence has been manually paused '3': Completed - The subsequence has finished running '4': Running Subsequences - The subsequence has active child sequences '-99': Account Suspended - The subsequence is suspended due to account issues '-1': Accounts Unhealthy - The subsequence is paused due to unhealthy sending accounts '-2': Bounce Protection - The subsequence is paused due to high bounce rates example: 0 timestamp_leads_updated: type: string description: Timestamp when the leads were last updated readOnly: true format: date-time example: '2026-08-13T11:11:58.151Z' name: type: string description: Name of the subsequence example: Follow-up sequence conditions: type: object description: Conditions that trigger the subsequence properties: crm_status: type: array description: Lead CRM statuses that trigger the subsequence. Accepts the built-in statuses listed below, or the interest status of a custom lead label. items: type: number minimum: -30000 maximum: 30000 x-enumDescriptions: '0': Out of Office '1': Interested '2': Meeting Booked '3': Meeting Completed '4': Won '-1': Not Interested '-2': Wrong Person '-3': Lost '-4': No Show example: 1 lead_activity: type: array description: Lead activities that trigger the subsequence. items: type: number enum: - 4 - 91 - 2 x-enumDescriptions: '2': Email Opened - Triggered when a lead opens an email '4': Email Link Clicked - Triggered when a lead clicks a link in an email '91': Campaign Completed Without Reply - Triggered when a campaign completes for a lead without receiving a reply example: 4 reply_contains: type: string example: 'yes' subsequence_schedule: type: object description: Schedule configuration for the subsequence. When omitted on create, inherits the parent campaign's schedule. properties: start_date: type: - 'null' - string format: date description: Start date in YYYY-MM-DD format. Uses the campaign's timezone. example: '2025-09-25' end_date: type: - 'null' - string format: date description: End date in YYYY-MM-DD format. Uses the campaign's timezone. example: '2025-09-25' schedules: type: array items: type: object properties: name: type: string example: My Schedule timing: type: object properties: from: type: string pattern: ^([01][0-9]|2[0-3]):([0-5][0-9])$ example: 09:00 to: type: string pattern: ^([01][0-9]|2[0-3]):([0-5][0-9])$ example: '17:00' required: - from - to days: type: object minProperties: 1 properties: '0': type: boolean example: true '1': type: boolean example: true '2': type: boolean example: true '3': type: boolean example: true '4': type: boolean example: true '5': type: boolean example: false '6': type: boolean example: false timezone: type: string enum: - Etc/GMT+12 - Etc/GMT+11 - Etc/GMT+10 - America/Anchorage - America/Dawson - America/Creston - America/Chihuahua - America/Boise - America/Belize - America/Chicago - America/Bahia_Banderas - America/Regina - America/Bogota - America/Detroit - America/Indiana/Marengo - America/Caracas - America/Asuncion - America/Glace_Bay - America/Campo_Grande - America/Anguilla - America/Santiago - America/St_Johns - America/Sao_Paulo - America/Argentina/La_Rioja - America/Araguaina - America/Godthab - America/Montevideo - America/Bahia - America/Noronha - America/Scoresbysund - Atlantic/Cape_Verde - Africa/Casablanca - America/Danmarkshavn - Europe/Isle_of_Man - Atlantic/Canary - Africa/Abidjan - Arctic/Longyearbyen - Europe/Belgrade - Africa/Ceuta - Europe/Sarajevo - Africa/Algiers - Africa/Windhoek - Asia/Nicosia - Asia/Beirut - Africa/Cairo - Asia/Damascus - Europe/Bucharest - Africa/Blantyre - Europe/Helsinki - Europe/Istanbul - Asia/Jerusalem - Africa/Tripoli - Asia/Amman - Asia/Baghdad - Europe/Kaliningrad - Asia/Aden - Africa/Addis_Ababa - Europe/Kirov - Europe/Astrakhan - Asia/Tehran - Asia/Dubai - Asia/Baku - Indian/Mahe - Asia/Tbilisi - Asia/Yerevan - Asia/Kabul - Antarctica/Mawson - Asia/Yekaterinburg - Asia/Karachi - Asia/Kolkata - Asia/Colombo - Asia/Kathmandu - Antarctica/Vostok - Asia/Dhaka - Asia/Rangoon - Antarctica/Davis - Asia/Novokuznetsk - Asia/Hong_Kong - Asia/Krasnoyarsk - Asia/Brunei - Australia/Perth - Asia/Taipei - Asia/Choibalsan - Asia/Irkutsk - Asia/Dili - Asia/Pyongyang - Australia/Adelaide - Australia/Darwin - Australia/Brisbane - Australia/Melbourne - Antarctica/DumontDUrville - Australia/Currie - Asia/Chita - Antarctica/Macquarie - Asia/Sakhalin - Pacific/Auckland - Etc/GMT-12 - Pacific/Fiji - Asia/Anadyr - Asia/Kamchatka - Etc/GMT-13 - Pacific/Apia example: Etc/GMT+12 required: - name - timing - days - timezone minItems: 1 required: - schedules sequences: type: array description: List of sequences (the actual email copy). Even though this field is an array, only the first element is used, so please provide only one array item, and add the steps to that array items: type: object properties: steps: type: array items: type: object properties: type: type: string enum: - email x-enumDescriptions: email: This steps represents an email description: Type of step. This has to be 'email' always - it's the only supported type for now example: email delay: type: number description: The delay value before sending the NEXT email. The unit is determined by the delay_unit field (defaults to days). example: 2 delay_unit: type: string enum: - minutes - hours - days default: days description: The unit of time for the delay value (minutes, hours, or days). Defaults to days for backward compatibility. example: days pre_delay: type: number description: The delay value before sending the FIRST email in a subsequence. **Only applicable to subsequences** - this field is ignored for regular campaigns. The unit is determined by the pre_delay_unit field (defaults to days). example: 2 pre_delay_unit: type: string enum: - minutes - hours - days default: days description: The unit of time for the pre_delay value (minutes, hours, or days). **Only applicable to subsequences** - this field is ignored for regular campaigns. Defaults to days for backward compatibility. example: days variants: type: array items: type: object properties: subject: type: string example: Hello {{firstName}} body: type: string description: Email body HTML. Use `
` tags for delivered email line breaks. example: Hey {{firstName}},

I hope you are doing well. v_disabled: type: boolean description: Whether this variant is disabled. By default, all the variants are enabled. Please set this to true if you want to disable this variant example: true required: - subject - body minItems: 1 maxItems: 26 contains: type: object not: properties: v_disabled: enum: - true required: - v_disabled required: - type - delay - variants required: - steps auto_variant_select: type: - 'null' - object description: Automatically select the winning variant for each step using open, click, or reply rate. Set to `null` to disable automatic selection. properties: trigger: type: string enum: - reply_rate - click_rate - open_rate examples: - click_rate example: click_rate required: - trigger daily_limit_mode: type: string description: Daily limit mode for the subsequence. "inherit" uses the parent campaign limit, "custom" uses a subsequence-specific limit, "unlimited" bypasses the campaign-level daily limit. enum: - inherit - custom - unlimited example: inherit daily_limit: type: - 'null' - number description: Custom daily limit for the subsequence. Only used when `daily_limit_mode` is "custom". example: 50 ignore_account_daily_limit: type: boolean description: When enabled, the subsequence will send even when sending accounts have reached their daily limit. example: false required: - id - timestamp_created - parent_campaign - workspace - status - timestamp_leads_updated - name - conditions additionalProperties: false securitySchemes: ApiKeyAuth: type: http scheme: bearer