Articles on: AI Training

API Docs

title: API Docs
description: Reference documentation for the SalesBlink Public API.

SalesBlink API v1.0.0


Use only when someone specifically asks about API.


SalesBlink Public API Documentation


Get Your API Key


Get your API Key here: https://run.salesblink.io/account/integration/api


Authentication


All API endpoints require an API Key passed in the Authorization header:

Authorization: your_salesblink_api_key


Base URL


Rate Limits


The SalesBlink API implements tiered rate limiting based on request type:


Tier

Limit

Applies To

General

30 requests per minute

GET requests

Sensitive

15 requests per minute

POST and PATCH requests

Restricted

10 requests per minute

PUT and DELETE requests


Requesting Rate Limit Increases


Need higher limits? Contact us at https://salesblink.io/contact-us to discuss your requirements.


Support

For support, contact: https://salesblink.io/contact-us


Servers



Endpoints


/billing/add-card


POST — Get Add Card Login Link


Generate a magic login link that redirects the user to the billing page to add a payment card.



Responses:


  • 200: Login link generated successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • message: string —
  • data: object —
    • login_link: string —
    • destination: string —
    • purpose: string —



/billing/remove-card


POST — Get Remove Card Login Link


Generate a magic login link that redirects the user to the billing page to remove their saved payment card.



Responses:


  • 200: Login link generated successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • message: string —
  • data: object —
    • login_link: string —
    • destination: string —
    • purpose: string —



/clicks


GET — Get Clicks Activity


Retrieve link click events to measure engagement.


Parameters:


  • per_page (query): integer —
  • page (query): integer —
  • sequence_id (query): string —
  • recipient_email_address (query): string —
  • since (query): integer —
  • from (query): integer —
  • to (query): integer —


Responses:


  • 200: Clicks activity retrieved successfully
  Content-Type: application/json

Schema:



/contacts


POST — Add Leads to a List


Add multiple leads (contacts) to an existing list.
For AI agents: Maximum 500 leads per request. Set remove_duplicates=true to maintain list quality.
Use standard fields like First_Name, Last_Name, Email, Phone, plus any custom fields.



Request Body (application/json):


  • list_id: string (required) (e.g., list_uuid_here) — The list ID to add leads to
  • contacts: array of object (required) — Array of lead objects to add (max 500)
  • First_Name: string — Lead's first name
  • Last_Name: string — Lead's last name
  • Email: string (required) — Lead's email address (required)
  • Phone: string — Lead's phone number
  • remove_duplicates: boolean — Automatically remove duplicate emails from the list


Responses:


  • 200: Leads added successfully
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —


  • 400: Bad request - invalid input
  Content-Type: application/json

Schema:



/contacts/remove


POST — Remove a Lead from a List


Remove a single lead from a list by their email address.


Request Body (application/json):


  • list_id: string (required) (e.g., list_uuid_here) — The list ID
  • email: string (required) (e.g., john@example.com) — The email address of the lead to remove


Responses:


  • 200: Lead removed successfully
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —



/contacts/{id}/archive


PUT — Archive or Unarchive a Contact


Archive or unarchive a contact. Archiving removes pending tasks for this contact.


Parameters:


  • id (path): string (required) — The unique identifier of the contact (MongoDB ObjectId)


Request Body (application/json):


  • archived: boolean — true to archive, false to unarchive


Responses:


  • 200: Contact archived/unarchived successfully
  Content-Type: application/json

Schema:



/dfy/orders


POST — Place DFY Order


Purchase domains and provision Google Workspace, Outlook, or Azure mailboxes with full deliverability setup.
Requires a saved payment method. Trial plans are not eligible.


Provider-specific requirements:

  • Google: password is required. mailboxes array is required for buy domains.
  • Outlook: mailboxes array is required for buy domains.
  • Azure: mailboxCount is required and must be a exactly 100 i.e. 100 mailboxes per domain in case of Azure.



Request Body (application/json):


  • domains: array of object (required) — Array of domain objects. Buy and Connect domains cannot be mixed in the same order.
  • domain: string (required) — Domain name to purchase or connect
  • isConnect: boolean — true = connect your own existing domain (no purchase), false = buy new domain (default)
  • mailboxes: array of object — Mailboxes to provision. Required for google/outlook buy domains. Optional for connect-domain orders.
    • username: string (required) — Mailbox username (without @domain)
    • firstName: string —
    • lastName: string —
  • type: string (required) (enum: google, outlook, azure) — Mailbox provider type. google = Google Workspace, outlook = Microsoft 365, azure = Azure (100 mailboxes per domain)
  • redirectionUrl: string — Redirect URL for the domain
  • masterInboxEmail: string — Master inbox email for admin access
  • password: string — Common password for ALL mailboxes. REQUIRED for google. Auto-generated if omitted for google buy domains with no custom mailboxes.
  • couponCode: string — Optional Stripe coupon code


Responses:


  • 200: DFY order placed successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • message: string —
  • data: object —
  • notice: string —


GET — Get DFY Orders


Retrieve all Done-For-You orders.



Responses:


  • 200: List of DFY orders
  Content-Type: application/json

Schema:

  • success: boolean —
  • message: string —
  • data: array of object —



/dfy/orders/{orderId}/mailboxes


POST — Add Mailbox to DFY Order


Add mailboxes to an existing DFY order. Cannot be used for Azure orders.



Parameters:


  • orderId (path): string (required) — The DFY order ID


Request Body (application/json):


  • domainName: string (required) — Domain in the order to add mailboxes to
  • emails: array of string (required) — Array of usernames (without @domain)
  • password: string — Password for new mailboxes (Google only)


