For the complete documentation index, see llms.txt. This page is also available as Markdown.

Leads

List leads

get

Lists the leads in the API key's workspace, newest first, with pagination. Filter by exact email address to look up a single lead, or by campaign to list only the leads in one campaign. This is how a lead created through POST /leads is found again.

Authorizations
AuthorizationstringRequired
Query parameters
pageintegerOptional

Page number (default: 1)

limitintegerOptional

Page size (default: 20, maximum: 200)

emailstringOptional

Filter by exact email address

campaignIdintegerOptional

Filter by campaign ID

Header parameters
AuthorizationstringRequired

Bearer <API_KEY>

Responses
200

List of leads

application/json
hasMorebooleanOptionalExample: true
limitintegerOptionalExample: 20
pageintegerOptionalExample: 1
totalintegerOptionalExample: 42
get/leads
GET /r/leads HTTP/1.1
Host: api.emailchaser.com
Authorization: text
Accept: */*
{
  "hasMore": true,
  "leads": [
    {
      "company": "Acme Corp",
      "createdAt": "2024-01-15T10:30:00Z",
      "customVariables": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "email": "john.doe@example.com",
      "firstName": "John",
      "id": 123,
      "lastName": "Doe",
      "linkedin": "https://linkedin.com/in/johndoe",
      "meetingBookedAt": "2026-07-30T14:05:00Z",
      "middleName": "A.",
      "phone": "+1234567890",
      "tag": "interested",
      "title": "Software Engineer",
      "updatedAt": "2024-01-15T10:30:00Z",
      "website": "https://example.com"
    }
  ],
  "limit": 20,
  "page": 1,
  "total": 42
}

Create or update leads in bulk

post

Creates or updates multiple leads. If a lead with the same email already exists, it will be updated. Optionally associate leads with a campaign by passing campaignId at the top level of the request body, not inside a lead object. Any attribute outside the named fields can be sent in customVariables and becomes a merge tag usable in email copy. PUT /leads is an alias for this endpoint and behaves identically.

Authorizations
AuthorizationstringRequired
Header parameters
AuthorizationstringRequired

Bearer <API_KEY>

Body
campaignIdintegerOptional
Responses
201

Leads processed successfully

application/json
countintegerOptionalExample: 5
messagestringOptionalExample: leads processed successfully
post/leads
POST /r/leads HTTP/1.1
Host: api.emailchaser.com
Authorization: text
Content-Type: application/json
Accept: */*
Content-Length: 239

{
  "campaignId": 1,
  "leads": [
    {
      "company": "text",
      "customVariables": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "email": "text",
      "firstName": "text",
      "lastName": "text",
      "linkedin": "text",
      "middleName": "text",
      "phone": "text",
      "title": "text",
      "website": "text"
    }
  ]
}
{
  "count": 5,
  "leads": [
    {
      "email": "john.doe@example.com",
      "id": 123
    }
  ],
  "message": "leads processed successfully"
}

Get a lead by ID

get

Retrieves detailed information about a specific lead.

Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Lead ID

Header parameters
AuthorizationstringRequired

Bearer <API_KEY>

Responses
200

Lead details

application/json
get/leads/{id}
GET /r/leads/{id} HTTP/1.1
Host: api.emailchaser.com
Authorization: text
Accept: */*
{
  "lead": {
    "company": "Acme Corp",
    "createdAt": "2024-01-15T10:30:00Z",
    "customVariables": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "email": "john.doe@example.com",
    "firstName": "John",
    "id": 123,
    "lastName": "Doe",
    "linkedin": "https://linkedin.com/in/johndoe",
    "meetingBookedAt": "2026-07-30T14:05:00Z",
    "middleName": "A.",
    "phone": "+1234567890",
    "tag": "interested",
    "title": "Software Engineer",
    "updatedAt": "2024-01-15T10:30:00Z",
    "website": "https://example.com"
  }
}

Update a lead by ID

put

Updates an existing lead's information. Only provided fields will be updated.

Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Lead ID

Header parameters
AuthorizationstringRequired

Bearer <API_KEY>

Body
companystringOptional
emailstringOptional
firstNamestringOptional
lastNamestringOptional
linkedinstringOptional
middleNamestringOptional
phonestringOptional
titlestringOptional
websitestringOptional
Responses
200

Lead updated successfully

application/json
messagestringOptionalExample: lead updated successfully
put/leads/{id}
PUT /r/leads/{id} HTTP/1.1
Host: api.emailchaser.com
Authorization: text
Content-Type: application/json
Accept: */*
Content-Length: 212

{
  "company": "text",
  "customVariables": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "email": "text",
  "firstName": "text",
  "lastName": "text",
  "linkedin": "text",
  "middleName": "text",
  "phone": "text",
  "title": "text",
  "website": "text"
}
{
  "lead": {
    "company": "Acme Corp",
    "createdAt": "2024-01-15T10:30:00Z",
    "customVariables": {
      "ANY_ADDITIONAL_PROPERTY": "anything"
    },
    "email": "john.doe@example.com",
    "firstName": "John",
    "id": 123,
    "lastName": "Doe",
    "linkedin": "https://linkedin.com/in/johndoe",
    "meetingBookedAt": "2026-07-30T14:05:00Z",
    "middleName": "A.",
    "phone": "+1234567890",
    "tag": "interested",
    "title": "Software Engineer",
    "updatedAt": "2024-01-15T10:30:00Z",
    "website": "https://example.com"
  },
  "message": "lead updated successfully"
}

Delete a lead by ID

delete

Deletes a lead and all associated unsent emails. If the lead is associated with campaigns, it will be removed from those campaigns first.

Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Lead ID

Header parameters
AuthorizationstringRequired

Bearer <API_KEY>

Responses
200

Lead deleted successfully

application/json
idintegerOptionalExample: 123
messagestringOptionalExample: lead deleted successfully
delete/leads/{id}
DELETE /r/leads/{id} HTTP/1.1
Host: api.emailchaser.com
Authorization: text
Accept: */*
{
  "id": 123,
  "message": "lead deleted successfully"
}

Set or correct a lead's category

put

Sets the lead's category (tag), typically to correct an AI misclassification of a reply. Validated against the category enum: interested, not_interested, bounced, out_of_office, delivery_incomplete, meeting_booked. Setting meeting_booked behaves exactly like POST /leads/{id}/meeting: it records meetingBookedAt when unset and keeps an existing one, because a meeting is an explicit mark set by you or your agent, never inferred by the system. A real category change fires the LeadCategoryUpdate webhook; setting the value the lead already has is a no-op. Changing the category away from meeting_booked does NOT clear the booked-meeting mark - use DELETE /leads/{id}/meeting for that.

Authorizations
AuthorizationstringRequired
Path parameters
idintegerRequired

Lead ID

Header parameters
AuthorizationstringRequired

Bearer <API_KEY>

Body
categorystringRequired

Category must be one of the lead category values: interested, not_interested, bounced, out_of_office, delivery_incomplete, meeting_booked.

Example: interested
Responses
200

Lead category updated

application/json
messagestringOptionalExample: lead category updated successfully
put/leads/{id}/category
PUT /r/leads/{id}/category HTTP/1.1
Host: api.emailchaser.com
Authorization: text
Content-Type: application/json
Accept: */*
Content-Length: 25

{
  "category": "interested"
}
{
  "lead": {
    "id": 123,
    "meetingBookedAt": "2026-07-30T14:05:00Z",
    "tag": "meeting_booked"
  },
  "message": "lead category updated successfully"
}

Last updated