openapi: 3.2.0
info:
title: Explorer Campaign 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: Campaign
description: A campaign that can be sent to a list of recipients
x-group: Campaign
paths:
/api/v2/campaigns:
post:
operationId: createCampaign
summary: Create campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:create`, `campaigns:all`, `all:create`, `all:all`'
requestBody:
content:
application/json:
schema:
title: CreateCampaign
description: The Campaign to create
type: object
properties:
name:
type: string
description: Name of the campaign
example: My First Campaign
pl_value:
type:
- number
- 'null'
description: Value of every positive lead
example: 100
is_evergreen:
type:
- boolean
- 'null'
description: Whether the campaign is evergreen
example: false
campaign_schedule:
type: object
description: Campaign 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
required:
- type
- delay
- variants
required:
- steps
email_gap:
type:
- number
- 'null'
description: The gap between emails in minutes
example: 10
random_wait_max:
type:
- number
- 'null'
description: The maximum random wait time in minutes
example: 10
text_only:
type:
- boolean
- 'null'
description: Whether the campaign is text only
example: false
first_email_text_only:
type:
- boolean
- 'null'
description: Whether the campaign is send the first email as a text only
example: false
email_list:
type: array
description: List of accounts to use for sending emails
items:
type: string
example: john@doe.com
daily_limit:
type:
- number
- 'null'
description: The daily limit for sending emails
example: 100
stop_on_reply:
type:
- boolean
- 'null'
description: Whether to stop the campaign on reply
example: false
email_tag_list:
type: array
description: List of tags to use for sending emails
items:
type: string
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059ac4b3a8a9
link_tracking:
type:
- boolean
- 'null'
description: Whether to track links in emails
example: true
open_tracking:
type: boolean
description: Whether to track opens in emails
example: true
stop_on_auto_reply:
type:
- boolean
- 'null'
description: Whether to stop the campaign on auto reply
example: false
daily_max_leads:
type:
- integer
- 'null'
description: The daily maximum new leads to contact
minimum: 0
example: 100
prioritize_new_leads:
type:
- boolean
- 'null'
description: Whether to prioritize new leads
example: false
auto_variant_select:
type:
- object
- 'null'
description: Auto variant select settings
properties:
trigger:
type: string
enum:
- reply_rate
- click_rate
- open_rate
examples:
- click_rate
example: click_rate
required:
- trigger
match_lead_esp:
type:
- boolean
- 'null'
description: Whether to match leads by ESP
example: false
stop_for_company:
type:
- boolean
- 'null'
description: Whether to stop the campaign for the entire company(domain) when a lead replies
example: false
insert_unsubscribe_header:
type:
- boolean
- 'null'
description: Whether to insert an unsubscribe header in emails
example: false
allow_risky_contacts:
type:
- boolean
- 'null'
description: Whether to allow risky contacts
example: false
disable_bounce_protect:
type:
- boolean
- 'null'
description: Whether to disable bounce protection
example: false
limit_emails_per_company_override:
type:
- object
- 'null'
description: Overrides the workspace-wide limit emails per company setting for this campaign.
properties:
mode:
type: string
enum:
- custom
- disabled
examples:
- custom
example: custom
daily_limit:
type: number
minimum: 1
examples:
- 3
example: 3
scope:
type: string
enum:
- per_campaign
- across_workspace
examples:
- per_campaign
example: per_campaign
required:
- mode
cc_list:
type: array
description: List of accounts to CC on emails
items:
type: string
format: email
example: john@doe.com
bcc_list:
type: array
description: List of accounts to BCC on emails
items:
type: string
format: email
example: john@doe.com
owned_by:
type:
- string
- 'null'
description: Owner ID
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059c036e479a
ai_sdr_id:
type:
- string
- 'null'
description: AI Sales Agent ID that created this campaign
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059dc9a58653
provider_routing_rules:
type: array
description: Auto variant select settings
items:
type: object
properties:
action:
type: string
enum:
- send
- do_not_send
example: send
recipient_esp:
type: array
items:
type: string
enum:
- all
- google
- outlook
- other
example: all
sender_esp:
type: array
items:
type: string
enum:
- all
- google
- outlook
- other
example: all
required:
- action
- recipient_esp
- sender_esp
required:
- name
- campaign_schedule
additionalProperties: false
required: true
description: The Campaign to create
responses:
'200':
description: The Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'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: listCampaign
summary: List campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:read`, `campaigns: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
example: Summer Sale Campaign
example: Summer Sale Campaign
in: query
name: search
required: false
description: Search by campaign name
- schema:
type: string
example: 019ffad2-9b9f-79cc-82ca-2b31778b13de,019ffad2-9b9f-79cc-82ca-2b3271f21ade
example: 019ffad2-9b9f-79cc-82ca-2b31778b13de,019ffad2-9b9f-79cc-82ca-2b3271f21ade
in: query
name: tag_ids
required: false
description: Filter campaigns by tag ids. Returns campaigns that have any of the specified tags assigned. You can specify multiple tag ids by separating them with a comma.
- schema:
type: string
format: uuid
example: 019ffad2-9b9f-79cc-82ca-2b33348f0860
example: 019ffad2-9b9f-79cc-82ca-2b33348f0860
in: query
name: ai_sales_agent_id
required: false
description: Filter campaigns by AI Sales Agent ID. Returns campaigns that were created by the specified AI Sales Agent.
- schema:
type: number
enum:
- -99
- -1
- -2
- 0
- 1
- 2
- 3
- 4
x-enumDescriptions:
'0': Draft
'1': Active
'2': Paused
'3': Completed
'4': Running Subsequences
'-99': Account Suspended
'-1': Accounts Unhealthy
'-2': Bounce Protect
example: 1
examples:
'1':
value: 1
'2':
value: 2
in: query
name: status
required: false
description: Filter campaigns by status using the campaign status enum value (e.g., ACTIVE, PAUSED).
- schema:
type: number
enum:
- -99
- -1
- -2
- 0
- 1
- 2
- 3
- 4
x-enumDescriptions:
'0': Draft
'1': Active
'2': Paused
'3': Completed
'4': Running Subsequences
'-99': Account Suspended
'-1': Accounts Unhealthy
'-2': Bounce Protect
example: 1
example: 1
in: query
name: exclude_status
required: false
description: Exclude campaigns with this status using the campaign status enum value (e.g., exclude ACTIVE to list only campaigns that are not currently active).
responses:
'200':
description: The list of Campaign
content:
application/json:
schema:
type: object
properties:
items:
type: array
description: The list of Campaign
items:
$ref: '#/components/schemas/Campaign'
next_starting_after:
type: string
examples:
- 019ffad2-9ba0-7ae4-8d2d-0588c0a8454e
- '2026-08-13T11:12:14.240Z'
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-9ba0-7ae4-8d2d-0588c0a8454e
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/campaigns/{id}/activate:
post:
operationId: activateCampaign
summary: Activate(start), or resume a campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:update`, `campaigns:all`, `all:update`, `all:all`'
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9b9d-70ff-a76b-0e093eb63e6c
example: 019ffad2-9b9d-70ff-a76b-0e093eb63e6c
in: path
name: id
required: true
description: Campaign ID
responses:
'200':
description: The requested Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'400':
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
'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/campaigns/{id}/pause:
post:
operationId: pauseCampaign
summary: Stop(or pause) a campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:update`, `campaigns:all`, `all:update`, `all:all`'
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9b9d-70ff-a76b-0e0a921defd2
example: 019ffad2-9b9d-70ff-a76b-0e0a921defd2
in: path
name: id
required: true
description: Campaign ID
responses:
'200':
description: The requested Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'400':
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
'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/campaigns/{id}:
get:
operationId: getCampaign
summary: Get campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:read`, `campaigns:all`, `all:read`, `all:all`'
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9b9f-79cc-82ca-2b30de64279d
example: 019ffad2-9b9f-79cc-82ca-2b30de64279d
in: path
name: id
required: true
description: The ID of the requested item
responses:
'200':
description: The requested Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'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: patchCampaign
summary: Patch campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:update`, `campaigns:all`, `all:update`, `all:all`'
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Name of the campaign
example: My First Campaign
pl_value:
type:
- number
- 'null'
description: Value of every positive lead
example: 100
is_evergreen:
type:
- boolean
- 'null'
description: Whether the campaign is evergreen
example: false
campaign_schedule:
type: object
description: Campaign 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
required:
- type
- delay
- variants
required:
- steps
email_gap:
type:
- number
- 'null'
description: The gap between emails in minutes
example: 10
random_wait_max:
type:
- number
- 'null'
description: The maximum random wait time in minutes
example: 10
text_only:
type:
- boolean
- 'null'
description: Whether the campaign is text only
example: false
first_email_text_only:
type:
- boolean
- 'null'
description: Whether the campaign is send the first email as a text only
example: false
email_list:
type: array
description: List of accounts to use for sending emails
items:
type: string
example: john@doe.com
daily_limit:
type:
- number
- 'null'
description: The daily limit for sending emails
example: 100
stop_on_reply:
type:
- boolean
- 'null'
description: Whether to stop the campaign on reply
example: false
email_tag_list:
type: array
description: List of tags to use for sending emails
items:
type: string
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059ac4b3a8a9
link_tracking:
type:
- boolean
- 'null'
description: Whether to track links in emails
example: true
open_tracking:
type: boolean
description: Whether to track opens in emails
example: true
stop_on_auto_reply:
type:
- boolean
- 'null'
description: Whether to stop the campaign on auto reply
example: false
daily_max_leads:
type:
- integer
- 'null'
description: The daily maximum new leads to contact
minimum: 0
example: 100
prioritize_new_leads:
type:
- boolean
- 'null'
description: Whether to prioritize new leads
example: false
auto_variant_select:
type:
- object
- 'null'
description: Auto variant select settings
properties:
trigger:
type: string
enum:
- reply_rate
- click_rate
- open_rate
examples:
- click_rate
example: click_rate
required:
- trigger
match_lead_esp:
type:
- boolean
- 'null'
description: Whether to match leads by ESP
example: false
stop_for_company:
type:
- boolean
- 'null'
description: Whether to stop the campaign for the entire company(domain) when a lead replies
example: false
insert_unsubscribe_header:
type:
- boolean
- 'null'
description: Whether to insert an unsubscribe header in emails
example: false
allow_risky_contacts:
type:
- boolean
- 'null'
description: Whether to allow risky contacts
example: false
disable_bounce_protect:
type:
- boolean
- 'null'
description: Whether to disable bounce protection
example: false
limit_emails_per_company_override:
type:
- object
- 'null'
description: Overrides the workspace-wide limit emails per company setting for this campaign.
properties:
mode:
type: string
enum:
- custom
- disabled
examples:
- custom
example: custom
daily_limit:
type: number
minimum: 1
examples:
- 3
example: 3
scope:
type: string
enum:
- per_campaign
- across_workspace
examples:
- per_campaign
example: per_campaign
required:
- mode
cc_list:
type: array
description: List of accounts to CC on emails
items:
type: string
format: email
example: john@doe.com
bcc_list:
type: array
description: List of accounts to BCC on emails
items:
type: string
format: email
example: john@doe.com
owned_by:
type:
- string
- 'null'
description: Owner ID
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059c036e479a
provider_routing_rules:
type: array
description: Auto variant select settings
items:
type: object
properties:
action:
type: string
enum:
- send
- do_not_send
example: send
recipient_esp:
type: array
items:
type: string
enum:
- all
- google
- outlook
- other
example: all
sender_esp:
type: array
items:
type: string
enum:
- all
- google
- outlook
- other
example: all
required:
- action
- recipient_esp
- sender_esp
required: []
additionalProperties: false
minProperties: 1
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba8-71a6-b963-856f0012c6e2
example: 019ffad2-9ba8-71a6-b963-856f0012c6e2
in: path
name: id
required: true
description: The ID of the item to update
responses:
'200':
description: The updated Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'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: deleteCampaign
summary: Delete campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:delete`, `campaigns:all`, `all:delete`, `all:all`'
requestBody:
content:
application/json:
schema:
type: 'null'
example: null
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba8-71a6-b963-8570cd39c0c2
example: 019ffad2-9ba8-71a6-b963-8570cd39c0c2
in: path
name: id
required: true
description: The ID of the item to delete
responses:
'200':
description: The deleted Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'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/campaigns/search-by-contact:
get:
operationId: searchByContact
summary: Search campaigns by lead email
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:read`, `campaigns:all`, `all:read`, `all:all`'
parameters:
- schema:
type: string
example: lead-email@example.com
example: lead-email@example.com
in: query
name: search
required: false
description: Search by lead email
- schema:
type: string
default: timestamp_created
example: timestamp_created
examples:
timestamp_created:
value: timestamp_created
name:
value: name
in: query
name: sort_column
required: false
description: Sort campaigns by column name
- schema:
type: string
default: asc
example: asc
examples:
asc:
value: asc
desc:
value: desc
in: query
name: sort_order
required: false
description: Sort direction
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Campaign'
'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/campaigns/analytics:
get:
operationId: getCampaignAnalytics
summary: Get campaign(s) analytics
tags:
- Campaign
description: Get analytics for one or multiple campaigns. Specify the `id` field to get the analytics for a single campaign, or leave it empty to get the analytics for all campaigns
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba1-7bc9-8d59-2dbf9cad03cd
example: 019ffad2-9ba1-7bc9-8d59-2dbf9cad03cd
in: query
name: id
required: false
description: A campaign ID to get the analytics for. Leave this field empty to get the analytics for all campaigns
- schema:
type: array
items:
type: string
description: 'A list of campaign IDs to get the analytics for. Leave this field empty to get the analytics for all campaigns. You can specify multiple IDs by adding the same parameter multiple times, for instance: `/campaigns/analytics?ids=123&ids=456`'
format: uuid
examples:
- 019ffad2-9ba1-7bc9-8d59-2dc06bc9bc75
example: 019ffad2-9ba1-7bc9-8d59-2dc06bc9bc75
in: query
name: ids
required: false
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: start_date
required: false
description: Start of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: end_date
required: false
description: End of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: boolean
default: false
example: true
example: true
in: query
name: exclude_total_leads_count
required: false
description: Exclude the total leads from the result. Setting this to true will considerably decrease the response time
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: array
items:
type: object
properties:
campaign_name:
type: string
description: The name of the campaign
example: My Test Campaign
campaign_id:
type: string
description: The ID of the campaign
format: uuid
example: 019ffad2-9ba1-7bc9-8d59-2dc1d3f0cbdd
campaign_status:
type: number
description: The campaign status
x-enumDescriptions:
'0': Draft
'1': Active
'2': Paused
'3': Completed
'4': Running Subsequences
'-99': Account Suspended
'-1': Accounts Unhealthy
'-2': Bounce Protect
example: 1
campaign_is_evergreen:
type: boolean
description: Whether the campaign is evergreen
example: true
leads_count:
type: integer
description: The total number of leads
example: 1500
contacted_count:
type: integer
description: Number of leads for whom the sequence has started
example: 1200
emails_sent_count:
type: integer
description: The total number of sent emails
example: 5000
new_leads_contacted_count:
type: integer
description: The total number of new leads contacted
example: 200
open_count:
type: integer
description: The number of leads that opened at least one email
example: 800
open_count_unique:
type: integer
description: The number of unique email opens (first open per lead)
example: 750
open_count_unique_by_step:
type: integer
description: The number of unique email opens per step (first open per lead per step)
example: 900
reply_count:
type: integer
description: The total number of replies received (if a lead replies multiple times, each reply is counted)
example: 300
reply_count_unique:
type: integer
description: The number of unique replies (first reply per lead). Excludes automatic replies.
example: 280
reply_count_unique_by_step:
type: integer
description: The number of unique replies per step (first reply per lead per step). Excludes automatic replies.
example: 350
reply_count_automatic:
type: integer
description: The total number of automatic replies detected
example: 15
reply_count_automatic_unique:
type: integer
description: The number of unique automatic replies (first automatic reply per lead)
example: 12
reply_count_automatic_unique_by_step:
type: integer
description: The number of unique automatic replies per step
example: 18
link_click_count:
type: integer
description: The number of links that got clicked
example: 800
link_click_count_unique:
type: integer
description: The number of unique link clicks (first click per lead)
example: 600
link_click_count_unique_by_step:
type: integer
description: The number of unique link clicks per step (first click per lead per step)
example: 720
bounced_count:
type: integer
description: The number of bounced leads
example: 50
unsubscribed_count:
type: integer
description: The number of unsubscribed leads
example: 20
completed_count:
type: integer
description: The number of leads that the campaign was completed for
example: 1100
total_opportunities:
type: integer
description: The total number of unique opportunities created
example: 10
total_opportunity_value:
type: number
description: The total value of opportunities created
example: 1000
required:
- campaign_name
- campaign_id
- campaign_status
- campaign_is_evergreen
- leads_count
- contacted_count
- open_count
- reply_count
- link_click_count
- bounced_count
- unsubscribed_count
- completed_count
- emails_sent_count
- new_leads_contacted_count
- total_opportunities
- total_opportunity_value
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: Start Date must be earlier than End Date
'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/campaigns/analytics/overview:
get:
operationId: getCampaignAnalyticsOverview
summary: Get campaign(s) analytics overview
tags:
- Campaign
description: 'Get analytics overview for one or multiple campaigns. Specify the `id` field to get the analytics overview for a single campaign, or leave it empty to get the analytics overview for all campaigns.
Note regarding the interest status totals (interested, meeting booked, meeting completed, closed): these are calculated based on the first occurrence of each event per contact by default. To change this behavior and calculate the totals based on all occurrences of the events, set the `expand_crm_events` parameter to `true`. Additionally, there is a 10 minute time window after you change a lead status in which the subsequent updates will NOT insert new analytics events to avoid duplicates from rapid status changes and avoid false inflation of the analytics numbers.'
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba2-7890-9f7c-574e4193fe4e
example: 019ffad2-9ba2-7890-9f7c-574e4193fe4e
in: query
name: id
required: false
description: A campaign ID to get the analytics overview for. Leave this field empty to get the analytics overview for all campaigns
- schema:
type: array
items:
type: string
description: 'A list of campaign IDs to get the analytics overview for. Leave this field empty to get the analytics overview for all campaigns. You can specify multiple IDs by adding the same parameter multiple times, for instance: `/campaigns/analytics/overview?ids=123&ids=456`'
format: uuid
examples:
- 019ffad2-9ba2-7890-9f7c-574f7d9cc984
example: 019ffad2-9ba2-7890-9f7c-574f7d9cc984
in: query
name: ids
required: false
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: start_date
required: false
description: Start of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: end_date
required: false
description: End of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: number
enum:
- -99
- -1
- -2
- 0
- 1
- 2
- 3
- 4
x-enumDescriptions:
'0': Draft
'1': Active
'2': Paused
'3': Completed
'4': Running Subsequences
'-99': Account Suspended
'-1': Accounts Unhealthy
'-2': Bounce Protect
example: 1
examples:
'1':
value: 1
'2':
value: 2
'3':
value: 3
in: query
name: campaign_status
required: false
description: Filter by campaign status (only the analytics for the campaigns with the specified status will be returned)
- schema:
type: boolean
default: false
example: true
example: true
in: query
name: expand_crm_events
required: false
description: 'When `true`, calculates the total of all the lead interest status update events instead of only the first occurrence for each contact. This will affect the following fields: `total_opportunities`, `total_interested`, `total_meeting_booked`, `total_meeting_completed`, and `total_closed`. Example: if a lead goes from interested to meeting booked to closed, it will count as 3 events (total_interested: 1, total_meeting_booked_1, and total_closed: 1) when this parameter is set to true, and as 1 event (total_interested) when it is set to false (default).'
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
open_count:
type: integer
description: The total number of times the emails were opened, including duplicates
example: 800
open_count_unique:
type: integer
description: The number of emails that got opened (for the first time only)
example: 800
open_count_unique_by_step:
type: integer
description: The unique number of times the emails were opened (counted once per lead, step, and campaign)
example: 800
link_click_count:
type: integer
description: The number of links that got clicked
example: 800
link_click_count_unique:
type: integer
description: The number of links that got clicked (for the first time)
example: 800
link_click_count_unique_by_step:
type: integer
description: The unique number of links that got clicked, per step (counted once per lead, step, and campaign)
example: 800
reply_count:
type: integer
description: The total number of replies received (if a lead replies multiple times, each reply is counted)
example: 300
reply_count_unique:
type: integer
description: The number of unique replies (first reply per lead). Excludes automatic replies.
example: 300
reply_count_unique_by_step:
type: integer
description: The number of unique replies per step (first reply per lead per step). Excludes automatic replies.
example: 300
reply_count_automatic:
type: integer
description: The total number of automatic replies received (e.g., out-of-office)
example: 50
reply_count_automatic_unique:
type: integer
description: The number of unique leads that sent automatic replies
example: 45
reply_count_automatic_unique_by_step:
type: integer
description: The unique number of automatic replies per step (counted once per lead, step, and campaign)
example: 45
bounced_count:
type: integer
description: The number of bounced leads
example: 50
unsubscribed_count:
type: integer
description: The number of unsubscribed leads
example: 20
completed_count:
type: integer
description: The number of leads that the campaign was completed for
example: 1100
emails_sent_count:
type: integer
description: The total number of sent emails
example: 5000
contacted_count:
type: integer
description: The total number of unique leads contacted
example: 4500
new_leads_contacted_count:
type: integer
description: The total number of new leads contacted
example: 200
total_opportunities:
type: integer
description: The total number of unique opportunities created
example: 10
total_opportunity_value:
type: number
description: The total value of opportunities created
example: 1000
total_interested:
type: integer
description: The total number of interested opportunities created
example: 103
total_meeting_booked:
type: integer
description: The total number of meeting booked opportunities created
example: 45
total_meeting_completed:
type: integer
description: The total number of meeting completed opportunities created
example: 12
total_closed:
type: integer
description: The total number of closed opportunities created
example: 10
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: Start Date must be earlier than End Date
'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/campaigns/analytics/daily:
get:
operationId: getDailyCampaignAnalytics
summary: Get daily campaign analytics
tags:
- Campaign
description: Get campaign daily analytics
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba2-7890-9f7c-5750de86de7e
example: 019ffad2-9ba2-7890-9f7c-5750de86de7e
in: query
name: campaign_id
required: false
description: Campaign ID (optional). Leave this field empty to get the analytics for all campaigns
- schema:
type: string
example: '2024-01-01'
example: '2024-01-01'
in: query
name: start_date
required: false
description: Start of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: string
example: '2024-01-01'
example: '2024-01-01'
in: query
name: end_date
required: false
description: End of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: number
enum:
- -99
- -1
- -2
- 0
- 1
- 2
- 3
- 4
x-enumDescriptions:
'0': Draft
'1': Active
'2': Paused
'3': Completed
'4': Running Subsequences
'-99': Account Suspended
'-1': Accounts Unhealthy
'-2': Bounce Protect
example: 1
examples:
'1':
value: 1
'2':
value: 2
'3':
value: 3
in: query
name: campaign_status
required: false
description: Filter by campaign status (only the analytics for the campaigns with the specified status will be returned)
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: array
items:
type: object
properties:
date:
type: string
description: The date of the analytics entry, in YYYY-MM-DD format
example: '2025-03-01'
sent:
type: integer
description: The total number of sent emails
example: 5421
contacted:
type: integer
description: The total number of unique contacts who received an email that day
example: 5000
new_leads_contacted:
type: integer
description: The total number of new leads contacted that day
example: 200
opened:
type: integer
description: The total number of opened emails
example: 99
unique_opened:
type: integer
description: The total number of unique opened emails
example: 60
replies:
type: integer
description: The total number of replies
example: 60
unique_replies:
type: integer
description: The total number of unique replies
example: 60
replies_automatic:
type: integer
description: The total number of automatic replies detected
example: 5
unique_replies_automatic:
type: integer
description: The total number of unique automatic replies detected
example: 4
clicks:
type: integer
description: The total number of links clicked
example: 60
unique_clicks:
type: integer
description: The total number of unique links clicked. Unique meaning from unique leads, not unique links. For instance, if a lead clicked a link 3 times, it will be counted as 1 unique click. If a lead clicked 3 different links, it will still be counted as 1 unique click
example: 60
opportunities:
type: integer
description: The total number of unique opportunities created from the campaign on that day
example: 5
unique_opportunities:
type: integer
description: The total number of unique opportunities created from unique leads from the campaign on that day
example: 3
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: Start Date must be earlier than End Date
'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/campaigns/analytics/steps:
get:
operationId: getCampaignStepsAnalytics
summary: Get campaign steps analytics
tags:
- Campaign
description: Get campaign steps analytics
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba3-7a9b-ac87-cd7e663fa784
example: 019ffad2-9ba3-7a9b-ac87-cd7e663fa784
in: query
name: campaign_id
required: false
description: Campaign ID (optional). Leave this field empty to get the analytics for all campaigns
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: start_date
required: false
description: Start of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: end_date
required: false
description: End of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: boolean
default: false
example: true
example: true
in: query
name: include_opportunities_count
required: false
description: Whether to include the opportunities count per step. If this field is true then `opportunities`, `unique_opportunities`, `meetings_booked`, and `won` fields will be included in the response
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: array
items:
type: object
properties:
step:
type:
- 'null'
- string
description: The step number. When null it means we couldn't determine the step number for the event, for instance for list leads, which are not part of a campaign.
example: '1'
variant:
type:
- 'null'
- string
description: The variant number, starting from 0. 0 = A, 1 = B, 2 = C, etc. When null it means we couldn't determine the variant for the event.
example: '0'
sent:
type: integer
description: The total number of sent emails
example: 5421
opened:
type: integer
description: The total number of opened emails
example: 99
unique_opened:
type: integer
description: The total number of opened emails
example: 60
replies:
type: integer
description: The total number of replies
example: 60
unique_replies:
type: integer
description: The total number of replies
example: 60
replies_automatic:
type: integer
description: The total number of automatic replies detected
example: 5
unique_replies_automatic:
type: integer
description: The total number of unique automatic replies detected
example: 4
clicks:
type: integer
description: The total number of links clicked
example: 60
unique_clicks:
type: integer
description: The total number of unique links clicked. Unique meaning from unique leads, not unique links. For instance, if a lead clicked a link 3 times, it will be counted as 1 unique click. If a lead clicked 3 different links, it will still be counted as 1 unique click
example: 60
opportunities:
type: integer
description: The total number of opportunities created from this step. Included only if `include_opportunities_count` is `true`
example: 10
unique_opportunities:
type: integer
description: The total number of unique opportunities created from this step. Unique meaning unique per lead. If a lead has multiple opportunities, it will be counted as 1 unique opportunity. Included only if `include_opportunities_count` is `true`
example: 8
meetings_booked:
type: integer
description: The total number of opportunities from this step whose current CRM status is Meeting Booked. Included only if `include_opportunities_count` is `true`
example: 2
won:
type: integer
description: The total number of opportunities from this step whose current CRM status is Won. Included only if `include_opportunities_count` is `true`
example: 1
required:
- step
- variant
- sent
- opened
- unique_opened
- replies
- unique_replies
- replies_automatic
- unique_replies_automatic
- clicks
- unique_clicks
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: Start Date must be earlier than End Date
'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/campaigns/{id}/share:
post:
operationId: shareCampaign
summary: Share a campaign
tags:
- Campaign
description: Share a campaign. This allows other users to create new campaigns based on this campaign. The campaign is being shared for 7 days, after which you'll have to call this endpoint again if you want to enable sharing on the campaign
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba8-71a6-b963-85717ac0bf95
example: 019ffad2-9ba8-71a6-b963-85717ac0bf95
in: path
name: id
required: true
description: Campaign ID
responses:
'204':
description: Default Response
content:
application/json:
schema: {}
'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/campaigns/{id}/from-export:
post:
operationId: createFromExport
summary: Create campaign from shared one
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:create`, `campaigns:all`, `all:create`, `all:all`'
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba9-7958-8902-ac39b45afe52
example: 019ffad2-9ba9-7958-8902-ac39b45afe52
in: path
name: id
required: true
description: Campaign ID
responses:
'200':
description: The requested Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'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: The requested campaign not shared
content:
application/json:
schema:
type: object
description: The requested campaign not shared
properties:
message:
type: string
example: The requested campaign not shared
'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/campaigns/{id}/export:
post:
operationId: exportCampaign
summary: Export campaign to JSON format
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:read`, `campaigns:all`, `all:read`, `all:all`'
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba9-7958-8902-ac3ad80e868c
example: 019ffad2-9ba9-7958-8902-ac3ad80e868c
in: path
name: id
required: true
description: Campaign ID
responses:
'200':
description: The requested Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'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/campaigns/{id}/duplicate:
post:
operationId: duplicate
summary: Duplicate campaign
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:create`, `campaigns:all`, `all:create`, `all:all`'
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Campaign new name (optional). If not provided, it will default to CAMPAIGN NAME (copy).
example: Campaign new name
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9baa-7b24-b673-febcf19e6996
example: 019ffad2-9baa-7b24-b673-febcf19e6996
in: path
name: id
required: true
description: Campaign ID
responses:
'200':
description: The requested Campaign
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'400':
description: Duplication failed
content:
application/json:
schema:
type: object
description: Duplication failed
properties:
message:
type: string
description: The error message
example: New campaign name is required
'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/campaigns/count-launched:
get:
operationId: countLaunched
summary: Get launched campaigns count
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:read`, `campaigns:all`, `all:read`, `all:all`'
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
count:
type: number
example: 2
required:
- count
'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/campaigns/{id}/variables:
post:
operationId: addVariables
summary: Add campaign variables
tags:
- Campaign
description: 'Requires one of the following scopes: `campaigns:update`, `campaigns:all`, `all:update`, `all:all`'
requestBody:
content:
application/json:
schema:
type: object
properties:
variables:
type: array
items:
type: string
description: Custom or core variable names
example: firstName
required:
- variables
required: true
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9bab-7567-9b5c-ceeb1b706e72
example: 019ffad2-9bab-7567-9b5c-ceeb1b706e72
in: path
name: id
required: true
description: Campaign ID
responses:
'200':
description: A campaign that can be sent to a list of recipients
content:
application/json:
schema:
$ref: '#/components/schemas/Campaign'
'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/campaigns/{id}/sending-status:
get:
operationId: getCampaignSendingStatus
summary: Get campaign sending status
tags:
- Campaign
description: 'Returns sending status data explaining why a campaign 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, last_updated, status, issue_tracking.
Requires one of the following scopes: `campaigns:read`, `campaigns: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-9bab-7567-9b5c-ceec78f572ca
example: 019ffad2-9bab-7567-9b5c-ceec78f572ca
in: path
name: id
required: true
description: Campaign 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:
Campaign:
title: Campaign
description: A campaign that can be sent to a list of recipients
x-tags:
- Schemas
- Campaign
type: object
properties:
id:
type: string
description: Unique identifier for the campaign
readOnly: true
format: uuid
example: 019ffad2-5c4b-761a-9bc4-0599e8a95bea
name:
type: string
description: Name of the campaign
example: My First Campaign
pl_value:
type:
- 'null'
- number
description: Value of every positive lead
example: 100
status:
type: number
description: Campaign Status
readOnly: true
enum:
- -99
- -1
- -2
- 0
- 1
- 2
- 3
- 4
x-enumDescriptions:
'0': Draft
'1': Active
'2': Paused
'3': Completed
'4': Running Subsequences
'-99': Account Suspended
'-1': Accounts Unhealthy
'-2': Bounce Protect
example: 1
is_evergreen:
type:
- 'null'
- boolean
description: Whether the campaign is evergreen
example: false
campaign_schedule:
type: object
description: Campaign 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
required:
- type
- delay
- variants
required:
- steps
timestamp_created:
type: string
description: Timestamp when the campaign was created
readOnly: true
example: '2026-08-13T11:11:58.027Z'
timestamp_updated:
type: string
description: Timestamp when the campaign was last updated
readOnly: true
example: '2026-08-13T11:11:58.027Z'
email_gap:
type:
- 'null'
- number
description: The gap between emails in minutes
example: 10
random_wait_max:
type:
- 'null'
- number
description: The maximum random wait time in minutes
example: 10
text_only:
type:
- 'null'
- boolean
description: Whether the campaign is text only
example: false
first_email_text_only:
type:
- 'null'
- boolean
description: Whether the campaign is send the first email as a text only
example: false
email_list:
type: array
description: List of accounts to use for sending emails
items:
type: string
example: john@doe.com
daily_limit:
type:
- 'null'
- number
description: The daily limit for sending emails
example: 100
stop_on_reply:
type:
- 'null'
- boolean
description: Whether to stop the campaign on reply
example: false
email_tag_list:
type: array
description: List of tags to use for sending emails
items:
type: string
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059ac4b3a8a9
link_tracking:
type:
- 'null'
- boolean
description: Whether to track links in emails
example: true
open_tracking:
type: boolean
description: Whether to track opens in emails
example: true
stop_on_auto_reply:
type:
- 'null'
- boolean
description: Whether to stop the campaign on auto reply
example: false
daily_max_leads:
type:
- 'null'
- integer
description: The daily maximum new leads to contact
minimum: 0
example: 100
prioritize_new_leads:
type:
- 'null'
- boolean
description: Whether to prioritize new leads
example: false
auto_variant_select:
type:
- 'null'
- object
description: Auto variant select settings
properties:
trigger:
type: string
enum:
- reply_rate
- click_rate
- open_rate
examples:
- click_rate
example: click_rate
required:
- trigger
match_lead_esp:
type:
- 'null'
- boolean
description: Whether to match leads by ESP
example: false
not_sending_status:
type:
- 'null'
- number
description: Campaign not sending status
readOnly: true
enum:
- 1
- 2
- 3
- 4
- 99
x-enumDescriptions:
'1': Campaign is currently not within its sending schedule.
'2': Campaign is currently waiting for a lead to process.
'3': Campaign has reached its daily sending limit.
'4': All sending accounts for this campaign have reached their daily sending limit.
'99': Campaign is currently not sending due to an error. Please contact support for assistance.
example: 2
stop_for_company:
type:
- 'null'
- boolean
description: Whether to stop the campaign for the entire company(domain) when a lead replies
example: false
core_variables:
type:
- 'null'
- object
description: Campaign core variables
readOnly: true
additionalProperties: true
custom_variables:
type:
- 'null'
- object
description: Campaign custom variables
readOnly: true
additionalProperties: true
insert_unsubscribe_header:
type:
- 'null'
- boolean
description: Whether to insert an unsubscribe header in emails
example: false
allow_risky_contacts:
type:
- 'null'
- boolean
description: Whether to allow risky contacts
example: false
disable_bounce_protect:
type:
- 'null'
- boolean
description: Whether to disable bounce protection
example: false
limit_emails_per_company_override:
type:
- 'null'
- object
description: Overrides the workspace-wide limit emails per company setting for this campaign.
properties:
mode:
type: string
enum:
- custom
- disabled
examples:
- custom
example: custom
daily_limit:
type: number
minimum: 1
examples:
- 3
example: 3
scope:
type: string
enum:
- per_campaign
- across_workspace
examples:
- per_campaign
example: per_campaign
required:
- mode
cc_list:
type: array
description: List of accounts to CC on emails
items:
type: string
format: email
example: john@doe.com
bcc_list:
type: array
description: List of accounts to BCC on emails
items:
type: string
format: email
example: john@doe.com
organization:
type:
- 'null'
- string
description: Organization ID
readOnly: true
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059bb9fa11bf
owned_by:
type:
- 'null'
- string
description: Owner ID
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059c036e479a
ai_sdr_id:
type:
- 'null'
- string
description: AI Sales Agent ID that created this campaign
format: uuid
example: 019ffad2-5c4b-761a-9bc4-059dc9a58653
provider_routing_rules:
type: array
description: Auto variant select settings
items:
type: object
properties:
action:
type: string
enum:
- send
- do_not_send
example: send
recipient_esp:
type: array
items:
type: string
enum:
- all
- google
- outlook
- other
example: all
sender_esp:
type: array
items:
type: string
enum:
- all
- google
- outlook
- other
example: all
required:
- action
- recipient_esp
- sender_esp
required:
- id
- name
- status
- campaign_schedule
- timestamp_created
- timestamp_updated
additionalProperties: false
securitySchemes:
ApiKeyAuth:
type: http
scheme: bearer