<< All versions

Skill v1.0.0

currentAutomated scan100/100
frontal-so/gtm-os/emailbison
──Details
PublishedSeptember 27, 2026 at 03:00 AM
Content Hashsha256:2221a97691303ede...
Git SHA26e80adb414e
──Files
Files (1 file, 45.7 KB)
SKILL.md45.7 KBactive
SKILL.md · 1293 lines · 45.7 KB

version: "1.0.0"


EmailBison API — Complete Documentation

Source: https://docs.emailbison.com + https://dedi.emailbison.com/api/reference API Version: v1.0.0 (OAS 3.0.3) Base URL: https://dedi.emailbison.com (or your custom instance URL) Scraped: 2026-04-10


Example Instance — Quick Reference

FieldValue
Instance URLhttps://send.example-mail.com
API Key`2\5KmZhWXg08i0OjsHgSSeC0WtEFEvIGDGODpC0KbN9b6d783f`
Auth Header`Authorization: Bearer 2\5KmZhWXg08i0OjsHgSSeC0WtEFEvIGDGODpC0KbN9b6d783f`
UIhttps://send.example-mail.com

Merge Tags (Email Bison Syntax)

Email Bison uses single curly braces + UPPERCASE for all variables:

TokenWhat it does
{FIRST_NAME}Lead's first name
{LAST_NAME}Lead's last name
{EMAIL}Lead's email
{COMPANY}Lead's company
{TITLE}Lead's job title
{SENDER_EMAIL_SIGNATURE}Sender's signature block
{CUSTOM_VARIABLE_NAME}Any custom variable (uppercase, underscores)

NOT the same as SmartLead. SmartLead uses {{first_name}} (double curly, lowercase). Email Bison uses {FIRST_NAME} (single curly, uppercase). Do not mix them.

Campaign Naming Convention (Client Standard)

QFY | ProgramType | Channel | CampaignType | CampaignName

Examples:

  • Q2FY26 | Targeted Events | Email | Launch | Portland WTS Dinner 5/6
  • Q2FY26 | Brand Campaign | Email | Pre-Launch | CMO Marketing Leadership

Standard Campaign Settings (example)

json
{
"max_emails_per_day": 700,
"max_new_leads_per_day": 700,
"plain_text": true,
"open_tracking": false,
"can_unsubscribe": false
}

Standard Schedule (example)

json
{
"monday": true, "tuesday": true, "wednesday": true,
"thursday": true, "friday": true, "saturday": false, "sunday": false,
"start_time": "09:00", "end_time": "18:00",
"timezone": "America/New_York"
}

CSV Bulk Upload Column Mapping

Use flat key mapping (NOT array indexed):

bash
curl 'https://send.example-mail.com/api/leads/bulk/csv' \
--request POST \
--header 'Authorization: Bearer 2|5KmZhWXg08i0OjsHgSSeC0WtEFEvIGDGODpC0KbN9b6d783f' \
--form 'name=Lead List Name' \
--form 'csv=@/path/to/file.csv' \
--form 'columnsToMap[first_name]=First Name' \
--form 'columnsToMap[last_name]=Last Name' \
--form 'columnsToMap[email]=Email' \
--form 'columnsToMap[company]=Company' \
--form 'columnsToMap[title]=Title'

Gotchas (Learned from Usage)

  • wait_in_days minimum is 1 (not 0) — even for the first step
  • CSV column mapping uses columnsToMap[field_name]=CSV Header format (NOT columnsToMap[0][field_name])
  • Apostrophes in email body: use Python json.dumps() to build the payload safely — shell quoting breaks JSON
  • Lead list upload is async — status starts as "Unprocessed", leads sync within ~5 minutes
  • Attaching leads to an active campaign takes up to 5 minutes to sync

Table of Contents

  1. Authentication
  2. Pagination
  3. Terminology & Parameters
  4. Workspaces
  5. Account Management
  6. Email Accounts (Sender Emails)
  7. Campaigns
  8. Campaign Sequences
  9. Campaign Schedule
  10. Leads
  11. Custom Variables
  12. Tags
  13. Master Inbox / Replies
  14. Webhooks
  15. Email & Domain Blocklist
  16. Custom Tracking Domains
  17. Campaign Events / Analytics
  18. Warmup
  19. Reply Templates
  20. Scheduled Emails
  21. Clay Integration
  22. Bulk Uploader Tool
  23. Walkthroughs

Authentication

EmailBison uses Bearer tokens for all API requests.

Token Types

TypeScopeNotes
api-userSingle workspace onlyRecommended. Simpler to manage.
super-adminImpersonates the creating userScoped to one workspace at a time; changes if user switches workspace. Required for workspace creation, user creation, and API key generation.

Creating Tokens

  • UI: Settings -> Developer API -> New API Token
  • API: POST /api/workspaces/v1.1/{team_id}/api-tokens (requires super-admin key)
  • Body: { "name": "token name" }

Authorization Header

All requests must include:

Authorization: Bearer YOUR_API_KEY

Example:

bash
curl https://dedi.emailbison.com/api/users \
--header 'Authorization: Bearer 9|q8kSmhjJRqJVT2kc1M0ezX640Pxk'

Pagination

Paginated responses return 15 entries per page. Response structure:

json
{
"data": [...],
"links": {
"first": "https://dedi.emailbison.com/api/leads?page=1",
"last": "https://dedi.emailbison.com/api/leads?page=4",
"prev": null,
"next": "https://dedi.emailbison.com/api/leads?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 4
}
}