Responses:


  • 200: Mailbox added successfully
  Content-Type: application/json

Schema:



/dfy/orders/{orderId}/mailboxes/{mailboxId}


DELETE — Cancel DFY Mailbox


Cancel a mailbox from a DFY order. Returns a billing management login link.



Parameters:


  • orderId (path): string (required) — The DFY order ID
  • mailboxId (path): string (required) — The mailbox ID (inboxkit_mailbox_uid) to cancel


Responses:


  • 200: Billing management link returned
  Content-Type: application/json

Schema:

  • success: boolean —
  • message: string —
  • data: object —
    • login_link: string —
    • destination: string —
    • purpose: string —



/domains


GET — Get Custom Domains


Retrieve all custom tracking domains configured in the workspace.


Parameters:


  • limit (query): integer —
  • skip (query): integer —


Responses:


  • 200: List of custom domains
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: array of object —
    • id: string —
    • domain: string —
    • type: string (enum: click-tracker, redirect) —
    • verified: boolean —
    • owned_by: string —



/domains/search


GET — Search Domains


Search available .com domains for DFY purchase. Only .com TLD is supported.



Parameters:


  • keyword (query): string (required) — Domain keyword to search (e.g. 'mybrand'). Only .com is supported.


Responses:


  • 200: Domain search results
  Content-Type: application/json

Schema:

  • success: boolean —
  • message: string —
  • data: array of object —
    • domain: string —
    • price: number —
    • status: string (enum: available, unavailable) —
    • google_workspace_available: boolean —
    • ms365_workspace_available: boolean —



/folders


GET — Get All Folders


Retrieve all folders for organizing lists, templates, sequences, and senders.


Parameters:


  • limit (query): integer — Maximum number of folders to return
  • skip (query): integer — Number of folders to skip for pagination
  • search (query): string — Search query to filter folders
  • type (query): string — Type of the folder


Responses:


  • 200: A list of folders
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • id: string —
    • name: string —
    • type: string —
    • owned_by: string — Email of the folder owner
    • date_created: string —


POST — Create a Folder


Create a new folder to organize lists, templates, sequences, or senders.


Request Body (application/json):


  • name: string (required) — Name of the folder
  • type: string (required) (enum: list, template, sequence, email-sender) — Type of items this folder will contain


Responses:


  • 200: Folder created successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • id: string —
    • name: string —
    • type: string —



/inbox


GET — Get Inbox Threads


Retrieve email threads from your unified inbox.
For AI agents: Use type=replies to get only replies from leads, type=sent for sent emails.



Parameters:


  • type (query): string — Type of threads to retrieve
  • sequence (query): string — Filter by sequence id
  • search (query): string — Search query for thread content
  • limit (query): integer — Maximum number of threads to return
  • skip (query): integer — Number of threads to skip for pagination
  • days (query): integer — Fetch inbox items from the last X days
  • outcome (query): string — Filter by outcome classification
  • unread (query): boolean — Filter by unread status
  • sender (query): string — Filter by sender email
  • starred (query): boolean — Filter by starred status
  • archived (query): boolean — Filter by archived status
  • owned_by (query): string — Filter by owner (admin/owner only)


Responses:


  • 200: Thread tasks response with total count and results
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • totalCount: integer — Total number of matching threads
    • result: array of object —
    • id: string —
    • messageId: string —
    • task_type: string (e.g., reply) —
    • email: string —
    • data: object —
      • email: object —
      • subject: string —
      • body: string —
    • scheduled_time: integer —
    • unread: boolean —
    • sender: string —



/inbox-placement


GET — Get Inbox Placement Tests


Retrieve all inbox placement tests.
For AI agents: Inbox placement tests help verify email deliverability across different providers.



Parameters:


  • limit (query): integer —
  • skip (query): integer —
  • owned_by (query): string — Filter by owner (admin/owner only)


Responses:


  • 200: List of inbox placement tests
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: array of object —
    • id: string —
    • name: string —
    • status: string —
    • owned_by: string —


POST — Create Inbox Placement Test


Create a new inbox placement test to check email deliverability.
For AI agents: Tests can use sequence content or custom subject/body. Use source='from-salesblink' with subject/body for custom content.



Request Body (application/json):


  • source: string (enum: from-salesblink, sequence) — Source of test content
  • subject: string — Subject line (for from-salesblink source with custom content)
  • body: string — Email body HTML (for from-salesblink source)
  • sequence_id: string — Sequence ID to test (for sequence source)


Responses:


  • 200: Test created successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • id: string —
    • name: string —



/inbox-placement/{id}


DELETE — Delete Inbox Placement Test


Delete an inbox placement test.


Parameters:


  • id (path): string (required) — The unique identifier of the test


Responses:


  • 200: Test deleted successfully
  Content-Type: application/json

Schema:



/inbox-placement/{id}/pause


PUT — Pause Inbox Placement Test


Pause an active inbox placement test.


Parameters:


  • id (path): string (required) — The unique identifier of the test


Responses:


  • 200: Test paused successfully
  Content-Type: application/json

Schema:



/inbox/{messageId}


PATCH — Update Mail State


Update the state of an inbox item. Mark emails as read/unread and set conversation outcomes.
For AI agents: Use outcome field to classify replies as "positive", "negative", etc.



Parameters:


  • messageId (path): string (required) — The unique message ID


Request Body (application/json):


  • unread: boolean — Mark as read (false) or unread (true)
  • outcome: string (e.g., positive) — Set conversation outcome (e.g., positive, negative, neutral)


Responses:


  • 200: Mail state updated successfully
  Content-Type: application/json

Schema:



/inbox/{messageId}/reply


POST — Send a Reply


