id of an existing record in the tags table.'
example:
- 17
items:
type: integer
post:
summary: 'Create a campaign'
operationId: createACampaign
description: 'This endpoint allows the authenticated user to create a new campaign.'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
id: 1
uuid: 9h8ef374-e986-4221-b432-2902b4826r83
name: 'John Doe Campaign'
type: outbound
status: Active
emails_sent: 7
opened: 2
unique_opens: 1
replied: 2
unique_replies: 1
bounced: 1
unsubscribed: 2
interested: 3
total_leads_contacted: 7
total_leads: 10
max_emails_per_day: 7
max_new_leads_per_day: 2
plain_text: true
open_tracking: false
can_unsubscribe: true
unsubscribe_text: 'Unsubscribe here'
created_at: '2025-04-14T16:59:21.000000Z'
updated_at: '2025-05-18T12:53:32.000000Z'
tags:
-
id: 1
name: VIP
default: false
properties:
data:
type: object
properties:
id:
type: integer
example: 1
uuid:
type: string
example: 9h8ef374-e986-4221-b432-2902b4826r83
name:
type: string
example: 'John Doe Campaign'
type:
type: string
example: outbound
status:
type: string
example: Active
emails_sent:
type: integer
example: 7
opened:
type: integer
example: 2
unique_opens:
type: integer
example: 1
replied:
type: integer
example: 2
unique_replies:
type: integer
example: 1
bounced:
type: integer
example: 1
unsubscribed:
type: integer
example: 2
interested:
type: integer
example: 3
total_leads_contacted:
type: integer
example: 7
total_leads:
type: integer
example: 10
max_emails_per_day:
type: integer
example: 7
max_new_leads_per_day:
type: integer
example: 2
plain_text:
type: boolean
example: true
open_tracking:
type: boolean
example: false
can_unsubscribe:
type: boolean
example: true
unsubscribe_text:
type: string
example: 'Unsubscribe here'
created_at:
type: string
example: '2025-04-14T16:59:21.000000Z'
updated_at:
type: string
example: '2025-05-18T12:53:32.000000Z'
tags:
type: array
example:
-
id: 1
name: VIP
default: false
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: VIP
default:
type: boolean
example: false
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the new campaign.'
example: 'New Campaign'
nullable: false
type:
type: string
description: 'optional The type of campaign. Default is `outbound`'
example: outbound
nullable: false
enum:
- '`outbound`'
- '`reply_followup`'
required:
- name
'/api/campaigns/{campaign_id}/duplicate':
post:
summary: 'Duplicate campaign'
operationId: duplicateCampaign
description: 'This endpoint allows the authenticated user to duplicate a campaign.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 2,\n \"uuid\": \"8ek43kk4-e986-4423-b432-2902b4825f98\",\n \"name\": \"Copy of John Doe Campaign\",\n \"type\": \"outbound\",\n \"status\": \"Draft\",\n \"emails_sent\": 7,\n \"opened\": 2,\n \"unique_opens\": 1,\n \"replied\": 2,\n \"unique_replies\": 1,\n \"bounced\": 1,\n \"unsubscribed\": 2,\n \"interested\": 3,\n \"total_leads_contacted\": 7,\n \"total_leads\": 10,\n \"max_emails_per_day\": 7\n \"max_new_leads_per_day\": 2\n \"plain_text\": true\n \"open_tracking\": false\n \"sequence_prioritization\": new_leads,\n \"can_unsubscribe\": true\n \"unsubscribe_text\": \"Unsubscribe here\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"VIP\",\n \"default\": false\n }\n ]\n }\n }"
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 17
required: true
schema:
type: integer
'/api/campaigns/{campaign_id}/pause':
patch:
summary: 'Pause campaign'
operationId: pauseCampaign
description: 'This endpoint allows the authenticated user to pause a campaign.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 1,\n \"uuid\": \"9h8ef374-e986-4221-b432-2902b4826r83\",\n \"name\": \"John Doe Campaign\",\n \"type\": \"outbound\",\n \"status\": \"Paused\",\n \"emails_sent\": 7,\n \"opened\": 2,\n \"unique_opens\": 1,\n \"replied\": 2,\n \"unique_replies\": 1,\n \"bounced\": 1,\n \"unsubscribed\": 2,\n \"interested\": 3,\n \"total_leads_contacted\": 7,\n \"total_leads\": 10,\n \"max_emails_per_day\": 7,\n \"max_new_leads_per_day\": 2,\n \"plain_text\": true,\n \"open_tracking\": false,\n \"sequence_prioritization\": new_leads,\n \"can_unsubscribe\": true,\n \"unsubscribe_text\": \"Unsubscribe here\",\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"VIP\",\n \"default\": false\n }\n ]\n }\n }"
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 5
required: true
schema:
type: integer
'/api/campaigns/{campaign_id}/resume':
patch:
summary: 'Resume campaign'
operationId: resumeCampaign
description: 'This endpoint allows the authenticated user to resume a paused campaign.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 1,\n \"uuid\": \"9h8ef374-e986-4221-b432-2902b4826r83\",\n \"name\": \"John Doe Campaign\",\n \"type\": \"outbound\",\n \"status\": \"Queued\",\n \"emails_sent\": 7,\n \"opened\": 2,\n \"unique_opens\": 1,\n \"replied\": 2,\n \"unique_replies\": 1,\n \"bounced\": 1,\n \"unsubscribed\": 2,\n \"interested\": 3,\n \"total_leads_contacted\": 7,\n \"total_leads\": 10,\n \"max_emails_per_day\": 7,\n \"max_new_leads_per_day\": 2,\n \"plain_text\": true,\n \"open_tracking\": false,\n \"sequence_prioritization\": new_leads,\n \"can_unsubscribe\": true,\n \"unsubscribe_text\": \"Unsubscribe here\",\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"VIP\",\n \"default\": false\n }\n ]\n }\n }"
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 18
required: true
schema:
type: integer
'/api/campaigns/{campaign_id}/archive':
patch:
summary: 'Archive campaign'
operationId: archiveCampaign
description: 'This endpoint allows the authenticated user to archive a campaign.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 1,\n \"uuid\": \"9h8ef374-e986-4221-b432-2902b4826r83\",\n \"name\": \"John Doe Campaign\",\n \"type\": \"outbound\",\n \"status\": \"Archived\",\n \"emails_sent\": 7,\n \"opened\": 2,\n \"unique_opens\": 1,\n \"replied\": 2,\n \"unique_replies\": 1,\n \"bounced\": 1,\n \"unsubscribed\": 2,\n \"interested\": 3,\n \"total_leads_contacted\": 7,\n \"total_leads\": 10,\n \"max_emails_per_day\": 7,\n \"max_new_leads_per_day\": 2,\n \"plain_text\": true,\n \"open_tracking\": false,\n \"sequence_prioritization\": new_leads,\n \"can_unsubscribe\": true,\n \"unsubscribe_text\": \"Unsubscribe here\",\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"VIP\",\n \"default\": false\n }\n ]\n }\n }"
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 2
required: true
schema:
type: integer
'/api/campaigns/{id}/update':
patch:
summary: 'Update campaign settings'
operationId: updateCampaignSettings
description: 'This endpoint allows the authenticated user to update the settings of a campaign.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 1,\n \"uuid\": \"9h8ef374-e986-4221-b432-2902b4826r83\",\n \"name\": \"John Doe Campaign\",\n \"type\": \"outbound\",\n \"status\": \"Active\",\n \"emails_sent\": 7,\n \"opened\": 2,\n \"unique_opens\": 1,\n \"replied\": 2,\n \"unique_replies\": 1,\n \"bounced\": 1,\n \"unsubscribed\": 2,\n \"interested\": 3,\n \"total_leads_contacted\": 7,\n \"total_leads\": 10,\n \"max_emails_per_day\": 7,\n \"max_new_leads_per_day\": 2,\n \"plain_text\": true,\n \"open_tracking\": false,\n \"sequence_prioritization\": new_leads,\n \"can_unsubscribe\": true,\n \"unsubscribe_text\": \"Unsubscribe here\",\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"VIP\",\n \"default\": false\n }\n ]\n }\n }"
tags:
- Campaigns
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the campaign.'
example: 'New Campaign Name'
nullable: true
max_emails_per_day:
type: integer
description: 'The maximum number of emails that can be sent per day.'
example: 500
nullable: true
max_new_leads_per_day:
type: integer
description: 'The maximum number of new leads that can be added per day.'
example: 100
nullable: true
plain_text:
type: boolean
description: 'Whether the email content should be plain text. If nothing sent, false is assumed.'
example: true
nullable: true
open_tracking:
type: boolean
description: 'Whether open tracking should be enabled for the campaign. If nothing sent, false is assumed.'
example: true
nullable: true
reputation_building:
type: boolean
description: 'Spam protection. If nothing sent, false is assumed.'
example: true
nullable: true
can_unsubscribe:
type: boolean
description: 'Whether recipients can unsubscribe from the campaign using a one-click link. If nothing sent, false is assumed.'
example: true
nullable: true
include_auto_replies_in_stats:
type: boolean
description: 'If auto replies should be included in the campaign stats. This setting is not retroactive.'
example: false
nullable: true
sequence_prioritization:
type: string
description: 'How the campaign sequence should be prioritized. By default, followups are prioritized.'
example: new_leads
nullable: false
enum:
- followups
- new_leads
parameters:
-
in: path
name: id
description: 'The ID of the campaign.'
example: 7
required: true
schema:
type: integer
'/api/campaigns/{campaign_id}/schedule':
post:
summary: 'Create campaign schedule'
operationId: createCampaignSchedule
description: 'This endpoint allows the authenticated user to create the schedule of the campaign.'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
id: 1
type: Generated
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-14T16:59:21.000000Z'
updated_at: '2025-04-14T16:59:21.000000Z'
properties:
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: Generated
monday:
type: boolean
example: true
tuesday:
type: boolean
example: true
wednesday:
type: boolean
example: true
thursday:
type: boolean
example: true
friday:
type: boolean
example: true
saturday:
type: boolean
example: false
sunday:
type: boolean
example: false
start_time:
type: string
example: '08:00'
end_time:
type: string
example: '17:00'
timezone:
type: string
example: America/New_York
created_at:
type: string
example: '2025-04-14T16:59:21.000000Z'
updated_at:
type: string
example: '2025-04-14T16:59:21.000000Z'
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
monday:
type: boolean
description: 'Whether the schedule includes Monday.'
example: true
nullable: false
tuesday:
type: boolean
description: 'Whether the schedule includes Tuesday.'
example: true
nullable: false
wednesday:
type: boolean
description: 'Whether the schedule includes Wednesday.'
example: true
nullable: false
thursday:
type: boolean
description: 'Whether the schedule includes Thursday.'
example: true
nullable: false
friday:
type: boolean
description: 'Whether the schedule includes Friday.'
example: true
nullable: false
saturday:
type: boolean
description: 'Whether the schedule includes Saturday.'
example: false
nullable: false
sunday:
type: boolean
description: 'Whether the schedule includes Sunday.'
example: false
nullable: false
start_time:
type: string
description: 'The start time in HH:MM format.'
example: '09:00'
nullable: false
end_time:
type: string
description: 'The end time in HH:MM format.'
example: '17:00'
nullable: false
timezone:
type: string
description: 'The timezone of the schedule.'
example: America/New_York
nullable: false
save_as_template:
type: boolean
description: 'Wheter the created schedule should be saved as template.'
example: false
nullable: false
required:
- monday
- tuesday
- wednesday
- thursday
- friday
- saturday
- sunday
- start_time
- end_time
- timezone
get:
summary: 'View campaign schedule'
operationId: viewCampaignSchedule
description: 'This endpoint allows the authenticated user to view the schedule of the campaign.'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
id: 1
type: Generated
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-14T16:59:21.000000Z'
updated_at: '2025-05-18T12:53:32.000000Z'
properties:
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: Generated
monday:
type: boolean
example: true
tuesday:
type: boolean
example: true
wednesday:
type: boolean
example: true
thursday:
type: boolean
example: true
friday:
type: boolean
example: true
saturday:
type: boolean
example: false
sunday:
type: boolean
example: false
start_time:
type: string
example: '08:00'
end_time:
type: string
example: '17:00'
timezone:
type: string
example: America/New_York
created_at:
type: string
example: '2025-04-14T16:59:21.000000Z'
updated_at:
type: string
example: '2025-05-18T12:53:32.000000Z'
tags:
- Campaigns
put:
summary: 'Update campaign schedule'
operationId: updateCampaignSchedule
description: 'This endpoint allows the authenticated user to update the schedule of the campaign.'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
id: 1
type: Generated
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-14T16:59:21.000000Z'
updated_at: '2025-05-18T12:53:32.000000Z'
properties:
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: Generated
monday:
type: boolean
example: true
tuesday:
type: boolean
example: true
wednesday:
type: boolean
example: true
thursday:
type: boolean
example: true
friday:
type: boolean
example: true
saturday:
type: boolean
example: false
sunday:
type: boolean
example: false
start_time:
type: string
example: '08:00'
end_time:
type: string
example: '17:00'
timezone:
type: string
example: America/New_York
created_at:
type: string
example: '2025-04-14T16:59:21.000000Z'
updated_at:
type: string
example: '2025-05-18T12:53:32.000000Z'
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
monday:
type: boolean
description: 'Whether the schedule includes Monday.'
example: true
nullable: false
tuesday:
type: boolean
description: 'Whether the schedule includes Tuesday.'
example: true
nullable: false
wednesday:
type: boolean
description: 'Whether the schedule includes Wednesday.'
example: true
nullable: false
thursday:
type: boolean
description: 'Whether the schedule includes Thursday.'
example: true
nullable: false
friday:
type: boolean
description: 'Whether the schedule includes Friday.'
example: true
nullable: false
saturday:
type: boolean
description: 'Whether the schedule includes Saturday.'
example: false
nullable: false
sunday:
type: boolean
description: 'Whether the schedule includes Sunday.'
example: false
nullable: false
start_time:
type: string
description: 'The start time in HH:MM format.'
example: '09:00'
nullable: false
end_time:
type: string
description: 'The end time in HH:MM format.'
example: '17:00'
nullable: false
timezone:
type: string
description: 'The timezone of the schedule.'
example: America/New_York
nullable: false
save_as_template:
type: boolean
description: ''
example: true
nullable: false
required:
- monday
- tuesday
- wednesday
- thursday
- friday
- saturday
- sunday
- start_time
- end_time
- timezone
- save_as_template
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 8
required: true
schema:
type: integer
/api/campaigns/schedule/templates:
get:
summary: 'View all schedule templates'
operationId: viewAllScheduleTemplates
description: 'This endpoint allows the authenticated user to view their scheduled templates.'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
-
id: 1
type: 'Schedule template'
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-14T16:59:21.000000Z'
updated_at: '2025-05-18T12:53:32.000000Z'
-
id: 2
type: 'Schedule template'
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-15T16:59:21.000000Z'
updated_at: '2025-05-19T12:53:32.000000Z'
properties:
data:
type: array
example:
-
id: 1
type: 'Schedule template'
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-14T16:59:21.000000Z'
updated_at: '2025-05-18T12:53:32.000000Z'
-
id: 2
type: 'Schedule template'
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-15T16:59:21.000000Z'
updated_at: '2025-05-19T12:53:32.000000Z'
items:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: 'Schedule template'
monday:
type: boolean
example: true
tuesday:
type: boolean
example: true
wednesday:
type: boolean
example: true
thursday:
type: boolean
example: true
friday:
type: boolean
example: true
saturday:
type: boolean
example: false
sunday:
type: boolean
example: false
start_time:
type: string
example: '08:00'
end_time:
type: string
example: '17:00'
timezone:
type: string
example: America/New_York
created_at:
type: string
example: '2025-04-14T16:59:21.000000Z'
updated_at:
type: string
example: '2025-05-18T12:53:32.000000Z'
tags:
- Campaigns
/api/campaigns/schedule/available-timezones:
get:
summary: 'View all available schedule timezones'
operationId: viewAllAvailableScheduleTimezones
description: "This endpoint allows the authenticated user to view all available timezones.\nYou must use an ID from this list whenever you're working on Campaign Schedules"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
name: '(GMT-12:00) International Date Line West'
id: Pacific/Kwajalein
-
name: '(GMT-11:00) Midway Island'
id: Pacific/Midway
-
name: '(GMT-11:00) Samoa'
id: Pacific/Apia
properties:
data:
type: array
example:
-
name: '(GMT-12:00) International Date Line West'
id: Pacific/Kwajalein
-
name: '(GMT-11:00) Midway Island'
id: Pacific/Midway
-
name: '(GMT-11:00) Samoa'
id: Pacific/Apia
items:
type: object
properties:
name:
type: string
example: '(GMT-12:00) International Date Line West'
id:
type: string
example: Pacific/Kwajalein
tags:
- Campaigns
/api/campaigns/sending-schedules:
get:
summary: 'Show sending schedules for campaigns'
operationId: showSendingSchedulesForCampaigns
description: 'This endpoint allows the authenticated user to view the sending schedules for campaigns'
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"data\": [\n {\n \"emails_being_sent\": 763,\n \"campaign_id\": 60,\n \"campaign\": {\n \"id\": 60,\n \"uuid\": \"9eb10d82-aef8-490a-9293-5ec3c9435d8e\",\n \"name\": \"Red's campaign\",\n \"type\": \"outbound\",\n \"status\": 2,\n \"plain_text\": false,\n \"open_tracking\": true,\n \"sequence_prioritization\": new_leads,\n \"reputation_building\": 0,\n \"emails_sent\": 0,\n \"opened\": 0,\n \"replied\": 0,\n \"bounced\": 0,\n \"unique_replies\": 0,\n \"unique_opens\": 0,\n \"total_leads_contacted\": 0,\n \"unsubscribed\": 0,\n \"interested\": 0,\n \"max_emails_per_day\": 1000,\n \"max_new_leads_per_day\": 1000,\n \"can_unsubscribe\": false,\n \"unsubscribe_text\": null,\n \"deleted_at\": null,\n \"created_at\": \"2025-04-16T19:45:30.000000Z\",\n \"updated_at\": \"2025-04-16T19:46:27.000000Z\",\n \"leads_status\": 0,\n \"total_leads\": 1\n }\n },\n {\n \"emails_being_sent\": 201,\n \"campaign_id\": 62,\n \"campaign\": {\n \"id\": 62,\n \"uuid\": \"9eb10d82-aef8-490a-9293-5ec3c9435d8e\",\n \"name\": \"Blue's campaign\",\n \"type\": \"outbound\",\n \"status\": 2,\n \"plain_text\": false,\n \"open_tracking\": true,\n \"sequence_prioritization\": new_leads,\n \"reputation_building\": 0,\n \"emails_sent\": 0,\n \"opened\": 0,\n \"replied\": 0,\n \"bounced\": 0,\n \"unique_replies\": 0,\n \"unique_opens\": 0,\n \"total_leads_contacted\": 0,\n \"unsubscribed\": 0,\n \"interested\": 0,\n \"max_emails_per_day\": 1000,\n \"max_new_leads_per_day\": 1000,\n \"can_unsubscribe\": false,\n \"unsubscribe_text\": null,\n \"deleted_at\": null,\n \"created_at\": \"2025-04-16T19:45:30.000000Z\",\n \"updated_at\": \"2025-04-16T19:46:27.000000Z\",\n \"leads_status\": 0,\n \"total_leads\": 1\n }\n },\n ],\n \"links\": {\n \"first\": \"http://bison.test/api/campaigns/sending-schedules?page=1\",\n \"last\": \"http://bison.test/api/campaigns/sending-schedules?page=1\",\n \"prev\": null,\n \"next\": null\n },\n \"meta\": {\n \"current_page\": 1,\n \"from\": 1,\n \"last_page\": 1,\n \"links\": [\n {\n \"url\": null,\n \"label\": \"« Previous\",\n \"active\": false\n },\n {\n \"url\": \"http://bison.test/api/campaigns/sending-schedules?page=1\",\n \"label\": \"1\",\n \"active\": true\n },\n {\n \"url\": null,\n \"label\": \"Next »\",\n \"active\": false\n }\n ],\n \"path\": \"http://bison.test/api/campaigns/sending-schedules\",\n \"per_page\": 15,\n \"to\": 3,\n \"total\": 3\n }\n}"
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
day:
type: string
description: 'The day of the schedule.'
example: tomorrow
nullable: false
enum:
- today
- tomorrow
- day_after_tomorrow
required:
- day
'/api/campaigns/{campaign_id}/sending-schedule':
get:
summary: 'Show sending schedule for campaign'
operationId: showSendingScheduleForCampaign
description: 'This endpoint allows the authenticated user to view the sending schedule of a single campaign'
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"data\":\n {\n \"emails_being_sent\": 763,\n \"campaign_id\": 60,\n \"campaign\": {\n \"id\": 60,\n \"uuid\": \"9eb10d82-aef8-490a-9293-5ec3c9435d8e\",\n \"name\": \"Red's campaign\",\n \"type\": \"outbound\",\n \"status\": 2,\n \"plain_text\": false,\n \"open_tracking\": true,\n \"sequence_prioritization\": new_leads,\n \"reputation_building\": 0,\n \"emails_sent\": 0,\n \"opened\": 0,\n \"replied\": 0,\n \"bounced\": 0,\n \"unique_replies\": 0,\n \"unique_opens\": 0,\n \"total_leads_contacted\": 0,\n \"unsubscribed\": 0,\n \"interested\": 0,\n \"max_emails_per_day\": 1000,\n \"max_new_leads_per_day\": 1000,\n \"can_unsubscribe\": false,\n \"unsubscribe_text\": null,\n \"deleted_at\": null,\n \"created_at\": \"2025-04-16T19:45:30.000000Z\",\n \"updated_at\": \"2025-04-16T19:46:27.000000Z\",\n \"leads_status\": 0,\n \"total_leads\": 1\n }\n }\n}"
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
day:
type: string
description: 'The day of the schedule.'
example: tomorrow
nullable: false
enum:
- today
- tomorrow
- day_after_tomorrow
required:
- day
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 1
required: true
schema:
type: integer
'/api/campaigns/{campaign_id}/create-schedule-from-template':
post:
summary: 'Create campaign schedule from template'
operationId: createCampaignScheduleFromTemplate
description: 'This endpoint allows the authenticated user to create the schedule of the campaign.'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
id: 1
type: Generated
monday: true
tuesday: true
wednesday: true
thursday: true
friday: true
saturday: false
sunday: false
start_time: '08:00'
end_time: '17:00'
timezone: America/New_York
created_at: '2025-04-14T16:59:21.000000Z'
updated_at: '2025-05-18T12:53:32.000000Z'
properties:
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: Generated
monday:
type: boolean
example: true
tuesday:
type: boolean
example: true
wednesday:
type: boolean
example: true
thursday:
type: boolean
example: true
friday:
type: boolean
example: true
saturday:
type: boolean
example: false
sunday:
type: boolean
example: false
start_time:
type: string
example: '08:00'
end_time:
type: string
example: '17:00'
timezone:
type: string
example: America/New_York
created_at:
type: string
example: '2025-04-14T16:59:21.000000Z'
updated_at:
type: string
example: '2025-05-18T12:53:32.000000Z'
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
schedule_id:
type: integer
description: 'The ID of the schedule template.'
example: 1
nullable: false
required:
- schedule_id
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 1
required: true
schema:
type: integer
'/api/campaigns/{campaign_id}/sequence-steps':
get:
summary: 'View campaign sequence steps (deprecated)'
operationId: viewCampaignSequenceStepsdeprecated
description: 'This endpoint allows the authenticated user to view the sequence steps of the campaign.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": [\n {\n \"id\": 4,\n \"active\": true,\n \"email_subject\": \"Step 1\",\n \"order\": \"1\",\n \"email_body\": \"Step 1 body\",\n \"wait_in_days\": \"1\",\n \"variant\": false,\n \"variant_from_step\": null,\n \"attachments\": [],\n \"thread_reply\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n {\n \"id\": 5,\n \"active\": true,\n \"email_subject\": \"Step 2\",\n \"order\": \"1\",\n \"email_body\": \"Step 2 body\",\n \"wait_in_days\": \"2\",\n \"variant\": true,\n \"variant_from_step\": null,\n \"attachments\": [],\n \"thread_reply\": true,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ]"
tags:
- Campaigns
post:
summary: 'Create sequence steps (deprecated)'
operationId: createSequenceStepsdeprecated
description: 'This endpoint allows the authenticated user to create the campaign sequence steps from scratch.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 1,\n \"type\": \"Campaign sequence\",\n \"title\": \"John Doe sequence\",\n \"sequence_steps\": [\n {\n \"id\": 1,\n \"active\": true,\n \"email_subject\": \"Hello there! {FIRST_NAME}\",\n \"order\": 1,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": false,\n \"variant_from_step\": null,\n \"attachments\": null,\n \"thread_reply\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n {\n \"id\": 2,\n \"active\": true,\n \"email_subject\": \"Re: Hello there!\",\n \"order\": 2,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": true,\n \"variant_from_step\": 1,\n \"attachments\": null,\n \"thread_reply\": true,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ],\n }\n}"
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'The title for the sequence.'
example: 'John Doe sequence'
nullable: false
sequence_steps:
type: array
description: 'The array containing the sequence steps'
example:
-
email_subject: 'Hello there!'
email_subject_variables:
- '{FIRST_NAME}'
order: 1
email_body: 'Try it now!'
wait_in_days: 1
variant: false
thread_reply: false
-
email_subject: 'Reaching you again'
order: 2
email_body: 'Try it now!'
wait_in_days: 1
variant: true
variant_from_step: 1
thread_reply: true
items:
type: object
properties:
email_subject:
type: string
description: 'The subject for the email.'
example: 'Hello there!'
nullable: false
email_subject_variables:
type: array
description: 'The subject variables.'
example: null
items:
type: string
nullable: true
order:
type: integer
description: 'The order of the step.'
example: 1
nullable: true
email_body:
type: string
description: 'The body of the email.'
example: 'Try it now!'
nullable: false
wait_in_days:
type: integer
description: 'The days to wait.'
example: 1
nullable: false
variant:
type: boolean
description: 'Wheter the step is variant of another step.'
example: true
nullable: true
variant_from_step:
type: integer
description: 'The order number of a step in the current request to be a variant of. Cannot be used with variant_from_step_id.'
example: 1
nullable: true
variant_from_step_id:
type: integer
description: 'The ID of an already saved step to be a variant of. Cannot be used with variant_from_step.'
example: 42
nullable: true
attachments:
type: string
format: binary
description: 'The email attachments.'
nullable: true
thread_reply:
type: boolean
description: 'Wheter the step should be a reply from the previous step.'
example: false
nullable: true
required:
- email_subject
- email_body
- wait_in_days
required:
- title
- sequence_steps
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 11
required: true
schema:
type: integer
'/api/campaigns/sequence-steps/{sequence_id}':
put:
summary: 'Update sequence steps (deprecated)'
operationId: updateSequenceStepsdeprecated
description: 'This endpoint allows the authenticated user to update the campaign sequence steps.'
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 1,\n \"type\": \"Campaign sequence\",\n \"title\": \"John Doe sequence\",\n \"sequence_steps\": [\n {\n \"id\": 1,\n \"active\": true,\n \"email_subject\": \"Hello there! {FIRST_NAME}\",\n \"order\": 1,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": false,\n \"variant_from_step\": null,\n \"attachments\": null,\n \"thread_reply\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n {\n \"id\": 2,\n \"active\": true,\n \"email_subject\": \"Re: Hello there!\",\n \"order\": 2,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": true,\n \"variant_from_step\": 1,\n \"attachments\": null,\n \"thread_reply\": true,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ],\n }\n}"
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'The title for the sequence.'
example: 'John Doe sequence'
nullable: false
sequence_steps:
type: array
description: 'The array containing the sequence steps'
example:
-
id: 1
email_subject: 'Hello there!'
email_subject_variables:
- '{FIRST_NAME}'
order: 1
email_body: 'Try it now!'
wait_in_days: 1
variant: false
thread_reply: false
-
id: 2
email_subject: 'Hello again!'
order: 2
email_body: 'Try it now!'
wait_in_days: 1
variant: true
variant_from_step: 1
thread_reply: true
items:
type: object
properties:
id:
type: integer
description: 'The ID of the sequence step.'
example: 1
nullable: false
email_subject:
type: string
description: 'The subject for the email.'
example: 'Hello there!'
nullable: false
email_subject_variables:
type: array
description: 'The subject variables.'
example: null
items:
type: string
nullable: true
order:
type: integer
description: 'The order of the step.'
example: 1
nullable: false
email_body:
type: string
description: 'The body of the email.'
example: 'Try it now!'
nullable: false
wait_in_days:
type: integer
description: 'The days to wait.'
example: 1
nullable: false
variant:
type: boolean
description: 'Wheter the step is variant of another step.'
example: true
nullable: true
variant_from_step_id:
type: integer
description: 'The id of an existing record in the sequence_steps table.'
example: 2
nullable: false
attachments:
type: string
format: binary
description: 'The email attachments.'
nullable: true
thread_reply:
type: boolean
description: 'Wheter the step should be a reply from the previous step.'
example: false
nullable: true
variant_from_step:
type: integer
description: 'Which step to be variant from (related by the id field).'
example: 1
nullable: false
required:
- id
- email_subject
- order
- email_body
- wait_in_days
- variant_from_step_id
required:
- title
- sequence_steps
parameters:
-
in: path
name: sequence_id
description: 'The ID of the sequence. You can get this on the Campaign object.'
example: 11
required: true
schema:
type: integer
'/api/campaigns/sequence-steps/{sequence_step_id}/activate-or-deactivate':
patch:
summary: 'Activate or deactivate a sequence step variant'
operationId: activateOrDeactivateASequenceStepVariant
description: "This endpoint allows the authenticated user to activate or deactivate a sequence step variant.\n\nYou can get a list of sequence step IDs by making a request to `/campaigns/v1.1/{campaign_id}/sequence-steps`."
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
success: true
message: 'Sequence step variant successfully activated.'
properties:
data:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Sequence step variant successfully activated.'
tags:
- Campaigns
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
active:
type: boolean
description: 'Whether the variant should be active.'
example: true
nullable: false
parameters:
-
in: path
name: sequence_step_id
description: 'The ID of the sequence step.'
example: 16
required: true
schema:
type: integer
'/api/campaigns/sequence-steps/{sequence_step_id}':
delete:
summary: 'Delete sequence step'
operationId: deleteSequenceStep
description: 'This endpoint allows the authenticated user to delete a specific sequence step from a sequence'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
success: true
message: 'Sequence step successfully deleted'
properties:
data:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Sequence step successfully deleted'
tags:
- Campaigns
parameters:
-
in: path
name: sequence_step_id
description: "The ID of the sequence step. You can get a list of all campaign\nsequence steps by calling the `/campaigns/id of an existing record in the leads table.'
example: 20
required: false
schema:
type: integer
description: 'The id of an existing record in the leads table.'
example: 20
nullable: false
-
in: query
name: tag_ids
description: 'Array of tag IDs to filter by.'
example:
- 1
- 2
- 3
required: false
schema:
type: array
description: 'Array of tag IDs to filter by.'
example:
- 1
- 2
- 3
items:
type: integer
-
in: query
name: campaign_id
description: 'The ID of the campaign.'
example: 12
required: false
schema:
type: integer
description: 'The ID of the campaign.'
example: 12
nullable: false
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": [\n {\n \"id\": 45,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Inbox\",\n \"subject\": \"yo test boy wassup G\",\n \"read\": true,\n \"interested\": false,\n \"automated_reply\": false,\n \"html_body\": \"John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true - id: 1 thread_reply: true email_subject: 'Second Subject' email_body: 'dummy email body' status: sent scheduled_date: '2024-11-22T20:00:00.000000Z' scheduled_date_local: '2024-11-22T20:00:00.000000Z' sent_at: '2024-11-22T20:00:00.000000Z' opens: 2 clicks: 1 replies: 1 interested: true unique_replies: 0 unique_opens: 0 lead: id: 1 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' sender_email: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true links: first: 'http://bison.test/api/campaigns/1/scheduled-emails?page=1' last: 'http://bison.test/api/campaigns/1/scheduled-emails?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/campaigns/1/scheduled-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/campaigns/1/scheduled-emails' per_page: 15 to: 3 total: 3 properties: data: type: array example: - id: 1 thread_reply: true email_subject: 'First Subject' email_body: 'dummy email body' status: scheduled scheduled_date: '2024-11-25T15:30:00.000000Z' scheduled_date_local: '2024-11-25T15:30:00.000000Z' sent_at: null opens: 0 clicks: 0 replies: 0 interested: false unique_replies: 0 unique_opens: 0 lead: id: 1 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' sender_email: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true - id: 1 thread_reply: true email_subject: 'Second Subject' email_body: 'dummy email body' status: sent scheduled_date: '2024-11-22T20:00:00.000000Z' scheduled_date_local: '2024-11-22T20:00:00.000000Z' sent_at: '2024-11-22T20:00:00.000000Z' opens: 2 clicks: 1 replies: 1 interested: true unique_replies: 0 unique_opens: 0 lead: id: 1 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' sender_email: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 thread_reply: type: boolean example: true email_subject: type: string example: 'First Subject' email_body: type: string example: 'dummy email body' status: type: string example: scheduled scheduled_date: type: string example: '2024-11-25T15:30:00.000000Z' scheduled_date_local: type: string example: '2024-11-25T15:30:00.000000Z' sent_at: type: string example: null opens: type: integer example: 0 clicks: type: integer example: 0 replies: type: integer example: 0 interested: type: boolean example: false unique_replies: type: integer example: 0 unique_opens: type: integer example: 0 lead: type: object properties: id: type: integer example: 1 first_name: type: string example: John last_name: type: string example: Doe email: type: string example: john@doe.com title: type: string example: Engineer company: type: string example: 'John Doe company' notes: type: string example: 'Important client' status: type: string example: verified custom_variables: type: array example: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' items: type: object properties: name: type: string example: company_website value: type: string example: 'https://company.com' lead_campaign_data: type: array example: [] overall_stats: type: object properties: emails_sent: type: integer example: 3 opens: type: integer example: 0 replies: type: integer example: 1 unique_replies: type: integer example: 1 unique_opens: type: integer example: 0 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' sender_email: type: object properties: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com email_signature: type: string example: 'John Doe | Consultant
' imap_server: type: string example: imap.server imap_port: type: integer example: 110 smtp_server: type: string example: smtp.server smtp_port: type: integer example: 112 daily_limit: type: integer example: 5 type: type: string example: Inbox status: type: string example: Connected emails_sent_count: type: integer example: 100 total_replied_count: type: integer example: 10 total_opened_count: type: integer example: 25 unsubscribed_count: type: integer example: 0 bounced_count: type: integer example: 0 unique_replied_count: type: integer example: 7 unique_opened_count: type: integer example: 7 total_leads_contacted_count: type: integer example: 50 interested_leads_count: type: integer example: 3 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: type: array example: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 name: type: string example: Google default: type: boolean example: true links: type: object properties: first: type: string example: 'http://bison.test/api/campaigns/1/scheduled-emails?page=1' last: type: string example: 'http://bison.test/api/campaigns/1/scheduled-emails?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/campaigns/1/scheduled-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/campaigns/1/scheduled-emails' per_page: type: integer example: 15 to: type: integer example: 3 total: type: integer example: 3 tags: - Campaigns requestBody: required: false content: application/json: schema: type: object properties: status: type: string description: '' example: scheduled nullable: true enum: - scheduled - sent - failed - paused - stopped - bounced - unsubscribed scheduled_date: type: string description: 'Must be a valid date.' example: '2026-07-01T03:31:38' nullable: true scheduled_date_local: type: string description: 'Must be a valid date.' example: '2026-07-01T03:31:38' nullable: true parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 10 required: true schema: type: integer '/api/campaigns/{campaign_id}/sender-emails': get: summary: 'Get all campaign sender emails' operationId: getAllCampaignSenderEmails description: 'This endpoint retrieves all email accounts (sender emails) associated with a campaign' parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"John Doe\",\n \"email\": \"john@doe.com\",\n \"imap_server\": \"imap.server\",\n \"imap_port\": 110,\n \"smtp_server\": \"smtp.server\",\n \"smtp_port\": 112,\n \"daily_limit\": 5,\n \"type\": \"Inbox\",\n \"status\": \"Connected\",\n \"emails_sent_count\": 100,\n \"total_replied_count\": 10,\n \"total_opened_count\": 25,\n \"unsubscribed_count\": 0,\n \"bounced_count\": 0,\n \"unique_replied_count\": 7,\n \"unique_opened_count\": 7,\n \"total_leads_contacted_count\": 50,\n \"interested_leads_count\": 3,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"Google\",\n \"default\": true\n }\n ]\n },\n {\n \"id\": 2,\n \"name\": \"Jane Doe\",\n \"email\": \"jane@doe.com,\n \"imap_server\": \"imap.server\",\n \"imap_port\": 110,\n \"smtp_server\": \"smtp.server\",\n \"smtp_port\": 112,\n \"daily_limit\": 5,\n \"type\": \"Inbox\",\n \"status\": \"Connected\",\n \"emails_sent_count\": 100,\n \"total_replied_count\": 10,\n \"total_opened_count\": 25,\n \"unsubscribed_count\": 0,\n \"bounced_count\": 0,\n \"unique_replied_count\": 7,\n \"unique_opened_count\": 7,\n \"total_leads_contacted_count\": 50,\n \"interested_leads_count\": 3,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"Google\",\n \"default\": true\n }\n ]\n }\n ],\n \"links\": {\n \"first\": \"http://bison.test/api/campaigns/1/sender-emails?page=1\",\n \"last\": \"http://bison.test/api/campaigns/1/sender-emails?page=1\",\n \"prev\": null,\n \"next\": null\n },\n \"meta\": {\n \"current_page\": 1,\n \"from\": 1,\n \"last_page\": 1,\n \"links\": [\n {\n \"url\": null,\n \"label\": \"« Previous\",\n \"active\": false\n },\n {\n \"url\": \"http://bison.test/api/campaigns/1/sender-emails?page=1\",\n \"label\": \"1\",\n \"active\": true\n },\n {\n \"url\": null,\n \"label\": \"Next »\",\n \"active\": false\n }\n ],\n \"path\": \"http://bison.test/api/campaigns/1/sender-emails\",\n \"per_page\": 15,\n \"to\": 3,\n \"total\": 3\n }\n}" tags: - Campaigns parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 7 required: true schema: type: integer '/api/campaigns/{campaign_id}/stats': post: summary: 'Get campaign stats (summary)' operationId: getCampaignStatssummary description: 'This endpoint retrieves the statistics of all your campaigns.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: emails_sent: '10' total_leads_contacted: '5' opened: '5' opened_percentage: '50' unique_opens_per_contact: '5' unique_opens_per_contact_percentage: '50' unique_replies_per_contact: '5' unique_replies_per_contact_percentage: '50' bounced: '0' bounced_percentage: '0' unsubscribed: '5' unsubscribed_percentage: '50' interested: '5' interested_percentage: '50' sequence_step_stats: - sequence_step_id: 760 email_subject: 'vision check' sent: 1918 leads_contacted: 1918 unique_opens: 0 unique_replies: 15 unsubscribed: 4 bounced: 21 interested: 6 - sequence_step_id: 761 email_subject: 'Re: vision check' sent: 1884 leads_contacted: 1884 unique_opens: 0 unique_replies: 9 unsubscribed: 6 bounced: 5 interested: 1 properties: data: type: object properties: emails_sent: type: string example: '10' total_leads_contacted: type: string example: '5' opened: type: string example: '5' opened_percentage: type: string example: '50' unique_opens_per_contact: type: string example: '5' unique_opens_per_contact_percentage: type: string example: '50' unique_replies_per_contact: type: string example: '5' unique_replies_per_contact_percentage: type: string example: '50' bounced: type: string example: '0' bounced_percentage: type: string example: '0' unsubscribed: type: string example: '5' unsubscribed_percentage: type: string example: '50' interested: type: string example: '5' interested_percentage: type: string example: '50' sequence_step_stats: type: array example: - sequence_step_id: 760 email_subject: 'vision check' sent: 1918 leads_contacted: 1918 unique_opens: 0 unique_replies: 15 unsubscribed: 4 bounced: 21 interested: 6 - sequence_step_id: 761 email_subject: 'Re: vision check' sent: 1884 leads_contacted: 1884 unique_opens: 0 unique_replies: 9 unsubscribed: 6 bounced: 5 interested: 1 items: type: object properties: sequence_step_id: type: integer example: 760 email_subject: type: string example: 'vision check' sent: type: integer example: 1918 leads_contacted: type: integer example: 1918 unique_opens: type: integer example: 0 unique_replies: type: integer example: 15 unsubscribed: type: integer example: 4 bounced: type: integer example: 21 interested: type: integer example: 6 tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: start_date: type: string description: 'The start date to fetch stats.' example: '2024-07-01' nullable: false end_date: type: string description: 'The end date to fetch stats.' example: '2024-07-19' nullable: false required: - start_date - end_date parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 1 required: true schema: type: integer '/api/campaigns/{campaign_id}/attach-sender-emails': post: summary: 'Import sender emails by ID' operationId: importSenderEmailsByID description: 'This endpoint allows the authenticated user to attach sender emails to a campaign.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: success: true message: 'Sender emails successfully added to Campaign One.' properties: success: type: boolean example: true message: type: string example: 'Sender emails successfully added to Campaign One.' tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: sender_email_ids: type: array description: 'An array of sender emails IDs to attach.' example: - 1 - 2 - 3 items: type: string required: - sender_email_ids parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 7 required: true schema: type: integer '/api/campaigns/{campaign_id}/remove-sender-emails': delete: summary: 'Remove sender emails by ID' operationId: removeSenderEmailsByID description: 'This endpoint allows the authenticated user to remove sender emails from a draft or paused campaign.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: success: true message: 'Sender emails sent for deletion. This may take a moment.' properties: success: type: boolean example: true message: type: string example: 'Sender emails sent for deletion. This may take a moment.' tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: sender_email_ids: type: array description: 'An array of sender emails IDs to attach.' example: - 1 - 2 - 3 items: type: string required: - sender_email_ids parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 3 required: true schema: type: integer '/api/campaigns/{campaign_id}/leads/move-to-another-campaign': post: summary: 'Move leads to another campaign' operationId: moveLeadsToAnotherCampaign description: "This endpoint moves selected leads from a campaign to a selected target campaign.\nThis process may take a few minutes if the campaigns are active." parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"success\": true,\n \"message\": \"Moving 5 leads from 'Campaign 1' to 'Campaign 2'. This process may take a few minutes if moving between active campaigns.\"\n }" tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: target_campaign_id: type: integer description: 'The ID of the campaign that leads will be moved to.' example: 17 nullable: false lead_ids: type: array description: 'The array of lead IDs.' example: - 10 items: type: integer include_bounced_and_unsubscribed: type: boolean description: 'Whether to include bounced and unsubscribed leads.' example: false nullable: false required: - target_campaign_id - lead_ids parameters: - in: path name: campaign_id description: 'The ID of the original campaign.' example: 1 required: true schema: type: integer '/api/campaigns/{campaign_id}/line-area-chart-stats': get: summary: 'Get full normalized stats by date' operationId: getFullNormalizedStatsByDate description: "This endpoint retrieves stats by date for a given period, for this campaign\n\nThe user must provide a valid authentication token in the request header to access this endpoint.\n\nEvents returned: `Replied`, `Total Opens`, `Unique Opens`, `Sent`, `Bounced`, `Unsubscribed`, `Interested`" parameters: - in: query name: start_date description: 'The start date to fetch stats.' example: '2024-07-01' required: true schema: type: string description: 'The start date to fetch stats.' example: '2024-07-01' nullable: false - in: query name: end_date description: 'The end date to fetch stats.' example: '2024-07-19' required: true schema: type: string description: 'The end date to fetch stats.' example: '2024-07-19' nullable: false responses: 200: description: success content: application/json: schema: type: object example: data: - label: Replied color: '#f54842' dates: - - '2025-05-03' - 0 - label: 'Total Opens' color: '#00E396' dates: - - '2025-05-03' - 0 - label: Sent color: '#3B82F6' dates: - - '2025-05-03' - 0 - label: Unsubscribed color: '#fffff2' dates: - - '2025-05-03' - 0 - label: Bounced color: '#fffff1' dates: - - '2025-05-03' - 0 - label: Interested color: '#fffff3' dates: - - '2025-05-03' - 0 - label: 'Unique Opens' color: '#00d0ff' dates: - - '2025-05-03' - 0 properties: data: type: array example: - label: Replied color: '#f54842' dates: - - '2025-05-03' - 0 - label: 'Total Opens' color: '#00E396' dates: - - '2025-05-03' - 0 - label: Sent color: '#3B82F6' dates: - - '2025-05-03' - 0 - label: Unsubscribed color: '#fffff2' dates: - - '2025-05-03' - 0 - label: Bounced color: '#fffff1' dates: - - '2025-05-03' - 0 - label: Interested color: '#fffff3' dates: - - '2025-05-03' - 0 - label: 'Unique Opens' color: '#00d0ff' dates: - - '2025-05-03' - 0 items: type: object properties: label: type: string example: Replied color: type: string example: '#f54842' dates: type: array example: - - '2025-05-03' - 0 items: type: array tags: - Campaigns parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 1 required: true schema: type: integer '/api/campaigns/{id}': get: summary: 'Campaign details' operationId: campaignDetails description: 'This endpoint retrieves the details of a specific campaign.' parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 1,\n \"uuid\": \"9h8ef374-e986-4221-b432-2902b4826r83\",\n \"name\": \"John Doe Campaign\",\n \"type\": \"outbound\",\n \"status\": \"Active\",\n \"completion_percentage\": 45.23,\n \"emails_sent\": 7,\n \"opened\": 2,\n \"unique_opens\": 1,\n \"replied\": 2,\n \"unique_replies\": 1,\n \"bounced\": 1,\n \"unsubscribed\": 2,\n \"interested\": 3,\n \"total_leads_contacted\": 7,\n \"total_leads\": 10,\n \"max_emails_per_day\": 7,\n \"max_new_leads_per_day\": 2,\n \"plain_text\": true,\n \"open_tracking\": false,\n \"sequence_prioritization\": new_leads,\n \"can_unsubscribe\": true,\n \"unsubscribe_text\": \"Unsubscribe here\",\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n \"tags\": [\n {\n \"id\": 1,\n \"name\": \"VIP\",\n \"default\": false\n }\n ]" tags: - Campaigns parameters: - in: path name: id description: 'The ID of the campaign.' example: 11 required: true schema: type: integer /api/campaigns/bulk: delete: summary: 'Bulk delete campaigns by ID' operationId: bulkDeleteCampaignsByID description: "This endpoint allows the authenticated user to bulk delete campaigns.\nCampaign deletion is queued up and processed in the background.\n\n*Overall stats and lead conversations will not be affected**\n You will still be able to take part in conversations from leads from these campaigns, in the master inbox.\n\n **Your campaigns will no longer be accessible via API**\n You may have automations with hard-coded campaign IDs that may no longer work. Please ensure that you only poll for campaigns that exist.\n\n **Future responses for these campaigns will still be captured**\n We will still main a link to this campaign for any future received responses, but there will be no stat increments.\n\n **This action is permanent and cannot be reversed**\n Please only delete campaigns if you are sure you never want to see them again. Once deleted, they can no longer be recovered." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'The selected campaigns have been queued for deletion.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'The selected campaigns have been queued for deletion.' tags: - Campaigns requestBody: required: false content: application/json: schema: type: object properties: campaign_ids: type: array description: 'Array of campaign IDs' example: - 2 items: type: integer '/api/campaigns/{campaign_id}': delete: summary: 'Delete a campaign' operationId: deleteACampaign description: "This endpoint allows the authenticated user to delete a campaign.\nCampaign deletion is queued up and processed in the background.\n\n**Overall stats and lead conversations will not be affected**\nYou will still be able to take part in conversations from leads from these campaigns, in the master inbox.\n\n**Your campaigns will no longer be accessible via API**\nYou may have automations with hard-coded campaign IDs that may no longer work. Please ensure that you only poll for campaigns that exist.\n\n**Future responses for these campaigns will still be captured**\nWe will still main a link to this campaign for any future received responses, but there will be no stat increments.\n\n**This action is permanent and cannot be reversed**\nPlease only delete campaigns if you are sure you never want to see them again. Once deleted, they can no longer be recovered." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Campaign One has been queued for deletion.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Campaign One has been queued for deletion.' tags: - Campaigns parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 16 required: true schema: type: integer /api/replies: get: summary: 'Get all replies' operationId: getAllReplies description: "This endpoint retrieves all replies for the authenticated user.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: - in: query name: search description: 'Search term for filtering replies.' example: interested required: false schema: type: string description: 'Search term for filtering replies.' example: interested nullable: true - in: query name: status description: 'Filter by status. One of `interested`, `automated_reply`, `not_automated_reply`.' example: automated_reply required: false schema: type: string description: 'Filter by status. One of `interested`, `automated_reply`, `not_automated_reply`.' example: automated_reply nullable: false - in: query name: folder description: 'Filter by folder. One of `inbox`, `sent`, `spam`, `bounced`, `all`.' example: inbox required: false schema: type: string description: 'Filter by folder. One of `inbox`, `sent`, `spam`, `bounced`, `all`.' example: inbox nullable: false - in: query name: read description: 'Filter by read status.' example: true required: false schema: type: boolean description: 'Filter by read status.' example: true nullable: true - in: query name: campaign_id description: 'The ID of the campaign.' example: 12 required: false schema: type: integer description: 'The ID of the campaign.' example: 12 nullable: false - in: query name: sender_email_id description: 'The ID of the sender email address.' example: 243 required: false schema: type: integer description: 'The ID of the sender email address.' example: 243 nullable: false - in: query name: lead_id description: 'Theid of an existing record in the leads table.'
example: 10
required: false
schema:
type: integer
description: 'The id of an existing record in the leads table.'
example: 10
nullable: false
-
in: query
name: tag_ids
description: 'Array of tag IDs to filter by.'
example:
- 1
- 2
- 3
required: false
schema:
type: array
description: 'Array of tag IDs to filter by.'
example:
- 1
- 2
- 3
items:
type: integer
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": [\n {\n \"id\": 45,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Inbox\",\n \"subject\": \"yo test boy wassup G\",\n \"read\": true,\n \"interested\": false,\n \"automated_reply\": false,\n \"html_body\": \"\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
id of an existing record in the sender_emails table.'
example: 9
nullable: false
use_dedicated_ips:
type: boolean
description: 'Send using the dedicated campaign IPs instead of the instance IP'
example: true
nullable: false
content_type:
type: string
description: 'Type of the email (html or text)'
example: html
nullable: false
to_emails:
type: array
description: 'Array of people to send this email to.'
example:
-
name: 'John Doe'
email_address: john@example.com
items:
type: object
properties:
name:
type: string|null
description: 'Name of the person (can be null)'
example: et
nullable: true
email_address:
type: string
description: ''
example: '"john@example.com"'
nullable: false
cc_emails:
type: array
description: ''
example: null
items:
type: object
properties:
name:
type: string
description: ''
example: null
nullable: true
email_address:
type: string
description: 'Must be a valid email address.'
example: juliet12@example.net
nullable: false
required:
- email_address
bcc_emails:
type: array
description: ''
example: null
items:
type: object
properties:
name:
type: string
description: ''
example: null
nullable: true
email_address:
type: string
description: 'Must be a valid email address.'
example: legros.kasandra@example.net
nullable: false
required:
- email_address
attachments:
type: array
description: 'optional Array of multi-part files that you want to attach. Combined max size: 25MB, individual max size: 10MB.'
example: null
items:
type: string
required:
- sender_email_id
'/api/replies/{reply_id}/reply':
post:
summary: 'Create new reply'
operationId: createNewReply
description: "This endpoint allows you to reply to an existing email.\n\nThe user must provide a valid authentication token in the request header to access this endpoint.\n\nPlease note that if you are sending an array of file attachments, your request must include\na header of \"Content-Type\": \"multipart/form-data\". Otherwise your file attachments will not be processed."
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"success\": true,\n \"message\": \"Successfully sent email\",\n \"reply\": {\n \"id\": 239,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Sent\",\n \"subject\": \"Email 3: Lab Cleanup Reminder\",\n \"read\": true,\n \"interested\": false,\n \"automated_reply\": false,\n \"html_body\": \"\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
reply_all is in true. The id of an existing record in the sender_emails table.'
example: 7
nullable: false
content_type:
type: string
description: 'Type of the email (html or text)'
example: html
nullable: false
to_emails:
type: array
description: 'Array of people to send this email to.'
example:
-
name: 'John Doe'
email_address: john@example.com
items:
type: object
properties:
name:
type: string|null
description: 'Name of the person (can be null)'
example: alias
nullable: true
email_address:
type: string
description: ''
example: '"john@example.com"'
nullable: false
cc_emails:
type: array
description: ''
example: null
items:
type: object
properties:
name:
type: string
description: ''
example: null
nullable: true
email_address:
type: string
description: 'Must be a valid email address.'
example: xfriesen@example.org
nullable: false
required:
- email_address
bcc_emails:
type: array
description: ''
example: null
items:
type: object
properties:
name:
type: string
description: ''
example: null
nullable: true
email_address:
type: string
description: 'Must be a valid email address.'
example: wisoky.leif@example.net
nullable: false
required:
- email_address
attachments:
type: array
description: 'optional Array of multi-part files that you want to attach. Combined max size: 25MB, individual max size: 10MB.'
example: null
items:
type: string
parameters:
-
in: path
name: reply_id
description: 'The ID of the parent reply.'
example: 7
required: true
schema:
type: integer
'/api/replies/{reply_id}/mark-as-interested':
patch:
summary: 'Mark as interested'
operationId: markAsInterested
description: "This endpoint marks a specific reply as interested. If a particular lead is\nalready marked as \"interested\" within a campaign, no changes will be made.\n\nThe user must provide a valid authentication token in the request header to access this endpoint."
parameters: []
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 239,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Sent\",\n \"subject\": \"Email 3: Lab Cleanup Reminder\",\n \"read\": false,\n \"interested\": true,\n \"automated_reply\": false,\n \"html_body\": \"\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
yo sup this is the first big boy one ya hear?\\n\\n
yo sup this is the first big boy one ya hear?\\n\\n
\\nHey Ross, \\n
\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n
\\nThanks,
\\nTeddy Frank\\n
\\nqvwy7276 qvwy7276\\n
\",\n \"text_body\": \"Hey Ross, \\n\\nDon’t forget about the weekly lab cleanup tomorrow. Please ensure all your materials are stored away, and any spills are cleaned up right away.\\\\n\\\\nP.S. In 1963, Alfred Hitchcock released 'The Birds,' which became one of the most iconic thriller films in history.\\n\\nThanks,\\nTeddy Frank\\n\\nqvwy7276 qvwy7276\",\n \"raw_body\": null,\n \"headers\": null,\n \"date_received\": \"2024-12-01T03:43:15.000000Z\",\n \"type\": \"Untracked Reply\",\n \"tracked_reply\": false,\n \"scheduled_email_id\": null,\n \"campaign_id\": null,\n \"lead_id\": 150444,\n \"lead\": {\n \"id\": 150444,\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john@doe.com\",\n \"title\": \"Vice President\",\n \"company\": \"Blue Science\",\n \"notes\": null,\n \"status\": \"unverified\",\n \"custom_variables\": [\n {\n \"name\": \"phone_number\",\n \"value\": \"123-456-7890\"\n }\n ],\n \"overall_stats\": {\n \"emails_sent\": 1,\n \"opens\": 0,\n \"replies\": 1,\n \"unique_replies\": 1,\n \"unique_opens\": 0\n },\n \"created_at\": \"2026-01-14T02:54:56.000000Z\",\n \"updated_at\": \"2026-01-21T17:15:38.000000Z\"\n },\n \"sender_email_id\": 25065,\n \"raw_message_id\": \"<9d9e1e18-00bf-4a95-ad2e-2053189e421a@bisonemails.com>\",\n \"from_name\": \"Teddy Frank\",\n \"from_email_address\": \"teddy.frank@bisonemails.com\",\n \"primary_to_email_address\": \"test@bisontest.com\",\n \"to\": [\n {\n \"name\": \"Bison Test\",\n \"address\": \"test@bisontest.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 239,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 240,\n \"file_name\": \"sample.pdf\",\n \"download_url\": \"http://localhost/reply-attachments/9f2e5a48-5ed6-4021-ae32-66e61908173d/download%7D?signature=5374531e5a71a0c508b75678e53ea48e7d7dae22614bca3703c41cf199e21e67\",\n \"created_at\": \"2025-06-18T02:38:40.000000Z\",\n \"updated_at\": \"2025-06-18T02:38:40.000000Z\"\n },\n ]\n \"created_at\": \"2025-06-18T02:38:40.000000Z\",\n \"updated_at\": \"2025-06-18T02:38:40.000000Z\"\n }\n ]\n }\n}" tags: - Replies parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 17 required: true schema: type: integer '/api/replies/{reply_id}/attach-scheduled-email-to-reply': post: summary: 'Attach scheduled email to reply' operationId: attachScheduledEmailToReply description: "This endpoint attaches a scheduled email to a reply (and lead). You can use this for untracked replies where\nheaders may have been missing when the email was received. This will take care of incrementing all stats too." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Scheduled email successfully attached to reply' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Scheduled email successfully attached to reply' tags: - Replies requestBody: required: true content: application/json: schema: type: object properties: scheduled_email_id: type: integer description: 'The ID of the scheduled email.' example: 20 nullable: false required: - scheduled_email_id parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 2 required: true schema: type: integer '/api/replies/{reply_id}/followup-campaign/push': post: summary: 'Push reply (and lead) to "reply followup campaign"' operationId: pushReplyandLeadToreplyFollowupCampaign description: "This endpoint lets you push a reply to a \"reply followup campaign\"\nThe goal is to followup with interested leads in a templated, automated manner.\nFollowups are done in the same conversation thread, and we take the last message from the\nconversation to continue the process.\n\nCaveats: the reply must have a sender email attached. If you deleted a sender email, then you\nwill need to add this lead into a separate outbound campaign since we cannot send an email in the same thread." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Adding lead to followup campaign. This may take a moment to process.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Adding lead to followup campaign. This may take a moment to process.' tags: - Replies requestBody: required: true content: application/json: schema: type: object properties: campaign_id: type: integer description: 'The ID of the followup campaign' example: 14 nullable: false force_add_reply: type: boolean description: "optional Set this to true if you want to ignore the lead's unsubscribed or bounced status" example: false nullable: false required: - campaign_id parameters: - in: path name: reply_id description: 'The ID of the reply' example: 18 required: true schema: type: integer /api/sender-emails: get: summary: 'List email accounts' operationId: listEmailAccounts description: 'Retrieves a collection of email accounts associated with the authenticated workspace.' parameters: - in: query name: search description: 'Search term for filter by.' example: johndoe@gmail.com required: false schema: type: string description: 'Search term for filter by.' example: johndoe@gmail.com nullable: true - in: query name: tag_ids description: 'Array of tag IDs to filter by.' example: - 1 - 2 - 3 required: false schema: type: array description: 'Array of tag IDs to filter by.' example: - 1 - 2 - 3 items: type: integer - in: query name: excluded_tag_ids description: 'Exclude email accounts by tag IDs.' example: - 1 - 2 - 3 required: false schema: type: array description: 'Exclude email accounts by tag IDs.' example: - 1 - 2 - 3 items: type: integer - in: query name: without_tags description: 'Only show email accounts that have no tags attached.' example: true required: false schema: type: boolean description: 'Only show email accounts that have no tags attached.' example: true nullable: false - in: query name: status description: 'The status of the email account.' example: not_connected required: false schema: type: string description: 'The status of the email account.' example: not_connected nullable: false enum: - connected - not_connected - pending_move - pending_deletion responses: 200: description: success content: application/json: schema: type: object example: data: - id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true - id: 2 name: 'Jane Doe' email: jane@doe.com email_signature: 'Jane Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true links: first: 'http://bison.test/api/sender-emails?page=1' last: 'http://bison.test/api/sender-emails?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/sender-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/sender-emails' per_page: 15 to: 3 total: 3 properties: data: type: array example: - id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true - id: 2 name: 'Jane Doe' email: jane@doe.com email_signature: 'Jane Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com email_signature: type: string example: 'John Doe | Consultant
' imap_server: type: string example: imap.server imap_port: type: integer example: 110 smtp_server: type: string example: smtp.server smtp_port: type: integer example: 112 daily_limit: type: integer example: 5 type: type: string example: Inbox status: type: string example: Connected warmup_enabled: type: boolean example: true emails_sent_count: type: integer example: 100 total_replied_count: type: integer example: 10 total_opened_count: type: integer example: 25 unsubscribed_count: type: integer example: 0 bounced_count: type: integer example: 0 unique_replied_count: type: integer example: 7 unique_opened_count: type: integer example: 7 total_leads_contacted_count: type: integer example: 50 interested_leads_count: type: integer example: 3 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: type: array example: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 name: type: string example: Google default: type: boolean example: true links: type: object properties: first: type: string example: 'http://bison.test/api/sender-emails?page=1' last: type: string example: 'http://bison.test/api/sender-emails?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/sender-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/sender-emails' per_page: type: integer example: 15 to: type: integer example: 3 total: type: integer example: 3 tags: - 'Email Accounts' '/api/sender-emails/{senderEmailId}/campaigns': get: summary: 'Show Email Account Campaigns' operationId: showEmailAccountCampaigns description: 'Retrieves a collection of campaigns where this email account is being used' parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": [\n {\n \"id\": 1,\n \"uuid\": \"9h8ef374-e986-4221-b432-2902b4826r83\",\n \"name\": \"John Doe Campaign\",\n \"status\": \"Active\",\n \"emails_sent\": 7,\n \"opened\": 2,\n \"unique_opens\": 1,\n \"replied\": 2,\n \"unique_replies\": 1,\n \"bounced\": 1,\n \"unsubscribed\": 2,\n \"interested\": 3,\n \"total_leads_contacted\": 7,\n \"max_emails_per_day\": 7,\n \"max_new_leads_per_day\": 2,\n \"plain_text\": true,\n \"open_tracking\": false,\n \"can_unsubscribe\": true,\n \"unsubscribe_text\": \"Unsubcribe here\",\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\",\n },\n {\n \"id\": 2,\n \"uuid\": \"8be8h930-b391-9381-c328-2902b4826r83\",\n \"name\": \"Jane Doe Campaign\",\n \"status\": \"Launching\",\n \"emails_sent\": 5,\n \"opened\": 1,\n \"unique_opens\": 1,\n \"replied\": 1,\n \"unique_replies\": 1,\n \"bounced\": 2,\n \"unsubscribed\": 1,\n \"interested\": 0,\n \"total_leads_contacted\": 5,\n \"max_emails_per_day\": 7,\n \"max_new_leads_per_day\": 2,\n \"plain_text\": true,\n \"open_tracking\": false,\n \"can_unsubscribe\": true,\n \"unsubscribe_text\": \"Unsubscribe here\",\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ],\n \"links\": {\n \"first\": \"http://bison.test/api/sender-emails/1/campaigns?page=1\",\n \"last\": \"http://bison.test/api/sender-emails/1/campaigns?page=1\",\n \"prev\": null,\n \"next\": null\n },\n \"meta\": {\n \"current_page\": 1,\n \"from\": 1,\n \"last_page\": 1,\n \"links\": [\n {\n \"url\": null,\n \"label\": \"« Previous\",\n \"active\": false\n },\n {\n \"url\": \"http://bison.test/api/sender-emails/1/campaigns?page=1\",\n \"label\": \"1\",\n \"active\": true\n },\n {\n \"url\": null,\n \"label\": \"Next »\",\n \"active\": false\n }\n ],\n \"path\": \"http://bison.test/api/sender-emails/1/campaigns\",\n \"per_page\": 15,\n \"to\": 3,\n \"total\": 3\n }\n}" tags: - 'Email Accounts' parameters: - in: path name: senderEmailId description: 'The ID (or email address) of the email account.' example: 2 required: true schema: type: integer '/api/sender-emails/{senderEmailId}': get: summary: 'Show email account details' operationId: showEmailAccountDetails description: 'Retrieves details of a specific email account.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true properties: data: type: object properties: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com email_signature: type: string example: 'John Doe | Consultant
' imap_server: type: string example: imap.server imap_port: type: integer example: 110 smtp_server: type: string example: smtp.server smtp_port: type: integer example: 112 daily_limit: type: integer example: 5 type: type: string example: Inbox status: type: string example: Connected warmup_enabled: type: boolean example: true emails_sent_count: type: integer example: 100 total_replied_count: type: integer example: 10 total_opened_count: type: integer example: 25 unsubscribed_count: type: integer example: 0 bounced_count: type: integer example: 0 unique_replied_count: type: integer example: 7 unique_opened_count: type: integer example: 7 total_leads_contacted_count: type: integer example: 50 interested_leads_count: type: integer example: 3 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: type: array example: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 name: type: string example: Google default: type: boolean example: true tags: - 'Email Accounts' patch: summary: 'Update sender email' operationId: updateSenderEmail description: 'Update the settings for a specified sender email.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com email_signature: type: string example: 'John Doe | Consultant
' imap_server: type: string example: imap.server imap_port: type: integer example: 110 smtp_server: type: string example: smtp.server smtp_port: type: integer example: 112 daily_limit: type: integer example: 5 type: type: string example: Inbox status: type: string example: Connected warmup_enabled: type: boolean example: true emails_sent_count: type: integer example: 100 total_replied_count: type: integer example: 10 total_opened_count: type: integer example: 25 unsubscribed_count: type: integer example: 0 bounced_count: type: integer example: 0 unique_replied_count: type: integer example: 7 unique_opened_count: type: integer example: 7 total_leads_contacted_count: type: integer example: 50 interested_leads_count: type: integer example: 3 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Email Accounts' requestBody: required: false content: application/json: schema: type: object properties: daily_limit: type: integer description: 'The daily limit of emails that can be sent from this sender email.' example: 300 nullable: false name: type: string description: 'The name of the sender email.' example: 'John Doe' nullable: false email_signature: type: string description: 'The HTML signature of the sender email.' example: '{SENDER_FIRST_NAME} | Consultant
' nullable: true delete: summary: 'Delete email account' operationId: deleteEmailAccount description: 'Add multiple sender email addresses at once.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Email accounts have been queued for deletion' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Email accounts have been queued for deletion' tags: - 'Email Accounts' parameters: - in: path name: senderEmailId description: 'The ID (or email address) of the email account.' example: 9 required: true schema: type: integer '/api/sender-emails/{senderEmailId}/replies': get: summary: 'Get email account replies' operationId: getEmailAccountReplies description: 'This endpoint retrieves all replies associated with a given email account' parameters: - in: query name: search description: 'Search term for filtering replies.' example: interested required: false schema: type: string description: 'Search term for filtering replies.' example: interested nullable: true - in: query name: status description: 'Filter by status. One of `interested`, `automated_reply`, `not_automated_reply`.' example: automated_reply required: false schema: type: string description: 'Filter by status. One of `interested`, `automated_reply`, `not_automated_reply`.' example: automated_reply nullable: false - in: query name: folder description: 'Filter by folder. One of `inbox`, `sent`, `spam`, `bounced`, `all`.' example: inbox required: false schema: type: string description: 'Filter by folder. One of `inbox`, `sent`, `spam`, `bounced`, `all`.' example: inbox nullable: false - in: query name: read description: 'Filter by read status.' example: true required: false schema: type: boolean description: 'Filter by read status.' example: true nullable: true - in: query name: campaign_id description: 'The ID of the campaign.' example: 12 required: false schema: type: integer description: 'The ID of the campaign.' example: 12 nullable: false - in: query name: lead_id description: 'Theid of an existing record in the leads table.'
example: 19
required: false
schema:
type: integer
description: 'The id of an existing record in the leads table.'
example: 19
nullable: false
-
in: query
name: tag_ids
description: 'Array of tag IDs to filter by.'
example:
- 1
- 2
- 3
required: false
schema:
type: array
description: 'Array of tag IDs to filter by.'
example:
- 1
- 2
- 3
items:
type: integer
-
in: query
name: sender_email_id
description: 'The ID of the sender email address.'
example: 243
required: false
schema:
type: integer
description: 'The ID of the sender email address.'
example: 243
nullable: false
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": [\n {\n \"id\": 45,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Inbox\",\n \"subject\": \"yo test boy wassup G\",\n \"read\": true,\n \"interested\": false,\n \"automated_reply\": false,\n \"html_body\": \"{SENDER_FIRST_NAME} | Consultant
' nullable: false required: - sender_email_ids - email_signature /api/sender-emails/daily-limits/bulk: patch: summary: 'Bulk update email daily limits' operationId: bulkUpdateEmailDailyLimits description: 'Update the daily sending limit of multiple sender emails at once.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully updated email daily limits. This could take a few minutes to process.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully updated email daily limits. This could take a few minutes to process.' tags: - 'Email Accounts' requestBody: required: true content: application/json: schema: type: object properties: sender_email_ids: type: array description: 'An array of sender email IDs to update daily limits for.' example: - 1 - 2 items: type: integer daily_limit: type: integer description: 'The daily sending limit to set.' example: 2 nullable: false required: - sender_email_ids - daily_limit /api/sender-emails/imap-smtp: post: summary: 'Create IMAP/SMTP Email Account' operationId: createIMAPSMTPEmailAccount description: 'Creates a new IMAP/SMTP email account for the authenticated workspace.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: false emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true properties: data: type: object properties: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com email_signature: type: string example: 'John Doe | Consultant
' imap_server: type: string example: imap.server imap_port: type: integer example: 110 smtp_server: type: string example: smtp.server smtp_port: type: integer example: 112 daily_limit: type: integer example: 5 type: type: string example: Inbox status: type: string example: Connected warmup_enabled: type: boolean example: false emails_sent_count: type: integer example: 100 total_replied_count: type: integer example: 10 total_opened_count: type: integer example: 25 unsubscribed_count: type: integer example: 0 bounced_count: type: integer example: 0 unique_replied_count: type: integer example: 7 unique_opened_count: type: integer example: 7 total_leads_contacted_count: type: integer example: 50 interested_leads_count: type: integer example: 3 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: type: array example: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 name: type: string example: Google default: type: boolean example: true tags: - 'Email Accounts' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name associated with the sender email.' example: 'John Doe' nullable: false email: type: string description: 'The email address of the sender. Must be unique and in a valid email format.' example: john.doe@example.com nullable: false password: type: string description: 'The password for the sender email.' example: securepassword123 nullable: false imap_server: type: string description: 'The IMAP server address for the sender email. Must be a valid domain name.' example: imap.example.com nullable: false imap_port: type: integer description: 'The IMAP server port for the sender email.' example: 993 nullable: false smtp_server: type: string description: 'The SMTP server address for the sender email. Must be a valid domain name.' example: smtp.example.com nullable: false smtp_port: type: integer description: 'The SMTP server port for the sender email.' example: 587 nullable: false smtp_secure: type: boolean description: '' example: true nullable: false imap_secure: type: boolean description: '' example: false nullable: false email_signature: type: string description: 'The signature for the sender email.' example: '{SENDER_FIRST_NAME} | Consultant' nullable: false required: - name - email - password - imap_server - imap_port - smtp_server - smtp_port /api/sender-emails/bulk: post: summary: 'Bulk add sender emails' operationId: bulkAddSenderEmails description: 'Add multiple sender email addresses at once.' parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"John Doe\",\n \"email\": \"john@doe.com\",\n \"email_signature\": null,\n \"imap_server\": \"imap.server\",\n \"imap_port\": 110,\n \"smtp_server\": \"smtp.server\",\n \"smtp_port\": 112,\n \"daily_limit\": 5,\n \"type\": \"Inbox\",\n \"status\": \"Connected\",\n \"warmup_enabled\": false,\n \"emails_sent_count\": 100,\n \"total_replied_count\": 10,\n \"total_opened_count\": 25,\n \"unsubscribed_count\": 0,\n \"bounced_count\": 0,\n \"unique_replied_count\": 7,\n \"unique_opened_count\": 7,\n \"total_leads_contacted_count\": 50,\n \"interested_leads_count\": 3,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n {\n \"id\": 2,\n \"name\": \"Jane Doe\",\n \"email\": \"jane@doe.com,\n \"email_signature\": null,\n \"imap_server\": \"imap.server\",\n \"imap_port\": 110,\n \"smtp_server\": \"smtp.server\",\n \"smtp_port\": 112,\n \"daily_limit\": 5,\n \"type\": \"Inbox\",\n \"status\": \"Connected\",\n \"warmup_enabled\": false,\n \"emails_sent_count\": 100,\n \"total_replied_count\": 10,\n \"total_opened_count\": 25,\n \"unsubscribed_count\": 0,\n \"bounced_count\": 0,\n \"unique_replied_count\": 7,\n \"unique_opened_count\": 7,\n \"total_leads_contacted_count\": 50,\n \"interested_leads_count\": 3,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ]\n}" tags: - 'Email Accounts' requestBody: required: true content: multipart/form-data: schema: type: object properties: csv: type: string format: binary description: 'The CSV file containing the contacts.' nullable: false required: - csv '/api/sender-emails/{senderEmailId}/check-mx-records': post: summary: 'Check MX records' operationId: checkMXRecords description: "Checks the email host for a given email address and returns the host + all MX records.\nResults are not cached, and if a valid return is returned, the Sender Email account will be updated." parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"email\": \"john@doe.com\",\n \"email_host\": \"Google\",\n \"mx_records_valid\": \"true\",\n \"mx_records\": [\n {\n \"host\": \"domain.com\",\n \"priority\": 300,\n \"class\": \"IN\",\n \"type\": \"MX\",\n \"pri\": 0,\n \"target\": \"domain-com.mail.protection.outlook.com\"\n }\n ]\n }" tags: - 'Email Accounts' parameters: - in: path name: senderEmailId description: 'The ID (or email address) of the email account.' example: 19 required: true schema: type: integer /api/sender-emails/bulk-check-missing-mx-records: post: summary: 'Bulk check missing MX records' operationId: bulkCheckMissingMXRecords description: "This endpoint lets you trigger a job that will bulk check all email accounts with\nmissing MX records in the given workspace." parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"success\": true,\n \"message\": \"This may take several minutes to complete depending on how many email accounts have missing MX records.\",\n }\n }" tags: - 'Email Accounts' /api/blacklisted-emails: get: summary: 'Get all blacklisted emails' operationId: getAllBlacklistedEmails description: 'Retrieve a list of all blacklisted emails for the authenticated user.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 email: john@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 email: jane@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' links: first: 'http://bison.test/api/blacklisted-emails?page=1' last: 'http://bison.test/api/blacklisted-emails?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/blacklisted-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/blacklisted-emails' per_page: 15 to: 2 total: 2 properties: data: type: array example: - id: 1 email: john@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 email: jane@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 email: type: string example: john@doe.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/blacklisted-emails?page=1' last: type: string example: 'http://bison.test/api/blacklisted-emails?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/blacklisted-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/blacklisted-emails' per_page: type: integer example: 15 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Email Blacklist' post: summary: 'Create blacklisted email' operationId: createBlacklistedEmail description: 'Add a new email to the blacklist.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: 1 email: john@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 email: type: string example: john@doe.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Email Blacklist' requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'The email address to be blacklisted.' example: john@doe.com nullable: false required: - email '/api/blacklisted-emails/{blacklisted_email_id}': get: summary: 'Get blacklisted email' operationId: getBlacklistedEmail description: 'Get a single blacklisted email by email or ID.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 email: john@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 email: type: string example: john@doe.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Email Blacklist' delete: summary: 'Remove blacklisted email' operationId: removeBlacklistedEmail description: 'Remove an email from the blacklist.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully removed blacklisted email' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully removed blacklisted email' tags: - 'Email Blacklist' parameters: - in: path name: blacklisted_email_id description: 'The email or ID of the blacklisted email.' example: john@doe.com required: true schema: type: string /api/blacklisted-emails/bulk: post: summary: 'Bulk create blacklisted emails' operationId: bulkCreateBlacklistedEmails description: 'Add multiple emails to the blacklist in a single request.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: - id: 1 email: john@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 email: jane@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: array example: - id: 1 email: john@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 email: jane@doe.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 email: type: string example: john@doe.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Email Blacklist' requestBody: required: true content: multipart/form-data: schema: type: object properties: csv: type: string format: binary description: 'The CSV file containing the blacklisted emails.' nullable: false required: - csv /api/blacklisted-domains: get: summary: 'Get all blacklisted domains' operationId: getAllBlacklistedDomains description: 'Retrieve a list of all blacklisted domains for the authenticated user.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 domain: example.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 domain: test.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' links: first: 'http://bison.test/api/blacklisted-domains?page=1' last: 'http://bison.test/api/blacklisted-domains?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/blacklisted-domains?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/blacklisted-domains' per_page: 15 to: 2 total: 2 properties: data: type: array example: - id: 1 domain: example.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 domain: test.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 domain: type: string example: example.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/blacklisted-domains?page=1' last: type: string example: 'http://bison.test/api/blacklisted-domains?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/blacklisted-domains?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/blacklisted-domains' per_page: type: integer example: 15 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Domain Blacklist' post: summary: 'Create blacklisted domain' operationId: createBlacklistedDomain description: 'Add a new domain to the blacklist.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: 1 domain: example.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 domain: type: string example: example.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Domain Blacklist' requestBody: required: true content: application/json: schema: type: object properties: domain: type: string description: 'The domain to be blacklisted.' example: example.com nullable: false required: - domain '/api/blacklisted-domains/{blacklisted_domain_id}': get: summary: 'Get blacklisted domain' operationId: getBlacklistedDomain description: 'Get a single blacklisted domain by domain or ID.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 domain: example.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 domain: type: string example: example.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Domain Blacklist' delete: summary: 'Remove blacklisted domain' operationId: removeBlacklistedDomain description: 'Remove a domain from the blacklist.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully removed blacklisted domain' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully removed blacklisted domain' tags: - 'Domain Blacklist' parameters: - in: path name: blacklisted_domain_id description: 'The domain or ID of the blacklisted domain.' example: example.com required: true schema: type: string /api/blacklisted-domains/bulk: post: summary: 'Bulk create blacklisted domains' operationId: bulkCreateBlacklistedDomains description: 'Add multiple domains to the blacklist in a single request.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: - id: 1 domain: example.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 domain: test.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: array example: - id: 1 domain: example.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 domain: test.com created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 domain: type: string example: example.com created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Domain Blacklist' requestBody: required: true content: multipart/form-data: schema: type: object properties: csv: type: string format: binary description: 'The CSV file containing the blacklisted emails.' nullable: false required: - csv /api/tags: get: summary: 'Get all tags for workspace' operationId: getAllTagsForWorkspace description: "Retrieve a list of all tags for the authenticated user's workspace." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 name: Important default: false created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 name: Interested default: true created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: array example: - id: 1 name: Important default: false created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 name: Interested default: true created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 name: type: string example: Important default: type: boolean example: false created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Custom Tags' post: summary: 'Create tag' operationId: createTag description: 'Add a new tag.' parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 1,\n \"name\": \"Important\",\n \"default\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n}" tags: - 'Custom Tags' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the tag.' example: Important nullable: false required: - name '/api/tags/{id}': get: summary: 'View tag' operationId: viewTag description: 'View a saved tag.' parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 1,\n \"name\": \"Interested\",\n \"default\": true,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n}" tags: - 'Custom Tags' parameters: - in: path name: id description: 'The ID of the tag.' example: 1 required: true schema: type: integer '/api/tags/{tag_id}': delete: summary: 'Remove tag' operationId: removeTag description: 'Delete a tag.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Important was successfully removed' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Important was successfully removed' tags: - 'Custom Tags' parameters: - in: path name: tag_id description: 'The ID of the tag' example: 3 required: true schema: type: integer /api/tags/attach-to-campaigns: post: summary: 'Attach tags to campaigns' operationId: attachTagsToCampaigns description: 'Attach multiple tags to campaigns.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully attached tags to campaigns' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully attached tags to campaigns' tags: - 'Custom Tags' requestBody: required: true content: application/json: schema: type: object properties: tag_ids: type: array description: 'An array of tag IDs to be attached.' example: - 1 - 2 items: type: integer campaign_ids: type: array description: 'An array of campaign IDs to which the tags will be attached.' example: - 3 - 4 items: type: integer skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: false nullable: false required: - tag_ids - campaign_ids /api/tags/remove-from-campaigns: post: summary: 'Remove tags from campaigns' operationId: removeTagsFromCampaigns description: 'Detach multiple tags from campaigns.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully removed tags from campaigns' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully removed tags from campaigns' tags: - 'Custom Tags' requestBody: required: true content: application/json: schema: type: object properties: tag_ids: type: array description: 'An array of tag IDs to be detached.' example: - 1 - 2 items: type: integer campaign_ids: type: array description: 'An array of campaign IDs from which the tags will be detached.' example: - 3 - 4 items: type: integer skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: false nullable: false required: - tag_ids - campaign_ids /api/tags/attach-to-leads: post: summary: 'Attach tags to leads' operationId: attachTagsToLeads description: 'Attach multiple tags to leads.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully attached tags to leads' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully attached tags to leads' tags: - 'Custom Tags' requestBody: required: true content: application/json: schema: type: object properties: tag_ids: type: array description: 'An array of tag IDs to be attached.' example: - 1 - 2 items: type: integer lead_ids: type: array description: 'An array of lead IDs to which the tags will be attached.' example: - 3 - 4 items: type: integer skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: false nullable: false required: - tag_ids - lead_ids /api/tags/remove-from-leads: post: summary: 'Remove tags from leads' operationId: removeTagsFromLeads description: 'Detach multiple tags from leads.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully removed tags from leads' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully removed tags from leads' tags: - 'Custom Tags' requestBody: required: true content: application/json: schema: type: object properties: tag_ids: type: array description: 'An array of tag IDs to be detached.' example: - 1 - 2 items: type: integer lead_ids: type: array description: 'An array of lead IDs from which the tags will be detached.' example: - 3 - 4 items: type: integer skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: true nullable: false required: - tag_ids - lead_ids /api/tags/attach-to-sender-emails: post: summary: 'Attach tags to email accounts' operationId: attachTagsToEmailAccounts description: 'Attach multiple tags to email accounts' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully attached tags to email accounts' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully attached tags to email accounts' tags: - 'Custom Tags' requestBody: required: true content: application/json: schema: type: object properties: tag_ids: type: array description: 'An array of tag IDs to be attached.' example: - 1 - 2 items: type: integer sender_email_ids: type: array description: 'An array of email account IDs to which the tags will be attached.' example: - 3 - 4 items: type: integer skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: true nullable: false required: - tag_ids - sender_email_ids /api/tags/remove-from-sender-emails: post: summary: 'Remove tags from email accounts' operationId: removeTagsFromEmailAccounts description: 'Detach multiple tags from email accounts' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully removed tags from email accounts' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully removed tags from email accounts' tags: - 'Custom Tags' requestBody: required: true content: application/json: schema: type: object properties: tag_ids: type: array description: 'An array of tag IDs to be detached.' example: - 1 - 2 items: type: integer sender_email_ids: type: array description: 'An array of email account IDs from which the tags will be detached.' example: - 3 - 4 items: type: integer skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: false nullable: false required: - tag_ids - sender_email_ids /api/custom-tracking-domain: get: summary: 'Get all custom tracking domains' operationId: getAllCustomTrackingDomains description: 'Retrieve a list of all custom tracking domains for the authenticated user.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 domain: example.com status: Connected created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 domain: example.org status: Pending created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' links: first: 'http://bison.test/api/custom-tracking-domain?page=1' last: 'http://bison.test/api/custom-tracking-domain?page=1' prev: null next: null meta: current_page: 1 from: 1 path: 'http://bison.test/api/custom-tracking-domain' per_page: 15 to: 2 properties: data: type: array example: - id: 1 domain: example.com status: Connected created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 domain: example.org status: Pending created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 domain: type: string example: example.com status: type: string example: Connected created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/custom-tracking-domain?page=1' last: type: string example: 'http://bison.test/api/custom-tracking-domain?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 path: type: string example: 'http://bison.test/api/custom-tracking-domain' per_page: type: integer example: 15 to: type: integer example: 2 tags: - 'Custom Tracking Domains' post: summary: 'Create custom tracking domain' operationId: createCustomTrackingDomain description: "Add a new custom tracking domain to the authenticated user's team." parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 1,\n \"domain\": \"example.com\",\n \"status\": \"Pending\"\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n}" 422: description: '' content: application/json: schema: type: object example: data: success: false message: 'Failed to add custom domain' properties: data: type: object properties: success: type: boolean example: false message: type: string example: 'Failed to add custom domain' tags: - 'Custom Tracking Domains' requestBody: required: true content: application/json: schema: type: object properties: domain: type: string description: 'The domain name to be added.' example: example.com nullable: false required: - domain '/api/custom-tracking-domain/{id}': get: summary: 'Get a custom tracking domains' operationId: getACustomTrackingDomains description: 'View a custom tracking domains.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 domain: example.com status: Connected created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 domain: type: string example: example.com status: type: string example: Connected created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Custom Tracking Domains' parameters: - in: path name: id description: 'The custom tracking domain ID.' example: 1 required: true schema: type: integer '/api/custom-tracking-domain/{custom_tracking_domain_id}': delete: summary: 'Remove custom tracking domain' operationId: removeCustomTrackingDomain description: 'Delete a custom tracking domain.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully removed custom domain' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully removed custom domain' 422: description: '' content: application/json: schema: type: object example: data: success: false message: 'Your custom domain could not be removed. Please try again.' properties: data: type: object properties: success: type: boolean example: false message: type: string example: 'Your custom domain could not be removed. Please try again.' tags: - 'Custom Tracking Domains' parameters: - in: path name: custom_tracking_domain_id description: 'The custom tracking domain ID' example: 7 required: true schema: type: integer /api/webhook-url: get: summary: 'Get all webhooks' operationId: getAllWebhooks description: "Retrieve a list of all webhooks for the authenticated user's workspace." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 name: Slack url: 'https://your-webhook-url/webhooks' events: - email_sent - email_opened created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' links: first: 'http://bison.test/api/webhook-url?page=1' last: 'http://bison.test/api/webhook-url?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/webhook-url?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/webhook-url' per_page: 15 to: 1 total: 1 properties: data: type: array example: - id: 1 name: Slack url: 'https://your-webhook-url/webhooks' events: - email_sent - email_opened created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 name: type: string example: Slack url: type: string example: 'https://your-webhook-url/webhooks' events: type: array example: - email_sent - email_opened items: type: string created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/webhook-url?page=1' last: type: string example: 'http://bison.test/api/webhook-url?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/webhook-url?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/webhook-url' per_page: type: integer example: 15 to: type: integer example: 1 total: type: integer example: 1 tags: - Webhooks post: summary: 'Create a new webhook' operationId: createANewWebhook description: "Store a new webhook for the authenticated user's workspace. Provide an array of events to associate with the webhook; the events included in the array will be enabled." parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: 1 name: Slack url: 'https://your-webhook-url/webhooks' events: - email_sent - email_opened created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: Slack url: type: string example: 'https://your-webhook-url/webhooks' events: type: array example: - email_sent - email_opened items: type: string created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - Webhooks requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the webhook.' example: Slack nullable: false url: type: string description: 'The URL to send data to.' example: 'https://your-webhook-url/webhooks' nullable: false events: type: array description: 'The events to subscribe to.' example: - email_sent - lead_first_contacted - lead_replied - lead_interested - email_opened - email_bounced - lead_unsubscribed - email_account_added - email_account_removed - email_account_disconnected - email_account_reconnected - manual_email_sent - untracked_reply_received items: type: object properties: email_sent: type: string description: 'A new scheduled email was sent to a contact.' example: '"email_sent"' nullable: false lead_first_contacted: type: string description: 'A contact was emailed for the first time.' example: '"lead_first_contacted"' nullable: false lead_replied: type: string description: 'A contact replied to your email.' example: '"lead_replied"' nullable: false lead_interested: type: string description: 'A contact sent a positive (interested) reply.' example: '"lead_interested"' nullable: false email_opened: type: string description: 'A contact opened your email.' example: '"email_opened"' nullable: false email_bounced: type: string description: 'You sent an email that bounced.' example: '"email_bounced"' nullable: false lead_unsubscribed: type: string description: 'A contact unsubscribed from future emails.' example: '"lead_unsubscribed"' nullable: false email_account_added: type: string description: 'A new email account was added to your workspace.' example: '"email_account_added"' nullable: false email_account_removed: type: string description: 'An email account was removed from your workspace.' example: '"email_account_removed"' nullable: false email_account_disconnected: type: string description: 'An email account disconnected from your workspace.' example: '"email_account_disconnected"' nullable: false email_account_reconnected: type: string description: 'An email account successfully reconnected to your workspace.' example: '"email_account_reconnected"' nullable: false manual_email_sent: type: string description: 'You sent a manual email (one-off, reply, or forward).' example: '"manual_email_sent"' nullable: false untracked_reply_received: type: string description: 'An untracked reply was received (not tied to any lead).' example: '"untracked_reply_received"' nullable: false tag_attached: type: string description: 'A tag was attached to a resource' example: '"tag_attached"' nullable: false tag_removed: type: string description: 'A tag was removed from a resource (not tied to any lead).' example: '"tag_removed"' nullable: false warmup_disabled_receiving_bounces: type: string description: 'An email account was disabled from warmup for receiving too many bounces.' example: '"warmup_disabled_receiving_bounces"' nullable: false warmup_disabled_causing_bounces: type: string description: 'An email account was disabled from warmup for causing too many bounces.' example: '"warmup_disabled_causing_bounces"' nullable: false required: - name - url - events '/api/webhook-url/{id}': get: summary: 'Get a single webhook' operationId: getASingleWebhook description: 'Get the details of a specific webhook.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 name: Slack url: 'https://your-webhook-url/webhooks' events: - email_sent - email_opened created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: Slack url: type: string example: 'https://your-webhook-url/webhooks' events: type: array example: - email_sent - email_opened items: type: string created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - Webhooks put: summary: 'Update a webhook' operationId: updateAWebhook description: "Modify an existing webhook's details. Send an array of events to modify the webhook; the events included will be enabled, and those not included will be disabled." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 name: 'Slack Updated' url: 'https://your-updated-webhook-url/webhooks' events: - email_bounced created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: 'Slack Updated' url: type: string example: 'https://your-updated-webhook-url/webhooks' events: type: array example: - email_bounced items: type: string created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - Webhooks requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the webhook.' example: Slack nullable: false url: type: string description: 'The URL to send data to.' example: 'https://your-webhook-url/webhooks' nullable: false events: type: array description: 'The events to subscribe to.' example: - email_sent - lead_first_contacted - lead_replied - lead_interested - email_opened - email_bounced - lead_unsubscribed - email_account_added - email_account_removed - email_account_disconnected - email_account_reconnected - manual_email_sent - untracked_reply_received items: type: object properties: email_sent: type: string description: 'A new scheduled email was sent to a contact.' example: '"email_sent"' nullable: false lead_first_contacted: type: string description: 'A contact was emailed for the first time.' example: '"lead_first_contacted"' nullable: false lead_replied: type: string description: 'A contact replied to your email.' example: '"lead_replied"' nullable: false lead_interested: type: string description: 'A contact sent a positive (interested) reply.' example: '"lead_interested"' nullable: false email_opened: type: string description: 'A contact opened your email.' example: '"email_opened"' nullable: false email_bounced: type: string description: 'You sent an email that bounced.' example: '"email_bounced"' nullable: false lead_unsubscribed: type: string description: 'A contact unsubscribed from future emails.' example: '"lead_unsubscribed"' nullable: false email_account_added: type: string description: 'A new email account was added to your workspace.' example: '"email_account_added"' nullable: false email_account_removed: type: string description: 'An email account was removed from your workspace.' example: '"email_account_removed"' nullable: false email_account_disconnected: type: string description: 'An email account disconnected from your workspace.' example: '"email_account_disconnected"' nullable: false email_account_reconnected: type: string description: 'An email account successfully reconnected to your workspace.' example: '"email_account_reconnected"' nullable: false manual_email_sent: type: string description: 'You sent a manual email (one-off, reply, or forward).' example: '"manual_email_sent"' nullable: false untracked_reply_received: type: string description: 'An untracked reply was received (not tied to any lead).' example: '"untracked_reply_received"' nullable: false tag_attached: type: string description: 'A tag was attached to a resource' example: '"tag_attached"' nullable: false tag_removed: type: string description: 'A tag was removed from a resource (not tied to any lead).' example: '"tag_removed"' nullable: false warmup_disabled_receiving_bounces: type: string description: 'An email account was disabled from warmup for receiving too many bounces.' example: '"warmup_disabled_receiving_bounces"' nullable: false warmup_disabled_causing_bounces: type: string description: 'An email account was disabled from warmup for causing too many bounces.' example: '"warmup_disabled_causing_bounces"' nullable: false required: - name - url - events parameters: - in: path name: id description: 'The ID of the webhook.' example: 1 required: true schema: type: integer '/api/webhook-url/{webhook_url_id}': delete: summary: 'Delete a webhook' operationId: deleteAWebhook description: 'Remove a webhook url by its ID.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Slack webhook url was successfully deleted' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Slack webhook url was successfully deleted' tags: - Webhooks parameters: - in: path name: webhook_url_id description: 'The ID of the webhook url.' example: 1 required: true schema: type: integer - in: path name: id description: 'The ID of the webhook url.' example: 1 required: true schema: type: integer /api/campaign-events/stats: get: summary: 'Breakdown of events by date' operationId: breakdownOfEventsByDate description: "This endpoint retrieves stats by date for a given period, for this campaign\n\nDrill down into campaign event stats based on dates, campaign IDs, and/or sender email IDs\n\nThe user must provide a valid authentication token in the request header to access this endpoint.\n\nEvents returned: `Replied`, `Total Opens`, `Unique Opens`, `Sent`, `Bounced`, `Unsubscribed`, `Interested`" parameters: - in: query name: start_date description: 'The start date to fetch stats.' example: '2024-07-01' required: true schema: type: string description: 'The start date to fetch stats.' example: '2024-07-01' nullable: false - in: query name: end_date description: 'The end date to fetch stats.' example: '2024-07-19' required: true schema: type: string description: 'The end date to fetch stats.' example: '2024-07-19' nullable: false - in: query name: sender_email_ids description: 'List of sender email IDs to include' example: - 14 required: false schema: type: array description: 'List of sender email IDs to include' example: - 14 items: type: integer - in: query name: campaign_ids description: 'List of campaign IDs to include' example: - 13 required: false schema: type: array description: 'List of campaign IDs to include' example: - 13 items: type: integer responses: 200: description: success content: application/json: schema: type: object example: data: - label: Replied color: '#f54842' dates: - - '2025-05-03' - 0 - label: 'Total Opens' color: '#00E396' dates: - - '2025-05-03' - 0 - label: Sent color: '#3B82F6' dates: - - '2025-05-03' - 0 - label: Unsubscribed color: '#fffff2' dates: - - '2025-05-03' - 0 - label: Bounced color: '#fffff1' dates: - - '2025-05-03' - 0 - label: Interested color: '#fffff3' dates: - - '2025-05-03' - 0 - label: 'Unique Opens' color: '#00d0ff' dates: - - '2025-05-03' - 0 properties: data: type: array example: - label: Replied color: '#f54842' dates: - - '2025-05-03' - 0 - label: 'Total Opens' color: '#00E396' dates: - - '2025-05-03' - 0 - label: Sent color: '#3B82F6' dates: - - '2025-05-03' - 0 - label: Unsubscribed color: '#fffff2' dates: - - '2025-05-03' - 0 - label: Bounced color: '#fffff1' dates: - - '2025-05-03' - 0 - label: Interested color: '#fffff3' dates: - - '2025-05-03' - 0 - label: 'Unique Opens' color: '#00d0ff' dates: - - '2025-05-03' - 0 items: type: object properties: label: type: string example: Replied color: type: string example: '#f54842' dates: type: array example: - - '2025-05-03' - 0 items: type: array tags: - 'Campaign Events' '/api/campaigns/v1.1/{campaign_id}/sequence-steps': get: summary: 'View campaign sequence steps (v1.1)' operationId: viewCampaignSequenceStepsv11 description: 'This endpoint allows the authenticated user to view the sequence steps of the campaign.' parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"sequence_id\": 293,\n \"sequence_steps\": [\n {\n \"id\": 1,\n \"active\": true,\n \"email_subject\": \"Step 1\",\n \"order\": \"1\",\n \"email_body\": \"Step 1 body\",\n \"wait_in_days\": \"1\",\n \"variant\": false,\n \"variant_from_step_id\": null,\n \"attachments\": [],\n \"thread_reply\": false\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n {\n \"id\": 2,\n \"active\": true,\n \"email_subject\": \"Step 2\",\n \"order\": \"1\",\n \"email_body\": \"Step 2 body\",\n \"wait_in_days\": \"2\",\n \"variant\": true,\n \"variant_from_step_id\": null,\n \"attachments\": [],\n \"thread_reply\": true\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ]\n }" tags: - 'Campaigns v1.1' post: summary: 'Create sequence steps (v1.1)' operationId: createSequenceStepsv11 description: 'This endpoint allows the authenticated user to create the campaign sequence steps from scratch.' parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 1,\n \"type\": \"Campaign sequence\",\n \"title\": \"John Doe sequence\",\n \"sequence_steps\": [\n {\n \"id\": 1,\n \"active\": true,\n \"email_subject\": \"EmailBison is awesome! {FIRST_NAME}\",\n \"order\": 1,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": false,\n \"variant_from_step_id\": null,\n \"attachments\": null,\n \"thread_reply\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n {\n \"id\": 2,\n \"active\": true,\n \"email_subject\": \"Re: EmailBison is awesome!\",\n \"order\": 2,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": true,\n \"variant_from_step_id\": 1,\n \"attachments\": null,\n \"thread_reply\": true,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ],\n }\n}" tags: - 'Campaigns v1.1' requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: 'The title for the sequence.' example: 'John Doe sequence' nullable: false sequence_steps: type: array description: 'The array containing the sequence steps' example: - email_subject: 'EmailBison is awesome!' email_subject_variables: - '{FIRST_NAME}' order: 1 email_body: 'Try it now!' wait_in_days: 1 variant: false thread_reply: false - email_subject: 'EmailBison is awesome!' order: 2 email_body: 'Try it now!' wait_in_days: 1 variant: true variant_from_step: 1 thread_reply: true items: type: object properties: email_subject: type: string description: 'The subject for the email.' example: 'EmailBison is awesome!' nullable: false email_subject_variables: type: array description: 'The subject variables.' example: null items: type: string nullable: true order: type: integer description: 'The order of the step.' example: 1 nullable: true email_body: type: string description: 'The body of the email.' example: 'Try it now!' nullable: false wait_in_days: type: integer description: 'The days to wait.' example: 1 nullable: false variant: type: boolean description: 'Wheter the step is variant of another step.' example: true nullable: true variant_from_step: type: integer description: 'The order number of a step in the current request to be a variant of. Cannot be used with variant_from_step_id.' example: 1 nullable: true variant_from_step_id: type: integer description: 'The ID of an already saved step to be a variant of. Cannot be used with variant_from_step.' example: 42 nullable: true attachments: type: string format: binary description: 'The email attachments.' nullable: true thread_reply: type: boolean description: 'Wheter the step should be a reply from the previous step.' example: false nullable: true required: - email_subject - email_body - wait_in_days required: - title - sequence_steps parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 18 required: true schema: type: integer '/api/campaigns/v1.1/sequence-steps/{sequence_id}': put: summary: 'Update sequence steps (v1.1)' operationId: updateSequenceStepsv11 description: 'This endpoint allows the authenticated user to update the campaign sequence steps.' parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 1,\n \"type\": \"Campaign sequence\",\n \"title\": \"John Doe sequence\",\n \"sequence_steps\": [\n {\n \"id\": 1,\n \"active\": true,\n \"email_subject\": \"EmailBison is awesome! {FIRST_NAME}\",\n \"order\": 1,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": false,\n \"variant_from_step_id\": null,\n \"attachments\": null,\n \"thread_reply\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n },\n {\n \"id\": 2,\n \"active\": true,\n \"email_subject\": \"Re: EmailBison is awesome!\",\n \"order\": 2,\n \"email_body\": \"Try it now!\",\n \"wait_in_days\": 1,\n \"variant\": true,\n \"variant_from_step_id\": 1,\n \"attachments\": null,\n \"thread_reply\": true,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n }\n ],\n }\n}" tags: - 'Campaigns v1.1' requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: 'The title for the sequence.' example: 'John Doe sequence' nullable: false sequence_steps: type: array description: 'The array containing the sequence steps' example: - id: 1 email_subject: 'EmailBison is awesome!' email_subject_variables: - '{FIRST_NAME}' order: 1 email_body: 'Try it now!' wait_in_days: 1 variant: false thread_reply: false - id: 2 email_subject: 'EmailBison is awesome!' order: 2 email_body: 'Try it now!' wait_in_days: 1 variant: true variant_from_step: 1 thread_reply: true items: type: object properties: id: type: integer description: 'The ID of the sequence step.' example: 1 nullable: false email_subject: type: string description: 'The subject for the email.' example: 'EmailBison is awesome!' nullable: false email_subject_variables: type: array description: 'The subject variables.' example: null items: type: string nullable: true order: type: integer description: 'The order of the step.' example: 1 nullable: false email_body: type: string description: 'The body of the email.' example: 'Try it now!' nullable: false wait_in_days: type: integer description: 'The days to wait.' example: 1 nullable: false variant: type: boolean description: 'Whether the step is variant of another step.' example: true nullable: true variant_from_step_id: type: integer description: 'The step ID this step will be a variant of (required if variant is true).' example: 53 nullable: false attachments: type: string format: binary description: 'The email attachments.' nullable: true thread_reply: type: boolean description: 'Wheter the step should be a reply from the previous step.' example: false nullable: true required: - id - email_subject - order - email_body - wait_in_days required: - title - sequence_steps parameters: - in: path name: sequence_id description: 'The ID of the sequence. You can get this on the Campaign object.' example: 5 required: true schema: type: integer /api/custom-variables: get: summary: 'Get all custom variables' operationId: getAllCustomVariables description: 'Retrieve a list of all custom variables for your workspace' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 name: linkedin created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 name: phone_number created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' links: first: 'http://bison.test/api/custom-variables?page=1' last: 'http://bison.test/api/custom-variables?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/custom-variables?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/custom-variables' per_page: 15 to: 2 total: 2 properties: data: type: array example: - id: 1 name: linkedin created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 2 name: phone_number created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 name: type: string example: linkedin created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/custom-variables?page=1' last: type: string example: 'http://bison.test/api/custom-variables?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/custom-variables?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/custom-variables' per_page: type: integer example: 15 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Custom Lead Variables' post: summary: 'Create a new custom variable' operationId: createANewCustomVariable description: 'Add a new custom variable for your workspace' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 3 name: 'new custom variable' created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 3 name: type: string example: 'new custom variable' created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Custom Lead Variables' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the custom variable' example: 'New Name' nullable: false required: - name /api/ignore-phrases: get: summary: 'Get all ignore phrases' operationId: getAllIgnorePhrases description: 'Retrieve a list of all ignore phrases for the authenticated user.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 phrase: warmup231 created_at: '2024-07-29T02:10:45.000000Z' updated_at: '2024-07-29T02:10:45.000000Z' - id: 2 phrase: warmup2341 created_at: '2024-07-29T02:10:45.000000Z' updated_at: '2024-07-29T02:10:45.000000Z' links: first: 'http://bison.test/api/ignore-phrases?page=1' last: 'http://bison.test/api/ignore-phrases?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/ignore-phrases?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/ignore-phrases' per_page: 15 to: 2 total: 2 properties: data: type: array example: - id: 1 phrase: warmup231 created_at: '2024-07-29T02:10:45.000000Z' updated_at: '2024-07-29T02:10:45.000000Z' - id: 2 phrase: warmup2341 created_at: '2024-07-29T02:10:45.000000Z' updated_at: '2024-07-29T02:10:45.000000Z' items: type: object properties: id: type: integer example: 1 phrase: type: string example: warmup231 created_at: type: string example: '2024-07-29T02:10:45.000000Z' updated_at: type: string example: '2024-07-29T02:10:45.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/ignore-phrases?page=1' last: type: string example: 'http://bison.test/api/ignore-phrases?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/ignore-phrases?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/ignore-phrases' per_page: type: integer example: 15 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Ignore Phrases' post: summary: 'Create ignore phrase' operationId: createIgnorePhrase description: 'Add a new ignore phrase' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: 1 email: warmup381 created_at: '2024-07-29T02:10:45.000000Z' updated_at: '2024-07-29T02:10:45.000000Z' properties: data: type: object properties: id: type: integer example: 1 email: type: string example: warmup381 created_at: type: string example: '2024-07-29T02:10:45.000000Z' updated_at: type: string example: '2024-07-29T02:10:45.000000Z' tags: - 'Ignore Phrases' requestBody: required: true content: application/json: schema: type: object properties: phrase: type: string description: 'The ignore phrase to add.' example: warmup381 nullable: false required: - phrase '/api/ignore-phrases/{ignore_phrase_id}': get: summary: 'Get single ignore phrase' operationId: getSingleIgnorePhrase description: 'Retrieve the details of a specific ignore phrase' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 4 email: warmup381 created_at: '2024-07-29T02:10:45.000000Z' updated_at: '2024-07-29T02:10:45.000000Z' properties: data: type: object properties: id: type: integer example: 4 email: type: string example: warmup381 created_at: type: string example: '2024-07-29T02:10:45.000000Z' updated_at: type: string example: '2024-07-29T02:10:45.000000Z' tags: - 'Ignore Phrases' delete: summary: 'Remove ignore phrase' operationId: removeIgnorePhrase description: 'Remove an ignore phrase' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully removed ignore phrase' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully removed ignore phrase' tags: - 'Ignore Phrases' parameters: - in: path name: ignore_phrase_id description: 'Optional parameter. int|string The ID or name of the ignore phrase' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: warmup48 /api/leads: get: summary: 'Get all leads' operationId: getAllLeads description: 'Retrieve a list of all leads for the authenticated user.' parameters: - in: query name: search description: 'Search term for filtering replies.' example: interested required: false schema: type: string description: 'Search term for filtering replies.' example: interested nullable: true - in: query name: filters description: '' example: [] required: false schema: type: object description: '' example: [] nullable: false properties: { } - in: query name: filters.lead_campaign_status description: 'Filter by lead campaign status. One of `in_sequence`, `sequence_finished`, `sequence_stopped`, `never_contacted`, `replied`.' example: in_sequence required: false schema: type: string description: 'Filter by lead campaign status. One of `in_sequence`, `sequence_finished`, `sequence_stopped`, `never_contacted`, `replied`.' example: in_sequence nullable: false - in: query name: filters.emails_sent description: 'Filter by the number of emails sent.' example: - qui required: false schema: type: array description: 'Filter by the number of emails sent.' example: - qui items: type: string - in: query name: filters.emails_sent.criteria description: 'Comparison operator for emails sent. One of `=`, `>=`, `>`, `<=`, `<`.' example: '>=' required: false schema: type: string description: 'Comparison operator for emails sent. One of `=`, `>=`, `>`, `<=`, `<`.' example: '>=' nullable: false - in: query name: filters.emails_sent.value description: 'Value for the number of emails sent.' example: 10 required: false schema: type: integer description: 'Value for the number of emails sent.' example: 10 nullable: true - in: query name: filters.opens description: '' example: [] required: false schema: type: object description: '' example: [] nullable: false properties: { } - in: query name: filters.opens.criteria description: 'Comparison operator for email opens. One of `=`, `>=`, `>`, `<=`, `<`.' example: '>' required: false schema: type: string description: 'Comparison operator for email opens. One of `=`, `>=`, `>`, `<=`, `<`.' example: '>' nullable: false - in: query name: filters.opens.value description: 'Value for the number of email opens.' example: 100 required: false schema: type: integer description: 'Value for the number of email opens.' example: 100 nullable: true - in: query name: filters.replies description: '' example: [] required: false schema: type: object description: '' example: [] nullable: false properties: { } - in: query name: filters.replies.criteria description: 'Comparison operator for replies. One of `=`, `>=`, `>`, `<=`, `<`.' example: '=' required: false schema: type: string description: 'Comparison operator for replies. One of `=`, `>=`, `>`, `<=`, `<`.' example: '=' nullable: false - in: query name: filters.replies.value description: 'Value for the number of replies.' example: 5 required: false schema: type: integer description: 'Value for the number of replies.' example: 5 nullable: true - in: query name: filters.verification_statuses description: 'A verification status. Accepted values: `verifying`, `verified`, `risky`, `unknown`, `unverified`, `inactive`, `bounced`, `unsubscribed`' example: - sunt required: false schema: type: array description: 'A verification status. Accepted values: `verifying`, `verified`, `risky`, `unknown`, `unverified`, `inactive`, `bounced`, `unsubscribed`' example: - sunt items: type: string - in: query name: filters.tag_ids description: 'Filter by tag IDs.' example: - 1 - 2 - 3 required: false schema: type: array description: 'Filter by tag IDs.' example: - 1 - 2 - 3 items: type: integer - in: query name: filters.excluded_tag_ids description: 'Exclude leads by tag IDs.' example: - 1 - 2 - 3 required: false schema: type: array description: 'Exclude leads by tag IDs.' example: - 1 - 2 - 3 items: type: integer - in: query name: filters.without_tags description: 'Only show leads that have no tags attached.' example: true required: false schema: type: boolean description: 'Only show leads that have no tags attached.' example: true nullable: false - in: query name: filters.created_at description: '' example: [] required: false schema: type: object description: '' example: [] nullable: false properties: { } - in: query name: filters.created_at.criteria description: 'Comparison operator for the created_at date. One of `=`, `>=`, `>`, `<=`, `<`.' example: '>=' required: false schema: type: string description: 'Comparison operator for the created_at date. One of `=`, `>=`, `>`, `<=`, `<`.' example: '>=' nullable: false - in: query name: filters.created_at.value description: 'Value for the created_at date. Must be a valid date in YYYY-MM-DD format.' example: '2025-03-22' required: false schema: type: string description: 'Value for the created_at date. Must be a valid date in YYYY-MM-DD format.' example: '2025-03-22' nullable: true - in: query name: filters.updated_at description: '' example: [] required: false schema: type: object description: '' example: [] nullable: false properties: { } - in: query name: filters.updated_at.criteria description: 'Comparison operator for the updated_at date. One of `=`, `>=`, `>`, `<=`, `<`.' example: '<=' required: false schema: type: string description: 'Comparison operator for the updated_at date. One of `=`, `>=`, `>`, `<=`, `<`.' example: '<=' nullable: false - in: query name: filters.updated_at.value description: 'Value for the updated_at date. Must be a valid date in YYYY-MM-DD format.' example: '2025-03-22' required: false schema: type: string description: 'Value for the updated_at date. Must be a valid date in YYYY-MM-DD format.' example: '2025-03-22' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: Jane last_name: Doe email: jane@doe.com title: Engineer company: 'Jane Doe company' notes: 'Important client' status: bounced custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/jane' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' links: first: 'http://bison.test/api/leads?page=1' last: 'http://bison.test/api/leads?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/leads?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/leads' per_page: 15 to: 3 total: 3 properties: data: type: array example: - id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' - id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: Jane last_name: Doe email: jane@doe.com title: Engineer company: 'Jane Doe company' notes: 'Important client' status: bounced custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/jane' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' items: type: object properties: id: type: integer example: 1 uuid: type: string example: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: type: string example: John last_name: type: string example: Doe email: type: string example: john@doe.com title: type: string example: Engineer company: type: string example: 'John Doe company' notes: type: string example: 'Important client' status: type: string example: verified custom_variables: type: array example: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' items: type: object properties: name: type: string example: company_website value: type: string example: 'https://company.com' lead_campaign_data: type: array example: [] overall_stats: type: object properties: emails_sent: type: integer example: 3 opens: type: integer example: 0 replies: type: integer example: 1 unique_replies: type: integer example: 1 unique_opens: type: integer example: 0 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/leads?page=1' last: type: string example: 'http://bison.test/api/leads?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/leads?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/leads' per_page: type: integer example: 15 to: type: integer example: 3 total: type: integer example: 3 tags: - Leads post: summary: 'Create lead' operationId: createLead description: 'Create a single lead (contact) record' parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 326217,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"johaan@doaescuts5esse.com\",\n \"title\": \"Engineer\",\n \"company\": \"John Doe Company\",\n \"notes\": \"Important client\",\n \"status\": \"unverified\",\n \"custom_variables\": [\n {\n \"name\": \"another one\",\n \"value\": \"baddye\"\n }\n ],\n \"lead_campaign_data\": [],\n \"overall_stats\": {\n \"emails_sent\": 3,\n \"opens\": 0,\n \"replies\": 1\n \"unique_replies\": 1,\n \"unique_opens\": 0\n },\n \"created_at\": \"2024-07-29T02:10:45.000000Z\",\n \"updated_at\": \"2024-07-29T02:10:45.000000Z\"\n }\n }" tags: - Leads requestBody: required: true content: application/json: schema: type: object properties: first_name: type: string description: 'The first name of the contact.' example: John nullable: false last_name: type: string description: 'optional The last name of the contact.' example: Doe nullable: true email: type: string description: 'The email address of the contact. Must be unique and in a valid email format.' example: john@doe.com nullable: false title: type: string description: 'optional The title of the contact.' example: Engineer nullable: true company: type: string description: 'optional The company name of the contact.' example: 'John Doe Company' nullable: true notes: type: string description: 'optional Additional notes about the contact.' example: 'Important client' nullable: true custom_variables: type: array description: 'optional Array of custom variable objects' example: - name: 'phone number' value: '9059999999' items: type: object nullable: true properties: name: type: required description: 'name of the custom variable field' example: autem nullable: false value: type: required description: 'value of the custom variable' example: provident nullable: true required: - first_name - email '/api/leads/{lead_id}': get: summary: 'Get single lead' operationId: getSingleLead description: 'Retrieve the details of a specific lead' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 326217,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"johaan@doaescuts5esse.com\",\n \"title\": \"Engineer\",\n \"company\": \"John Doe Company\",\n \"notes\": \"Important client\",\n \"status\": \"unsubscribed\",\n \"custom_variables\": [\n {\n \"name\": \"another one\",\n \"value\": \"baddye\"\n }\n ],\n \"lead_campaign_data\": [],\n \"overall_stats\": {\n \"emails_sent\": 3,\n \"opens\": 0,\n \"replies\": 1\n \"unique_replies\": 1,\n \"unique_opens\": 0\n },\n \"created_at\": \"2024-07-29T02:10:45.000000Z\",\n \"updated_at\": \"2024-07-29T02:10:45.000000Z\"\n }\n }" tags: - Leads put: summary: 'Update lead' operationId: updateLead description: "Update the details of a specific lead\n\nFields passed in the request will be updated. Fields and custom variables not passed will be cleared." parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 326217,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"johaan@doaescuts5esse.com\",\n \"title\": \"Engineer\",\n \"company\": \"John Doe Company\",\n \"notes\": \"Important client\",\n \"status\": \"unverified\",\n \"custom_variables\": [\n {\n \"name\": \"another one\",\n \"value\": \"baddye\"\n }\n ],\n \"lead_campaign_data\": [],\n \"overall_stats\": {\n \"emails_sent\": 3,\n \"opens\": 0,\n \"replies\": 1\n \"unique_replies\": 1,\n \"unique_opens\": 0\n },\n \"created_at\": \"2024-07-29T02:10:45.000000Z\",\n \"updated_at\": \"2024-07-29T02:10:45.000000Z\"\n }\n }" tags: - Leads requestBody: required: true content: application/json: schema: type: object properties: first_name: type: string description: 'The first name of the contact.' example: John nullable: false last_name: type: string description: 'optional The last name of the contact.' example: Doe nullable: true email: type: string description: 'The email address of the contact. Must be in a valid email format.' example: john@doe.com nullable: false title: type: string description: 'The title of the contact.' example: Engineer nullable: true company: type: string description: 'The company name of the contact.' example: 'John Doe company' nullable: true notes: type: string description: 'Additional notes about the contact.' example: 'Important client' nullable: false custom_variables: type: array description: 'Array of custom variable objects' example: - name: 'phone number' value: '9059999999' items: type: object nullable: true properties: name: type: required description: 'name of the custom variable field' example: in nullable: false value: type: required description: 'value of the custom variable' example: consequatur nullable: true required: - first_name - email patch: summary: 'Update lead' operationId: updateLead description: "Update the details of a specific lead\n\nFields passed in the request will be updated. Fields and custom variables not passed will remain unchanged." parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 326217,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"johaan@doaescuts5esse.com\",\n \"title\": \"Engineer\",\n \"company\": \"John Doe Company\",\n \"notes\": \"Important client\",\n \"status\": \"unverified\",\n \"custom_variables\": [\n {\n \"name\": \"another one\",\n \"value\": \"baddye\"\n }\n ],\n \"lead_campaign_data\": [],\n \"overall_stats\": {\n \"emails_sent\": 3,\n \"opens\": 0,\n \"replies\": 1\n \"unique_replies\": 1,\n \"unique_opens\": 0\n },\n \"created_at\": \"2024-07-29T02:10:45.000000Z\",\n \"updated_at\": \"2024-07-29T02:10:45.000000Z\"\n }\n }" tags: - Leads requestBody: required: false content: application/json: schema: type: object properties: first_name: type: string description: 'The first name of the contact.' example: John nullable: false last_name: type: string description: 'The last name of the contact.' example: Doe nullable: false email: type: string description: 'The email address of the contact. Must be in a valid email format.' example: john@doe.com nullable: false title: type: string description: 'The title of the contact.' example: Engineer nullable: true company: type: string description: 'The company name of the contact.' example: 'John Doe company' nullable: true notes: type: string description: 'Additional notes about the contact.' example: 'Important client' nullable: true custom_variables: type: array description: 'Array of custom variable objects' example: - name: 'phone number' value: '9059999999' items: type: object nullable: true properties: name: type: required description: 'name of the custom variable field' example: aliquam nullable: false value: type: required description: 'value of the custom variable' example: id nullable: true delete: summary: 'Delete a lead' operationId: deleteALead description: "Permanently delete a lead and its associated data\n\n**Hold on. You may not need to delete leads.**\nYou may be able to simply re-upload leads instead\n\n**I mapped the wrong custom variables for these leads**\nNo problem! Simply re-upload the leads and we'll update the records in place. This is especially useful if you already have lead history like conversations, campaigns, etc.\n\n**I don't to email these leads anymore**\nWe recommend unsubscribing these leads instead. Bulk select -> Update Status -> Unsubscribe. This way, you can preserve the lead history and stats for future reports.\n\n**I want to update these leads with more data**\nInstead of deleting, simply re-upload the leads. We'll update the records in place. This includes all campaign emails too.\n\n**I attached the wrong tags**\nYou can simply bulk select and remove tags instead of deleting the entire leads.\n\n**I don't want to use too much data**\nWe have no limits on lead storage. You can store as many leads as you want. We recommend keeping the leads in your workspace for future campaigns.\n\n**Why is it recommended to not delete leads?**\nWe build up history for every lead record you upload. There's no harm in keeping it in the workspace. If you delete leads, future responses from that lead will be untracked and not tied to any campaigns. This can be harder to manage for your team.\n\nThe behaviour of deleting leads comes from other sequencers that charge you for lead storage. You don't need to worry about deleting leads for 99% of use cases.\n\n**If you still want to delete leads, please read below carefully**\n\n**Leads will be removed from campaigns**\nThis will stop all future emails for the selected leads and remove them from all campaigns. If campaigns have no more leads remaining, they will be marked as \"completed\"\n\n**Previous campaign stats will be preserved**\nWe will preserve all past campaign stats like replies, opens, emails sent, etc.\n\n**Past and future lead conversations will be affected**\nPast conversations will no longer be tied to these leads, and future emails in those conversations will show us as \"untracked.\"\n\n**Leads will no longer be accessible via API**\nIf you have workflows that use these leads, they will no longer work. These leads will be deleted permanently. If you re-upload them in the future, they will be different lead records.\n\n**Future campaign stats will not be tracked**\nIf any of these leads reply in the future, those emails not increment any stats. They will show up as \"untracked replies.\" This also means that any webhook workflows will also be affected.\n\n**We recommend unsubscribing these leads instead**\nIf you simply don't want to email these leads anymore, we recommend unsubscribing them instead. This will preserve all data and all workflows, and there's no additional cost to you." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Lead deletion process started. This might take some time depending on how much data you have.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Lead deletion process started. This might take some time depending on how much data you have.' tags: - Leads parameters: - in: path name: lead_id description: 'Optional parameter. int|string The ID or email of the lead' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: ea '/api/leads/{lead_id}/replies': get: summary: 'Get all replies for lead' operationId: getAllRepliesForLead description: "This endpoint retrieves all replies for a specific lead\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: - in: query name: search description: 'Search term for filtering replies.' example: interested required: false schema: type: string description: 'Search term for filtering replies.' example: interested nullable: true - in: query name: status description: 'Filter by status. One of `interested`, `automated_reply`, `not_automated_reply`.' example: automated_reply required: false schema: type: string description: 'Filter by status. One of `interested`, `automated_reply`, `not_automated_reply`.' example: automated_reply nullable: false - in: query name: folder description: 'Filter by folder. One of `inbox`, `sent`, `spam`, `bounced`, `all`.' example: inbox required: false schema: type: string description: 'Filter by folder. One of `inbox`, `sent`, `spam`, `bounced`, `all`.' example: inbox nullable: false - in: query name: read description: 'Filter by read status.' example: true required: false schema: type: boolean description: 'Filter by read status.' example: true nullable: true - in: query name: campaign_id description: 'The ID of the campaign.' example: 12 required: false schema: type: integer description: 'The ID of the campaign.' example: 12 nullable: false - in: query name: sender_email_id description: 'The ID of the sender email address.' example: 243 required: false schema: type: integer description: 'The ID of the sender email address.' example: 243 nullable: false - in: query name: tag_ids description: 'Array of tag IDs to filter by.' example: - 1 - 2 - 3 required: false schema: type: array description: 'Array of tag IDs to filter by.' example: - 1 - 2 - 3 items: type: integer responses: 200: description: success content: application/json: schema: type: object example: data: - id: 45 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a621 folder: Inbox subject: 'yo test boy wassup G' read: true interested: false automated_reply: false html_body: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true - id: 1 campaign_id: 1 lead_id: 1 sender_email_id: 2 sequence_step_id: 3 thread_reply: true email_subject: 'Second Subject' email_body: 'dummy email body' status: sent scheduled_date: '2024-11-22T20:00:00.000000Z' scheduled_date_local: '2024-11-22T20:00:00.000000Z' sent_at: '2024-11-22T20:00:00.000000Z' opens: 2 clicks: 1 replies: 1 interested: true unique_replies: 0 unique_opens: 0 lead: id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' sender_email: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true links: first: 'http://bison.test/api/leads/1/scheduled-emails?page=1' last: 'http://bison.test/api/leads/1/scheduled-emails?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/leads/1/scheduled-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/leads/1/scheduled-emails' per_page: 15 to: 3 total: 3 properties: data: type: array example: - id: 1 campaign_id: 1 lead_id: 1 sender_email_id: 2 sequence_step_id: 3 thread_reply: true email_subject: 'First Subject' email_body: 'dummy email body' status: scheduled scheduled_date: '2024-11-25T15:30:00.000000Z' scheduled_date_local: '2024-11-25T15:30:00.000000Z' sent_at: null opens: 0 clicks: 0 replies: 0 interested: false unique_replies: 0 unique_opens: 0 lead: id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' sender_email: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true - id: 1 campaign_id: 1 lead_id: 1 sender_email_id: 2 sequence_step_id: 3 thread_reply: true email_subject: 'Second Subject' email_body: 'dummy email body' status: sent scheduled_date: '2024-11-22T20:00:00.000000Z' scheduled_date_local: '2024-11-22T20:00:00.000000Z' sent_at: '2024-11-22T20:00:00.000000Z' opens: 2 clicks: 1 replies: 1 interested: true unique_replies: 0 unique_opens: 0 lead: id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: John last_name: Doe email: john@doe.com title: Engineer company: 'John Doe company' notes: 'Important client' status: verified custom_variables: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' lead_campaign_data: [] overall_stats: emails_sent: 3 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' sender_email: id: 1 name: 'John Doe' email: john@doe.com email_signature: 'John Doe | Consultant
' imap_server: imap.server imap_port: 110 smtp_server: smtp.server smtp_port: 112 daily_limit: 5 type: Inbox status: Connected warmup_enabled: true emails_sent_count: 100 total_replied_count: 10 total_opened_count: 25 unsubscribed_count: 0 bounced_count: 0 unique_replied_count: 7 unique_opened_count: 7 total_leads_contacted_count: 50 interested_leads_count: 3 created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' tags: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 campaign_id: type: integer example: 1 lead_id: type: integer example: 1 sender_email_id: type: integer example: 2 sequence_step_id: type: integer example: 3 thread_reply: type: boolean example: true email_subject: type: string example: 'First Subject' email_body: type: string example: 'dummy email body' status: type: string example: scheduled scheduled_date: type: string example: '2024-11-25T15:30:00.000000Z' scheduled_date_local: type: string example: '2024-11-25T15:30:00.000000Z' sent_at: type: string example: null opens: type: integer example: 0 clicks: type: integer example: 0 replies: type: integer example: 0 interested: type: boolean example: false unique_replies: type: integer example: 0 unique_opens: type: integer example: 0 lead: type: object properties: id: type: integer example: 1 uuid: type: string example: 9f7a2718-aa56-43k2-a52b-a44dc183a622 first_name: type: string example: John last_name: type: string example: Doe email: type: string example: john@doe.com title: type: string example: Engineer company: type: string example: 'John Doe company' notes: type: string example: 'Important client' status: type: string example: verified custom_variables: type: array example: - name: company_website value: 'https://company.com' - name: linkedin_url value: 'https://linkedin.com/in/john' items: type: object properties: name: type: string example: company_website value: type: string example: 'https://company.com' lead_campaign_data: type: array example: [] overall_stats: type: object properties: emails_sent: type: integer example: 3 opens: type: integer example: 0 replies: type: integer example: 1 unique_replies: type: integer example: 1 unique_opens: type: integer example: 0 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' sender_email: type: object properties: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com email_signature: type: string example: 'John Doe | Consultant
' imap_server: type: string example: imap.server imap_port: type: integer example: 110 smtp_server: type: string example: smtp.server smtp_port: type: integer example: 112 daily_limit: type: integer example: 5 type: type: string example: Inbox status: type: string example: Connected warmup_enabled: type: boolean example: true emails_sent_count: type: integer example: 100 total_replied_count: type: integer example: 10 total_opened_count: type: integer example: 25 unsubscribed_count: type: integer example: 0 bounced_count: type: integer example: 0 unique_replied_count: type: integer example: 7 unique_opened_count: type: integer example: 7 total_leads_contacted_count: type: integer example: 50 interested_leads_count: type: integer example: 3 created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: type: array example: - id: 1 name: Google default: true items: type: object properties: id: type: integer example: 1 name: type: string example: Google default: type: boolean example: true links: type: object properties: first: type: string example: 'http://bison.test/api/leads/1/scheduled-emails?page=1' last: type: string example: 'http://bison.test/api/leads/1/scheduled-emails?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/leads/1/scheduled-emails?page=1' label: '1' active: true - url: null label: 'Next »' active: false items: type: object properties: url: type: string example: null label: type: string example: '« Previous' active: type: boolean example: false path: type: string example: 'http://bison.test/api/leads/1/scheduled-emails' per_page: type: integer example: 15 to: type: integer example: 3 total: type: integer example: 3 tags: - Leads parameters: - in: path name: lead_id description: 'the ID or email of the lead' example: 17 required: true schema: type: integer '/api/leads/{lead_id}/sent-emails': get: summary: 'Get all sent emails for a lead' operationId: getAllSentEmailsForALead description: 'Retrieves a collection of **sent** campaign emails associated with a lead on the authenticated workspace.' parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": [\n {\n \"id\": 1,\n \"campaign_id\": 1,\n \"lead_id\": 1,\n \"sender_email_id\": 2,\n \"sequence_step_id\": 3,\n \"thread_reply\": true,\n \"email_subject\": \"First Subject\",\n \"email_body\": \"dummy email body\",\n \"status\": \"sent\",\n \"scheduled_date\": \"2024-11-25T15:30:00.000000Z\",\n \"scheduled_date_local\": \"2024-11-25T15:30:00.000000Z\",\n \"sent_at\": null,\n \"opens\": 0,\n \"clicks\": 0,\n \"replies\": 0,\n \"interested\": false,\n \"unique_replies\": 0,\n \"unique_opens\": 0\n },\n {\n \"id\": 1,\n \"campaign_id\": 1,\n \"lead_id\": 1,\n \"sender_email_id\": 2,\n \"sequence_step_id\": 3,\n \"thread_reply\": true,\n \"email_subject\": \"Second Subject\",\n \"email_body\": \"dummy email body\",\n \"status\": \"sent\",\n \"scheduled_date\": \"2024-11-22T20:00:00.000000Z\",\n \"scheduled_date_local\": \"2024-11-22T20:00:00.000000Z\",\n \"sent_at\": \"2024-11-22T20:00:00.000000Z\",\n \"opens\": 2,\n \"clicks\": 1,\n \"replies\": 1,\n \"interested\": true,\n \"unique_replies\": 0,\n \"unique_opens\": 0\n },\n ]\n}" tags: - Leads parameters: - in: path name: lead_id description: 'The ID or the email of the lead.' example: sed required: true schema: type: string '/api/leads/{lead_id}/update-status': patch: summary: 'Update lead status' operationId: updateLeadStatus description: 'Update the status of a lead' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n \"data\": {\n \"id\": 326217,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"johaan@doaescuts5esse.com\",\n \"title\": \"Engineer\",\n \"company\": \"John Doe Company\",\n \"notes\": \"Important client\",\n \"status\": \"unsubscribed\",\n \"custom_variables\": [\n {\n \"name\": \"another one\",\n \"value\": \"baddye\"\n }\n ],\n \"lead_campaign_data\": [],\n \"overall_stats\": {\n \"emails_sent\": 3,\n \"opens\": 0,\n \"replies\": 1\n \"unique_replies\": 1,\n \"unique_opens\": 0\n },\n \"created_at\": \"2024-07-29T02:10:45.000000Z\",\n \"updated_at\": \"2024-07-29T02:10:45.000000Z\"\n }\n }" tags: - Leads requestBody: required: true content: application/json: schema: type: object properties: status: type: string description: 'The status to apply to the lead.' example: risky nullable: false enum: - verified - unverified - unknown - unsubscribed - risky - inactive required: - status parameters: - in: path name: lead_id description: 'The ID or email of the lead.' example: est required: true schema: type: string /api/leads/bulk: delete: summary: 'Bulk delete leads by ID' operationId: bulkDeleteLeadsByID description: "Permanently delete leads and associated data\n\n**Hold on. You may not need to delete leads.**\n You may be able to simply re-upload leads instead\n\n **I mapped the wrong custom variables for these leads**\n No problem! Simply re-upload the leads and we'll update the records in place. This is especially useful if you already have lead history like conversations, campaigns, etc.\n\n **I don't to email these leads anymore**\n We recommend unsubscribing these leads instead. Bulk select -> Update Status -> Unsubscribe. This way, you can preserve the lead history and stats for future reports.\n\n **I want to update these leads with more data**\n Instead of deleting, simply re-upload the leads. We'll update the records in place. This includes all campaign emails too.\n\n **I attached the wrong tags**\n You can simply bulk select and remove tags instead of deleting the entire leads.\n\n **I don't want to use too much data**\n We have no limits on lead storage. You can store as many leads as you want. We recommend keeping the leads in your workspace for future campaigns.\n\n **Why is it recommended to not delete leads?**\n We build up history for every lead record you upload. There's no harm in keeping it in the workspace. If you delete leads, future responses from that lead will be untracked and not tied to any campaigns. This can be harder to manage for your team.\n\n The behaviour of deleting leads comes from other sequencers that charge you for lead storage. You don't need to worry about deleting leads for 99% of use cases.\n\n **If you still want to delete leads, please read below carefully**\n\n **Leads will be removed from campaigns**\n This will stop all future emails for the selected leads and remove them from all campaigns. If campaigns have no more leads remaining, they will be marked as \"completed\"\n\n **Previous campaign stats will be preserved**\n We will preserve all past campaign stats like replies, opens, emails sent, etc.\n\n **Past and future lead conversations will be affected**\n Past conversations will no longer be tied to these leads, and future emails in those conversations will show us as \"untracked.\"\n\n **Leads will no longer be accessible via API**\n If you have workflows that use these leads, they will no longer work. These leads will be deleted permanently. If you re-upload them in the future, they will be different lead records.\n\n **Future campaign stats will not be tracked**\n If any of these leads reply in the future, those emails not increment any stats. They will show up as \"untracked replies.\" This also means that any webhook workflows will also be affected.\n\n **We recommend unsubscribing these leads instead**\n If you simply don't want to email these leads anymore, we recommend unsubscribing them instead. This will preserve all data and all workflows, and there's no additional cost to you." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Lead deletion process started. This might take some time depending on how much data you have.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Lead deletion process started. This might take some time depending on how much data you have.' tags: - Leads requestBody: required: false content: application/json: schema: type: object properties: lead_ids: type: array description: 'Theid of an existing record in the leads table.'
example:
- 19
items:
type: integer
/api/reply-templates:
get:
summary: 'Get all reply templates'
operationId: getAllReplyTemplates
description: "This endpoint retrieves all reply templates for the current workspace\n\nThe user must provide a valid authentication token in the request header to access this endpoint"
parameters:
-
in: query
name: search
description: 'optional string Use full text search to filter reply templates.'
example: 'positive reply template'
required: false
schema:
type: string
description: 'optional string Use full text search to filter reply templates.'
example: 'positive reply template'
nullable: false
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
-
id: 7
uuid: a043b958-0b6f-49aa-902c-ff277a332250
user_id: 6
name: 'Positive Reply Template Test'
body: 'hi there john,
thank you for your interest in our products.
we are here to help you run this out.
can you send something my way?
test body
' replyTemplateAttachments: [] created_at: '2025-11-02T23:46:53.000000Z' updated_at: '2025-11-02T23:46:53.000000Z' - id: 2 uuid: a043b832-235e-49bc-a9b7-994dcf4e4e85 user_id: 6 name: 'test name' body: 'test body
' replyTemplateAttachments: [] created_at: '2025-11-02T23:45:35.000000Z' updated_at: '2025-11-02T23:45:35.000000Z' links: first: 'http://bison.test/api/reply-templates?page=1' last: 'http://bison.test/api/reply-templates?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Previous' active: false - url: 'http://bison.test/api/reply-templates?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/reply-templates' per_page: 15 to: 3 total: 3 properties: data: type: array example: - id: 7 uuid: a043b958-0b6f-49aa-902c-ff277a332250 user_id: 6 name: 'Positive Reply Template Test' body: 'hi there john,
thank you for your interest in our products.
we are here to help you run this out.
can you send something my way?
test body
' replyTemplateAttachments: [] created_at: '2025-11-02T23:46:53.000000Z' updated_at: '2025-11-02T23:46:53.000000Z' - id: 2 uuid: a043b832-235e-49bc-a9b7-994dcf4e4e85 user_id: 6 name: 'test name' body: 'test body
' replyTemplateAttachments: [] created_at: '2025-11-02T23:45:35.000000Z' updated_at: '2025-11-02T23:45:35.000000Z' items: type: object properties: id: type: integer example: 7 uuid: type: string example: a043b958-0b6f-49aa-902c-ff277a332250 user_id: type: integer example: 6 name: type: string example: 'Positive Reply Template Test' body: type: string example: 'hi there john,
thank you for your interest in our products.
we are here to help you run this out.
can you send something my way?
id of an existing record in the tags table.'
example:
- 11
required: false
schema:
type: array
description: 'The id of an existing record in the tags table.'
example:
- 11
items:
type: integer
-
in: query
name: without_tags
description: 'Only show leads that have no tags attached.'
example: false
required: false
schema:
type: boolean
description: 'Only show leads that have no tags attached.'
example: false
nullable: false
-
in: query
name: warmup_status
description: 'The warmup status to filter by. Valid values: `enabled`, `disabled`'
example: enabled
required: false
schema:
type: string
description: 'The warmup status to filter by. Valid values: `enabled`, `disabled`'
example: enabled
nullable: false
-
in: query
name: mx_records_status
description: 'The mx records status to filter by. Valid values: `records missing`, `records valid`'
example: 'records valid'
required: false
schema:
type: string
description: 'The mx records status to filter by. Valid values: `records missing`, `records valid`'
example: 'records valid'
nullable: false
-
in: query
name: start_date
description: 'The start date to fetch stats (defaults to 10 days ago).'
example: '2024-07-01'
required: true
schema:
type: string
description: 'The start date to fetch stats (defaults to 10 days ago).'
example: '2024-07-01'
nullable: false
-
in: query
name: end_date
description: 'The end date to fetch stats (defaults to today).'
example: '2024-07-19'
required: true
schema:
type: string
description: 'The end date to fetch stats (defaults to today).'
example: '2024-07-19'
nullable: false
-
in: query
name: filters.excluded_tag_ids
description: 'Exclude email accounts by tag IDs.'
example:
- 1
- 2
- 3
required: false
schema:
type: array
description: 'Exclude email accounts by tag IDs.'
example:
- 1
- 2
- 3
items:
type: integer
-
in: query
name: filters.without_tags
description: 'Only show email accounts that have no tags attached.'
example: true
required: false
schema:
type: boolean
description: 'Only show email accounts that have no tags attached.'
example: true
nullable: false
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": [\n {\n \"id\": 25063,\n \"email\": \"gabe.laroche@bisonemails.com\",\n \"name\": \"Gabe Laroche\",\n \"domain\": \"bisonemails.com\",\n \"tags\": [],\n \"warmup_emails_sent\": 0,\n \"warmup_replies_received\": 0,\n \"warmup_emails_saved_from_spam\": 0,\n \"warmup_score\": 0,\n \"warmup_bounces_received_count\": 0,\n \"warmup_bounces_caused_count\": 0,\n \"warmup_disabled_for_bouncing_count\": 0\n },\n ],\n \"links\": {\n \"first\": \"http://bison.test/api/warmup/sender-emails?page=1\",\n \"last\": \"http://bison.test/api/warmup/sender-emails?page=1\",\n \"prev\": null,\n \"next\": null\n },\n \"meta\": {\n \"current_page\": 1,\n \"from\": 1,\n \"last_page\": 1,\n \"links\": [\n {\n \"url\": null,\n \"label\": \"« Previous\",\n \"active\": false\n },\n {\n \"url\": \"http://bison.test/api/warmup/sender-emails?page=1\",\n \"label\": \"1\",\n \"active\": true\n },\n {\n \"url\": null,\n \"label\": \"Next »\",\n \"active\": false\n }\n ],\n \"path\": \"http://bison.test/api/warmup/sender-emails\",\n \"per_page\": 15,\n \"to\": 1,\n \"total\": 1\n }\n}"
tags:
- Warmup
/api/warmup/sender-emails/enable:
patch:
summary: 'Enable warmup for email accounts'
operationId: enableWarmupForEmailAccounts
description: 'This endpoint enables warmup for all the selected email accounts'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
success: true
message: 'Enabling warmup for selected sender emails. This can take a few minutes if your list is long.'
properties:
data:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Enabling warmup for selected sender emails. This can take a few minutes if your list is long.'
tags:
- Warmup
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
sender_email_ids:
type: array
description: 'Array of sender email IDs.'
example:
- 1
- 2
- 3
items:
type: integer
required:
- sender_email_ids
/api/warmup/sender-emails/disable:
patch:
summary: 'Disable warmup for email accounts'
operationId: disableWarmupForEmailAccounts
description: 'This endpoint disables warmup for all the selected email accounts'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
success: true
message: 'Disabling warmup for selected sender emails. This can take a few minutes if your list is long. Warmup emails will slowly ramp down over a period of 24 hours.'
properties:
data:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Disabling warmup for selected sender emails. This can take a few minutes if your list is long. Warmup emails will slowly ramp down over a period of 24 hours.'
tags:
- Warmup
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
sender_email_ids:
type: array
description: 'Array of sender email IDs.'
example:
- 1
- 2
- 3
items:
type: integer
required:
- sender_email_ids
/api/warmup/sender-emails/update-daily-warmup-limits:
patch:
summary: 'Update daily warmup limits for email accounts'
operationId: updateDailyWarmupLimitsForEmailAccounts
description: 'This endpoint updates the daily warmup limits for selected email accounts'
parameters: []
responses:
200:
description: success
content:
application/json:
schema:
type: object
example:
data:
success: true
message: 'Succesfully updated sender email daily warmup limits'
properties:
data:
type: object
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Succesfully updated sender email daily warmup limits'
tags:
- Warmup
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
sender_email_ids:
type: array
description: 'Array of sender email IDs.'
example:
- 1
- 2
- 3
items:
type: integer
daily_limit:
type: integer
description: 'The daily limit of warmup emails to send'
example: 14
nullable: false
daily_reply_limit:
type: int|string
description: "The daily limit of warmup reply emails. You can pass an \"auto\" string to set this to auto.\n\nWARNING: You should only use this section if explicitly told by your inbox reseller. We cannot be held responsible if you experience low inbox health as a result of controlling your own reply rate."
example: quasi
nullable: false
required:
- sender_email_ids
- daily_limit
'/api/warmup/sender-emails/{senderEmailId}':
get:
summary: 'Show single email account with warmup details'
operationId: showSingleEmailAccountWithWarmupDetails
description: 'Retrieves a single email account (sender email) with its warmup details'
parameters:
-
in: query
name: start_date
description: 'The start date to fetch stats.'
example: '2024-07-01'
required: true
schema:
type: string
description: 'The start date to fetch stats.'
example: '2024-07-01'
nullable: false
-
in: query
name: end_date
description: 'The end date to fetch stats.'
example: '2024-07-19'
required: true
schema:
type: string
description: 'The end date to fetch stats.'
example: '2024-07-19'
nullable: false
responses:
200:
description: success
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"id\": 25063,\n \"email\": \"gabe.laroche@bisonemails.com\",\n \"name\": \"Gabe Laroche\",\n \"domain\": \"bisonemails.com\",\n \"tags\": [],\n \"warmup_emails_sent\": 0,\n \"warmup_replies_received\": 0,\n \"warmup_emails_saved_from_spam\": 0,\n \"warmup_score\": 0,\n \"warmup_bounces_received_count\": 0,\n \"warmup_bounces_caused_count\": 0,\n \"warmup_disabled_for_bouncing_count\": 0\n },\n}"
tags:
- Warmup
parameters:
-
in: path
name: senderEmailId
description: 'The ID (or email address) of the email account.'
example: 14
required: true
schema:
type: integer
/api/webhook-events/sample-payload:
get:
summary: 'Get sample webhook event payload'
operationId: getSampleWebhookEventPayload
description: ''
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"data\": {\n \"event\": {\n \"type\": \"EMAIL_SENT\",\n \"name\": \"Email Sent\",\n \"workspace_id\": 1,\n \"workspace_name\": \"Cody's Team\"\n },\n \"data\": {\n \"scheduled_email\": {\n \"id\": 4,\n \"lead_id\": 1,\n \"sequence_step_id\": 2,\n \"email_subject\": \"test subject\",\n \"email_body\": \"test
\",\n \"status\": \"sent\",\n \"scheduled_date_est\": \"2024-08-02T15:33:00.000000Z\",\n \"scheduled_date_local\": \"2024-08-02T15:33:00.000000Z\",\n \"local_timezone\": \"America/New_York\",\n \"sent_at\": \"2024-08-02T06:08:38.000000Z\",\n \"opens\": 0,\n \"replies\": 0,\n \"unique_opens\": 0,\n \"unique_replies\": 0,\n \"interested\": null\n },\n \"campaign_event\": {\n \"id\": 6,\n \"type\": \"sent\",\n \"created_at_local\": \"2024-08-02T06:09:35.000000Z\",\n \"local_timezone\": \"America/New_York\",\n \"created_at\": \"2024-08-02T06:09:35.000000Z\"\n },\n \"lead\": {\n \"id\": 1,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"email\": \"cody@emailguard.io\",\n \"first_name\": \"Cody\",\n \"last_name\": \"Smith\",\n \"status\": \"unverified\",\n \"title\": \"CEO\",\n \"company\": \"EmailGuard Inc.\",\n \"custom_variables\": [\n {\n \"name\": \"phone number\",\n \"value\": \"19999999999\"\n },\n {\n \"name\": \"personalized line\",\n \"value\": \"Noticed that EmailGuard is doing very well in the health monitoring space\"\n }\n ],\n \"emails_sent\": 1,\n \"opens\": 0,\n \"unique_opens\": 0,\n \"replies\": 0,\n \"unique_replies\": 0,\n \"bounces\": 0\n },\n \"campaign\": {\n \"id\": 2,\n \"name\": \"test\"\n },\n \"sender_email\": {\n \"id\": 3,\n \"name\": \"Cody\",\n \"email\": \"cody@emailguardalpha.com\",\n \"status\": \"connected\",\n \"type\": \"google_workspace_oauth\",\n \"daily_limit\": 10,\n \"emails_sent\": 1,\n \"replied\": 0,\n \"opened\": 0,\n \"unsubscribed\": 0,\n \"bounced\": 0,\n \"unique_replies\": 0,\n \"unique_opens\": 0,\n \"total_leads_contacted\": 1,\n \"interested\": 0,\n \"created_at\": \"2024-08-02T06:06:40.000000Z\",\n \"updated_at\": \"2024-08-02T06:08:38.000000Z\"\n }\n }\n}" tags: - 'Webhook Events' requestBody: required: true content: application/json: schema: type: object properties: event_type: type: string description: 'The event type.' example: email_sent nullable: false enum: - email_sent - lead_first_contacted - lead_replied - lead_interested - email_opened - email_bounced - lead_unsubscribed - email_account_added - email_account_removed - email_account_disconnected - email_account_reconnected - manual_email_sent - untracked_reply_received required: - event_type /api/webhook-events/event-types: get: summary: 'Get all webhook event types' operationId: getAllWebhookEventTypes description: 'Shows you a list of all valid webhook event types that are supported' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - name: 'Email Sent' id: email_sent - name: 'Manual Email Sent' id: manual_email_sent - name: 'Contact First Emailed' id: lead_first_contacted - name: 'Contact Replied' id: lead_replied - name: 'Contact Interested' id: lead_interested - name: 'Contact Unsubscribed' id: lead_unsubscribed - name: 'Untracked Reply Received' id: untracked_reply_received - name: 'Email Opened' id: email_opened - name: 'Email Bounced' id: email_bounced - name: 'Email Account Added' id: email_account_added - name: 'Email Account Removed' id: email_account_removed - name: 'Email Account Disconnected' id: email_account_disconnected - name: 'Email Account Reconnected' id: email_account_reconnected properties: data: type: array example: - name: 'Email Sent' id: email_sent - name: 'Manual Email Sent' id: manual_email_sent - name: 'Contact First Emailed' id: lead_first_contacted - name: 'Contact Replied' id: lead_replied - name: 'Contact Interested' id: lead_interested - name: 'Contact Unsubscribed' id: lead_unsubscribed - name: 'Untracked Reply Received' id: untracked_reply_received - name: 'Email Opened' id: email_opened - name: 'Email Bounced' id: email_bounced - name: 'Email Account Added' id: email_account_added - name: 'Email Account Removed' id: email_account_removed - name: 'Email Account Disconnected' id: email_account_disconnected - name: 'Email Account Reconnected' id: email_account_reconnected items: type: object properties: name: type: string example: 'Email Sent' id: type: string example: email_sent tags: - 'Webhook Events' /api/webhook-events/test-event: post: summary: 'Send a test webhook event' operationId: sendATestWebhookEvent description: 'Send a test webhook for a chosen event type' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully sent test webhook' payload: event: type: EMAIL_SENT name: 'Email Sent' workspace_id: 1 workspace_name: "Cody's Team" data: scheduled_email: id: 4 lead_id: 1 sequence_step_id: 2 email_subject: 'test subject' email_body: 'test
' status: sent scheduled_date_est: '2024-08-02T15:33:00.000000Z' scheduled_date_local: '2024-08-02T15:33:00.000000Z' local_timezone: America/New_York sent_at: '2024-08-02T06:08:38.000000Z' opens: 0 replies: 0 unique_opens: 0 unique_replies: 0 interested: null campaign_event: id: 6 type: sent created_at_local: '2024-08-02T06:09:35.000000Z' local_timezone: America/New_York created_at: '2024-08-02T06:09:35.000000Z' lead: id: 1 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a622 email: cody@emailguard.io first_name: Cody last_name: Smith status: unverified title: CEO company: 'EmailGuard Inc.' custom_variables: - name: 'phone number' value: '19999999999' - name: 'personalized line' value: 'Noticed that EmailGuard is doing very well in the health monitoring space' emails_sent: 1 opens: 0 unique_opens: 0 replies: 0 unique_replies: 0 bounces: 0 campaign: id: 2 name: test sender_email: id: 3 name: Cody email: cody@emailguardalpha.com status: connected type: google_workspace_oauth daily_limit: 10 emails_sent: 1 replied: 0 opened: 0 unsubscribed: 0 bounced: 0 unique_replies: 0 unique_opens: 0 total_leads_contacted: 1 interested: 0 created_at: '2024-08-02T06:06:40.000000Z' updated_at: '2024-08-02T06:08:38.000000Z' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully sent test webhook' payload: type: object properties: event: type: object properties: type: type: string example: EMAIL_SENT name: type: string example: 'Email Sent' workspace_id: type: integer example: 1 workspace_name: type: string example: "Cody's Team" data: type: object properties: scheduled_email: type: object properties: id: type: integer example: 4 lead_id: type: integer example: 1 sequence_step_id: type: integer example: 2 email_subject: type: string example: 'test subject' email_body: type: string example: 'test
' status: type: string example: sent scheduled_date_est: type: string example: '2024-08-02T15:33:00.000000Z' scheduled_date_local: type: string example: '2024-08-02T15:33:00.000000Z' local_timezone: type: string example: America/New_York sent_at: type: string example: '2024-08-02T06:08:38.000000Z' opens: type: integer example: 0 replies: type: integer example: 0 unique_opens: type: integer example: 0 unique_replies: type: integer example: 0 interested: type: string example: null campaign_event: type: object properties: id: type: integer example: 6 type: type: string example: sent created_at_local: type: string example: '2024-08-02T06:09:35.000000Z' local_timezone: type: string example: America/New_York created_at: type: string example: '2024-08-02T06:09:35.000000Z' lead: type: object properties: id: type: integer example: 1 uuid: type: string example: 9f7a2718-aa56-43k2-a52b-a44dc183a622 email: type: string example: cody@emailguard.io first_name: type: string example: Cody last_name: type: string example: Smith status: type: string example: unverified title: type: string example: CEO company: type: string example: 'EmailGuard Inc.' custom_variables: type: array example: - { name: 'phone number', value: '19999999999' } - { name: 'personalized line', value: 'Noticed that EmailGuard is doing very well in the health monitoring space' } items: type: object properties: { name: { type: string, example: 'phone number' }, value: { type: string, example: '19999999999' } } emails_sent: type: integer example: 1 opens: type: integer example: 0 unique_opens: type: integer example: 0 replies: type: integer example: 0 unique_replies: type: integer example: 0 bounces: type: integer example: 0 campaign: type: object properties: id: type: integer example: 2 name: type: string example: test sender_email: type: object properties: id: type: integer example: 3 name: type: string example: Cody email: type: string example: cody@emailguardalpha.com status: type: string example: connected type: type: string example: google_workspace_oauth daily_limit: type: integer example: 10 emails_sent: type: integer example: 1 replied: type: integer example: 0 opened: type: integer example: 0 unsubscribed: type: integer example: 0 bounced: type: integer example: 0 unique_replies: type: integer example: 0 unique_opens: type: integer example: 0 total_leads_contacted: type: integer example: 1 interested: type: integer example: 0 created_at: type: string example: '2024-08-02T06:06:40.000000Z' updated_at: type: string example: '2024-08-02T06:08:38.000000Z' tags: - 'Webhook Events' requestBody: required: true content: application/json: schema: type: object properties: event_type: type: string description: 'The event type.' example: email_sent nullable: false enum: - email_sent - lead_first_contacted - lead_replied - lead_interested - email_opened - email_bounced - lead_unsubscribed - email_account_added - email_account_removed - email_account_disconnected - email_account_reconnected - manual_email_sent - untracked_reply_received url: type: string description: 'The URL to send the webhook to. This must be an active URL that can receive requests.' example: 'https://blue-square-32.webhook.cool' nullable: false required: - event_type - url /api/workspaces: get: summary: 'List Workspaces' operationId: listWorkspaces description: "This endpoint retrieves all of the authenticated user's workspaces.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n [\n \"id\": 1,\n \"name\": \"John Doe's Team\",\n \"personal_team\": true,\n \"main\": true,\n \"parent_id\": null,\n \"total_monthly_email_verification_credits\": 0,\n \"remaining_monthly_email_verification_credits\": 0,\n \"remaining_email_verification_credits\": 0,\n \"total_email_verification_credits\": 0,\n \"sender_email_limit\": 100000,\n \"warmup_limit\": 100000,\n \"warmup_filter_phrase\": null,\n \"sender_email_limit_disabled\": false,\n \"has_access_to_warmup\": false,\n \"has_access_to_healthcheck\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n ],\n [\n \"id\": 2,\n \"name\": \"John Doe's Second Team\",\n \"personal_team\": true,\n \"main\": true,\n \"parent_id\": null,\n \"total_monthly_email_verification_credits\": 0,\n \"remaining_monthly_email_verification_credits\": 0,\n \"remaining_email_verification_credits\": 0,\n \"total_email_verification_credits\": 0,\n \"sender_email_limit\": 100000,\n \"warmup_limit\": 100000,\n \"warmup_filter_phrase\": null,\n \"sender_email_limit_disabled\": false,\n \"has_access_to_warmup\": false,\n \"has_access_to_healthcheck\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n ],\n }\n}" tags: - 'Workspaces v1 (deprecated)' post: summary: 'Create Workspace' operationId: createWorkspace description: "This endpoint allows the authenticated user to create a new workspace.\n\nThe user must provide a valid authentication token in the request header\nand the details of the new workspace in the request body." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 1 name: "John Doe's Second Team" personal_team: true main: true parent_id: null total_monthly_email_verification_credits: 0 remaining_monthly_email_verification_credits: 0 remaining_email_verification_credits: 0 total_email_verification_credits: 0 sender_email_limit: 100000 warmup_limit: 100000 warmup_filter_phrase: null sender_email_limit_disabled: false has_access_to_warmup: false has_access_to_healthcheck: false created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: "John Doe's Second Team" personal_team: type: boolean example: true main: type: boolean example: true parent_id: type: string example: null total_monthly_email_verification_credits: type: integer example: 0 remaining_monthly_email_verification_credits: type: integer example: 0 remaining_email_verification_credits: type: integer example: 0 total_email_verification_credits: type: integer example: 0 sender_email_limit: type: integer example: 100000 warmup_limit: type: integer example: 100000 warmup_filter_phrase: type: string example: null sender_email_limit_disabled: type: boolean example: false has_access_to_warmup: type: boolean example: false has_access_to_healthcheck: type: boolean example: false created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Workspaces v1 (deprecated)' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The new workspace name.' example: 'New name' nullable: false required: - name /api/workspaces/switch-workspace: post: summary: 'Switch Workspace' operationId: switchWorkspace description: "This endpoint allows the authenticated user to switch to a different workspace.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the target workspace in the request body to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: name: "John Doe's Second Team" properties: data: type: object properties: name: type: string example: "John Doe's Second Team" tags: - 'Workspaces v1 (deprecated)' requestBody: required: true content: application/json: schema: type: object properties: team_id: type: integer description: 'The ID of the team to switch.' example: 20 nullable: false required: - team_id '/api/workspaces/{team_id}': put: summary: 'Update Workspace' operationId: updateWorkspace description: "This endpoint allows the authenticated user to update their workspace information,\nspecifically the workspace name.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the target workspace, along with the details of the new workspace\nin the request body to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: name: 'J.D Workspace' properties: data: type: object properties: name: type: string example: 'J.D Workspace' tags: - 'Workspaces v1 (deprecated)' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The new workspace name.' example: 'New name' nullable: false required: - name get: summary: 'Workspace Details' operationId: workspaceDetails description: "This endpoint retrieves the details of the authenticated user's workspace.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 1 name: "John Doe's Team" personal_team: true main: true parent_id: null total_monthly_email_verification_credits: 0 remaining_monthly_email_verification_credits: 0 remaining_email_verification_credits: 0 total_email_verification_credits: 0 sender_email_limit: 100000 warmup_limit: 100000 warmup_filter_phrase: null sender_email_limit_disabled: false has_access_to_warmup: false has_access_to_healthcheck: false created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: "John Doe's Team" personal_team: type: boolean example: true main: type: boolean example: true parent_id: type: string example: null total_monthly_email_verification_credits: type: integer example: 0 remaining_monthly_email_verification_credits: type: integer example: 0 remaining_email_verification_credits: type: integer example: 0 total_email_verification_credits: type: integer example: 0 sender_email_limit: type: integer example: 100000 warmup_limit: type: integer example: 100000 warmup_filter_phrase: type: string example: null sender_email_limit_disabled: type: boolean example: false has_access_to_warmup: type: boolean example: false has_access_to_healthcheck: type: boolean example: false created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Workspaces v1 (deprecated)' parameters: - in: path name: team_id description: 'The ID of the workspace.' example: 16 required: true schema: type: integer /api/workspaces/invite-members: post: summary: 'Invite Team Member' operationId: inviteTeamMember description: "This endpoint allows the authenticated user to invite a new member to their team.\n\nThe user must provide a valid authentication token in the request header\nand the email and role of the new team member in the request body." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully invited example@example.com' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully invited example@example.com' tags: - 'Workspaces v1 (deprecated)' requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'The email of the new team member.' example: example@example.com nullable: false role: type: string description: 'The role of the new team member.' example: admin nullable: false enum: - admin - editor - client - reseller required: - email - role '/api/workspaces/accept/{team_invitation_id}': post: summary: 'Accept Workspace Invitation' operationId: acceptWorkspaceInvitation description: "This endpoint allows the user to accept an invitation to join a workspace.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the workspace invitation." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully accepted the invitation' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully accepted the invitation' tags: - 'Workspaces v1 (deprecated)' parameters: - in: path name: team_invitation_id description: 'The ID of the team invitation.' example: 9 required: true schema: type: integer '/api/workspaces/members/{user_id}': put: summary: 'Update Workspace Member' operationId: updateWorkspaceMember description: "This endpoint allows the authenticated user to update the role of a workspace member.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the workspace member and the new role in the request body." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully updated team member John Doe role' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully updated team member John Doe role' tags: - 'Workspaces v1 (deprecated)' requestBody: required: true content: application/json: schema: type: object properties: role: type: string description: 'The new role of the team member.' example: admin nullable: false enum: - admin - editor - client - reseller required: - role delete: summary: 'Delete Workspace Member' operationId: deleteWorkspaceMember description: "This endpoint allows the authenticated user to remove a workspace member.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the workspace member." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully deleted team member John Doe' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully deleted team member John Doe' tags: - 'Workspaces v1 (deprecated)' parameters: - in: path name: user_id description: 'The ID of the team member.' example: 8 required: true schema: type: integer /api/workspaces/v1.1: get: summary: 'List Workspaces' operationId: listWorkspaces description: "This endpoint retrieves all of the authenticated user's workspaces.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n [\n \"id\": 1,\n \"name\": \"John Doe's Team\",\n \"personal_team\": true,\n \"main\": true,\n \"parent_id\": null,\n \"total_monthly_email_verification_credits\": 0,\n \"remaining_monthly_email_verification_credits\": 0,\n \"remaining_email_verification_credits\": 0,\n \"total_email_verification_credits\": 0,\n \"sender_email_limit\": 100000,\n \"warmup_limit\": 100000,\n \"warmup_filter_phrase\": null,\n \"sender_email_limit_disabled\": false,\n \"has_access_to_warmup\": false,\n \"has_access_to_healthcheck\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n ],\n [\n \"id\": 2,\n \"name\": \"John Doe's Second Team\",\n \"personal_team\": true,\n \"main\": true,\n \"parent_id\": null,\n \"total_monthly_email_verification_credits\": 0,\n \"remaining_monthly_email_verification_credits\": 0,\n \"remaining_email_verification_credits\": 0,\n \"total_email_verification_credits\": 0,\n \"sender_email_limit\": 100000,\n \"warmup_limit\": 100000,\n \"warmup_filter_phrase\": null,\n \"sender_email_limit_disabled\": false,\n \"has_access_to_warmup\": false,\n \"has_access_to_healthcheck\": false,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-05-18T12:53:32.000000Z\"\n ],\n }\n}" tags: - 'Workspaces v1.1' post: summary: 'Create Workspace' operationId: createWorkspace description: "This endpoint allows the authenticated user to create a new workspace.\n\nThe user must provide a valid authentication token in the request header\nand the details of the new workspace in the request body." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 1 name: "John Doe's Second Team" personal_team: true main: true parent_id: null total_monthly_email_verification_credits: 0 remaining_monthly_email_verification_credits: 0 remaining_email_verification_credits: 0 total_email_verification_credits: 0 sender_email_limit: 100000 warmup_limit: 100000 warmup_filter_phrase: null sender_email_limit_disabled: false has_access_to_warmup: false has_access_to_healthcheck: false created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: "John Doe's Second Team" personal_team: type: boolean example: true main: type: boolean example: true parent_id: type: string example: null total_monthly_email_verification_credits: type: integer example: 0 remaining_monthly_email_verification_credits: type: integer example: 0 remaining_email_verification_credits: type: integer example: 0 total_email_verification_credits: type: integer example: 0 sender_email_limit: type: integer example: 100000 warmup_limit: type: integer example: 100000 warmup_filter_phrase: type: string example: null sender_email_limit_disabled: type: boolean example: false has_access_to_warmup: type: boolean example: false has_access_to_healthcheck: type: boolean example: false created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Workspaces v1.1' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The new workspace name.' example: 'New name' nullable: false required: - name /api/workspaces/v1.1/users: post: summary: 'Create User (and add to workspace)' operationId: createUserandAddToWorkspace description: "This endpoint provides a convenient way to create a new user on your instance, and\nadd them to the current workspace. This provides an alternate flow where you want to mass\ncreate users.\n\nIf you simply want to invite users and have them accept the invitation, or accept it\nprogrammatically, consider using the other endpoints." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: name: tingz email: listkittest@example.com workspace: id: 1 name: "Cody's Team" personal_team: true main: true parent_id: null total_monthly_email_verification_credits: 2500 remaining_monthly_email_verification_credits: 2462 remaining_email_verification_credits: 250 total_email_verification_credits: 250 sender_email_limit: 0 warmup_limit: 50 warmup_filter_phrase: qvwy7276 has_access_to_warmup: false has_access_to_healthcheck: false created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' profile_photo_path: null profile_photo_url: 'https://ui-avatars.com/api/?name=t&color=7F9CF5&background=EBF4FF' created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: name: type: string example: tingz email: type: string example: listkittest@example.com workspace: type: object properties: id: type: integer example: 1 name: type: string example: "Cody's Team" personal_team: type: boolean example: true main: type: boolean example: true parent_id: type: string example: null total_monthly_email_verification_credits: type: integer example: 2500 remaining_monthly_email_verification_credits: type: integer example: 2462 remaining_email_verification_credits: type: integer example: 250 total_email_verification_credits: type: integer example: 250 sender_email_limit: type: integer example: 0 warmup_limit: type: integer example: 50 warmup_filter_phrase: type: string example: qvwy7276 has_access_to_warmup: type: boolean example: false has_access_to_healthcheck: type: boolean example: false created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' profile_photo_path: type: string example: null profile_photo_url: type: string example: 'https://ui-avatars.com/api/?name=t&color=7F9CF5&background=EBF4FF' created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Workspaces v1.1' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the user' example: 'John Doe' nullable: false password: type: string description: 'The password of the user.' example: securepasswordlol nullable: false email: type: string description: 'The email of the user.' example: example@example.com nullable: false role: type: string description: 'The role of the new team member.' example: admin nullable: false enum: - admin - editor - client - reseller required: - name - password - email - role '/api/workspaces/v1.1/{team_id}/api-tokens': post: summary: 'Create API token for workspace' operationId: createAPITokenForWorkspace description: "This endpoint lets you create an API token for a given workspace\n\nRequires a \"super admin\" API token" parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 39 name: tingz plain_text_token: 39|RYHi6oE6o0fVuEPEDSUe6dN7tCFJwvJ6cAytBKxq69deeeee token_hash: 4d2a4cd30dbc1f30047a8c1341c5aebdfece35eafd8b43f17411e46cd4c6e36d abilities: - '*' created_at: '2025-03-10T04:29:09.000000Z' updated_at: '2025-03-10T04:29:09.000000Z' properties: data: type: object properties: id: type: integer example: 39 name: type: string example: tingz plain_text_token: type: string example: 39|RYHi6oE6o0fVuEPEDSUe6dN7tCFJwvJ6cAytBKxq69deeeee token_hash: type: string example: 4d2a4cd30dbc1f30047a8c1341c5aebdfece35eafd8b43f17411e46cd4c6e36d abilities: type: array example: - '*' items: type: string created_at: type: string example: '2025-03-10T04:29:09.000000Z' updated_at: type: string example: '2025-03-10T04:29:09.000000Z' tags: - 'Workspaces v1.1' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the user' example: 'New token' nullable: false required: - name parameters: - in: path name: team_id description: 'The ID of the team.' example: 1 required: true schema: type: integer /api/workspaces/v1.1/switch-workspace: post: summary: 'Switch Workspace' operationId: switchWorkspace description: "This endpoint allows the authenticated user to switch to a different workspace.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the target workspace in the request body to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: name: "John Doe's Second Team" properties: data: type: object properties: name: type: string example: "John Doe's Second Team" tags: - 'Workspaces v1.1' requestBody: required: true content: application/json: schema: type: object properties: team_id: type: integer description: 'The ID of the team (workspace) to switch.' example: 18 nullable: false required: - team_id '/api/workspaces/v1.1/{team_id}': delete: summary: 'Delete Workspace' operationId: deleteWorkspace description: "This endpoint allows the authenticated user to delete a workspace.\n\nThe user must provide a valid super-admin authentication token in the request header\nand the ID of the target workspace in the query parameters to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Workspace being deleted. This might take a few minutes if you have a lot of data.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Workspace being deleted. This might take a few minutes if you have a lot of data.' tags: - 'Workspaces v1.1' put: summary: 'Update Workspace' operationId: updateWorkspace description: "This endpoint allows the authenticated user to update their workspace information,\nspecifically the workspace name.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the target workspace, along with the details of the new workspace\nin the request body to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: name: 'J.D Workspace' properties: data: type: object properties: name: type: string example: 'J.D Workspace' tags: - 'Workspaces v1.1' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The new workspace name.' example: 'New name' nullable: false required: - name get: summary: 'Workspace Details' operationId: workspaceDetails description: "This endpoint retrieves the details of the authenticated user's workspace.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 1 name: "John Doe's Team" personal_team: true main: true parent_id: null total_monthly_email_verification_credits: 0 remaining_monthly_email_verification_credits: 0 remaining_email_verification_credits: 0 total_email_verification_credits: 0 sender_email_limit: 100000 warmup_limit: 100000 warmup_filter_phrase: null sender_email_limit_disabled: false has_access_to_warmup: false has_access_to_healthcheck: false created_at: '2025-04-14T16:59:21.000000Z' updated_at: '2025-05-18T12:53:32.000000Z' properties: data: type: object properties: id: type: integer example: 1 name: type: string example: "John Doe's Team" personal_team: type: boolean example: true main: type: boolean example: true parent_id: type: string example: null total_monthly_email_verification_credits: type: integer example: 0 remaining_monthly_email_verification_credits: type: integer example: 0 remaining_email_verification_credits: type: integer example: 0 total_email_verification_credits: type: integer example: 0 sender_email_limit: type: integer example: 100000 warmup_limit: type: integer example: 100000 warmup_filter_phrase: type: string example: null sender_email_limit_disabled: type: boolean example: false has_access_to_warmup: type: boolean example: false has_access_to_healthcheck: type: boolean example: false created_at: type: string example: '2025-04-14T16:59:21.000000Z' updated_at: type: string example: '2025-05-18T12:53:32.000000Z' tags: - 'Workspaces v1.1' parameters: - in: path name: team_id description: 'The ID of the team (workspace) to delete.' example: 5 required: true schema: type: integer /api/workspaces/v1.1/invite-members: post: summary: 'Invite Team Member' operationId: inviteTeamMember description: "This endpoint allows the authenticated user to invite a new member to their team.\n\nThe user must provide a valid authentication token in the request header\nand the email and role of the new team member in the request body." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 11 uuid: 9e656435-3ad8-4685-9973-b07f92f7025f workspace_id: 1 email: example+teaminvite@example.com role: admin created_at: '2025-03-10T05:05:00.000000Z' updated_at: '2025-03-10T05:05:00.000000Z' properties: data: type: object properties: id: type: integer example: 11 uuid: type: string example: 9e656435-3ad8-4685-9973-b07f92f7025f workspace_id: type: integer example: 1 email: type: string example: example+teaminvite@example.com role: type: string example: admin created_at: type: string example: '2025-03-10T05:05:00.000000Z' updated_at: type: string example: '2025-03-10T05:05:00.000000Z' tags: - 'Workspaces v1.1' requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'The email of the new team member.' example: example@example.com nullable: false role: type: string description: 'The role of the new team member.' example: admin nullable: false enum: - admin - editor - client - reseller required: - email - role '/api/workspaces/v1.1/accept/{team_invitation_id}': post: summary: 'Accept Workspace Invitation' operationId: acceptWorkspaceInvitation description: "This endpoint allows the user to accept an invitation to join a workspace.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the workspace invitation." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully accepted the invitation' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully accepted the invitation' tags: - 'Workspaces v1.1' parameters: - in: path name: team_invitation_id description: 'The ID of the team invitation.' example: 3 required: true schema: type: integer '/api/workspaces/v1.1/members/{user_id}': put: summary: 'Update Workspace Member Role' operationId: updateWorkspaceMemberRole description: "This endpoint allows the authenticated user to update the role of a workspace member.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the workspace member and the new role in the request body." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully updated team member John Doe role' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully updated team member John Doe role' tags: - 'Workspaces v1.1' requestBody: required: true content: application/json: schema: type: object properties: role: type: string description: 'The new role of the team member.' example: admin nullable: false enum: - admin - editor - client - reseller required: - role delete: summary: 'Delete Workspace Member' operationId: deleteWorkspaceMember description: "This endpoint allows the authenticated user to remove a workspace member.\n\nThis does not delete the user account. It only removes them from the workspace.\n\nThe user must provide a valid authentication token in the request header\nand the ID of the workspace member." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully deleted team member John Doe' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully deleted team member John Doe' tags: - 'Workspaces v1.1' parameters: - in: path name: user_id description: 'The ID of the team member.' example: 6 required: true schema: type: integer /api/workspaces/v1.1/master-inbox-settings: get: summary: 'Get Master Inbox Settings' operationId: getMasterInboxSettings description: "This endpoint retrieves the master inbox settings for this workspace.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: sync_all_emails: true smart_warmup_filter: true auto_interested_categorization: false properties: data: type: object properties: sync_all_emails: type: boolean example: true smart_warmup_filter: type: boolean example: true auto_interested_categorization: type: boolean example: false tags: - 'Workspaces v1.1' patch: summary: 'Update Master Inbox Settings' operationId: updateMasterInboxSettings description: "This endpoint updates the master inbox settings for this workspace.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: sync_all_emails: true smart_warmup_filter: true auto_interested_categorization: false properties: data: type: object properties: sync_all_emails: type: boolean example: true smart_warmup_filter: type: boolean example: true auto_interested_categorization: type: boolean example: false tags: - 'Workspaces v1.1' requestBody: required: false content: application/json: schema: type: object properties: sync_all_emails: type: boolean description: "If set to true, all emails (incoming an outgoing) will be synced.\nIf set to false, only replies to your campaign emails will be synced.\n\nOnly set to false if you are managing your master inbox in another app and want to reduce noise." example: false nullable: false smart_warmup_filter: type: boolean description: "If set to true, we will check each email for hyphenated words (eg. strong-bison),\nand automatically discard them from being synced" example: false nullable: false auto_interested_categorization: type: boolean description: "If set to true, we will use GPT-4o-mini to check the contents\nof your email to determine if the response is interested is not.\nThis categorization only runs for the first unique reply from a contact." example: false nullable: false /api/workspaces/v1.1/stats: get: summary: 'Get workspace stats (summary)' operationId: getWorkspaceStatssummary description: "This endpoint retrieves overall stats for this workspace between two given dates.\n\nThe user must provide a valid authentication token in the request header to access this endpoint." parameters: - in: query name: start_date description: 'The start date to fetch stats.' example: '2024-07-01' required: true schema: type: string description: 'The start date to fetch stats.' example: '2024-07-01' nullable: false - in: query name: end_date description: 'The end date to fetch stats.' example: '2024-07-19' required: true schema: type: string description: 'The end date to fetch stats.' example: '2024-07-19' nullable: false responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"emails_sent\": \"10\",\n \"total_leads_contacted\": \"5\",\n \"opened\": \"5\",\n \"opened_percentage\": \"50\",\n \"unique_opens_per_contact\": \"5\",\n \"unique_opens_per_contact_percentage\": \"50\",\n \"unique_replies_per_contact\": \"5\",\n \"unique_replies_per_contact_percentage\": \"50\",\n \"bounced\": \"0\",\n \"bounced_percentage\": \"0\",\n \"unsubscribed\": \"5\",\n \"unsubscribed_percentage\": \"50\",\n \"interested\": \"5\",\n \"interested_percentage\": \"50\",\n }\n }" tags: - 'Workspaces v1.1' /api/workspaces/v1.1/line-area-chart-stats: get: summary: 'Get full normalized stats by date' operationId: getFullNormalizedStatsByDate description: "This endpoint retrieves stats by date for a given period\n\nThe user must provide a valid authentication token in the request header to access this endpoint.\n\nEvents returned: `Replied`, `Total Opens`, `Unique Opens`, `Sent`, `Bounced`, `Unsubscribed`, `Interested`" parameters: - in: query name: start_date description: 'The start date to fetch stats.' example: '2024-07-01' required: true schema: type: string description: 'The start date to fetch stats.' example: '2024-07-01' nullable: false - in: query name: end_date description: 'The end date to fetch stats.' example: '2024-07-19' required: true schema: type: string description: 'The end date to fetch stats.' example: '2024-07-19' nullable: false responses: 200: description: success content: application/json: schema: type: object example: data: - label: Replied color: '#f54842' dates: - - '2025-05-03' - 0 - label: 'Total Opens' color: '#00E396' dates: - - '2025-05-03' - 0 - label: Sent color: '#3B82F6' dates: - - '2025-05-03' - 0 - label: Unsubscribed color: '#fffff2' dates: - - '2025-05-03' - 0 - label: Bounced color: '#fffff1' dates: - - '2025-05-03' - 0 - label: Interested color: '#fffff3' dates: - - '2025-05-03' - 0 - label: 'Unique Opens' color: '#00d0ff' dates: - - '2025-05-03' - 0 properties: data: type: array example: - label: Replied color: '#f54842' dates: - - '2025-05-03' - 0 - label: 'Total Opens' color: '#00E396' dates: - - '2025-05-03' - 0 - label: Sent color: '#3B82F6' dates: - - '2025-05-03' - 0 - label: Unsubscribed color: '#fffff2' dates: - - '2025-05-03' - 0 - label: Bounced color: '#fffff1' dates: - - '2025-05-03' - 0 - label: Interested color: '#fffff3' dates: - - '2025-05-03' - 0 - label: 'Unique Opens' color: '#00d0ff' dates: - - '2025-05-03' - 0 items: type: object properties: label: type: string example: Replied color: type: string example: '#f54842' dates: type: array example: - - '2025-05-03' - 0 items: type: array tags: - 'Workspaces v1.1'