openapi: 3.0.3 info: title: 'API Reference' description: '' version: 1.0.0 servers: - url: 'https://dedi.emailbison.com' tags: - name: 'Account Management' description: "\nThis section handles operations related to user accounts within the application.\nIt includes endpoints for user registration, profile management and password reset." - name: Campaigns description: "\nThis section provides endpoints to manage campaign-related operations." - name: Replies description: "\nThis section provides endpoints to manage replies.\nIt includes functionalities for retrieving, updating, and managing replies." - name: 'Email Accounts' description: "\nThis section provides endpoints to manage email accounts associated with a workspace.\nIt includes functionalities for listing all email accounts, retrieving details of a specific email account,\ncreating new IMAP/SMTP email accounts, testing IMAP and SMTP connections, and deleting existing email accounts." - name: 'Email Blacklist' description: "\nAPIs for managing blacklisted emails. This includes retrieving, creating,\nbulk creating, and removing blacklisted emails." - name: 'Domain Blacklist' description: "\n\nAPIs for managing blacklisted domains. This includes retrieving, creating,\nbulk creating, and removing blacklisted domains." - name: 'Custom Tags' description: "\nAPIs for managing tags. This includes creating, retrieving, attaching to leads,\nand removing tags from leads." - name: 'Custom Tracking Domains' description: "\nAPIs for managing custom tracking domains. This includes retrieving, creating,\nand removing custom tracking domains." - name: Webhooks description: "\nAPIs for managing webhooks. This includes listing, creating, retrieving and deleting webhook urls." - name: 'Campaign Events' description: "\nDrill down into campaign event stats based on dates, campaign IDs, and/or sender email IDs" - name: 'Campaigns v1.1' description: "\nThis section provides endpoints to manage campaign-related operations." - name: 'Custom Lead Variables' description: "\nHere you can manage all custom variables created for a given workspace" - name: 'Ignore Phrases' description: "\nAPIs for managing ignore phrases. This includes retrieving, creating,\n and removing ignore phrases." - name: Leads description: "\nThis group of endpoints allows for the management of contact (lead) information." - name: 'Reply Templates' description: "\nThis section provides endpoints to manage reply templates. You can then use these as templated responses\nwhen sending replies to leads." - name: 'Scheduled Emails' description: "\nThis section provides endpoints to manage scheduled emails." - name: Warmup description: "\nThis section provides endpoints to let you manage your warmup settings for email accounts (sender emails)" - name: 'Webhook Events' description: "\nAPIs for managing webhook events, sending test events, and viewing samples" - name: 'Workspaces v1 (deprecated)' description: "\nThis section provides endpoints to manage workspace-related operations.\nIt includes functionalities for creating, updating, and deleting workspaces" - name: 'Workspaces v1.1' description: "\nThis section provides endpoints to manage workspace-related operations.\nIt includes functionalities for creating, updating, and deleting workspaces" components: securitySchemes: default: type: http scheme: bearer description: 'You can retrieve your token by visiting your dashboard and clicking Generate API token.' security: - default: [] paths: /api/users: get: summary: 'Account Details' operationId: accountDetails description: "This endpoint retrieves the details of the authenticated user.\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' email: john@doe.com team: 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 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=J&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: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com team: 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 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=J&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: - 'Account Management' /api/users/profile-picture: post: summary: 'Update Profile Picture' operationId: updateProfilePicture description: "This endpoint allows the authenticated user to update their profile information, specifically their profile picture.\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' email: john@doe.com team: 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 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: 'https://emailbison.s3.amazonaws.com/v2/images/1/f24c3135-9f3a-46f5-ac1c-139271a72cd9.jpg' profile_photo_url: 'https://ui-avatars.com/api/?name=J&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: id: type: integer example: 1 name: type: string example: 'John Doe' email: type: string example: john@doe.com team: 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 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: 'https://emailbison.s3.amazonaws.com/v2/images/1/f24c3135-9f3a-46f5-ac1c-139271a72cd9.jpg' profile_photo_url: type: string example: 'https://ui-avatars.com/api/?name=J&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: - 'Account Management' requestBody: required: true content: multipart/form-data: schema: type: object properties: photo: type: string format: binary description: 'The new profile picture to update. Must be a valid image file (jpg, jpeg or png) and no larger than 1MB.' nullable: false required: - photo /api/users/password: put: summary: 'Update Password' operationId: updatePassword description: "This endpoint allows the authenticated user to update their password.\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: success: true message: 'Successfully updated your profile password' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully updated your profile password' tags: - 'Account Management' requestBody: required: true content: application/json: schema: type: object properties: current_password: type: string description: 'Your current password.' example: password nullable: false password: type: string description: 'Your new password.' example: new-password nullable: false password_confirmation: type: string description: 'Your new password repeated.' example: new-password nullable: false required: - current_password - password - password_confirmation /api/users/headless-ui-token: post: summary: 'Generate headless UI token (beta)' operationId: generateHeadlessUITokenbeta description: "This endpoint allows the authenticated workspace user to generate a headless UI token that's valid\nfor up to **120 minutes**. The main purpose of this token is to let partner apps generate an embedded email\naccount connection view without having to build all the UIs and OAuth connection flows themselves.\n\nMultiple tokens can be active at a given time, but they will all expire after **120 minutes**.\n\n`Note:` You must get your requesting URL whitelisted before embedding the iframe in\nyour app.\n\nThe user must provide a valid authentication token in the request header to access this endpoint.\n\nOnce a token is generated, you can open an Iframe with the following URL format: https://your-bison-url.com/headless-ui-login?token=YOUR_HEADLESS_UI_TOKEN\n\nThis will then open an app window without the navigation bar and breadcrumbs. For now, this is only recommended\nfor enabling email account connection flows for OAuth." parameters: [] responses: 200: description: success content: text/plain: schema: type: string example: "{\n \"data\": {\n \"token\": \"headless_ui_token_rtG42rhsFhHq8rySjjaWh8RnaA\",\n }\n}" tags: - 'Account Management' /api/campaigns: get: summary: 'List campaigns' operationId: listCampaigns description: "This endpoint retrieves all of the authenticated user's campaigns.\n\nSearch, tags, and status are all optional parameters." 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 \"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 \"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 \"total_leads\": 4,\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 {\n \"id\": 2,\n \"uuid\": \"8be8h930-b391-9381-c328-2902b4826r83\",\n \"name\": \"Jane Doe Campaign\",\n \"type\": \"outbound\",\n \"status\": \"Launching\",\n \"completion_percentage\": 45.23,\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 \"sequence_prioritization\": new_leads,\n \"total_leads\": 6,\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 ],\n \"links\": {\n \"first\": \"http://bison.test/api/campaigns?page=1\",\n \"last\": \"http://bison.test/api/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/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/campaigns\",\n \"per_page\": 15,\n \"to\": 3,\n \"total\": 3\n }\n}" tags: - Campaigns requestBody: required: false content: application/json: schema: type: object properties: search: type: string description: '' example: null nullable: true status: type: string description: '' example: archived nullable: true enum: - draft - launching - active - stopped - completed - paused - failed - queued - archived - 'pending deletion' - deleted tag_ids: type: array description: 'The 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//sequence-steps` endpoint." example: 6 required: true schema: type: integer '/api/campaigns/sequence-steps/{sequence_step_id}/test-email': post: summary: 'Send sequence step test email' operationId: sendSequenceStepTestEmail description: "This endpoint allows the authenticated user to send a test email from a sequence step. You need at least\none lead in the campaign to send a test email." 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 requestBody: required: true content: application/json: schema: type: object properties: sender_email_id: type: integer description: 'The ID of the sender email to send from.' example: 11 nullable: false to_email: type: string description: 'The email address to send the sequence step to.' example: terry.burley@example.com nullable: false use_dedicated_ips: type: boolean description: 'Send using the dedicated campaign IPs instead of the instance IP' example: true nullable: false required: - sender_email_id - to_email 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//sequence-steps` endpoint." example: 15 required: true schema: type: integer '/api/campaigns/{campaign_id}/replies': get: summary: 'Get campaign replies' operationId: getCampaignReplies description: 'This endpoint retrieves all replies associated with a campaign.' 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: 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: 'The 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\": \"
yo whats good essssssey
\",\n \"text_body\": \"yo whats good essssssey\",\n \"raw_body\": null,\n \"headers\": null,\n \"date_received\": \"2024-09-21T02:10:42.000000Z\",\n \"type\": \"Untracked Reply\",\n \"tracked_reply\": false,\n \"scheduled_email_id\": null,\n \"campaign_id\": 123,\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\": 25057,\n \"raw_message_id\": \"\",\n \"from_name\": \"Cody Smith\",\n \"from_email_address\": \"cody@emailguard.io\",\n \"primary_to_email_address\": \"usysows3w88c6ljx@eguardtest.com\",\n \"to\": [\n {\n \"name\": \"Chimma Tester\",\n \"address\": \"usysows3w88c6ljx@eguardtest.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": null,\n \"attachments\": [\n \"id\": 213,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"reply_id\": 45,\n \"file_name\": \"image.png\",\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 ],\n \"links\": {\n \"first\": \"http://bison.test/api/campaigns/1/replies?page=1\",\n \"last\": \"http://bison.test/api/campaigns/1/replies?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/replies?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/replies\",\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: 20 required: true schema: type: integer '/api/campaigns/{campaign_id}/leads': get: summary: 'Get all leads for campaign' operationId: getAllLeadsForCampaign description: 'This endpoint retrieves all leads associated with a campaign.' 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: - ipsum required: false schema: type: array description: 'Filter by the number of emails sent.' example: - ipsum 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: - ut required: false schema: type: array description: 'A verification status. Accepted values: `verifying`, `verified`, `risky`, `unknown`, `unverified`, `inactive`, `bounced`, `unsubscribed`' example: - ut 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.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: false - 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: false responses: 200: description: success content: application/json: schema: type: object example: data: - id: 1138 first_name: Tom last_name: Fisher email: bademail@example.com title: null company: null notes: null status: bounced custom_variables: [] lead_campaign_data: status: bounced emails_sent: 1 replies: 0 opens: 0 interested: false overall_stats: emails_sent: 1 opens: 0 replies: 0 unique_replies: 0 unique_opens: 0 created_at: '2024-06-16T23:51:54.000000Z' updated_at: '2024-06-16T23:54:54.000000Z' - id: 1139 first_name: Cody last_name: Smith email: cody@emailguard.io title: null company: null notes: null status: unverified custom_variables: [] lead_campaign_data: status: sequence_finished emails_sent: 1 replies: 0 opens: 0 interested: false overall_stats: emails_sent: 1 opens: 0 replies: 0 unique_replies: 0 unique_opens: 0 created_at: '2024-06-16T23:51:54.000000Z' updated_at: '2024-06-16T23:53:56.000000Z' links: first: 'http://bison.test/api/campaigns/1/leads?page=1' last: 'http://bison.test/api/campaigns/1/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/campaigns/1/leads?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/campaigns/1/leads' per_page: 15 to: 3 total: 3 properties: data: type: array example: - id: 1138 first_name: Tom last_name: Fisher email: bademail@example.com title: null company: null notes: null status: bounced custom_variables: [] lead_campaign_data: status: bounced emails_sent: 1 replies: 0 opens: 0 interested: false overall_stats: emails_sent: 1 opens: 0 replies: 0 unique_replies: 0 unique_opens: 0 created_at: '2024-06-16T23:51:54.000000Z' updated_at: '2024-06-16T23:54:54.000000Z' - id: 1139 first_name: Cody last_name: Smith email: cody@emailguard.io title: null company: null notes: null status: unverified custom_variables: [] lead_campaign_data: status: sequence_finished emails_sent: 1 replies: 0 opens: 0 interested: false overall_stats: emails_sent: 1 opens: 0 replies: 0 unique_replies: 0 unique_opens: 0 created_at: '2024-06-16T23:51:54.000000Z' updated_at: '2024-06-16T23:53:56.000000Z' items: type: object properties: id: type: integer example: 1138 first_name: type: string example: Tom last_name: type: string example: Fisher email: type: string example: bademail@example.com title: type: string example: null company: type: string example: null notes: type: string example: null status: type: string example: bounced custom_variables: type: array example: [] lead_campaign_data: type: object properties: status: type: string example: bounced emails_sent: type: integer example: 1 replies: type: integer example: 0 opens: type: integer example: 0 interested: type: boolean example: false overall_stats: type: object properties: emails_sent: type: integer example: 1 opens: type: integer example: 0 replies: type: integer example: 0 unique_replies: type: integer example: 0 unique_opens: type: integer example: 0 created_at: type: string example: '2024-06-16T23:51:54.000000Z' updated_at: type: string example: '2024-06-16T23:54:54.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/campaigns/1/leads?page=1' last: type: string example: 'http://bison.test/api/campaigns/1/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/campaigns/1/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/campaigns/1/leads' per_page: type: integer example: 15 to: type: integer example: 3 total: type: integer example: 3 tags: - Campaigns delete: summary: 'Remove leads from a campaign' operationId: removeLeadsFromACampaign description: "This endpoint allows the authenticated user to remove leads from a campaign.\n\n**Hold on. You may not need to remove leads!**\nPlease read carefully before attempting to delete.\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 in this campaign anymore**\nYou can simply click \"stop future emails\" instead.\n\nIf you want to stop them from being emailed in any campaign, 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**\nInstead of deleting, simply re-upload the leads. We'll update the records in place. This includes all campaign emails too. If you delete, their history in this campaign will be reset.\n\n**If you still want to remove them from the campaign, please read carefully below.**\n\n**All future scheduled emails in this campaign will be stopped (for these leads)**\nYour leads will no longer receive future emails from this campaign\n\n**Existing campaign stats (for these leads) will be retained**\nYou will still be able to pull data from this campaign for all past stats (eg. emails sent, replies received, etc.)\n\n**Lead conversations will remain**\nYou will still be able continue lead conversations through the master inbox\n\n**These leads will no longer be accessible via API (for this campaign)**\nYou will be responsible for your automations if you rely on cached or self-stored values for these leads\n\n**Future replies for these leads will not increment stats**\n**If you emailed these leads and they respond in the future after being removed, stats will not be incremented**\n\n**This action is permanent and cannot be reversed**\nIf you removed these leads by accident and try to re-add them, the history will be totally reset. This action is permanent." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: success: true message: 'Leads successfully removed from Campaign One.' properties: success: type: boolean example: true message: type: string example: 'Leads successfully removed from Campaign One.' tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: lead_ids: type: array description: 'An array of lead IDs to remove.' example: - 1 - 2 - 3 items: type: integer required: - lead_ids parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 20 required: true schema: type: integer '/api/campaigns/{campaign_id}/leads/attach-lead-list': post: summary: 'Import leads from existing list' operationId: importLeadsFromExistingList description: 'This endpoint allows the authenticated user to import leads from an existing list into a campaign.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Leads successfully imported to Campaign One.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Leads successfully imported to Campaign One.' tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: allow_parallel_sending: type: boolean description: 'Force add leads that are "In Sequence" in other campaigns.' example: false nullable: false lead_list_id: type: integer description: 'The ID of the lead list to import.' example: 1 nullable: false required: - lead_list_id parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 4 required: true schema: type: integer '/api/campaigns/{campaign_id}/leads/attach-leads': post: summary: 'Import leads by IDs' operationId: importLeadsByIDs description: "This endpoint allows the authenticated user to import leads by their IDs into a campaign.\n\nIf you are adding leads to an active campaign, we cache them locally, and then sync every\n5 minutes to ensure there is no interruption to your sending.\n\n**Important:** If you add leads into a \"reply followup campaign\" using this endpoint, we\nwill just start the conversation from **the last sent reply**. We recommend that you use\nthe more explicit `/replies/id/followup-campaign/push` endpoint to control exactly which\nconversation you want to follow up on." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Leads successfully added to Campaign One.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Leads successfully added to Campaign One.' tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: allow_parallel_sending: type: boolean description: 'Force add leads that are "In Sequence" in other campaigns.' example: true nullable: false lead_ids: type: array description: 'An array of lead IDs to import.' example: - 1 - 2 - 3 items: type: integer required: - lead_ids parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 5 required: true schema: type: integer '/api/campaigns/{campaign_id}/leads/stop-future-emails': post: summary: 'Stop future emails for leads' operationId: stopFutureEmailsForLeads description: 'This endpoint allows the authenticated user to stop future emails for selected leads in a campaign' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Stopping future emails for selected leads in Blue Campaign.' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Stopping future emails for selected leads in Blue Campaign.' tags: - Campaigns requestBody: required: true content: application/json: schema: type: object properties: lead_ids: type: array description: 'An array of lead IDs to stop future emails for.' example: - 1 - 2 - 3 items: type: integer required: - lead_ids parameters: - in: path name: campaign_id description: 'The ID of the campaign.' example: 18 required: true schema: type: integer '/api/campaigns/{campaign_id}/scheduled-emails': get: summary: 'Get all scheduled emails for campaign' operationId: getAllScheduledEmailsForCampaign description: 'This endpoint retrieves all scheduled emails associated with a campaign.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: - 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 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: 'The id 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\": \"
yo whats good essssssey
\",\n \"text_body\": \"yo whats good essssssey\",\n \"raw_body\": null,\n \"headers\": null,\n \"date_received\": \"2024-09-21T02:10:42.000000Z\",\n \"type\": \"Untracked Reply\",\n \"tracked_reply\": false,\n \"scheduled_email_id\": 12581,\n \"campaign_id\": 21,\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\": 25057,\n \"raw_message_id\": \"\",\n \"from_name\": \"Cody Smith\",\n \"from_email_address\": \"cody@emailguard.io\",\n \"primary_to_email_address\": \"usysows3w88c6ljx@eguardtest.com\",\n \"to\": [\n {\n \"name\": \"Chimma Tester\",\n \"address\": \"usysows3w88c6ljx@eguardtest.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": null,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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 \"links\": {\n \"first\": \"http://bison.test/api/replies?page=1\",\n \"last\": \"http://bison.test/api/replies?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/replies?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/replies\",\n \"per_page\": 15,\n \"to\": 3,\n \"total\": 3\n }\n}" tags: - Replies '/api/replies/{id}': get: summary: 'Get reply' operationId: getReply description: "This endpoint retrieves a specific reply by its ID.\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\": 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\": \"
yo whats good essssssey
\",\n \"text_body\": \"yo whats good essssssey\",\n \"raw_body\": null,\n \"headers\": null,\n \"date_received\": \"2024-09-21T02:10:42.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\": 25057,\n \"raw_message_id\": \"\",\n \"from_name\": \"Cody Smith\",\n \"from_email_address\": \"cody@emailguard.io\",\n \"primary_to_email_address\": \"usysows3w88c6ljx@eguardtest.com\",\n \"to\": [\n {\n \"name\": \"Chimma Tester\",\n \"address\": \"usysows3w88c6ljx@eguardtest.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": null,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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}" tags: - Replies parameters: - in: path name: id description: 'The ID of the reply.' example: 6 required: true schema: type: integer /api/replies/new: post: summary: 'Compose new email' operationId: composeNewEmail description: "This endpoint allows you to send a one-off email in a new email thread\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