Send a reply to a lead's email. The reply will be sent from the same sender that originally contacted the lead.
For AI agents: This maintains conversation continuity automatically.



Parameters:


  • messageId (path): string (required) — The unique message ID to reply to


Request Body (application/json):


  • content: string (required) (e.g., <p>Thanks for getting back to me!</p>) — HTML content of the reply
  • cc: string (e.g., optional@cc.com) — Optional CC email address
  • bcc: string — Optional BCC email address


Responses:


  • 200: Reply scheduled successfully
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • task_type: string (e.g., reply) —
    • status: string (e.g., scheduled) —



/inbox/{messageId}/thread


GET — Get Thread Messages


Retrieve all emails associated with a specific message thread.


Parameters:


  • messageId (path): string (required) — The unique message ID of the thread


Responses:


  • 200: All tasks/emails in the conversation thread
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • id: string —
    • task_type: string —
    • data: object —
    • scheduled_time: integer —



/keys


GET — Get API Keys


Retrieve all API keys for the account. Use this to audit active integrations or find key IDs for management.



Responses:


  • 200: List of API keys
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • id: string (e.g., 0d061c26-83a5-490c-ab85-c72e46103e21) —
    • name: string (e.g., test) —
    • key: string (e.g., key...31f) —
    • date_created: string (e.g., 2026-05-08T05:05:48.672Z) —
    • active: boolean (e.g., True) —
    • user_id: string (e.g., 772e7879-cb1f-4cc6-9dae-50b3962d302a) —
    • owned_by: string (e.g., user@example.com) —


POST — Create API Key


Generate a new API key. The full key is only returned once in the response; store it securely.



Request Body (application/json):


  • name: string (required) (e.g., New Integration) —


Responses:


  • 200: API key created
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string (e.g., 0d061c26-83a5-490c-ab85-c72e46103e21) —
    • name: string (e.g., test) —
    • api_key: string (e.g., key-5f3e...) —
    • date_created: string (e.g., 2026-05-08T05:05:48.672Z) —



/keys/{id}


DELETE — Delete API Key


Revoke an API key. This action is irreversible. You cannot delete the key currently used for authentication.



Parameters:


  • id (path): string (required)


Responses:


  • 200: API key deleted
  Content-Type: application/json

Schema:



/keys/{id}/refresh


POST — Refresh API Key


Generate a new API key and revoke the old one. This is useful for rotating keys without losing the key record's name/metadata.



Parameters:


  • id (path): string (required)


Responses:


  • 200: API key refreshed
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • message: string (e.g., API key refreshed) —
  • data: object —
    • id: string (e.g., 0d061c26-83a5-490c-ab85-c72e46103e21) —
    • name: string (e.g., test) —
    • api_key: string (e.g., key-5f3e...) —
    • date_created: string (e.g., 2026-05-08T05:05:48.672Z) —



/leads/{id}


PATCH — Update a Lead


Update lead properties.
For AI agents: You can update any custom fields. System fields like _id, accuracy, verification status cannot be modified.



Parameters:


  • id (path): string (required) — The unique identifier of the lead (contact)


Request Body (application/json):


  • First_Name: string —
  • Last_Name: string —
  • Email: string —
  • Phone: string —
  • Company: string —
  • Title: string —


Responses:


  • 200: Lead updated successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object — Updated fields



/leads/{id}/move


PUT — Move Lead to Another List


Move a lead from one list to another.


Parameters:


  • id (path): string (required) — The unique identifier of the lead to move


Request Body (application/json):


  • list_id: string (required) — Destination list ID


Responses:


  • 200: Lead moved successfully
  Content-Type: application/json

Schema:



/lists


GET — Get All Lists


Retrieve all lead lists in your workspace.
For AI agents: Use search parameter to filter by name, use archived=true to see archived lists.



Parameters:


  • limit (query): integer — Maximum number of lists to return (max 100 for v1.0.0)
  • skip (query): integer — Number of lists to skip for pagination
  • search (query): string — Search query to filter lists by name (case-insensitive)
  • starred (query): boolean — Filter by starred status
  • archived (query): boolean — Filter by archived status
  • owned_by (query): string — Filter by owner user ID (admin/owner only)


Responses:


  • 200: A list of lead lists with owner information
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • id: string —
    • name: string —
    • contacts_count: integer —
    • starred: boolean —
    • archived: boolean —
    • owned_by: string — Email of the list owner
    • last_modified: string —


POST — Create a List


Create a new lead list to organize contacts.
For AI agents: Consider enabling verification for better deliverability. Set removeDuplicates to maintain list quality.



Request Body (application/json):


  • name: string (required) (e.g., My New List) — Name of the list (required)
  • folder: string (e.g., optional_folder_id) — Optional folder ID to organize the list
  • starred: boolean — Whether to star the list
  • verification: boolean — Enable email verification for contacts in this list (can only be enabled, not disabled later)
  • archive_invalid: boolean — Archive contacts with invalid emails after verification
  • archive_risky: boolean — Archive contacts with risky emails after verification
  • removeDuplicates: object —
  • inThisList: boolean — Remove duplicate emails within this list
  • inOtherLists: boolean — Remove contacts that exist in other lists
  • inTeamMembersLists: boolean — Remove contacts that exist in team members lists


Responses:


  • 200: List created successfully
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • name: string —
    • contacts_count: integer —
    • date_created: string —



/lists/{id}


GET — Get a Specific List


Retrieve detailed information about a specific lead list.


Parameters:


  • id (path): string (required) — The unique identifier of the list


Responses:


  • 200: List details with owner information
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • name: string —
    • contacts_count: integer —
    • starred: boolean —
    • archived: boolean —
    • owned_by: string — Email of the list owner
    • last_modified: string —


