lemlist Inbox API
The unified reply inbox - conversations, messages, drafts, labels and sending on email, LinkedIn and WhatsApp.
The unified reply inbox - conversations, messages, drafts, labels and sending on email, LinkedIn and WhatsApp.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/lemlist-inbox-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Lemlist Inbox API
version: 1.0.0
description: 'Operations tagged Inbox across 3 of this provider''s published API definitions: lemlist-openapi-v1-legacy.json, lemlist-openapi-v2.json, lemlist-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.lemlist.com/api
tags:
- name: Inbox
paths:
/inbox:
parameters: []
get:
summary: Retrieve inbox list
tags:
- Inbox
parameters:
- name: page
in: query
required: false
description: '(Optional): The page number to retrieve'
example: '1'
schema:
type: integer
- name: limit
in: query
required: false
description: '(Optional,): The maximum number of records to return'
example: '2'
schema:
type: integer
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
_id:
type: string
opportunities:
type: array
items:
type: object
properties:
id:
type: string
type:
type: string
done:
type: boolean
lastActivityAt:
type: string
format: date-time
createdBy:
type: string
teamId:
type: string
contactId:
type: string
users:
type: array
items:
type: object
properties:
userId:
type: string
sender:
type: boolean
read:
type: boolean
createdAt:
type: string
format: date-time
channels:
type: array
items:
type: string
haveReplies:
type: boolean
lastRepliedAt:
type: string
format: date-time
lastRepliedChannel:
type: string
pagination:
type: object
properties:
totalItems:
type: integer
currentPage:
type: integer
nextPage: {}
previousPage: {}
perPage:
type: integer
totalPages:
type: integer
example:
data:
- _id: ibx_rvuPJaMgtYHKxaLbZ
opportunities:
- id: opp_DfmAnvgMTccsKkNid
type: manual
done: true
- id: opp_xShTpqQhnqsh97bxT
type: phone
lastActivityAt: '2025-03-27T13:28:53.499Z'
createdBy: usr_h47tiJr87Zn7XtQHi
teamId: tea_8GdMrBZ3gf4p2rj2h
contactId: ctc_yHXD3NWjPg7Z9MuWZ
users:
- userId: usr_6k77bkJP3qhRMXtjH
sender: true
read: false
createdAt: '2025-01-30T16:24:02.620Z'
channels:
- email
haveReplies: true
lastRepliedAt: '2025-03-25T14:18:05.000Z'
lastRepliedChannel: email
pagination:
totalItems: 1
currentPage: 1
nextPage: null
previousPage: null
perPage: 10
totalPages: 1
requestBody:
content:
application/json:
schema:
type: object
properties:
userId:
type: string
example:
userId: usr_vvv9vehz2Ghvgbedv
servers:
- url: https://api.lemlist.com/api
/inbox/{contactId}:
parameters:
- name: contactId
in: path
required: true
example: '{{contactId}}'
schema:
type: string
get:
summary: Contact messages
tags:
- Inbox
parameters:
- name: userId
in: query
required: false
description: Optional, ID of the user viewing the conversation
schema:
type: string
- name: limit
in: query
required: false
description: Optional, The maximum number of records to return
example: '10'
schema:
type: integer
- name: skip
in: query
required: false
description: 'Optional, number of items to skip (default: 0)'
example: '1'
schema:
type: integer
- name: markAsRead
in: query
required: false
description: Optional boolean, defaults to false. When true, marks the
example: 'true'
schema:
type: boolean
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
_id:
type: string
type:
type: string
messageId:
type: string
cc:
type: array
items: {}
createdAt:
type: string
format: date-time
teamId:
type: string
leadId:
type: string
campaignId:
type: string
sendUserId:
type: string
sendUserName:
type: string
sendUserEmail:
type: string
format: email
sendUserMailboxId:
type: string
leadEmail:
type: string
format: email
contactId:
type: string
message:
type: string
format: style
subject:
type: string
attachments:
type: array
items: {}
pagination:
type: object
properties:
totalItems:
type: integer
currentPage:
type: integer
nextPage:
type: integer
previousPage: {}
perPage:
type: integer
totalPages:
type: integer
example:
data:
- _id: act_dPHwKSRHeNjx8ZLMg
type: emailsSent
messageId: <CAGOomWZRBCXq-RLaBpVCnUiFHDorajbSntSYObaxe-1Cyee+CQ@mail.gmail.com>
cc: []
createdAt: '2025-03-27T13:28:53.499Z'
teamId: tea_8GdMrBZ3gf4p2rj2h
leadId: lea_7HAh3odqPKamkBTv9
campaignId: cam_DuGGzG6Fvoy7GNvro
sendUserId: usr_h47tiJr87Zn7XtQHi
sendUserName: Chafik Gharbi
sendUserEmail: chafik@lemtest.com
sendUserMailboxId: usm_CE8QtNtgMjTHjfaL8
leadEmail: chafikgharbi1@gmail.com
contactId: ctc_yHXD3NWjPg7Z9MuWZ
message: '<html><div style="min-width: 360px"></div>Test API
<span summary="/api/reply/data-ll-tsk_7o37E4vrR4kwjtZnZ"></span>
<img alt="logo" src="http://localhost:8000/api/track/open/usr_h47tiJr87Zn7XtQHi/tsk_7o37E4vrR4kwjtZnZ" height="1" width="1"></html>'
subject: Test API
attachments: []
pagination:
totalItems: 22
currentPage: 1
nextPage: 2
previousPage: null
perPage: 1
totalPages: 22
servers:
- url: https://api.lemlist.com/api
/inbox/email:
parameters: []
post:
summary: Send email
tags:
- Inbox
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example:
ok: true
requestBody:
content:
application/json:
schema:
type: object
properties:
sendUserId:
type: string
sendUserEmail:
type: string
sendUserMailboxId:
type: string
contactId:
type: string
leadId:
type: string
subject:
type: string
message:
type: string
cc:
type: array
items: {}
example:
sendUserId: '{{sendUserId}}'
sendUserEmail: '{{sendUserEmail}}'
sendUserMailboxId: '{{sendUserMailboxId}}'
contactId: '{{contactId}}'
leadId: '{{leadId}}'
subject: '{{subject}}'
message: '{{message}}'
cc: []
servers:
- url: https://api.lemlist.com/api
/inbox/linkedin:
parameters: []
post:
summary: Send LinkedIn message
tags:
- Inbox
parameters:
- name: Content
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
headers:
Content-Type:
schema:
type: string
example: application/json
description: Success
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example:
ok: true
requestBody:
content:
application/json:
schema:
type: object
properties:
sendUserId:
type: string
leadId:
type: string
contactId:
type: string
message:
type: string
example:
sendUserId: '{{sendUserId}}'
leadId: '{{leadId}}'
contactId: '{{contactId}}'
message: '{{message}}'
servers:
- url: https://api.lemlist.com/api
/inbox/whatsapp:
parameters: []
post:
summary: Send WhatsApp message
tags:
- Inbox
parameters:
- name: Content-Type
in: header
required: false
example: application/json
schema:
type: string
responses:
'200':
description: Success
requestBody:
content:
application/json:
schema:
type: object
properties:
sendUserId:
type: string
sendUserWhatsappAccountId:
type: string
contactId:
type: string
leadId:
type: string
message:
type: string
example:
sendUserId: '{{sendUserId}}'
sendUserWhatsappAccountId: '{{sendUserWhatsappAccountId}}'
contactId: '{{contactId}}'
leadId: '{{leadId}}'
message: '{{message}}'
servers:
- url: https://api.lemlist.com/api
/inbox/labels:
get:
summary: Get Many Labels
description: List all labels available to your team.
tags:
- Inbox
responses:
'200':
description: Success - Returns array of labels
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Label'
example:
- _id: lbl_uPAAgsi4oi9juBHfW
name: Interested
color: '#F9A2A2'
createdAt: '2025-11-26T15:49:23.470Z'
createdBy: john.doe@example.com
'400':
description: Bad team
content:
text/plain:
example: Bad team
'401':
description: The authentication you supplied is incorrect
content:
text/plain:
example: The authentication you supplied is incorrect
parameters: []
security:
- basicAuth: []
post:
summary: Create Label
description: Creates a new label available to the team.
tags:
- Inbox
requestBody:
content:
application/json:
schema:
type: object
properties:
labelName:
type: string
description: Name of the label to create
required:
- labelName
example:
labelName: Interested
responses:
'200':
description: Success - Label created
content:
application/json:
schema:
$ref: '#/components/schemas/Label'
example:
_id: lbl_uPAAgsi4oi9juBHfW
name: Interested
color: '#F9A2A2'
createdAt: '2025-11-26T15:49:23.470Z'
'400':
description: 'Possible errors: Bad team / labelName is required / Failed to create label'
content:
text/plain:
example: labelName is required
'401':
description: The authentication you supplied is incorrect
content:
text/plain:
example: The authentication you supplied is incorrect
'409':
description: Label with this name already exists
content:
text/plain:
example: Label with this name already exists
'405':
description: Method not allowed
parameters: []
security:
- basicAuth: []
servers:
- url: https://api.lemlist.com/api
/inbox/labels/{labelId}:
get:
summary: Get Label
description: Get info of a specific label.
tags:
- Inbox
parameters:
- name: labelId
in: path
required: true
description: Label ID
example: lbl_uPAAgsi4oi9juBHfW
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Label'
example:
_id: lbl_uPAAgsi4oi9juBHfW
name: Interested
color: '#F9A2A2'
createdAt: '2025-11-26T15:49:23.470Z'
createdBy: john.doe@example.com
'400':
description: Bad team
content:
text/plain:
example: Bad team
'401':
description: The authentication you supplied is incorrect
content:
text/plain:
example: The authentication you supplied is incorrect
'404':
description: Label not found
content:
text/plain:
example: Label not found
'405':
description: Method not allowed
security:
- basicAuth: []
servers:
- url: https://api.lemlist.com/api
/inbox/conversations/labels/{contactId}:
post:
summary: Attach Labels to Conversations
description: Attaches one or more labels to one or more conversations.
tags:
- Inbox
parameters:
- name: contactId
in: path
required: true
description: Contact ID
example: ctc_ei6zVayP9B2ugwUPN
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
labelIds:
type: array
description: Array of label IDs to attach
items:
type: string
appendLabels:
type: boolean
description: If true, appends labels to existing ones. If false, replaces all labels.
required:
- labelIds
- appendLabels
example:
labelIds:
- lbl_uPAAgsi4oi9juBHfW
- lbl_oZCShmPCP2L43b8qf
appendLabels: true
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example:
ok: true
'400':
description: 'Possible errors: Bad team / Invalid request body: labelIds must be an array and appendLabels must be a boolean'
content:
text/plain:
example: 'Invalid request body: labelIds must be an array and appendLabels must be a boolean'
'401':
description: The authentication you supplied is incorrect
content:
text/plain:
example: The authentication you supplied is incorrect
'404':
description: 'Possible errors: Inbox not found / Label not found'
content:
text/plain:
example: Label not found
'405':
description: Method not allowed
security:
- basicAuth: []
delete:
summary: Remove Labels from Conversation
description: Removes one or more labels from one conversation.
tags:
- Inbox
parameters:
- name: contactId
in: path
required: true
description: Contact ID
example: ctc_ei6zVayP9B2ugwUPN
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
labelIds:
type: array
description: Array of label IDs to remove
items:
type: string
required:
- labelIds
example:
labelIds:
- lbl_uPAAgsi4oi9juBHfW
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
example:
ok: true
'400':
description: 'Possible errors: Bad team / Invalid request body: labelIds must be an array'
content:
text/plain:
example: 'Invalid request body: labelIds must be an array'
'401':
description: The authentication you supplied is incorrect
content:
text/plain:
example: The authentication you supplied is incorrect
'404':
description: 'Possible errors: Inbox not found / Label not found'
content:
text/plain:
example: Label not found
'405':
description: Method not allowed
security:
- basicAuth: []
servers:
- url: https://api.lemlist.com/api
/inbox/{contactId}/drafts:
get:
summary: List Drafts
description: Lists all non-deleted drafts for a specific contact.
tags:
- Inbox
parameters:
- name: contactId
in: path
required: true
description: Contact ID
example: ctc_ei6zVayP9B2ugwUPN
schema:
type: string
- name: draftOwner
in: query
required: true
description: Draft owner identifier. Accepts either a userId (e.g., `usr_abc123def456789`) or a login email (e.g., `john@acme.com`).
example: usr_abc123def456789
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
drafts:
type: array
items:
type: object
properties:
_id:
type: string
description: Unique draft identifier
channel:
type: string
enum:
- email
- linkedin
- whatsapp
- sms
description: Communication channel
subject:
type: string
description: Draft subject
contentPreview:
type: string
description: Content preview (max 100 chars)
source:
type: string
enum:
- api
- ui
description: Draft creation source
createdAt:
type: string
format: date-time
description: Creation date
updatedAt:
type: string
format: date-time
description: Last update date
example:
drafts:
- _id: drf_abc123def456789
channel: email
subject: Follow up on our meeting
contentPreview: Hi John, I wanted to follow up on our conversation from last week...
source: api
createdAt: '2025-01-15T10:30:00.000Z'
updatedAt: '2025-01-15T10:30:00.000Z'
'400':
description: 'Possible errors: Missing draftOwner / User not found'
content:
text/plain:
example: 'User not found: neither a valid email nor a valid user id for this team'
'401':
description: The authentication you supplied is incorrect
content:
text/plain:
example: The authentication you supplied is incorrect
'405':
description: Method not allowed
security:
- basicAuth: []
post:
summary: Create Draft
description: Creates a new draft for a specific contact. The source is automatically set to "api".
tags:
- Inbox
parameters:
- name: contactId
in: path
required: true
description: Contact ID
example: ctc_ei6zVayP9B2ugwUPN
schema:
type: string
- name: draftOwner
in: query
required: true
description: Draft owner identifier. Accepts either a userId (e.g., `usr_abc123def456789`) or a login email (e.g., `john@acme.com`).
example: usr_abc123def456789
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
channel:
type: string
enum:
- email
- linkedin
- whatsapp
- sms
description: Communication channel
content:
type: string
description: Draft content (max 30KB)
subject:
type: string
description: Draft subject (optional)
cc:
type: array
items:
type: string
description: CC email addresses (optional)
attachments:
type: array
items:
type: object
properties:
name:
type: string
description: Attachment file name
url:
type: string
description: Attachment URL
size:
type: integer
description: File size in bytes
type:
type: string
description: MIME type
description: File attachments (optional)
replyToActivityId:
type: string
description: Activity ID to reply to (optional)
sourceMetadata:
type: object
description: Additional metadata (optional)
required:
- channel
- content
example:
channel: email
content: <p>Hello John, I wanted to follow up on our conversation.</p>
subject: Follow up on our meeting
cc: []
attachments: []
responses:
'201':
description: Draft created successfully
content:
application/json:
schema:
type: object
properties:
draftId:
type: string
description: ID of the created draft
example:
draftId: drf_abc123def456789
'400':
description: 'Possible errors: Missing draftOwner / Invalid channel / Content must not be empty / Content too large / Draft limit reached (max 10 per conversation) / User not found'
content:
text/plain:
example: Content must not be empty
'401':
description: The authentication you supplied is incorrect
content:
text/plain:
example: The authentication you supplied is incorrect
'405':
description: Method not allowed
security:
- basicAuth: []
servers:
- url: https://api.lemlist.com/api
/inbox/{contactId}/drafts/{draftId}:
get:
summary: Get Draft
description: Retrieves a single draft with its full content, including attachments.
tags:
- Inbox
parameters:
- name: contactId
in: path
required: true
description: Contact ID
example: ctc_ei6zVayP9B2ugwUPN
schema:
type: string
- name: draftId
in: path
required: true
description: Draft ID
example: drf_abc123def456789
schema:
type: string
- name: draftOwner
in: query
required: true
description: Draft owner identifier. Accepts either a userId (e.g., `usr_abc123def456789`) or a login email (e.g., `john@acme.com`).
example: usr_abc123def456789
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
draft:
type: object
properties:
_id:
type: string
description: Unique draft identifier
channel:
type: string
enum:
- email
- linkedin
- whatsapp
- sms
description: Communication channel
subject:
type: string
description: Draft subject
cc:
type: array
items:
type: string
description: CC email addresses
content:
type: string
description: Full draft content
attachments:
type: array
items:
type: object
properties:
name:
type: string
url:
type: string
size:
type: integer
type:
type: string
description: File attachments
source:
type: string
enum:
- api
- ui
description: Draft creation source
createdAt:
type: string
format: date-time
description: Creation date
updatedAt:
type: string
format: date-time
description: Last update date
example:
draft:
_id: drf_abc123def456789
channel: email
subject: Follow up on our meeting
cc: []
content: <p>Hello John, I wanted to follow up on our conversation.</p>
attachments: []
source: api
createdAt: '2025-01-15T10:30:00.000Z'
updatedAt: '2025-01-15T10:30:00.000Z'
'400':
description: 'Possible errors: Missing dra
# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lemlist/refs/heads/main/openapi/lemlist-inbox-api-openapi.yml