Retrieving pages: Append ?page={page_number} to any paginated endpoint.

Programmatic pagination: Loop requests, incrementing page number until meta.last_page is reached, or follow links.next until it is null.


Terminology & Parameters

Base URL

Each EmailBison instance has its own base URL (the same URL you log in at). Example: https://send.greenmarketing.com. All endpoint paths are relative to this.

Parameter Types

TypeFormatNotes
Path/api/campaigns/{campaign_id}Replace {param} including brackets with the value
Query?folder=inbox&status=interestedAppend to URL with ? and & separators
BodyJSON {"key": "value"}Content-Type: application/json (unless file upload, then multipart/form-data)

Query parameter arrays: Use bracket syntax: ?tag_ids[]=1&tag_ids[]=2&tag_ids[]=3

Body parameters can be sent as query parameters if the parameter names match (EmailBison auto-converts).


Workspaces

Workspaces separate workflows into isolated environments. One workspace per client is recommended.

Scope: Every record (leads, tags, custom variables, campaigns) is unique per workspace and has its own ID. Exception: Sender emails can only exist in one workspace at a time.

Endpoints (v1.1)

MethodEndpointDescriptionAuth
GET/api/workspaces/v1.1List all workspacessuper-admin
POST/api/workspaces/v1.1Create workspacesuper-admin
GET/api/workspaces/v1.1/{team_id}Get workspace detailssuper-admin
PUT/api/workspaces/v1.1/{team_id}Update workspacesuper-admin
DELETE/api/workspaces/v1.1/{team_id}Delete workspacesuper-admin
POST/api/workspaces/v1.1/switch-workspaceSwitch active workspacesuper-admin
POST/api/workspaces/v1.1/usersCreate new usersuper-admin
POST/api/workspaces/v1.1/{team_id}/api-tokensCreate API key for workspacesuper-admin
POST/api/workspaces/v1.1/invite-membersInvite member to workspaceapi-user/super-admin
POST/api/workspaces/v1.1/accept/{team_invitation_id}Accept invitationapi-user/super-admin
DELETE/api/workspaces/v1.1/members/{user_id}Remove memberapi-user/super-admin
GET/api/workspaces/v1.1/master-inbox-settingsGet master inbox settingsapi-user
PATCH/api/workspaces/v1.1/master-inbox-settingsUpdate master inbox settingsapi-user
GET/api/workspaces/v1.1/statsGet workspace statsapi-user
GET/api/workspaces/v1.1/line-area-chart-statsGet workspace chart statsapi-user

Create Workspace

bash
curl https://dedi.emailbison.com/api/workspaces/v1.1 \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{ "name": "New Workspace" }'

Create User

bash
curl https://dedi.emailbison.com/api/workspaces/v1.1/users \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"name": "John Doe",
"password": "securepassword",
"email": "example@example.com",
"role": "admin"
}'

Roles: admin, editor, client

Invite & Accept Members

bash
# Invite
curl https://dedi.emailbison.com/api/workspaces/v1.1/invite-members \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{ "email": "user@example.com", "role": "admin" }'
# Accept (use team_invitation_id from invite response)
curl https://dedi.emailbison.com/api/workspaces/v1.1/accept/{team_invitation_id} \
--request POST \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'

Account Management

MethodEndpointDescription
GET/api/usersGet authenticated user details
POST/api/users/profile-pictureUpdate profile picture (multipart/form-data, jpg/jpeg/png, max 1MB)
PUT/api/users/passwordUpdate password
POST/api/users/headless-ui-tokenGenerate headless UI token (valid 120 min, for embedded iframe OAuth flows)

User Details Response

json
{
"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,
"sender_email_limit": 100000,
"warmup_limit": 100000,
"has_access_to_warmup": false,
"has_access_to_healthcheck": false,
"total_email_verification_credits": 0,
"remaining_email_verification_credits": 0
},
"profile_photo_url": "https://ui-avatars.com/api/?name=J&color=7F9CF5&background=EBF4FF"
}
}

Headless UI Token

Generate a token for embedded email account connection:

bash
curl https://dedi.emailbison.com/api/users/headless-ui-token \
--request POST \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'

Use the token in an iframe: https://your-bison-url.com/headless-ui-login?token=YOUR_HEADLESS_UI_TOKEN

Note: Requesting URL must be whitelisted first.


Email Accounts (Sender Emails)

Sender emails are the accounts EmailBison sends from. Unlimited storage. Three types: Google, Microsoft, Custom SMTP. Sender emails can only exist in one workspace at a time.

Endpoints

MethodEndpointDescription
GET/api/sender-emailsList all sender emails
GET/api/sender-emails/{id}Get sender email details
PATCH/api/sender-emails/{id}Update sender email
DELETE/api/sender-emails/{id}Delete sender email
GET/api/sender-emails/{id}/campaignsGet campaigns for sender email
GET/api/sender-emails/{id}/repliesGet replies for sender email
GET/api/sender-emails/{id}/oauth-access-tokenGet OAuth access token
PATCH/api/sender-emails/signatures/bulkBulk update signatures
PATCH/api/sender-emails/daily-limits/bulkBulk update daily limits
POST/api/sender-emails/imap-smtpAdd custom SMTP account (CSV upload)
POST/api/sender-emails/bulkBulk add sender emails (CSV upload)
POST/api/sender-emails/{id}/check-mx-recordsCheck MX records
POST/api/sender-emails/bulk-check-missing-mx-recordsBulk check missing MX records