PATCH — Update a List


Update list properties. For AI agents: Note that verification settings can only be turned ON, not OFF once enabled.
Use PUT /lists/{id}/archive to archive/unarchive lists instead of this endpoint.



Parameters:


  • id (path): string (required) — The unique identifier of the list


Request Body (application/json):


  • name: string — New name for the list
  • starred: boolean — Star or unstar the list
  • duplicate_removal: boolean — Remove duplicate contacts from this list
  • duplicate_removal_other_list: boolean — Remove contacts that exist in other lists
  • duplicate_removal_team_list: boolean — Remove contacts that exist in team members lists
  • verification: boolean — Enable email verification (can only be turned ON, not OFF)
  • archive_invalid: boolean — Archive invalid emails (can only be turned ON, not OFF)
  • archive_risky: boolean — Archive risky emails (can only be turned ON, not OFF)


Responses:


  • 200: List updated successfully
  Content-Type: application/json

Schema:



/lists/{id}/archive


PUT — Archive or Unarchive a List


Archive or unarchive a list. Archiving removes the list from active views but preserves all data.
For AI agents: When archiving, the list is automatically paused if active.



Parameters:


  • id (path): string (required) — The unique identifier of the list


Request Body (application/json):


  • archived: boolean — true to archive, false to unarchive


Responses:


  • 200: List archived/unarchived successfully
  Content-Type: application/json

Schema:



/lists/{id}/leads


GET — Get Leads in a List


Retrieve all leads (contacts) in a specific list with pagination.
For AI agents: Use limit parameter (max 100) and skip for pagination.



Parameters:


  • id (path): string (required) — The unique identifier of the list
  • limit (query): integer — Maximum number of leads to return (max 100)
  • skip (query): integer — Number of leads to skip for pagination
  • owned_by (query): string — Filter by owner (admin/owner only)


Responses:


  • 200: List of leads with pagination info
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • contacts: array of any —
    • total: integer — Total number of contacts in the list



/oauth/google


POST — Initialize Google OAuth


Get the OAuth URL for connecting a Google (Gmail/G Suite) account.
For AI agents: Redirect the user to the returned URL or open it in a browser. After OAuth completion, the sender will be connected.



Request Body (application/json):


  • redirectUrl: string — URL to redirect after OAuth completion


Responses:


  • 200: OAuth URL generated
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • url: string — Google OAuth URL to open



/oauth/outlook


POST — Initialize Outlook OAuth


Get the OAuth URL for connecting a Microsoft Outlook account.
For AI agents: Redirect the user to the returned URL or open it in a browser.



Request Body (application/json):


  • redirectUrl: string — URL to redirect after OAuth completion


Responses:


  • 200: OAuth URL generated
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • url: string — Microsoft OAuth URL to open



/opens


GET — Get Opens Activity


Retrieve email open events to measure engagement.


Parameters:


  • per_page (query): integer — Number of results per page (max 100)
  • page (query): integer — Page number
  • sequence_id (query): string — Filter by sequence ID
  • recipient_email_address (query): string — Filter by recipient email
  • since (query): integer — Filter events since timestamp (Unix ms)
  • from (query): integer — Start date timestamp (Unix ms)
  • to (query): integer — End date timestamp (Unix ms)


Responses:


  • 200: Opens activity retrieved successfully
  Content-Type: application/json

Schema:



/replies


GET — Get Replies Activity


Retrieve email reply events to track responses.


Parameters:


  • per_page (query): integer —
  • page (query): integer —
  • sequence_id (query): string —
  • recipient_email_address (query): string —
  • since (query): integer —
  • from (query): integer —
  • to (query): integer —


Responses:


  • 200: Replies activity retrieved successfully
  Content-Type: application/json

Schema:



/reports


GET — Get Reports


Retrieve activity reports with filtering.
For AI agents: Use from/to parameters for date range filtering.



Parameters:


  • limit (query): integer —
  • skip (query): integer —
  • from (query): integer — Start date timestamp (Unix ms)
  • to (query): integer — End date timestamp (Unix ms)
  • owned_by (query): string — Filter by owner (admin/owner only)


Responses:


  • 200: Reports retrieved successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: array of object —



/senders


GET — Get All Email Senders


Retrieve all email sending accounts (senders) in your workspace.
For AI agents: Senders are email accounts used to send sequence emails. Filter by status to find healthy senders.



Parameters:


  • limit (query): integer — Maximum number of senders to return
  • skip (query): integer — Number of senders to skip for pagination
  • search (query): string — Search query to filter senders by email/name
  • folder_id (query): string — Filter by folder ID
  • owned_by (query): string — Filter by owner (admin/owner only)
  • has_error (query): boolean — Filter by error status
  • connecting (query): boolean — Filter by connecting status
  • connected (query): boolean — Filter by connected status
  • warmup_active (query): boolean — Filter by warmup active status
  • warmup_paused (query): boolean — Filter by warmup paused status
  • no_custom_tracking_domain (query): boolean — Filter senders without custom tracking domain


Responses:


  • 200: A list of email senders grouped by folder
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • folder: object —
    • id: string —
    • name: string —
    • senders: array of object —
    • id: string —
    • email: string —
    • name: string —
    • status: string —
    • owned_by: string — Email of the sender owner
    • date_created: string —


POST — Add Single Sender


Add a single email sender (SMTP/IMAP or OAuth).
For AI agents: For Google/Outlook OAuth, use /oauth/google or /oauth/outlook first to get the OAuth URL.
For SMTP/IMAP, provide host, port, username, and password.