\",\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 239,\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}" tags: - Replies requestBody: required: true content: application/json: schema: type: object properties: subject: type: string description: 'The subject of the email' example: 'Quick question' nullable: true message: type: string description: 'The contents of the reply' example: 'How are you doing?' nullable: false sender_email_id: type: integer description: 'The 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

\",\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\": null,\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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}" tags: - Replies requestBody: required: true content: application/json: schema: type: object properties: reply_all: type: boolean description: 'If set to true, automatically choose the correct sender email, and add the recipients from the original reply. Explicitly passing in `sender_email_id` will overwrite the chosen sender email, and recipients passed in `to_emails` or "cc_emails" will be appended.' example: false nullable: false inject_previous_email_body: type: boolean description: 'Whether to inject the body of the previous email into this email' example: true nullable: true message: type: required description: 'string The contents of the reply' example: 'How are you doing?' nullable: false reply_template_id: type: optional description: 'int The reply template ID that you want to use for this reply.' example: '123' nullable: false use_dedicated_ips: type: boolean description: 'Send using the dedicated campaign IPs instead of the instance IP' example: true nullable: false sender_email_id: type: required description: 'integer The ID of the sender email. Not required if `reply_all` is set to true. If `reply_all` is set to true and this parameter is passed, this parameter takes priority.' example: '139' 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. Not required if `reply_all` is set to true. If `reply_all` is set to true and this parameter is passed, the recipients will be appended. Duplicate recipients are ignored.' 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: eius nullable: true email_address: type: string description: '' example: '"john@example.com"' nullable: false required: - email_address cc_emails: type: array description: 'An array of people to send a copy of this email to (Carbon Copy). If `reply_all` is set to true and this parameter is passed, the recipients will be appended. Duplicate recipients are ignored.' example: - name: 'John Doe' email_address: john@example.com items: type: object properties: name: type: string|null description: 'The name of the person receiving the email (optional).' example: '"John Doe" or `null` if not provided.' nullable: true email_address: type: string description: 'The email address of the recipient.' example: '"john@example.com"' nullable: false required: - email_address bcc_emails: type: array description: 'An array of people to send a blind copy of this email to (Blind Carbon Copy).' example: - name: 'Jane Doe' email_address: jane@example.com items: type: object properties: name: type: string|null description: 'The name of the person receiving the email (optional).' example: '"Jane Doe" or `null` if not provided.' nullable: true email_address: type: string description: 'The email address of the recipient.' example: '"jane@example.com"' 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: - to_emails parameters: - in: path name: reply_id description: 'The ID of the parent reply.' example: 10 required: true schema: type: integer '/api/replies/{reply_id}/forward': post: summary: 'Forward reply' operationId: forwardReply description: "This endpoint allows you to forward an existing reply.\n\nThe user must provide a valid authentication token in the request header to access this endpoint.\n\n Please note that if you are sending an array of file attachments, your request must include\n a 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