Add Custom SMTP Accounts (CSV)

bash
curl https://dedi.emailbison.com/api/sender-emails/imap-smtp \
--request POST \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--form 'csv=@/path/to/accounts.csv'

Bulk Add Sender Emails

bash
curl https://dedi.emailbison.com/api/sender-emails/bulk \
--request POST \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--form 'csv=@/path/to/accounts.csv'

Campaigns

Campaigns orchestrate emails: what gets sent, to whom, and when.

Key behaviors:

  • Smart scheduling: random send pattern within your sending window to avoid automation detection
  • ESP Matching: unopinionated — EmailBison tags leads with their ESP, you decide matching strategy
  • Lead-sender affinity: once a lead gets an email from a sender, that sender handles all remaining steps + followup campaigns
  • Campaign scheduler runs on resume and at end of each sending day

Campaign Endpoints

MethodEndpointDescription
GET/api/campaignsList all campaigns
POST/api/campaignsCreate campaign (body: { "name": "..." })
GET/api/campaigns/{id}Get campaign details + settings
PATCH/api/campaigns/{id}/updateUpdate campaign settings
POST/api/campaigns/{id}/duplicateDuplicate campaign
PATCH/api/campaigns/{id}/pausePause campaign
PATCH/api/campaigns/{id}/resumeResume/launch campaign
PATCH/api/campaigns/{id}/archiveArchive campaign
DELETE/api/campaigns/{id}Delete campaign
DELETE/api/campaigns/bulkBulk delete campaigns
POST/api/campaigns/{id}/statsGet campaign stats
GET/api/campaigns/{id}/line-area-chart-statsGet chart stats
GET/api/campaigns/{id}/repliesGet campaign replies
GET/api/campaigns/{id}/leadsGet campaign leads
DELETE/api/campaigns/{id}/leadsRemove all leads from campaign
GET/api/campaigns/{id}/sender-emailsGet campaign sender emails
GET/api/campaigns/{id}/scheduled-emailsGet scheduled emails

Campaign Settings

Update via PATCH /api/campaigns/{id}/update:

FieldTypeDefaultDescription
max_emails_per_dayinteger/null1000Max emails sent per day
max_new_leads_per_dayinteger/null1000Max new leads added per day
plain_textboolean/nullfalseSend as plain text
open_trackingboolean/nullfalseEnable open tracking
reputation_buildingboolean/nullfalseSpam protection
can_unsubscribeboolean/nullfalseEnable one-click unsubscribe
unsubscribe_textstring/null-Unsubscribe link text
bash
curl 'https://dedi.emailbison.com/api/campaigns/{id}/update' \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"max_emails_per_day": 500,
"max_new_leads_per_day": 100,
"plain_text": true,
"open_tracking": true,
"can_unsubscribe": true,
"unsubscribe_text": "Click here to unsubscribe"
}'

Adding Leads to Campaign

MethodEndpointDescription
POST/api/campaigns/{id}/leads/attach-lead-listAttach a lead list
POST/api/campaigns/{id}/leads/attach-leadsAttach individual leads by ID
POST/api/campaigns/{id}/leads/stop-future-emailsStop future emails for leads
POST/api/campaigns/{id}/leads/move-to-another-campaignMove leads to another campaign

Note: Adding leads to an active campaign takes up to 5 minutes to sync.

bash
# Attach by lead list
curl 'https://dedi.emailbison.com/api/campaigns/6/leads/attach-lead-list' \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{ "lead_list_id": 1 }'
# Attach by lead IDs
curl 'https://dedi.emailbison.com/api/campaigns/6/leads/attach-leads' \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{ "lead_ids": [1, 2, 3] }'

Adding/Removing Sender Emails to Campaign

bash
# Attach
POST /api/campaigns/{campaign_id}/attach-sender-emails
Body: { "sender_email_ids": [1, 2, 3] }
# Remove
DELETE /api/campaigns/{campaign_id}/remove-sender-emails
Body: { "sender_email_ids": [1, 2, 3] }

Campaign Sequences

Sequences are the email steps sent in a campaign.

Endpoints

MethodEndpointDescription
GET/api/campaigns/{id}/sequence-stepsGet sequence steps
POST/api/campaigns/{id}/sequence-stepsCreate sequence steps
PUT/api/campaigns/sequence-steps/{sequence_id}Update a sequence step
PATCH/api/campaigns/sequence-steps/{id}/activate-or-deactivateToggle step active/inactive
DELETE/api/campaigns/sequence-steps/{id}Delete a sequence step
POST/api/campaigns/sequence-steps/{id}/test-emailSend test email for step

v1.1 Sequence Endpoints (newer)

MethodEndpointDescription
GET/api/campaigns/v1.1/{id}/sequence-stepsGet sequence steps (v1.1)
POST/api/campaigns/v1.1/{id}/sequence-stepsCreate sequence steps (v1.1)
PUT/api/campaigns/v1.1/sequence-steps/{sequence_id}Update a sequence step (v1.1)

Sequence Step Fields

FieldTypeRequiredDescription
titlestringyesTitle of the sequence
email_subjectstringyesEmail subject. Variables: {VARIABLE_NAME} (uppercase, curly braces)
email_bodystringyesEmail body. Variables: {VARIABLE_NAME} (must exist as custom variables)
wait_in_daysintegeryesDays before next step
thread_replybooleanyesWhether step is a reply to previous step
variantboolean/nullnoWhether step is an A/B variant
variant_from_stepinteger/nullconditionalRequired if variant is true. ID of the step this is a variant of