Request Body (application/json):


  • email: string (required) — Sender email address
  • senderName: string — Display name for the sender
  • senderType: string (enum: OAUTH, SMTP) — Type of sender connection
  • serviceName: string (enum: Google, Outlook, smtponly) — Email service provider
  • smtpHost: string — SMTP server hostname (for SMTP type)
  • smtpPort: integer — SMTP server port (for SMTP type)
  • smtpUsername: string — SMTP username (for SMTP type)
  • smtpPassword: string — SMTP password (for SMTP type)
  • imapHost: string — IMAP server hostname (optional, defaults to SMTP host)
  • imapPort: integer — IMAP server port (optional, defaults to 993)
  • imapUsername: string — IMAP username (if different from SMTP)
  • imapPassword: string — IMAP password (if different from SMTP)
  • refresh_token: string — OAuth refresh token (for OAUTH type)
  • google_email: string — Google email (for Google OAuth)
  • microsoft_email: string — Microsoft email (for Outlook OAuth)
  • folder: string — Folder ID to organize the sender


Responses:


  • 200: Sender added successfully
  Content-Type: application/json

Schema:



/senders/bulk


POST — Add Bulk Senders


Add multiple email senders at once using a CSV file or JSON array.
For AI agents: CSV should have columns like email, password, smtpHost, smtpPort, etc.



Request Body (multipart/form-data):


  • file: string — CSV file containing sender credentials
  • senders: array of object — Alternative to file - array of sender objects


Responses:


  • 200: Bulk senders upload initiated
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • bulkID: string — ID to track the bulk upload progress



/senders/{id}


PATCH — Update Sender


Update email sender settings including warmup, inbox, signature, tracking domain, and sequence sending configuration.
Only the fields provided are updated.



Parameters:


  • id (path): string (required) — The sender ID


Request Body (application/json):


  • warmup_enabled: boolean — Enable/disable warmup
  • warmup_urls: array of string — Warmup link URLs
  • warmup_templates: array of string — Warmup template IDs
  • auto_ramp_up_enabled: boolean — Enable auto ramp-up
  • ramp_up_frequency: integer — Ramp-up increment
  • max_daily_frequency: integer — Max daily warmup emails
  • starting_warmup_frequency: integer — Starting warmup frequency
  • open_rate: integer — Target open rate percentage
  • spam_protection: integer — Spam protection level
  • read_emulation: integer — Read emulation level
  • warmup_keyword: string — Warmup keyword/tag
  • sequence_auto_ramp_up_enabled: boolean — Enable sequence auto ramp-up
  • sequence_initial_daily_frequency: integer — Initial daily sequence sends
  • sequence_ramp_up_frequency: integer — Sequence ramp-up increment
  • sequence_max_daily_frequency: integer — Max daily sequence sends
  • pause_cold_emails_when_health_low: boolean — Pause cold emails when health is low
  • pause_cold_emails_health_threshold: integer — Health threshold to pause at
  • inbox_enabled: boolean — Enable inbox monitoring
  • inbox_path: string — Inbox folder path
  • spam_path: string — Spam folder path
  • signature: string — Signature ID or name
  • reply_to: string — Reply-to email address
  • dkim_identifier: string — DKIM identifier
  • use_custom_tracking_domain: boolean — Use custom tracking domain
  • tracking_domain: string — Tracking domain ID


Responses:


  • 200: Sender updated successfully
  Content-Type: application/json

Schema:



/sent


GET — Get Sent Activity


Retrieve a log of all sent emails across your sequences.
For AI agents: Use since parameter to get recent activity. Results are paginated.



Parameters:


  • per_page (query): integer — Number of results per page (max 100)
  • page (query): integer — Page number
  • sequence_id (query): string — Filter by sequence ID
  • recipient_email_address (query): string — Filter by recipient email
  • since (query): integer — Filter events since timestamp (Unix timestamp in milliseconds)
  • from (query): integer — Start date timestamp (Unix ms) for date range
  • to (query): integer — End date timestamp (Unix ms) for date range


Responses:


  • 200: Sent activity retrieved successfully
  Content-Type: application/json

Schema:



/sequences


GET — Get All Sequences


Retrieve all email sequences in your workspace.
For AI agents: Use status filter to find active, paused, or completed sequences.



Parameters:


  • limit (query): integer — Maximum number of sequences to return (max 100)
  • skip (query): integer — Number of sequences to skip for pagination
  • search (query): string — Search query to filter sequences by name
  • starred (query): boolean — Filter by starred status
  • archived (query): boolean — Filter by archived status
  • owned_by (query): string — Filter by owner (admin/owner only)
  • status (query): string — Filter sequences by status


Responses:


  • 200: A collection of sequences
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • id: string —
    • name: string —
    • paused: boolean —
    • starred: boolean —
    • archived: boolean —
    • owned_by: string — Email of the sequence owner
    • sent: integer —
    • opens: integer —
    • clicks: integer —
    • replies: integer —


POST — Create a Sequence


Create a new automated email sequence.
For AI agents:

  • Steps array defines the sequence flow with email and delay nodes
  • Each email step requires a template_id
  • Each delay step requires days (number of days to wait)
  • If launchTimingMode is not provided or 'now', sequence starts 5 minutes from now
  • If 'schedule', provide scheduledAt as future timestamp