\",\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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}" tags: - Replies requestBody: required: false content: application/json: schema: type: object properties: reply_all: type: boolean description: '' example: false nullable: false inject_previous_email_body: type: boolean description: 'Whether to inject the body of the previous email into this email' example: true nullable: true message: type: string description: 'The contents of the reply' example: 'How are you doing?' nullable: false reply_template_id: type: optional description: 'int The reply template ID that you want to use for this reply.' example: '123' nullable: false use_dedicated_ips: type: boolean description: 'Send using the dedicated campaign IPs instead of the instance IP' example: true nullable: false sender_email_id: type: integer description: 'This field is required unless 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

\",\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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}" tags: - Replies requestBody: required: false content: application/json: schema: type: object properties: skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: false nullable: false parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 5 required: true schema: type: integer '/api/replies/{reply_id}/mark-as-not-interested': patch: summary: 'Mark as not interested' operationId: markAsNotInterested description: "This endpoint marks a specific reply as not interested.\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\": 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

\",\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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}" tags: - Replies requestBody: required: false content: application/json: schema: type: object properties: skip_webhooks: type: boolean description: 'If set to true, no webhooks will be fired for this action.' example: true nullable: false parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 9 required: true schema: type: integer '/api/replies/{reply_id}/mark-as-read-or-unread': patch: summary: 'Mark as read or unread' operationId: markAsReadOrUnread description: "This endpoint marks a specific reply as read or unread.\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\": 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

\",\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\": null,\n \"lead\": null,\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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}" tags: - Replies requestBody: required: true content: application/json: schema: type: object properties: read: type: boolean description: 'Whether to set mark the reply as read or unread.' example: true nullable: false required: - read parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 3 required: true schema: type: integer '/api/replies/{reply_id}/mark-as-automated-or-not-automated': patch: summary: 'Mark as automated or not automated' operationId: markAsAutomatedOrNotAutomated description: "This endpoint marks a specific reply as automated or not automated.\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\": 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

\",\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 45,\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}" tags: - Replies requestBody: required: true content: application/json: schema: type: object properties: automated: type: boolean description: 'Whether to mark the reply as automated or not automated.' example: false nullable: false required: - automated parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 20 required: true schema: type: integer '/api/replies/{reply_id}/unsubscribe': patch: summary: 'Unsubscribe contact that replied' operationId: unsubscribeContactThatReplied description: "This endpoint unsubscribes the contact associated with a specific reply from scheduled emails.\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 \"message\": \"Contact unsubscribed successfully\",\n \"success\": true,\n }\n}" tags: - Replies parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 13 required: true schema: type: integer '/api/replies/{reply_id}': delete: summary: 'Delete reply' operationId: deleteReply description: "This endpoint deletes a specific reply by its ID.\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 \"message\": \"Reply deleted successfully\"\n \"success\": true,\n}" tags: - Replies parameters: - in: path name: reply_id description: 'The ID of the reply.' example: 12 required: true schema: type: integer '/api/replies/{reply_id}/conversation-thread': get: summary: 'Get reply conversation thread' operationId: getReplyConversationThread description: "This endpoint gets you a reply object with all previous and newer messages to build out an email thread\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 \"current_reply\": {\n \"id\": 239,\n \"uuid\": \"8d7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Inbox\",\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