Create Sequence Example

bash
curl 'https://dedi.emailbison.com/api/campaigns/{campaign_id}/sequence-steps' \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"title": "Initial outreach",
"sequence_steps": [
{
"email_subject": "Hey {FIRST_NAME}",
"order": 1,
"email_body": "You should check this out!",
"wait_in_days": 3,
"thread_reply": false
},
{
"email_subject": "Following up",
"order": 2,
"email_body": "Just checking in...",
"wait_in_days": 3,
"thread_reply": true
}
]
}'

Campaign Schedule

Endpoints

MethodEndpointDescription
POST/api/campaigns/{id}/scheduleCreate schedule
GET/api/campaigns/{id}/scheduleGet campaign schedule
PUT/api/campaigns/{id}/scheduleUpdate campaign schedule
GET/api/campaigns/schedule/templatesList schedule templates
GET/api/campaigns/schedule/available-timezonesList available timezones
GET/api/campaigns/sending-schedulesList all sending schedules
GET/api/campaigns/{id}/sending-scheduleGet campaign sending schedule
POST/api/campaigns/{id}/create-schedule-from-templateCreate from template

Schedule Fields

FieldTypeRequiredDescription
monday-sundaybooleanyesWhether to send on that day
start_timestringyesStart time HH:MM format (e.g., "09:00")
end_timestringyesEnd time HH:MM format (e.g., "17:00")
timezonestringyesTimezone string (e.g., "America/New_York")
save_as_templatebooleanyesSave as reusable template

Create Schedule Example

bash
curl 'https://dedi.emailbison.com/api/campaigns/{campaign_id}/schedule' \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"monday": true, "tuesday": true, "wednesday": true,
"thursday": true, "friday": true, "saturday": false, "sunday": false,
"start_time": "09:00", "end_time": "17:00",
"timezone": "America/New_York",
"save_as_template": false
}'

Common Timezone Strings

TimezoneString
US EasternAmerica/New_York
US CentralAmerica/Chicago
US MountainAmerica/Denver
US PacificAmerica/Los_Angeles
UKEurope/London
Central EuropeEurope/Berlin
Australia EastAustralia/Sydney

Leads

Leads (contacts) are email addresses targeted by campaigns. Unlimited storage. CSVs and campaigns limited to 50,000 leads at once.

Key behaviors:

  • Same lead (email) can exist in multiple workspaces (separate IDs)
  • Updating a CSV with same emails updates leads in-place (including in active campaigns)
  • Every lead auto-tagged with their ESP (for ESP matching)

Endpoints

MethodEndpointDescription
GET/api/leadsList all leads (paginated)
POST/api/leadsCreate single lead
GET/api/leads/{lead_id}Get lead details
PUT/api/leads/{lead_id}Update lead (full)
PATCH/api/leads/{lead_id}Update lead (partial)
DELETE/api/leads/{lead_id}Delete lead
GET/api/leads/{lead_id}/repliesGet replies for lead
GET/api/leads/{lead_id}/sent-emailsGet sent emails for lead
GET/api/leads/{lead_id}/scheduled-emailsGet scheduled emails for lead
POST/api/leads/multipleCreate multiple leads
POST/api/leads/create-or-update/multipleCreate or update multiple leads
POST/api/leads/create-or-update/{lead_id}Create or update single lead
PATCH/api/leads/{lead_id}/unsubscribeUnsubscribe lead
POST/api/leads/{lead_id}/blacklistBlacklist lead
POST/api/leads/bulk/csvBulk upload via CSV
PATCH/api/leads/{lead_id}/update-statusUpdate lead status
PATCH/api/leads/bulk-update-statusBulk update lead status
DELETE/api/leads/bulkBulk delete leads

Create Single Lead

Required fields: first_name, last_name, email Optional fields: title, company, notes, custom_variables

bash
curl https://dedi.emailbison.com/api/leads \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"first_name": "John",
"last_name": "Doe",
"email": "john@doe.com",
"title": "Engineer",
"company": "Acme Corp",
"notes": "Important client",
"custom_variables": [
{ "name": "phone number", "value": "9059999999" }
]
}'

Bulk Upload Leads (CSV)

50,000 lead limit per CSV file. Do NOT set Content-Type header (auto-set to multipart/form-data).

FieldTypeRequiredDescription
namestringyesName of the lead list to create
csvFILEyesThe CSV file
columnsToMap[first_name][]stringyesCSV header for first_name
columnsToMap[last_name][]stringyesCSV header for last_name
columnsToMap[email][]stringyesCSV header for email
columnsToMap[{OTHER}][]stringnoAdditional field mappings including custom variables
bash
curl https://dedi.emailbison.com/api/leads/bulk/csv \
--request POST \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--form 'name=My Lead List' \
--form 'csv=@/path/to/list.csv' \
--form 'columnsToMap[0][first_name]=name' \
--form 'columnsToMap[0][last_name]=last name' \
--form 'columnsToMap[0][email]=email' \
--form 'columnsToMap[0][company]=company name'

Custom Variables

Custom variables attach arbitrary data to leads. Unique per workspace — must be created before attaching to leads.

Endpoints

MethodEndpointDescription
GET/api/custom-variablesList all custom variables
POST/api/custom-variablesCreate custom variable (body: { "name": "..." })

Attaching to Leads

When creating or updating a lead, pass custom_variables as an array:

json
{
"first_name": "John",
"last_name": "Doe",
"email": "john@doe.com",
"custom_variables": [
{ "name": "phone_number", "value": "123-456-7890" },
{ "name": "linkedin_url", "value": "https://linkedin.com/in/johndoe" }
]
}

Using Variables in Email Copy

Reference variables in email subjects/bodies with uppercase curly brace syntax:

Hey {FIRST_NAME}, I noticed {COMPANY} is growing...

Variables must exist as custom variables in the workspace.


Tags

Tags organize leads, campaigns, and sender emails. Unique per workspace. Emit webhooks on attach/remove.

Default Tags (auto-created per workspace)

Interested, Meeting Booked, Google, Outlook, Zoho, Custom Mail Server, Proofpoint, Mimecast, Barracuda, Automated Reply

Endpoints

MethodEndpointDescription
GET/api/tagsList all tags
POST/api/tagsCreate tag
GET/api/tags/{id}Get tag
DELETE/api/tags/{tag_id}Delete tag
POST/api/tags/attach-to-leadsAttach tags to leads
POST/api/tags/attach-to-campaignsAttach tags to campaigns
POST/api/tags/attach-to-sender-emailsAttach tags to sender emails
POST/api/tags/remove-from-leadsRemove tags from leads
POST/api/tags/remove-from-campaignsRemove tags from campaigns
POST/api/tags/remove-from-sender-emailsRemove tags from sender emails

Create Tag

bash
curl https://dedi.emailbison.com/api/tags \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{ "name": "Important", "default": false }'

Attach/Remove Tags

Body requires tag_ids array + one of lead_ids, campaign_ids, or sender_email_ids:

bash
# Attach tags 1,2 to sender emails 3,4
curl https://dedi.emailbison.com/api/tags/attach-to-sender-emails \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{ "tag_ids": [1, 2], "sender_email_ids": [3, 4] }'
# Remove tags (same body format, same endpoints, use POST for remove-from-*)

Master Inbox / Replies

The Master Inbox is a unified view into all sender email accounts in a workspace.

Filtering: By campaigns, reply statuses, sender emails, lead tags. Smart filter: Toggle Smart filter warmup emails from other providers in Settings -> Master Inbox. Add ignore phrases for remaining warmup emails.

Reply Endpoints

MethodEndpointDescription
GET/api/repliesList all replies
GET/api/replies/{id}Get reply details
POST/api/replies/newCompose new email
POST/api/replies/{reply_id}/replyReply to a message
POST/api/replies/{reply_id}/forwardForward a message
PATCH/api/replies/{reply_id}/mark-as-interestedMark as interested
PATCH/api/replies/{reply_id}/mark-as-not-interestedMark as not interested
PATCH/api/replies/{reply_id}/mark-as-read-or-unreadToggle read/unread
PATCH/api/replies/{reply_id}/mark-as-automated-or-not-automatedToggle automated
PATCH/api/replies/{reply_id}/unsubscribeUnsubscribe lead
DELETE/api/replies/{reply_id}Delete reply
GET/api/replies/{reply_id}/conversation-threadGet conversation thread
POST/api/replies/{reply_id}/attach-scheduled-email-to-replyAttach scheduled email
POST/api/replies/{reply_id}/followup-campaign/pushPush to followup campaign

Fetching Replies for a Lead

GET /api/leads/{lead_id}/replies

Query parameters:

ParamTypeDescription
searchstringSearch term
statusstringOne of: interested, automated_reply, not_automated_reply
folderstringOne of: inbox, sent, spam, bounced, all
readbooleanFilter by read status
campaign_idintegerFilter by campaign
sender_email_idintegerFilter by sender email
tag_idsarrayFilter by tag IDs

Getting Sent Emails for a Lead

GET /api/leads/{lead_id_or_email}/sent-emails

Responding to Messages

bash
POST /api/replies/{reply_id}/reply
FieldTypeRequiredDescription
reply_idinteger (path)yesParent reply ID
messagestringyesReply contents
sender_email_idintegeryesSender email ID
to_emailsarrayyes[{"name": "John", "email_address": "john@example.com"}]
inject_previous_email_bodybooleannoInclude previous email body (default: false)
content_typestringnohtml or text
cc_emailsarraynoCC recipients (same format as to_emails)
bcc_emailsarraynoBCC recipients (same format as to_emails)

Attaching Leads to Untracked Replies

  1. Get scheduled emails: GET /api/scheduled-emails/{lead_id_or_email}
  2. Attach to reply: POST /api/replies/{reply_id}/attach-email-to-reply with body { "scheduled_email_id": 123 }

Webhooks

Webhooks send HTTP POST requests when events occur in your EmailBison instance.

Endpoints

MethodEndpointDescription
GET/api/webhook-urlList all webhooks
POST/api/webhook-urlCreate webhook
GET/api/webhook-url/{id}Get webhook details
PUT/api/webhook-url/{id}Update webhook
DELETE/api/webhook-url/{id}Delete webhook
GET/api/webhook-events/sample-payloadGet sample payload
GET/api/webhook-events/event-typesList all event types
POST/api/webhook-events/test-eventSend test event

Available Webhook Events