Request Body (application/json):


  • name: string (required) (e.g., Outbound Campaign V1) — Name of the sequence (required)
  • folder: string (e.g., optional_folder_id) — Optional folder ID
  • starred: boolean — Whether to star the sequence
  • senders: string (required) (e.g., uuid1,uuid2,folder_uuid1) — Comma-separated sender/folder UUIDs. Can include both sender IDs and folder IDs
  • lists: array of string (required) — Array of list UUIDs to include (required)
  • steps: array of any (required) — Ordered array of sequence steps (required). Mix of email and delay steps
  • launchTimingMode: string (enum: now, schedule) (e.g., now) — When to launch: 'now' (default, starts in 5 mins) or 'schedule' (requires scheduledAt)
  • scheduledAt: integer (e.g., 1699999999999) — UTC Timestamp in milliseconds (required if launchTimingMode=schedule, must be future)
  • timezone: string (e.g., America/New_York) — Timezone for scheduled sending
  • paused: boolean (e.g., True) — Whether to create the sequence in paused state (default true)
  • delayEnabled: boolean (e.g., True) — Enable random delay between emails
  • delayFrom: integer (e.g., 10) — Minimum delay in minutes
  • delayTo: integer (e.g., 20) — Maximum delay in minutes
  • stopWhenReplyRecieved: boolean (e.g., True) — Stop sequence when recipient replies
  • evergreen: boolean — Enable evergreen sequence (continuously running)
  • bounceThreshold: integer (e.g., 2) — Number of bounces before pausing
  • bouncePause: boolean — Pause sequence on bounce threshold
  • autoPause: boolean (e.g., True) — Enable auto-pause on high bounce rate
  • autoTagReplies: boolean — Auto-tag reply outcomes
  • emailSendingHours: array of any — Configure sending hours for each day of the week. Must contain one entry for every day (Monday-Sunday). Example:
  [
{ "enabled": true, "name": "Monday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Tuesday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Wednesday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Thursday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Friday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": false, "name": "Saturday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": false, "name": "Sunday", "fromTime": "09:00", "toTime": "17:00" }
]
  • sendToOnlyVerifiedEmail: boolean — Only send to verified emails
  • validEmail: boolean (e.g., True) — Send to contacts with valid email status
  • riskyEmail: boolean (e.g., True) — Send to contacts with risky email status
  • invalidEmail: boolean (e.g., True) — Send to contacts with invalid email status
  • checkEmailOpen: boolean — Check if recipient opened previous email before sending next
  • checkEmailClick: boolean — Check if recipient clicked link before sending next
  • checkEmailReply: boolean (e.g., True) — Check if recipient replied before sending next
  • checkEmailBeforeSending: boolean (e.g., True) — Verify email before sending
  • plainText: boolean (e.g., True) — Send as plain text email
  • auto_reply: boolean (e.g., True) — Enable auto-reply detection
  • matchProvider: boolean (e.g., True) — Match sender email provider with recipient
  • skip_esg: boolean (e.g., True) — Skip ESG (Email Service Gateway) detection
  • stopWhenReplyRecievedWhen: string (enum: contact, contact-with-same-domain) (e.g., contact) — When to stop sequence on reply
  • bcc: string — BCC email address for all outgoing emails


Responses:


  • 200: Sequence created successfully
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • name: string —
    • paused: boolean —
    • date_created: integer —



/sequences/{id}


GET — Get a Specific Sequence


Retrieve detailed information about a specific sequence including steps and settings.


Parameters:


  • id (path): string (required) — The unique identifier of the sequence


Responses:


  • 200: Details of the sequence
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • name: string —
    • paused: boolean —
    • starred: boolean —
    • archived: boolean —
    • owned_by: string — Email of the sequence owner
    • lists: array of string —
    • senders: string — Comma-separated sender/folder UUIDs
    • emailSenders: array of object — Selected sender/folder objects derived from senders
    • launchTimingMode: string —
    • delayFrom: integer —
    • delayTo: integer —
    • stopWhenReplyRecieved: boolean —
    • evergreen: boolean —
    • sent: integer —
    • opens: integer —
    • clicks: integer —
    • replies: integer —
    • emailSendingHours: array of object — Sending hours for each day of the week (Monday-Sunday). Each object has enabled, name, fromTime, toTime.
    • steps: array of object —


PATCH — Update Sequence Properties and State


Controls pausing/resuming, starring, and updating sequence settings.
For AI agents: Provide steps array to completely rewrite the sequence flow. All existing steps will be replaced.
Use PUT /sequences/{id}/archive to archive/unarchive sequences.



Parameters:


  • id (path): string (required) — The unique identifier of the sequence


Request Body (application/json):


  • name: string (e.g., Updated Campaign Name) — Sequence name
  • paused: boolean (e.g., True) — Pause (true) or resume (false) the sequence
  • starred: boolean — Star the sequence
  • senders: string (e.g., uuid1,uuid2) — Comma-separated sender/folder UUIDs
  • lists: array of string — Array of list UUIDs to associate with sequence
  • launchTimingMode: string (enum: now, schedule) (e.g., now) — Launch timing mode
  • scheduledAt: integer (e.g., 1699999999999) — UTC Timestamp in milliseconds
  • timezone: string (e.g., America/New_York) — Timezone for sending emails
  • stopWhenReplyRecieved: boolean (e.g., True) — Stop sequence when recipient replies
  • evergreen: boolean — Enable evergreen sequence
  • delayEnabled: boolean (e.g., True) — Enable sending delay
  • delayFrom: integer (e.g., 10) — Minimum delay in minutes
  • delayTo: integer (e.g., 20) — Maximum delay in minutes
  • emailSendingHours: array of any — Configure sending hours for each day of the week. Must contain one entry for every day (Monday-Sunday). Example:
  [
{ "enabled": true, "name": "Monday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Tuesday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Wednesday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Thursday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": true, "name": "Friday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": false, "name": "Saturday", "fromTime": "09:00", "toTime": "17:00" },
{ "enabled": false, "name": "Sunday", "fromTime": "09:00", "toTime": "17:00" }
]
  • steps: array of any — Ordered array of steps - replaces all existing steps
  • sendToOnlyVerifiedEmail: boolean — Only send to verified emails
  • validEmail: boolean — Send to contacts with valid email status
  • riskyEmail: boolean — Send to contacts with risky email status
  • invalidEmail: boolean — Send to contacts with invalid email status
  • checkEmailOpen: boolean — Check if recipient opened previous email
  • checkEmailClick: boolean — Check if recipient clicked a link in previous email
  • checkEmailReply: boolean — Check if recipient replied to previous email
  • checkEmailBeforeSending: boolean — Verify email before sending
  • plainText: boolean — Send as plain text email
  • auto_reply: boolean — Enable auto-reply detection
  • matchProvider: boolean — Match email provider when sending
  • skip_esg: boolean — Skip ESG detection
  • stopWhenReplyRecievedWhen: string (enum: contact, contact-with-same-domain) — When to stop sequence on reply
  • bcc: string — BCC email address for all outgoing emails