\",\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\": \"ross.rhea@bisonemails.com\",\n \"to\": [\n {\n \"name\": \"Ross Rhea\",\n \"address\": \"ross.rhea@bisonemails.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": 238,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 239,\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 \"older_messages\": [\n {\n \"id\": 237,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Inbox\",\n \"subject\": \"When should I call?\",\n \"read\": true,\n \"interested\": false,\n \"automated_reply\": false,\n \"html_body\": \"
yo tingz big big whats good

On Sun, Feb 23, 2025 at 9:27 PM Autumn Coleman <autumn.coleman@lunar.gleaper.com> wrote:
yo sup this is the first big boy one ya hear?
\\n\\n
\",\n \"text_body\": \"Hey Eric,\\n\\nI was wondering if you might be interested in trying out our new service.\\n\\nHere's an article I wrote about your industry and would love to include in my upcoming newsletter.\\n\\nI'm glad that we had a chance to speak today.\\n\\nCheers,\\nCrystal Webb\\n\\nCharcoalksdjc MC40QVD\",\n \"raw_body\": null,\n \"headers\": null,\n \"date_received\": \"2024-11-28T21:09:11.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\": null,\n \"raw_message_id\": \"\",\n \"from_name\": \"Crystal Webb\",\n \"from_email_address\": \"test2@bisonfrom.org\",\n \"primary_to_email_address\": \"test@bisontest.com\",\n \"to\": [\n {\n \"name\": \"bisontest\",\n \"address\": \"test@bisontest.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": null,\n \"attachments\": [\n {\n \"id\": 8,\n \"uuid\": \"9f2e5a48-5ed6-4021-ae32-66e61908173d\",\n \"reply_id\": 237,\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 \"id\": 238,\n \"uuid\": \"6r7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"folder\": \"Inbox\",\n \"subject\": \"Bison, interested in learning more?\",\n \"read\": true,\n \"interested\": false,\n \"automated_reply\": false,\n \"html_body\": \"
yo tingz big big whats good

On Sun, Feb 23, 2025 at 9:27 PM Autumn Coleman <autumn.coleman@lunar.gleaper.com> wrote:
yo sup this is the first big boy one ya hear?
\\n\\n
\",\n \"text_body\": \"Eric -\\n\\nI’m sorry, I don’t have time right now. Let’s do it later this week?\\n\\nRegards,\\nsophia sophia\\n\\n18TYTMH MC40QVD\\n\\n\",\n \"raw_body\": null,\n \"headers\": null,\n \"date_received\": \"2024-11-28T19:37:39.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\": null,\n \"raw_message_id\": \"

\\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: 'The id 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\": \"
yo whats good essssssey
\",\n \"text_body\": \"yo whats good essssssey\",\n \"raw_body\": null,\n \"headers\": null,\n \"date_received\": \"2024-09-21T02:10:42.000000Z\",\n \"type\": \"Untracked Reply\",\n \"tracked_reply\": false,\n \"scheduled_email_id\": null,\n \"campaign_id\": 123,\n \"lead_id\": null,\n \"sender_email_id\": 25057,\n \"raw_message_id\": \"\",\n \"from_name\": \"Cody Smith\",\n \"from_email_address\": \"cody@emailguard.io\",\n \"primary_to_email_address\": \"usysows3w88c6ljx@eguardtest.com\",\n \"to\": [\n {\n \"name\": \"Chimma Tester\",\n \"address\": \"usysows3w88c6ljx@eguardtest.com\"\n }\n ],\n \"cc\": null,\n \"bcc\": null,\n \"parent_id\": null,\n \"attachments\": [\n \"id\": 213,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a621\",\n \"reply_id\": 45,\n \"file_name\": \"image.png\",\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 ],\n \"links\": {\n \"first\": \"http://bison.test/api/sender-emails/1/replies?page=1\",\n \"last\": \"http://bison.test/api/sender-emails/1/replies?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/replies?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/replies\",\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: 5 required: true schema: type: integer '/api/sender-emails/{senderEmailId}/oauth-access-token': get: summary: 'Get email account oAuth access token' operationId: getEmailAccountOAuthAccessToken description: "This endpoint retrieves the OAuth access token for a sender email account (Google or Microsoft accounts only).\n\nIf a token has expired, a new one is automatically retrieved and returned using the saved refresh token." parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 2938 email: red@emailguard.io status: Connected type: microsoft_oauth oauth_access_token: hg27Csjq0GWRu5ChiEjNhzyDDuk9YR08gIwvnsfTkqoOISPb9ZEJcFGs6yrEZZ5lhyIneW-QIJZjqg8EPHaitFd6PncOb1zuFBcECK1aPNiVXQ1stS4GZZ0K7kMTfbn_bDtg3LwkScRLvd1UaXPX3gdWiyTWU_EQeBtpaKvN_NtqzRlAVslmHfsi50dgDmg0Pbk80oLqbN8TB4JctgM6VuvI5yCrwyID9GNwItSMVpd1ZjOmGTiof2hqi6E3KH3j9RfWz_Gq4Vq61XvYKEooDzDjuFSoie1vkptVp2fngRMBTxTTM2ZBCEpd_HbcrqBiHuIMw19nyXr8mP7n8rPLG4S1LA properties: data: type: object properties: id: type: integer example: 2938 email: type: string example: red@emailguard.io status: type: string example: Connected type: type: string example: microsoft_oauth oauth_access_token: type: string example: hg27Csjq0GWRu5ChiEjNhzyDDuk9YR08gIwvnsfTkqoOISPb9ZEJcFGs6yrEZZ5lhyIneW-QIJZjqg8EPHaitFd6PncOb1zuFBcECK1aPNiVXQ1stS4GZZ0K7kMTfbn_bDtg3LwkScRLvd1UaXPX3gdWiyTWU_EQeBtpaKvN_NtqzRlAVslmHfsi50dgDmg0Pbk80oLqbN8TB4JctgM6VuvI5yCrwyID9GNwItSMVpd1ZjOmGTiof2hqi6E3KH3j9RfWz_Gq4Vq61XvYKEooDzDjuFSoie1vkptVp2fngRMBTxTTM2ZBCEpd_HbcrqBiHuIMw19nyXr8mP7n8rPLG4S1LA 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/signatures/bulk: patch: summary: 'Bulk update email signatures' operationId: bulkUpdateEmailSignatures description: 'Update the signatures 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 signatures. 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 signatures. 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 signatures for.' example: - 1 - 2 items: type: integer email_signature: type: string description: 'The HTML signature to use.' example: '