EventTrigger
Email SentCampaign email is sent
Manual Email SentManual email sent (reply or compose, from inbox or API)
Contact First EmailedContact receives first campaign email on this workspace
Contact RepliedLead emailed from a campaign replies. NOT triggered if auto-reply + "Include auto replies in stats" is off
Contact InterestedReply marked as interested (manually, via API, or auto AI categorization)
Contact UnsubscribedLead unsubscribed from campaigns
Untracked Reply ReceivedEmail received not associated with a campaign scheduled email
Email OpenedEmail opened (requires track opens enabled on campaign)
Email BouncedCampaign email bounces
Email Account AddedSender email connected for first time
Email Account RemovedSender email deleted
Email Account DisconnectedSender email disconnected (incl. Microsoft token expiry)
Email Account ReconnectedSender email reconnected after disconnect
Tag AttachedCustom tag attached (one webhook per tag per taggable)
Tag RemovedCustom tag removed (one webhook per tag per taggable)
Warmup Disabled Causing BouncesWarmup disabled for causing too many bounces
Warmup Disabled Receiving BouncesWarmup disabled for receiving too many bounces

Testing Webhooks

Via UI: Settings -> Webhooks -> Edit -> Send test webhook Via API: POST /api/webhook-events/test-event


Email & Domain Blocklist

Email Blocklist

MethodEndpointDescription
GET/api/blacklisted-emailsList blocked emails
POST/api/blacklisted-emailsAdd email to blocklist
GET/api/blacklisted-emails/{id}Get blocked email
DELETE/api/blacklisted-emails/{id}Remove from blocklist
POST/api/blacklisted-emails/bulkBulk add to blocklist

Domain Blocklist

MethodEndpointDescription
GET/api/blacklisted-domainsList blocked domains
POST/api/blacklisted-domainsAdd domain to blocklist
GET/api/blacklisted-domains/{id}Get blocked domain
DELETE/api/blacklisted-domains/{id}Remove from blocklist
POST/api/blacklisted-domains/bulkBulk add to blocklist

Custom Tracking Domains

MethodEndpointDescription
GET/api/custom-tracking-domainList tracking domains
POST/api/custom-tracking-domainCreate tracking domain
GET/api/custom-tracking-domain/{id}Get tracking domain
DELETE/api/custom-tracking-domain/{id}Delete tracking domain

Campaign Events / Analytics

Drill down into campaign event stats by dates, campaign IDs, and/or sender email IDs.

MethodEndpointDescription
GET/api/campaign-events/statsGet campaign event stats

Warmup

Manage warmup settings for email accounts.

MethodEndpointDescription
GET/api/warmup/sender-emailsList warmup sender emails
PATCH/api/warmup/sender-emails/enableEnable warmup
PATCH/api/warmup/sender-emails/disableDisable warmup
PATCH/api/warmup/sender-emails/update-daily-warmup-limitsUpdate daily warmup limits
GET/api/warmup/sender-emails/{id}Get warmup details for sender email

Reply Templates

Manage templated responses for replying to leads.

MethodEndpointDescription
GET/api/reply-templatesList all reply templates
POST/api/reply-templatesCreate reply template
GET/api/reply-templates/{id}Get reply template
PUT/api/reply-templates/{id}Update reply template
DELETE/api/reply-templates/{id}Delete reply template

Scheduled Emails

MethodEndpointDescription
GET/api/scheduled-emailsList all scheduled emails
GET/api/scheduled-emails/{id}Get scheduled email details

Ignore Phrases

Filter out warmup/noise emails from master inbox.

MethodEndpointDescription
GET/api/ignore-phrasesList all ignore phrases
POST/api/ignore-phrasesCreate ignore phrase
GET/api/ignore-phrases/{id}Get ignore phrase
DELETE/api/ignore-phrases/{id}Delete ignore phrase

Clay Integration

EmailBison has an official Clay integration with native enrichments.

Setup

  1. Create API key: Generate an api-user key in EmailBison (Settings -> Developer API)
  2. Connect in Clay: Settings -> Connections -> + Add connection -> search EmailBison
  • Connection name: workspace name
  • Workspace domain (Instance URL): your EmailBison URL
  • API Key: your api-user key
  1. Each workspace needs its own connection

Native Enrichments

EnrichmentDescription
Find LeadSearch for and retrieve lead information
Create or Update LeadAdd new leads or update existing ones
Import Lead(s) to CampaignAdd leads to specific campaigns
Add Email to BlocklistBlock specific email addresses
Add Domain to BlocklistBlock specific domains
Remove Email from BlocklistUnblock email addresses
Remove Domain from BlocklistUnblock domains

HTTP API Enrichment (for non-native requests)

GET requests: Use Clay's HTTP API enrichment with GET method, paste endpoint URL, add query parameters in Body section.

POST requests (e.g., creating leads):

  1. Add HTTP API enrichment, select POST method
  2. Authenticate via saved account or Authorization header
  3. Map Clay columns to JSON body fields using / to reference columns
  4. For custom fields, use custom_variables array
  5. To attach leads to campaigns, chain a second HTTP API enrichment using the lead ID returned from step 1

Bulk Uploader Tool

Native desktop tool for bulk uploading Microsoft accounts. Available for Windows, macOS, Linux.

Download:

  • Windows: https://dedi.emailbison.com/microsoft-uploader/emailbison_uploader_windows.zip
  • macOS: https://dedi.emailbison.com/microsoft-uploader/emailbison_uploader_mac.zip
  • Linux: https://dedi.emailbison.com/microsoft-uploader/emailbison_uploader_linux.zip

Key Flags