Responses:


  • 200: Sequence updated successfully
  Content-Type: application/json

Schema:



/sequences/{id}/archive


PUT — Archive or Unarchive a Sequence


Archive or unarchive a sequence. Archiving pauses the sequence and removes pending tasks.
For AI agents: Archiving is the recommended way to stop a sequence rather than deletion.



Parameters:


  • id (path): string (required) — The unique identifier of the sequence


Request Body (application/json):


  • archived: boolean — true to archive, false to unarchive


Responses:


  • 200: Sequence archived/unarchived successfully
  Content-Type: application/json

Schema:



/sequences/{id}/clone


POST — Clone a Sequence


Create a copy of an existing sequence.
For AI agents: The cloned sequence will be in paused state. You need to update paused=false to activate.



Parameters:


  • id (path): string (required) — The unique identifier of the sequence to clone


Responses:


  • 200: Sequence cloned successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • id: string —
    • name: string —



/sequences/{id}/stats


GET — Get Sequence Stats


Retrieve detailed analytics and performance metrics for a sequence.
For AI agents: Use from/to query params to filter stats by date range (timestamps in milliseconds).



Parameters:


  • id (path): string (required) — The unique identifier of the sequence
  • from (query): integer — Start date timestamp (Unix ms) for date range filtering
  • to (query): integer — End date timestamp (Unix ms) for date range filtering
  • sender (query): string — Filter stats by specific sender email


Responses:


  • 200: Provides sent, opens, clicks, and lead progress breakdown
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • sent: integer (e.g., 1500) —
    • opens: integer (e.g., 750) —
    • clicks: integer (e.g., 130) —
    • replies: integer (e.g., 45) —
    • sequenceStats: object —
    • leadsTotal: integer (e.g., 2000) —
    • leadsNotStarted: integer (e.g., 500) —
    • leadsInProgress: integer (e.g., 1000) —
    • leadsCompleted: integer (e.g., 450) —
    • leadsBlocked: integer (e.g., 50) —



/signatures


GET — Get Email Signatures


Retrieve all email signatures configured in the workspace.


Parameters:


  • limit (query): integer —
  • skip (query): integer —


Responses:


  • 200: List of email signatures
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: array of object —
    • id: string —
    • name: string —
    • content: string —
    • owned_by: string —



/signup


POST — Signup for SalesBlink


Create a new SalesBlink account. This endpoint is public and does not require an API key.
Rate limited to 5 per day per IP. Successful signup returns an API key for immediate use.



Request Body (application/json):


  • email: string (required) (e.g., user@example.com) —
  • password: string (required) (e.g., SecurePassword123) — Password must be 8-48 chars and contain at least one uppercase and one lowercase letter.
  • name: string (required) (e.g., John Doe) —


Responses:


  • 200: Account created successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • account_id: string —
    • user_id: string —
    • api_key: string —



/templates


GET — Get All Templates


Retrieve all email templates in your workspace.
For AI agents: Each template includes a cold_email_score field indicating the quality of the template content.



Parameters:


  • limit (query): integer — Maximum number of templates to return
  • skip (query): integer — Number of templates to skip for pagination
  • search (query): string — Search query to filter templates by name
  • starred (query): boolean — Filter by starred status
  • archived (query): boolean — Filter by archived status
  • owned_by (query): string — Filter by owner ID (admin/owner only)


Responses:


  • 200: A collection of email templates with cold email scores
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • id: string —
    • name: string —
    • subject_line: string —
    • starred: boolean —
    • archived: boolean —
    • cold_email_score: object — Computed score indicating template quality
    • score: number —
    • rating: string (enum: Perfect, Good, Poor, Very Poor) —
    • owned_by: string — Email of the template owner
    • date_created: string —


POST — Create a Template


Create a new email template for use in sequences.
For AI agents: The template will be scored automatically. Use personalization variables like {{first_name}}, {{company}}, etc.
Maximum 3 attachments allowed.



Request Body (application/json):


  • name: string (required) (e.g., Cold Outreach 1) — Name of the template
  • subject_line: string (required) (e.g., Quick Question) — Email subject line
  • content: string (required) (e.g., <p>Hi {{first_name}}...</p>) — HTML content of the email. Use {{variable}} syntax for personalization
  • folder: string (e.g., optional_folder_id) — Optional folder ID
  • starred: boolean — Whether to star the template
  • attachments: array of string — Array of files to attach (max 3 files)


Responses:


  • 200: Template created successfully with cold email score
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • name: string —
    • cold_email_score: object —
    • score: number —
    • rating: string —
    • date_created: string —



/templates/{id}


