Reachkit provides a REST API that allows you to integrate our platform with your existing systems and automate your cold email outreach workflows.
Note: API access and integrations are available exclusively for users on the Professional and Agency plans. These features are not available on the Basic plan or Trial.
Getting Started
The Reachkit API gives you programmatic access to manage inboxes, campaigns, leads, and more. This documentation covers all available endpoints, with examples of request and response formats.
Who should use the API?
Our API is designed for:
- Developers integrating Reachkit with other business systems
- Power users who want to automate repetitive tasks
- Teams building custom reporting or dashboards
Common use cases
- Synchronizing leads between your CRM and Reachkit
- Automatically creating and managing campaigns
- Building custom analytics dashboards
- Integrating Reachkit with your internal tools
Authentication
All API requests require authentication using an API key provided in the Authorization
header:
Authorization: Bearer your_api_key_here
To obtain an API key:
- Navigate to Settings → Integrations
- Click Add API Key
- Enter a name for the key
- Store your key securely - it will only be shown once
Response Format
All responses are returned in JSON format with a standard structure:
-
Success responses include a
data
field containing the requested information -
Error responses include an
error
field with a message describing the error and sometimes adetails
field with more specific information
API Endpoints
The following sections provide detailed information about all available API endpoints, organized by resource type.
Blocklist Endpoints
Check email
GET /api/v1/blocklist/:blocklist_id/check
Checks if an email is in the blocklist.
Request
{
"email": string # Email address to check
}
Response
{
"data": {
"blocked": boolean
}
}
Create
POST /api/v1/blocklist
Creates new blocklist entries.
Request
{
"email": string # Email address to add to blocklist
}
Response
{
"data": [
{
"id": string,
"email": string,
"created_at": string
}
]
}
Delete
DELETE /api/v1/blocklist/:id
Deletes a blocklist entry.
Response: 204 No Content
Index
GET /api/v1/blocklist
Lists all blocklist entries for the authenticated user.
Response
{
"data": [
{
"id": string,
"email": string,
"created_at": string
}
]
}
Campaign Endpoints
Analytics
GET /api/v1/campaigns/:campaign_id/analytics
Returns analytics for a campaign.
Response
{
"data": {
"summary": {
"progress": integer, # Campaign progress percentage (0-100)
"total_sent": integer, # Total emails sent
"total_replies": integer, # Total replies received
"reply_rate": float, # Reply rate percentage
"sequence_steps": integer # Number of sequence steps
},
"daily_stats": [
{
"date": string, # Format: YYYY-MM-DD
"sent": integer, # Emails sent that day
"replies": integer # Replies received that day
}
],
"sequence_stats": [
{
"id": string,
"step": integer,
"variants": [
{
"id": string,
"enabled": boolean,
"sent": integer,
"replies": integer,
"reply_rate": float
}
]
}
]
}
}
Index
GET /api/v1/campaigns
Lists all campaigns for the authenticated user.
Response
{
"data": [
{
"id": string,
"name": string,
"status": string,
"created_at": string,
"updated_at": string
}
]
}
Show
GET /api/v1/campaigns/:id
Shows details for a specific campaign.
Response
{
"data": {
"id": string,
"name": string,
"status": string,
"inboxes": [
{
"id": string,
"email": string
}
],
"created_at": string,
"updated_at": string
}
}
Update
PATCH /api/v1/campaigns/:id
Updates a campaign. Currently supports updating the status.
Request
{
"status": string # One of: "active", "paused"
}
Response
{
"data": {
"id": string,
"status": string
}
}
Conversation Endpoints
Download attachment
GET /api/v1/unibox/conversations/:conversation_id/attachments/:id
Downloads an attachment from a conversation message.
Response: Binary file content with appropriate content-type header
Index
GET /api/v1/unibox/conversations
Lists all conversations.
Query Parameters
- page_size: integer (optional, default: 20, max: 100) - Number of conversations per page
- page: integer (optional, default: 1) - Page number
- search: string (optional) - Search term for conversations
- folder: string (optional) - Filter by folder (“primary” or “others”)
Response
{
"data": [
{
"id": string,
"status": string, # One of: open, closed
"messages": [
{
"direction": string, # One of: outgoing, incoming
"subject": string,
"text_body": string,
"html_body": string,
"from_email": string,
"to_email": string,
"email_date": string,
"is_read": boolean,
"attachments": [
{
"id": string,
"filename": string,
"content_type": string,
"size": integer
}
]
}
],
"created_at": string,
"updated_at": string
}
],
"metadata": {
"page": integer,
"page_size": integer,
"total_count": integer,
"total_pages": integer
}
}
Reply
POST /api/v1/unibox/conversations/:conversation_id/reply
Reply to a conversation.
Request
{
"content": string # HTML content of the reply
}
Response
{
"data": {
"direction": string, # Will be "outgoing"
"subject": string,
"text_body": string,
"html_body": string,
"from_email": string,
"to_email": string,
"email_date": string,
"is_read": boolean,
"attachments": []
}
}
Show
GET /api/v1/unibox/conversations/:id
Shows details for a specific conversation.
Response
{
"data": {
"id": string,
"status": string, # One of: open, closed
"messages": [
{
"direction": string, # One of: outgoing, incoming
"subject": string,
"text_body": string,
"html_body": string,
"from_email": string,
"to_email": string,
"email_date": string,
"is_read": boolean,
"attachments": [
{
"id": string,
"filename": string,
"content_type": string,
"size": integer
}
]
}
],
"created_at": string,
"updated_at": string
}
}
Inbox Endpoints
Index
GET /api/v1/inboxes
Lists all inboxes for the authenticated user.
Response
{
"data": [
{
"id": string,
"email": string,
"domain": string,
"provider_type": string,
"connection_type": string,
"connection_status": string,
"first_name": string,
"last_name": string,
"reply_to": string,
"signature": string,
"is_active": boolean,
"is_warming": boolean,
"daily_campaign_limit": integer,
"daily_warmup_limit": integer,
"domain_records_status": string,
"campaigns": [
{
"id": string,
"name": string,
"status": string
}
],
"created_at": string,
"updated_at": string
}
]
}
Show
GET /api/v1/inboxes/:id
Shows details for a specific inbox.
Response
{
"data": {
"id": string,
"email": string,
"domain": string,
"provider_type": string,
"connection_type": string,
"connection_status": string,
"first_name": string,
"last_name": string,
"reply_to": string,
"signature": string,
"is_active": boolean,
"is_warming": boolean,
"daily_campaign_limit": integer,
"daily_warmup_limit": integer,
"domain_records_status": string,
"campaigns": [
{
"id": string,
"name": string,
"status": string
}
],
"created_at": string,
"updated_at": string
}
}
Warmup stats
GET /api/v1/inboxes/:inbox_id/warmup/stats
Returns warmup statistics for an inbox over the last 7 days.
Response
{
"data": {
"summary": {
"total_sent": integer, # Total warmup emails sent
"total_received": integer, # Total warmup emails received
"saved_from_spam": integer,# Emails moved from spam folder
"health_score": integer # 0-100 score based on spam rate
},
"ramp_up_progress": integer, # 0-100 percentage of warmup progress
"daily_stats": [
{
"date": string, # Format: YYYY-MM-DD
"total_sent": integer, # Emails sent that day
"spam_count": integer # Emails that went to spam that day
}
]
}
}
Lead Endpoints
Create
POST /api/v1/campaigns/:campaign_id/leads
Creates a new lead for a campaign.
Request
{
"email": string, # Required
"first_name": string, # Optional
"last_name": string, # Optional
"variables": object # Optional, custom variables map
}
Response
{
"data": {
"id": string,
"email": string,
"first_name": string,
"last_name": string,
"status": string, # One of: uncontacted, contacted, no_reply, replied
"is_bounced": boolean, # Whether the lead has bounced
"is_unsubscribed": boolean, # Whether the lead has unsubscribed
"provider": string, # One of: pending, other, google, microsoft, yahoo, zoho
"variables": object, # Custom variables map
"created_at": string,
"updated_at": string
}
}
Delete
DELETE /api/v1/campaigns/:campaign_id/leads/:id
Deletes a lead from a campaign.
Response: 204 No Content
Index
GET /api/v1/campaigns/:campaign_id/leads
Lists all leads for a specific campaign.
Query Parameters
- page_size: integer (optional, default: 30, max: 100) - Number of leads per page
- page: integer (optional, default: 1) - Page number
- search: string (optional) - Search term for leads
- sort_by: string (optional) - Field to sort by
- sort_order: string (optional, “asc” or “desc”) - Sort direction
- filters: object (optional) - Filtering criteria
Response
{
"data": [
{
"id": string,
"email": string,
"first_name": string,
"last_name": string,
"status": string, # One of: uncontacted, contacted, no_reply, replied
"is_bounced": boolean, # Whether the lead has bounced
"is_unsubscribed": boolean, # Whether the lead has unsubscribed
"provider": string, # One of: pending, other, google, microsoft, yahoo, zoho
"variables": object, # Custom variables map
"created_at": string,
"updated_at": string
}
],
"metadata": {
"page": integer,
"page_size": integer,
"total_count": integer,
"total_pages": integer
}
}
Show
GET /api/v1/campaigns/:campaign_id/leads/:id
Shows details for a specific lead.
Response
{
"data": {
"id": string,
"email": string,
"first_name": string,
"last_name": string,
"status": string, # One of: uncontacted, contacted, no_reply, replied
"is_bounced": boolean, # Whether the lead has bounced
"is_unsubscribed": boolean, # Whether the lead has unsubscribed
"provider": string, # One of: pending, other, google, microsoft, yahoo, zoho
"variables": object, # Custom variables map
"created_at": string,
"updated_at": string
}
}
Sequence Endpoints
Index
GET /api/v1/campaigns/:campaign_id/sequences
Lists all sequences for a campaign with their variants.
Response
{
"data": [
{
"id": string,
"step": integer,
"variants": [
{
"id": string,
"letter": string, # A, B, C, etc.
"sent": integer, # Number of emails sent
"replies": integer, # Number of replies received
"reply_rate": float, # Reply rate percentage
"enabled": boolean # Whether variant is active
}
]
}
]
}
Update
PATCH /api/v1/campaigns/:campaign_id/variants/:variant_id
Updates a sequence variant. Currently supports updating the enabled status.
Request
{
"enabled": boolean
}
Response
{
"data": {
"id": string,
"enabled": boolean
}
}
Need Help?
If you have questions about using the API or need additional endpoints for your specific use case, please contact our support team. We’re continually expanding our API capabilities based on user feedback.