FlagTypeDefaultDescription
--non-interactivebooleanfalseDisable all prompts (requires --csv-file)
--browsersinteger6 (1-16)Concurrent browsers
--no-headlessbooleanfalseShow browser windows (use with --browsers 1)
--timeoutinteger75 (30-180)Seconds before treating email as failed
--tagstring""Tag batch of emails
--skip-connected-accountsbooleanfalseSkip already-connected accounts
--config-filestring"config.txt"Custom config file path
--csv-filestring""Path to CSV file
--throttlebooleanfalseThrottle sign-in speed
--driverstring"rod"Browser driver: "rod" or "chromedp"

CSV Format

Headers: name, email, password Optional column: use_as_admin (for admin consent prompt)

Admin Consent Fix

For "Need Admin Approval" errors: include one account per tenant with "Cloud Applications Admin" role, mark use_as_admin=true in CSV.


Walkthroughs

Creating Template Workspaces

Automate workspace creation with standard setup (users, tags, API tokens, webhooks):

  1. POST /api/workspaces/v1.1 (create workspace, needs super-admin)
  2. POST /api/workspaces/v1.1/{team_id}/api-tokens (create api-user key)
  3. Switch to api-user key for remaining requests
  4. POST /api/workspaces/v1.1/invite-members (for each user)
  5. POST /api/workspaces/v1.1/accept/{team_invitation_id} (accept each)
  6. POST /api/tags (for each tag)
  7. POST /api/webhook-url (create webhook with desired events)

Slack Notification on Campaign Reply

  1. Create webhook in EmailBison: Settings -> Webhooks -> New Webhook URL
  2. Subscribe to Contact Replied event
  3. Point webhook URL to your automation tool (n8n, Zapier, etc.)
  4. Parse webhook payload and send Slack message

Complete Campaign Launch Workflow (API)

  1. Create campaign: POST /api/campaigns with { "name": "..." }
  2. Update settings: PATCH /api/campaigns/{id}/update (limits, tracking, etc.)
  3. Create schedule: POST /api/campaigns/{id}/schedule (days, times, timezone)
  4. Create sequence: POST /api/campaigns/{id}/sequence-steps (email steps)
  5. Add sender emails: POST /api/campaigns/{id}/attach-sender-emails
  6. Add leads: POST /api/campaigns/{id}/leads/attach-leads or attach-lead-list
  7. Verify setup:
  • GET /api/campaigns/{id} (settings)
  • GET /api/campaigns/{id}/schedule (schedule)
  • GET /api/campaigns/{id}/sequence-steps (sequences)
  1. Launch: PATCH /api/campaigns/{id}/resume
  2. Pause: PATCH /api/campaigns/{id}/pause

Full API Endpoint Index

Account Management (4)

  • GET /api/users
  • POST /api/users/profile-picture
  • PUT /api/users/password
  • POST /api/users/headless-ui-token

Campaigns (37)

  • GET /api/campaigns
  • POST /api/campaigns
  • POST /api/campaigns/{id}/duplicate
  • PATCH /api/campaigns/{id}/pause
  • PATCH /api/campaigns/{id}/resume
  • PATCH /api/campaigns/{id}/archive
  • PATCH /api/campaigns/{id}/update
  • POST /api/campaigns/{id}/schedule
  • GET /api/campaigns/{id}/schedule
  • PUT /api/campaigns/{id}/schedule
  • GET /api/campaigns/schedule/templates
  • GET /api/campaigns/schedule/available-timezones
  • GET /api/campaigns/sending-schedules
  • GET /api/campaigns/{id}/sending-schedule
  • POST /api/campaigns/{id}/create-schedule-from-template
  • GET /api/campaigns/{id}/sequence-steps
  • POST /api/campaigns/{id}/sequence-steps
  • PUT /api/campaigns/sequence-steps/{sequence_id}
  • PATCH /api/campaigns/sequence-steps/{id}/activate-or-deactivate
  • DELETE /api/campaigns/sequence-steps/{id}
  • POST /api/campaigns/sequence-steps/{id}/test-email
  • GET /api/campaigns/{id}/replies
  • GET /api/campaigns/{id}/leads
  • DELETE /api/campaigns/{id}/leads
  • POST /api/campaigns/{id}/leads/attach-lead-list
  • POST /api/campaigns/{id}/leads/attach-leads
  • POST /api/campaigns/{id}/leads/stop-future-emails
  • GET /api/campaigns/{id}/scheduled-emails
  • GET /api/campaigns/{id}/sender-emails
  • POST /api/campaigns/{id}/stats
  • POST /api/campaigns/{id}/attach-sender-emails
  • DELETE /api/campaigns/{id}/remove-sender-emails
  • POST /api/campaigns/{id}/leads/move-to-another-campaign
  • GET /api/campaigns/{id}/line-area-chart-stats
  • GET /api/campaigns/{id}
  • DELETE /api/campaigns/bulk
  • DELETE /api/campaigns/{id}

Campaigns v1.1 (3)

  • GET /api/campaigns/v1.1/{id}/sequence-steps
  • POST /api/campaigns/v1.1/{id}/sequence-steps
  • PUT /api/campaigns/v1.1/sequence-steps/{sequence_id}

Replies (14)

  • GET /api/replies
  • GET /api/replies/{id}
  • POST /api/replies/new
  • POST /api/replies/{reply_id}/reply
  • POST /api/replies/{reply_id}/forward
  • PATCH /api/replies/{reply_id}/mark-as-interested
  • PATCH /api/replies/{reply_id}/mark-as-not-interested
  • PATCH /api/replies/{reply_id}/mark-as-read-or-unread
  • PATCH /api/replies/{reply_id}/mark-as-automated-or-not-automated
  • PATCH /api/replies/{reply_id}/unsubscribe
  • DELETE /api/replies/{reply_id}
  • GET /api/replies/{reply_id}/conversation-thread
  • POST /api/replies/{reply_id}/attach-scheduled-email-to-reply
  • POST /api/replies/{reply_id}/followup-campaign/push

