lemlist Inbox API

The unified reply inbox - conversations, messages, drafts, labels and sending on email, LinkedIn and WhatsApp.

Operations 15

GET /inbox Retrieve inbox list
GET /inbox/{contactId} Contact messages
POST /inbox/email Send email
POST /inbox/linkedin Send LinkedIn message
POST /inbox/whatsapp Send WhatsApp message
GET /inbox/labels Get Many Labels
POST /inbox/labels Create Label
GET /inbox/labels/{labelId} Get Label
POST /inbox/conversations/labels/{contactId} Attach Labels to Conversations
DELETE /inbox/conversations/labels/{contactId} Remove Labels from Conversation
GET /inbox/{contactId}/drafts List Drafts
POST /inbox/{contactId}/drafts Create Draft
GET /inbox/{contactId}/drafts/{draftId} Get Draft
PATCH /inbox/{contactId}/drafts/{draftId} Update Draft
DELETE /inbox/{contactId}/drafts/{draftId} Delete Draft

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lemlist-inbox-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

lemlist-inbox-api-openapi.yml Raw ↑
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