API Documentation

API, Webhooks and Integrations

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:

  1. Navigate to SettingsIntegrations
  2. Click Add API Key
  3. Enter a name for the key
  4. 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 a details 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.