Email Accounts (13)

  • GET /api/sender-emails
  • GET /api/sender-emails/{id}/campaigns
  • GET /api/sender-emails/{id}
  • PATCH /api/sender-emails/{id}
  • DELETE /api/sender-emails/{id}
  • GET /api/sender-emails/{id}/replies
  • GET /api/sender-emails/{id}/oauth-access-token
  • PATCH /api/sender-emails/signatures/bulk
  • PATCH /api/sender-emails/daily-limits/bulk
  • POST /api/sender-emails/imap-smtp
  • POST /api/sender-emails/bulk
  • POST /api/sender-emails/{id}/check-mx-records
  • POST /api/sender-emails/bulk-check-missing-mx-records

Email Blacklist (5)

  • GET /api/blacklisted-emails
  • POST /api/blacklisted-emails
  • GET /api/blacklisted-emails/{id}
  • DELETE /api/blacklisted-emails/{id}
  • POST /api/blacklisted-emails/bulk

Domain Blacklist (5)

  • GET /api/blacklisted-domains
  • POST /api/blacklisted-domains
  • GET /api/blacklisted-domains/{id}
  • DELETE /api/blacklisted-domains/{id}
  • POST /api/blacklisted-domains/bulk

Tags (10)

  • GET /api/tags
  • POST /api/tags
  • GET /api/tags/{id}
  • DELETE /api/tags/{tag_id}
  • POST /api/tags/attach-to-campaigns
  • POST /api/tags/remove-from-campaigns
  • POST /api/tags/attach-to-leads
  • POST /api/tags/remove-from-leads
  • POST /api/tags/attach-to-sender-emails
  • POST /api/tags/remove-from-sender-emails

Custom Tracking Domains (4)

  • GET /api/custom-tracking-domain
  • POST /api/custom-tracking-domain
  • GET /api/custom-tracking-domain/{id}
  • DELETE /api/custom-tracking-domain/{id}

Webhooks (5)

  • GET /api/webhook-url
  • POST /api/webhook-url
  • GET /api/webhook-url/{id}
  • PUT /api/webhook-url/{id}
  • DELETE /api/webhook-url/{id}

Webhook Events (3)

  • GET /api/webhook-events/sample-payload
  • GET /api/webhook-events/event-types
  • POST /api/webhook-events/test-event

Campaign Events (1)

  • GET /api/campaign-events/stats

Custom Lead Variables (2)

  • GET /api/custom-variables
  • POST /api/custom-variables

Ignore Phrases (4)

  • GET /api/ignore-phrases
  • POST /api/ignore-phrases
  • GET /api/ignore-phrases/{id}
  • DELETE /api/ignore-phrases/{id}

Leads (17)

  • GET /api/leads
  • POST /api/leads
  • GET /api/leads/{lead_id}
  • PUT /api/leads/{lead_id}
  • PATCH /api/leads/{lead_id}
  • DELETE /api/leads/{lead_id}
  • GET /api/leads/{lead_id}/replies
  • POST /api/leads/multiple
  • POST /api/leads/create-or-update/multiple
  • POST /api/leads/create-or-update/{lead_id}
  • PATCH /api/leads/{lead_id}/unsubscribe
  • POST /api/leads/{lead_id}/blacklist
  • POST /api/leads/bulk/csv
  • GET /api/leads/{lead_id}/scheduled-emails
  • GET /api/leads/{lead_id}/sent-emails
  • PATCH /api/leads/{lead_id}/update-status
  • PATCH /api/leads/bulk-update-status
  • DELETE /api/leads/bulk

Reply Templates (5)

  • GET /api/reply-templates
  • POST /api/reply-templates
  • GET /api/reply-templates/{id}
  • PUT /api/reply-templates/{id}
  • DELETE /api/reply-templates/{id}

Scheduled Emails (2)

  • GET /api/scheduled-emails
  • GET /api/scheduled-emails/{id}

Warmup (5)

  • GET /api/warmup/sender-emails
  • PATCH /api/warmup/sender-emails/enable
  • PATCH /api/warmup/sender-emails/disable
  • PATCH /api/warmup/sender-emails/update-daily-warmup-limits
  • GET /api/warmup/sender-emails/{id}

Workspaces v1.1 (15)

  • GET /api/workspaces/v1.1
  • POST /api/workspaces/v1.1
  • POST /api/workspaces/v1.1/users
  • POST /api/workspaces/v1.1/{team_id}/api-tokens
  • POST /api/workspaces/v1.1/switch-workspace
  • DELETE /api/workspaces/v1.1/{team_id}
  • PUT /api/workspaces/v1.1/{team_id}
  • GET /api/workspaces/v1.1/{team_id}
  • POST /api/workspaces/v1.1/invite-members
  • POST /api/workspaces/v1.1/accept/{team_invitation_id}
  • DELETE /api/workspaces/v1.1/members/{user_id}
  • GET /api/workspaces/v1.1/master-inbox-settings
  • PATCH /api/workspaces/v1.1/master-inbox-settings
  • GET /api/workspaces/v1.1/stats
  • GET /api/workspaces/v1.1/line-area-chart-stats

Total: ~150+ endpoints across 17 API groups


_Part of Frontal — free, open GTM skills for your AI agent. Browse the library →_

All versions