{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: '
yo whats good essssssey
' text_body: 'yo whats good essssssey' raw_body: null headers: null date_received: '2024-09-21T02:10:42.000000Z' type: 'Untracked Reply' tracked_reply: false scheduled_email_id: null campaign_id: null lead_id: 990 lead: id: 150444 first_name: John last_name: Doe email: john@doe.com title: 'Vice President' company: 'Blue Science' notes: null status: unverified custom_variables: - name: phone_number value: 123-456-7890 overall_stats: emails_sent: 1 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2026-01-14T02:54:56.000000Z' updated_at: '2026-01-21T17:15:38.000000Z' sender_email_id: 25057 raw_message_id: '' from_name: 'Cody Smith' from_email_address: cody@emailguard.io primary_to_email_address: usysows3w88c6ljx@eguardtest.com to: - name: 'Chimma Tester' address: usysows3w88c6ljx@eguardtest.com cc: null bcc: null parent_id: null attachments: - id: 213 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a621 reply_id: 45 file_name: image.png download_url: 'http://localhost/reply-attachments/9f2e5a48-5ed6-4021-ae32-66e61908173d/download%7D?signature=5374531e5a71a0c508b75678e53ea48e7d7dae22614bca3703c41cf199e21e67' created_at: '2025-06-18T02:38:40.000000Z' updated_at: '2025-06-18T02:38:40.000000Z' links: first: 'http://bison.test/api/leads/1/replies?page=1' last: 'http://bison.test/api/leads/1/replies?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/replies?page=1' label: '1' active: true - url: null label: 'Next »' active: false path: 'http://bison.test/api/leads/1/replies' per_page: 15 to: 3 total: 3 properties: data: type: array example: - 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: '
yo whats good essssssey
' text_body: 'yo whats good essssssey' raw_body: null headers: null date_received: '2024-09-21T02:10:42.000000Z' type: 'Untracked Reply' tracked_reply: false scheduled_email_id: null campaign_id: null lead_id: 990 lead: id: 150444 first_name: John last_name: Doe email: john@doe.com title: 'Vice President' company: 'Blue Science' notes: null status: unverified custom_variables: - name: phone_number value: 123-456-7890 overall_stats: emails_sent: 1 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2026-01-14T02:54:56.000000Z' updated_at: '2026-01-21T17:15:38.000000Z' sender_email_id: 25057 raw_message_id: '' from_name: 'Cody Smith' from_email_address: cody@emailguard.io primary_to_email_address: usysows3w88c6ljx@eguardtest.com to: - name: 'Chimma Tester' address: usysows3w88c6ljx@eguardtest.com cc: null bcc: null parent_id: null attachments: - id: 213 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a621 reply_id: 45 file_name: image.png download_url: 'http://localhost/reply-attachments/9f2e5a48-5ed6-4021-ae32-66e61908173d/download%7D?signature=5374531e5a71a0c508b75678e53ea48e7d7dae22614bca3703c41cf199e21e67' created_at: '2025-06-18T02:38:40.000000Z' updated_at: '2025-06-18T02:38:40.000000Z' items: type: object properties: id: type: integer example: 45 uuid: type: string example: 9f7a2718-aa56-43k2-a52b-a44dc183a621 folder: type: string example: Inbox subject: type: string example: 'yo test boy wassup G' read: type: boolean example: true interested: type: boolean example: false automated_reply: type: boolean example: false html_body: type: string example: '
yo whats good essssssey
' text_body: type: string example: 'yo whats good essssssey' raw_body: type: string example: null headers: type: string example: null date_received: type: string example: '2024-09-21T02:10:42.000000Z' type: type: string example: 'Untracked Reply' tracked_reply: type: boolean example: false scheduled_email_id: type: string example: null campaign_id: type: string example: null lead_id: type: integer example: 990 lead: type: object properties: id: type: integer example: 150444 first_name: type: string example: John last_name: type: string example: Doe email: type: string example: john@doe.com title: type: string example: 'Vice President' company: type: string example: 'Blue Science' notes: type: string example: null status: type: string example: unverified custom_variables: type: array example: - name: phone_number value: 123-456-7890 items: type: object properties: name: type: string example: phone_number value: type: string example: 123-456-7890 overall_stats: type: object properties: emails_sent: type: integer example: 1 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: '2026-01-14T02:54:56.000000Z' updated_at: type: string example: '2026-01-21T17:15:38.000000Z' sender_email_id: type: integer example: 25057 raw_message_id: type: string example: '' from_name: type: string example: 'Cody Smith' from_email_address: type: string example: cody@emailguard.io primary_to_email_address: type: string example: usysows3w88c6ljx@eguardtest.com to: type: array example: - name: 'Chimma Tester' address: usysows3w88c6ljx@eguardtest.com items: type: object properties: name: type: string example: 'Chimma Tester' address: type: string example: usysows3w88c6ljx@eguardtest.com cc: type: string example: null bcc: type: string example: null parent_id: type: string example: null attachments: type: array example: - id: 213 uuid: 9f7a2718-aa56-43k2-a52b-a44dc183a621 reply_id: 45 file_name: image.png download_url: 'http://localhost/reply-attachments/9f2e5a48-5ed6-4021-ae32-66e61908173d/download%7D?signature=5374531e5a71a0c508b75678e53ea48e7d7dae22614bca3703c41cf199e21e67' created_at: '2025-06-18T02:38:40.000000Z' updated_at: '2025-06-18T02:38:40.000000Z' items: type: object properties: id: type: integer example: 213 uuid: type: string example: 9f7a2718-aa56-43k2-a52b-a44dc183a621 reply_id: type: integer example: 45 file_name: type: string example: image.png download_url: type: string example: 'http://localhost/reply-attachments/9f2e5a48-5ed6-4021-ae32-66e61908173d/download%7D?signature=5374531e5a71a0c508b75678e53ea48e7d7dae22614bca3703c41cf199e21e67' created_at: type: string example: '2025-06-18T02:38:40.000000Z' updated_at: type: string example: '2025-06-18T02:38:40.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/leads/1/replies?page=1' last: type: string example: 'http://bison.test/api/leads/1/replies?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/replies?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/replies' 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/multiple: post: summary: 'Bulk create leads' operationId: bulkCreateLeads description: "Create multiple lead records in a single request (limit 500 per request)\n\nPersonal domains will be skipped unless enabled on your instance. get in touch with support if you want to send to personal domains (e.g. gmail.com)" parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": [\n {\n \"id\": 326217,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john@doe.com\",\n \"title\": \"Engineer\",\n \"company\": \"John Doe Company\",\n \"notes\": \"Important client\",\n \"status\": \"unverified\",\n \"custom_variables\": [\n {\n \"name\": \"phone number\",\n \"value\": \"9059999999\"\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 ]\n }" tags: - Leads requestBody: required: true content: application/json: schema: type: object properties: leads: type: array description: 'An array of lead objects.' example: - [] items: 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: 'The name of the custom variable field.' example: quia nullable: false value: type: required description: 'The value of the custom variable.' example: sint nullable: true required: - first_name - email required: - leads /api/leads/bulk-update-status: patch: summary: 'Bulk update lead status' operationId: bulkUpdateLeadStatus description: 'Bulk update the status of multiple selected leads' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: success: true message: 'Successfully updated the status of selected leads' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully updated the status of selected leads' tags: - Leads requestBody: required: true content: application/json: schema: type: object properties: lead_ids: type: array description: 'The array of lead IDs.' example: - 17 items: type: integer status: type: string description: 'The status to apply to the lead.' example: inactive nullable: false enum: - verified - unverified - unknown - unsubscribed - risky - inactive required: - lead_ids - status /api/leads/create-or-update/multiple: post: summary: 'Update or create multiple leads' operationId: updateOrCreateMultipleLeads description: "Update or create multiple lead records in a single request (limit 500 per request).\n\nPersonal domains will be skipped unless enabled on your instance. get in touch with support if you want to send to personal domains (e.g. gmail.com)" parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": [\n {\n \"id\": 326217,\n \"uuid\": \"9f7a2718-aa56-43k2-a52b-a44dc183a622\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john@doe.com\",\n \"title\": \"Engineer\",\n \"company\": \"John Doe Company\",\n \"notes\": \"Important client\",\n \"status\": \"unverified\",\n \"custom_variables\": [\n {\n \"name\": \"phone number\",\n \"value\": \"9059999999\"\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 ]\n }" tags: - Leads requestBody: required: true content: application/json: schema: type: object properties: existing_lead_behavior: type: string description: "The behavior to apply when a lead already exists.\n\nIf \"put\", replace all the lead's fields, including custom variables, with the fields from this request. Fields not passed are cleared.\n\nIf \"patch\", only update a field if it's passed. Fields and custom variables not passed are kept.\n\nWill default to \"put\" if not passed." example: patch nullable: false enum: - put - patch leads: type: array description: 'An array of lead objects.' example: - [] items: 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: 'The name of the custom variable field.' example: quod nullable: false value: type: required description: 'The value of the custom variable.' example: ut nullable: true required: - first_name - email required: - leads '/api/leads/create-or-update/{lead_id}': post: summary: 'Update or create lead' operationId: updateOrCreateLead description: 'Update the details of a specific lead if it exists, otherwise create a new record' 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: existing_lead_behavior: type: string description: "The behavior to apply if the lead exists.\n\nIf \"put\", replace all the lead's fields, including custom variables, with the fields from this request. Fields not passed are cleared.\n\nIf \"patch\", only update a field if it's passed. Fields and custom variables not passed are kept.\n\nWill default to \"put\" if not passed." example: put nullable: false enum: - put - patch 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: '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: false 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: doloribus nullable: false value: type: required description: 'value of the custom variable' example: ab nullable: true required: - first_name - email parameters: - in: path name: lead_id description: 'Optional parameter. int|string|null optional 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: illo '/api/leads/{lead_id}/unsubscribe': patch: summary: 'Unsubscribe lead' operationId: unsubscribeLead description: 'Unsubscribe a lead from scheduled emails.' 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 parameters: - in: path name: lead_id description: 'The ID of the contact' example: 1 required: true schema: type: integer '/api/leads/{lead_id}/blacklist': post: summary: 'Add lead to blacklist' operationId: addLeadToBlacklist description: 'Add a lead to your global blacklist.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 1 email: john@doe.com 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: john@doe.com created_at: type: string example: '2024-07-29T02:10:45.000000Z' updated_at: type: string example: '2024-07-29T02:10:45.000000Z' 400: description: '' content: application/json: schema: type: object example: data: success: false message: 'Lead is already blacklisted' properties: data: type: object properties: success: type: boolean example: false message: type: string example: 'Lead is already blacklisted' tags: - Leads parameters: - in: path name: lead_id description: 'The ID of the contact' example: 7 required: true schema: type: integer /api/leads/bulk/csv: post: summary: 'Bulk create leads using CSV' operationId: bulkCreateLeadsUsingCSV description: 'Create multiple leads in a single request using a CSV' parameters: [] responses: 201: description: '' content: text/plain: schema: type: string example: "{\n \"data\": [\n {\n \"id\": 9,\n \"name\": \"\",\n \"status\": \"Unprocessed\",\n \"leads_processed\": 0,\n \"leads_succeeded\": 0,\n \"leads_failed\": 0,\n \"error_messages\": null,\n \"created_at\": \"2025-04-14T16:59:21.000000Z\",\n \"updated_at\": \"2025-04-14T16:59:21.000000Z\"\n }\n ],\n}" tags: - Leads requestBody: required: true content: multipart/form-data: schema: type: object properties: name: type: string description: 'The name of the contact list' example: "John Doe's list" nullable: false csv: type: string format: binary description: 'The CSV file containing the contacts.' nullable: false existing_lead_behavior: type: string description: "The behavior to apply when a lead already exists.\n\nIf \"put\", replace all the lead's fields, including custom variables, with the fields from this request. Fields not passed are cleared.\n\nIf \"patch\", only update a field if it's passed. Fields and custom variables not passed are kept.\n\nIf \"skip\", do not process the lead.\n\nWill default to \"put\" if not passed." example: skip nullable: false enum: - put - patch - skip columnsToMap: type: array description: 'The array with the header fields from the csv.' example: - [] items: type: object nullable: true properties: first_name: type: string description: 'The first name header field of the csv.' example: name nullable: false last_name: type: string description: 'optional The last name header field of the csv.' example: 'last name' nullable: false email: type: string description: 'The email address header field of the csv.' example: e-mail nullable: false title: type: string description: 'The title header field of the csv.' example: title nullable: false company: type: string description: 'The company name header field of the csv.' example: company nullable: false custom_variable: type: string description: 'The header field from your CSV to match this variable' example: linkedin nullable: false required: - first_name - email required: - name - csv - columnsToMap '/api/leads/{lead_id}/scheduled-emails': get: summary: 'Get all scheduled emails' operationId: getAllScheduledEmails description: "Retrieves a collection of scheduled emails associated with a lead. These scheduled emails\ncan have multiple statuses including: `scheduled`, `sending paused`, `stopped`, `bounced`, `unsubscribed`, `replied`" parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: - 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 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: 'The id 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?

' replyTemplateAttachments: - id: 1 uuid: a043b958-f86d-4088-ade0-632ad0cd9155 reply_template_id: 7 file_name: RBAC1.png download_url: 'http://bison.test/reply-template-attachments/a043b958-f86d-4088-ade0-632ad0cd9155/download%7D?signature=866d946e871c3315ba5a15b47ce5ed2d940850362f8a71acbb966522591cab59' size: 197265 created_at: '2025-11-02T23:48:48.000000Z' updated_at: '2025-11-02T23:48:48.000000Z' created_at: '2025-11-02T23:48:48.000000Z' updated_at: '2025-11-05T04:13:43.000000Z' - id: 4 uuid: a043b8a9-1364-4395-bd5b-8bd1835f1117 user_id: 6 name: 'test template' body: '

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?

' replyTemplateAttachments: - id: 1 uuid: a043b958-f86d-4088-ade0-632ad0cd9155 reply_template_id: 7 file_name: RBAC1.png download_url: 'http://bison.test/reply-template-attachments/a043b958-f86d-4088-ade0-632ad0cd9155/download%7D?signature=866d946e871c3315ba5a15b47ce5ed2d940850362f8a71acbb966522591cab59' size: 197265 created_at: '2025-11-02T23:48:48.000000Z' updated_at: '2025-11-02T23:48:48.000000Z' created_at: '2025-11-02T23:48:48.000000Z' updated_at: '2025-11-05T04:13:43.000000Z' - id: 4 uuid: a043b8a9-1364-4395-bd5b-8bd1835f1117 user_id: 6 name: 'test template' body: '

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?

' replyTemplateAttachments: type: array example: - id: 1 uuid: a043b958-f86d-4088-ade0-632ad0cd9155 reply_template_id: 7 file_name: RBAC1.png download_url: 'http://bison.test/reply-template-attachments/a043b958-f86d-4088-ade0-632ad0cd9155/download%7D?signature=866d946e871c3315ba5a15b47ce5ed2d940850362f8a71acbb966522591cab59' size: 197265 created_at: '2025-11-02T23:48:48.000000Z' updated_at: '2025-11-02T23:48:48.000000Z' items: type: object properties: id: type: integer example: 1 uuid: type: string example: a043b958-f86d-4088-ade0-632ad0cd9155 reply_template_id: type: integer example: 7 file_name: type: string example: RBAC1.png download_url: type: string example: 'http://bison.test/reply-template-attachments/a043b958-f86d-4088-ade0-632ad0cd9155/download%7D?signature=866d946e871c3315ba5a15b47ce5ed2d940850362f8a71acbb966522591cab59' size: type: integer example: 197265 created_at: type: string example: '2025-11-02T23:48:48.000000Z' updated_at: type: string example: '2025-11-02T23:48:48.000000Z' created_at: type: string example: '2025-11-02T23:48:48.000000Z' updated_at: type: string example: '2025-11-05T04:13:43.000000Z' links: type: object properties: first: type: string example: 'http://bison.test/api/reply-templates?page=1' last: type: string example: 'http://bison.test/api/reply-templates?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/reply-templates?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/reply-templates' per_page: type: integer example: 15 to: type: integer example: 3 total: type: integer example: 3 tags: - 'Reply Templates' post: summary: 'Create a reply template' operationId: createAReplyTemplate description: 'This endpoint allows the authenticated user to create a new reply template' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 9 uuid: a04c1f16-2cef-4bb7-b90b-c5de0fc4b239 user_id: 19 name: 'new reply template' body: 'this is a message' replyTemplateAttachments: [] created_at: '2025-11-07T03:59:55.000000Z' updated_at: '2025-11-07T03:59:55.000000Z' properties: data: type: object properties: id: type: integer example: 9 uuid: type: string example: a04c1f16-2cef-4bb7-b90b-c5de0fc4b239 user_id: type: integer example: 19 name: type: string example: 'new reply template' body: type: string example: 'this is a message' replyTemplateAttachments: type: array example: [] created_at: type: string example: '2025-11-07T03:59:55.000000Z' updated_at: type: string example: '2025-11-07T03:59:55.000000Z' tags: - 'Reply Templates' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the new reply template.' example: 'Positive Reply Template' nullable: false body: type: string description: 'The full contents of the reply template message.' example: 'Hi there, thank you for showing interest... etc.' nullable: false attachments: type: array description: 'optional Array of multi-part files that you want to attach with this template. Combined max size: 25MB, individual max size: 10MB.' example: null items: type: string required: - name - body '/api/reply-templates/{id}': get: summary: 'Reply template details' operationId: replyTemplateDetails description: '' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 9 uuid: a04c1f16-2cef-4bb7-b90b-c5de0fc4b239 user_id: 19 name: 'new reply template' body: 'this is a message' replyTemplateAttachments: [] created_at: '2025-11-07T03:59:55.000000Z' updated_at: '2025-11-07T03:59:55.000000Z' properties: data: type: object properties: id: type: integer example: 9 uuid: type: string example: a04c1f16-2cef-4bb7-b90b-c5de0fc4b239 user_id: type: integer example: 19 name: type: string example: 'new reply template' body: type: string example: 'this is a message' replyTemplateAttachments: type: array example: [] created_at: type: string example: '2025-11-07T03:59:55.000000Z' updated_at: type: string example: '2025-11-07T03:59:55.000000Z' tags: - 'Reply Templates' put: summary: 'Update a reply template' operationId: updateAReplyTemplate description: "This endpoint allows the authenticated user to update an existing reply template.\nIt will override the entire previous reply template, including attachments" parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 9 uuid: a04c1f16-2cef-4bb7-b90b-c5de0fc4b239 user_id: 19 name: 'updated new reply template' body: 'updated this is a message' replyTemplateAttachments: [] created_at: '2025-11-07T03:59:55.000000Z' updated_at: '2025-11-07T03:59:55.000000Z' properties: data: type: object properties: id: type: integer example: 9 uuid: type: string example: a04c1f16-2cef-4bb7-b90b-c5de0fc4b239 user_id: type: integer example: 19 name: type: string example: 'updated new reply template' body: type: string example: 'updated this is a message' replyTemplateAttachments: type: array example: [] created_at: type: string example: '2025-11-07T03:59:55.000000Z' updated_at: type: string example: '2025-11-07T03:59:55.000000Z' tags: - 'Reply Templates' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The name of the new reply template.' example: 'Positive Reply Template' nullable: false body: type: string description: 'The full contents of the reply template message.' example: 'Hi there, thank you for showing interest... etc.' nullable: false attachments: type: array description: 'optional Array of multi-part files that you want to attach with this template. Combined max size: 25MB, individual max size: 10MB.' example: null items: type: string required: - name - body parameters: - in: path name: id description: 'The ID of the reply template.' example: 15 required: true schema: type: integer '/api/reply-templates/{reply_template_id}': delete: summary: 'Delete reply template' operationId: deleteReplyTemplate description: 'This endpoint will permanently delete the specified reply template' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: success: true message: 'Successfully deleted reply template' properties: data: type: object properties: success: type: boolean example: true message: type: string example: 'Successfully deleted reply template' tags: - 'Reply Templates' parameters: - in: path name: reply_template_id description: 'The ID of the reply template.' example: 1 required: true schema: type: integer - in: path name: id description: 'The ID of the reply template.' example: 5 required: true schema: type: integer /api/scheduled-emails: get: summary: 'Get all scheduled emails' operationId: getAllScheduledEmails description: 'This endpoint retrieves all scheduled (campaign) emails.' parameters: - in: query name: status description: 'The status of the scheduled email.' example: bounced required: false schema: type: string description: 'The status of the scheduled email.' example: bounced nullable: false enum: - sent - scheduled - failed - paused - stopped - bounced - unsubscribed - in: query name: campaign_ids description: 'Campaign IDs to filter by.' example: '124' required: false schema: type: '[]integer' description: 'Campaign IDs to filter by.' example: '124' nullable: false - in: query name: lead_ids description: 'Lead IDs to filter by.' example: '4123' required: false schema: type: '[]integer' description: 'Lead IDs to filter by.' example: '4123' nullable: false - in: query name: sender_email_ids description: 'Sender Email IDs to filter by.' example: '533' required: false schema: type: '[]integer' description: 'Sender Email IDs to filter by.' example: '533' nullable: false - in: query name: scheduled_date_local description: '' example: [] required: false schema: type: object description: '' example: [] nullable: false properties: { } - in: query name: scheduled_date_local.value description: "The date the email was/is scheduled to be sent at. The timezone is the campaign's timezone. The format is YYYY-MM-DD." example: '2025-04-12' required: false schema: type: string description: "The date the email was/is scheduled to be sent at. The timezone is the campaign's timezone. The format is YYYY-MM-DD." example: '2025-04-12' nullable: false - in: query name: scheduled_date_local.criteria description: 'The criteria for the scheduled_date_local.' example: '>=' required: false schema: type: string description: 'The criteria for the scheduled_date_local.' example: '>=' nullable: false enum: - '<' - '<=' - '=' - '>' - '>=' responses: 200: description: success content: text/plain: schema: type: string example: "{\n {\n \"data\": [\n {\n \"id\": 2542387,\n \"campaign_id\": 76,\n \"sequence_step_id\": 99,\n \"thread_reply\": false,\n \"email_subject\": \"Hey John\",\n \"email_body\": \"Check out this offer\",\n \"status\": \"sent\",\n \"scheduled_date\": \"2025-11-25T19:12:00.000000Z\",\n \"scheduled_date_local\": \"2025-11-25T19:12:00.000000Z\",\n \"sent_at\": \"2025-11-25T19:12:26.000000Z\",\n \"opens\": 0,\n \"clicks\": 0,\n \"replies\": 0,\n \"interested\": false,\n \"unique_replies\": 0,\n \"unique_opens\": 0,\n \"raw_message_id\": \"\",\n \"campaign\": {\n \"id\": 76,\n \"uuid\": \"9ee5b81f-947a-460d-b641-9ba527dfb9b9\",\n \"sequence_id\": 41,\n \"name\": \"Red Campaign\",\n \"type\": \"outbound\",\n \"status\": \"active\",\n \"completion_percentage\": 75.07,\n \"emails_sent\": 506,\n \"opened\": 0,\n \"unique_opens\": 0,\n \"replied\": 20,\n \"unique_replies\": 18,\n \"bounced\": 6,\n \"unsubscribed\": 0,\n \"interested\": 10,\n \"total_leads_contacted\": 506,\n \"max_emails_per_day\": 1000,\n \"max_new_leads_per_day\": 1000,\n \"plain_text\": true,\n \"open_tracking\": true,\n \"total_leads\": null,\n \"can_unsubscribe\": false,\n \"unsubscribe_text\": null,\n \"include_auto_replies_in_stats\": true,\n \"created_at\": \"2025-05-13T00:05:37.000000Z\",\n \"updated_at\": \"2025-11-25T17:03:22.000000Z\"\n },\n \"lead\": {\n \"id\": 52476,\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john@email.com\",\n \"title\": \"President\",\n \"company\": \"Red Leads\",\n \"notes\": null,\n \"status\": \"unverified\",\n \"custom_variables\": [],\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\": \"2025-05-13T00:06:25.000000Z\",\n \"updated_at\": \"2025-06-09T17:21:59.000000Z\"\n },\n \"sender_email\": {\n \"id\": 1163,\n \"name\": \"James Doe\",\n \"email\": \"James@doe.com\",\n \"email_signature\": null,\n \"imap_server\": null,\n \"imap_port\": null,\n \"smtp_server\": null,\n \"smtp_port\": null,\n \"daily_limit\": 3,\n \"type\": \"microsoft_oauth\",\n \"status\": \"Connected\",\n \"emails_sent_count\": 52,\n \"total_replied_count\": 1,\n \"total_opened_count\": 4,\n \"unsubscribed_count\": 0,\n \"bounced_count\": 1,\n \"unique_replied_count\": 1,\n \"unique_opened_count\": 2,\n \"total_leads_contacted_count\": 35,\n \"interested_leads_count\": 0,\n \"created_at\": \"2025-05-05T03:46:05.000000Z\",\n \"updated_at\": \"2025-06-24T19:07:53.000000Z\"\n }\n },\n {\n \"id\": 2542380,\n \"campaign_id\": 76,\n \"sequence_step_id\": 98,\n \"thread_reply\": false,\n \"email_subject\": \"Hey Jane\",\n \"email_body\": \"This is our offer for you...\"\n \"status\": \"sending_paused\",\n \"scheduled_date\": \"2025-11-25T17:44:00.000000Z\",\n \"scheduled_date_local\": \"2025-11-25T17:44: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 \"raw_message_id\": \"\",\n \"campaign\": {\n \"id\": 76,\n \"uuid\": \"9ee5b81f-947a-460d-b641-9ba527dfb9b9\",\n \"sequence_id\": 43,\n \"name\": \"Blue Campaign\",\n \"type\": \"outbound\",\n \"status\": \"queued\",\n \"completion_percentage\": 75.07,\n \"emails_sent\": 506,\n \"opened\": 0,\n \"unique_opens\": \"0\",\n \"replied\": 20,\n \"unique_replies\": 18,\n \"bounced\": 6,\n \"unsubscribed\": 0,\n \"interested\": 10,\n \"total_leads_contacted\": 506,\n \"max_emails_per_day\": 1000,\n \"max_new_leads_per_day\": 1000,\n \"plain_text\": true,\n \"open_tracking\": true,\n \"total_leads\": null,\n \"can_unsubscribe\": false,\n \"unsubscribe_text\": null,\n \"include_auto_replies_in_stats\": true,\n \"created_at\": \"2025-05-13T00:05:37.000000Z\",\n \"updated_at\": \"2025-11-25T17:03:22.000000Z\"\n },\n \"lead\": {\n \"id\": 52469,\n \"first_name\": \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane@email.com\",\n \"title\": \"Co-Founder\",\n \"company\": \"Blue Leads\",\n \"notes\": null,\n \"status\": \"unverified\",\n \"custom_variables\": [],\n \"overall_stats\": {\n \"emails_sent\": 1,\n \"opens\": 0,\n \"replies\": 0,\n \"unique_replies\": 0,\n \"unique_opens\": 0\n },\n \"created_at\": \"2025-05-13T00:06:25.000000Z\",\n \"updated_at\": \"2025-05-28T22:24:30.000000Z\"\n },\n \"sender_email\": {\n \"id\": 1171,\n \"name\": \"Jim Smith\",\n \"email\": \"jim@email.com\",\n \"email_signature\": null,\n \"imap_server\": null,\n \"imap_port\": null,\n \"smtp_server\": null,\n \"smtp_port\": null,\n \"daily_limit\": 3,\n \"type\": \"microsoft_oauth\",\n \"status\": \"Connected\",\n \"emails_sent_count\": 50,\n \"total_replied_count\": 1,\n \"total_opened_count\": 1,\n \"unsubscribed_count\": 0,\n \"bounced_count\": 0,\n \"unique_replied_count\": 1,\n \"unique_opened_count\": 1,\n \"total_leads_contacted_count\": 33,\n \"interested_leads_count\": 0,\n \"created_at\": \"2025-05-05T03:46:28.000000Z\",\n \"updated_at\": \"2025-06-24T18:53:58.000000Z\"\n }\n }\n ],\n \"links\": {\n \"first\": \"http://bison.test/api/scheduled-emails?page=1\",\n \"last\": \"http://bison.test/api/scheduled-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/scheduled-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/scheduled-emails\",\n \"per_page\": 15,\n \"to\": 3,\n \"total\": 3\n }\n}" tags: - 'Scheduled Emails' '/api/scheduled-emails/{id}': get: summary: 'Get scheduled email' operationId: getScheduledEmail description: 'This endpoint retrieves a single scheduled (campaign) email.' parameters: [] responses: 200: description: success content: application/json: schema: type: object example: data: id: 2542387 campaign_id: 76 sequence_step_id: 99 thread_reply: false email_subject: 'Hey John' email_body: 'Check out this offer' status: sent scheduled_date: '2025-11-25T19:12:00.000000Z' scheduled_date_local: '2025-11-25T19:12:00.000000Z' sent_at: '2025-11-25T19:12:26.000000Z' opens: 0 clicks: 0 replies: 0 interested: false unique_replies: 0 unique_opens: 0 raw_message_id: '' campaign: id: 76 uuid: 9ee5b81f-947a-460d-b641-9ba527dfb9b9 sequence_id: 41 name: 'Red Campaign' type: outbound status: active completion_percentage: 75.07 emails_sent: 506 opened: 0 unique_opens: 0 replied: 20 unique_replies: 18 bounced: 6 unsubscribed: 0 interested: 10 total_leads_contacted: 506 max_emails_per_day: 1000 max_new_leads_per_day: 1000 plain_text: true open_tracking: true total_leads: null can_unsubscribe: false unsubscribe_text: null include_auto_replies_in_stats: true created_at: '2025-05-13T00:05:37.000000Z' updated_at: '2025-11-25T17:03:22.000000Z' lead: id: 52476 first_name: John last_name: Doe email: john@email.com title: President company: 'Red Leads' notes: null status: unverified custom_variables: [] overall_stats: emails_sent: 1 opens: 0 replies: 1 unique_replies: 1 unique_opens: 0 created_at: '2025-05-13T00:06:25.000000Z' updated_at: '2025-06-09T17:21:59.000000Z' sender_email: id: 1163 name: 'James Doe' email: James@doe.com email_signature: null imap_server: null imap_port: null smtp_server: null smtp_port: null daily_limit: 3 type: microsoft_oauth status: Connected emails_sent_count: 52 total_replied_count: 1 total_opened_count: 4 unsubscribed_count: 0 bounced_count: 1 unique_replied_count: 1 unique_opened_count: 2 total_leads_contacted_count: 35 interested_leads_count: 0 created_at: '2025-05-05T03:46:05.000000Z' updated_at: '2025-06-24T19:07:53.000000Z' properties: data: type: object properties: id: type: integer example: 2542387 campaign_id: type: integer example: 76 sequence_step_id: type: integer example: 99 thread_reply: type: boolean example: false email_subject: type: string example: 'Hey John' email_body: type: string example: 'Check out this offer' status: type: string example: sent scheduled_date: type: string example: '2025-11-25T19:12:00.000000Z' scheduled_date_local: type: string example: '2025-11-25T19:12:00.000000Z' sent_at: type: string example: '2025-11-25T19:12:26.000000Z' 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 raw_message_id: type: string example: '' campaign: type: object properties: id: type: integer example: 76 uuid: type: string example: 9ee5b81f-947a-460d-b641-9ba527dfb9b9 sequence_id: type: integer example: 41 name: type: string example: 'Red Campaign' type: type: string example: outbound status: type: string example: active completion_percentage: type: number example: 75.07 emails_sent: type: integer example: 506 opened: type: integer example: 0 unique_opens: type: integer example: 0 replied: type: integer example: 20 unique_replies: type: integer example: 18 bounced: type: integer example: 6 unsubscribed: type: integer example: 0 interested: type: integer example: 10 total_leads_contacted: type: integer example: 506 max_emails_per_day: type: integer example: 1000 max_new_leads_per_day: type: integer example: 1000 plain_text: type: boolean example: true open_tracking: type: boolean example: true total_leads: type: string example: null can_unsubscribe: type: boolean example: false unsubscribe_text: type: string example: null include_auto_replies_in_stats: type: boolean example: true created_at: type: string example: '2025-05-13T00:05:37.000000Z' updated_at: type: string example: '2025-11-25T17:03:22.000000Z' lead: type: object properties: id: type: integer example: 52476 first_name: type: string example: John last_name: type: string example: Doe email: type: string example: john@email.com title: type: string example: President company: type: string example: 'Red Leads' notes: type: string example: null status: type: string example: unverified custom_variables: type: array example: [] overall_stats: type: object properties: emails_sent: type: integer example: 1 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-05-13T00:06:25.000000Z' updated_at: type: string example: '2025-06-09T17:21:59.000000Z' sender_email: type: object properties: id: type: integer example: 1163 name: type: string example: 'James Doe' email: type: string example: James@doe.com email_signature: type: string example: null imap_server: type: string example: null imap_port: type: string example: null smtp_server: type: string example: null smtp_port: type: string example: null daily_limit: type: integer example: 3 type: type: string example: microsoft_oauth status: type: string example: Connected emails_sent_count: type: integer example: 52 total_replied_count: type: integer example: 1 total_opened_count: type: integer example: 4 unsubscribed_count: type: integer example: 0 bounced_count: type: integer example: 1 unique_replied_count: type: integer example: 1 unique_opened_count: type: integer example: 2 total_leads_contacted_count: type: integer example: 35 interested_leads_count: type: integer example: 0 created_at: type: string example: '2025-05-05T03:46:05.000000Z' updated_at: type: string example: '2025-06-24T19:07:53.000000Z' tags: - 'Scheduled Emails' parameters: - in: path name: id description: 'The ID of the scheduled email.' example: 1 required: true schema: type: integer /api/warmup/sender-emails: get: summary: 'List email accounts with warmup stats' operationId: listEmailAccountsWithWarmupStats description: "Retrieves a collection of email accounts associated with the authenticated workspace, along with\ntheir warmup stats" parameters: - in: query name: search description: 'optional Search term for filtering email accounts.' example: domain.com required: false schema: type: string description: 'optional Search term for filtering email accounts.' example: domain.com nullable: true - in: query name: tag_ids description: 'optional Array of tag IDs to filter by.' example: - 1 - 2 - 3 required: false schema: type: array description: 'optional Array of tag IDs to filter by.' example: - 1 - 2 - 3 items: type: integer - in: query name: excluded_tag_ids description: 'The 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'