GET — Get a Specific Template


Retrieve complete details of a specific email template including cold email score.


Parameters:


  • id (path): string (required) — The unique identifier of the template


Responses:


  • 200: Template details with content and score
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • name: string —
    • subject_line: string —
    • content: string —
    • starred: boolean —
    • archived: boolean —
    • cold_email_score: object —
    • score: number —
    • rating: string —
    • details: object —
      • word_count: integer —
      • personalization_count: integer —
      • link_count: integer —
      • image_count: integer —
      • question_count: integer —
      • spam_word_count: integer —


PATCH — Update a Template


Update an existing email template.
For AI agents: Existing attachments cannot be removed via attachment field - use remove_attachments array instead.



Parameters:


  • id (path): string (required) — The unique identifier of the template


Request Body (application/json):


  • name: string — New name for the template
  • subject_line: string — New subject line
  • content: string — New HTML content
  • starred: boolean — Star or unstar the template
  • attachments: array of string — Array of new files to append (max 3 total)
  • remove_attachments: array of string — Array of existing attachment names to remove


Responses:


  • 200: Template updated successfully
  Content-Type: application/json

Schema:



/templates/{id}/archive


PUT — Archive or Unarchive a Template


Archive or unarchive an email template.


Parameters:


  • id (path): string (required) — The unique identifier of the template


Request Body (application/json):


  • archived: boolean — true to archive, false to unarchive


Responses:


  • 200: Template archived/unarchived successfully
  Content-Type: application/json

Schema:



/users


GET — Get All Users


Retrieve all users in your workspace.
For AI agents: Only owners and admins can view all users. Regular users see limited info.



Parameters:


  • limit (query): integer — Maximum number of users to return
  • skip (query): integer — Number of users to skip for pagination
  • search (query): string — Search query to filter users
  • starred (query): boolean — Filter by starred status
  • archived (query): boolean — Filter by archived status


Responses:


  • 200: A list of users
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: array of object —
    • id: string —
    • name: string —
    • email: string —
    • role: string —
    • date_created: string —


POST — Add a User


Invite a new user to your account.
For AI agents: Only owners and admins can add users. Role must be one of: client, user, admin, developer.
An invitation email will be sent to the user.



Request Body (application/json):


  • email: string (required) (e.g., john@example.com) — Email address of the new user (required)
  • role: string (enum: client, user, admin, developer) (e.g., user) — User role. client=external client access, user=regular team member, admin=full access, developer=API access
  • url: string (e.g., https://example.com/dashboard) — Optional URL to redirect after accepting invitation


Responses:


  • 200: User added successfully
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • email: string —
    • message: string —



/users/{id}


GET — Get a Specific User


Retrieve detailed information about a specific team member.


Parameters:


  • id (path): string (required) — The unique identifier of the user


Responses:


  • 200: Details of the user
  Content-Type: application/json

Schema:

  • success: boolean (e.g., True) —
  • data: object —
    • id: string —
    • name: string —
    • email: string —
    • role: string —


PATCH — Update a User


Update user properties including name and role.
For AI agents: To remove a user, set archived=true via the appropriate archive endpoint.



Parameters:


  • id (path): string (required) — The unique identifier of the user


Request Body (application/json):


  • name: string (e.g., John Doe) — User's display name
  • role: string (enum: client, user, admin, developer) (e.g., user) — User role


Responses:


  • 200: User updated successfully
  Content-Type: application/json

Schema:





Retrieve all warmup link configurations.


Parameters:


  • limit (query): integer —
  • skip (query): integer —


Responses:


  • 200: List of warmup links
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: array of object —



/workspaces


GET — Get All Workspaces


Retrieve all workspaces the authenticated user has access to.
For AI agents: Only workspace owners can view all workspaces. Shows workspace name, ID, and user's permission level.



Responses:


  • 200: List of workspaces
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: array of object —
    • id: string —
    • name: string —
    • permission: string (enum: owner, admin, user, client) —


POST — Create Workspace


Create a new workspace.
For AI agents: Only workspace owners can create new workspaces. Name must be at least 4 characters.



Request Body (application/json):


  • name: string (required) — Name of the workspace (min 4 characters)


Responses:


  • 200: Workspace created successfully
  Content-Type: application/json

Schema:

  • success: boolean —
  • data: object —
    • id: string —
    • name: string —



/workspaces/{id}


PATCH — Update Workspace


Update workspace name. Only owners can update workspaces.


Parameters:


  • id (path): string (required) — The unique identifier of the workspace


Request Body (application/json):


  • name: string (required) — New name for the workspace (min 4 characters)


Responses:


  • 200: Workspace updated successfully
  Content-Type: application/json

Schema:



Schemas


Contact


  • id: string — Unique contact ID
  • Email: string —
  • First_Name: string —
  • Last_Name: string —
  • Phone: string —
  • list_id: string —
  • owned_by: string — Email of the owner
  • archived: boolean —
  • accuracy: string — Email verification accuracy score


EmailSendingHours


  • name: string — Day of the week (Monday, Tuesday, etc.)
  • enabled: boolean — Whether sending is enabled on this day
  • fromTime: string — Start time in 24-hour format (HH:MM)
  • toTime: string — End time in 24-hour format (HH:MM)


ErrorResponse


  • success: boolean —
  • message: string (e.g., Error description) —


Step


  • type: string (required) (enum: email, delay) — Type of step - email or delay
  • template_id: string — Required for email type - the template UUID
  • days: integer — Required for delay type - number of days to wait


SuccessResponse


  • success: boolean (e.g., True) —
  • message: string (e.g., Operation completed successfully) —

Updated on: 03/07/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!