lemlist Webhooks API

Webhook subscription management - list, create with an optional shared secret, and delete. 76 event types are documented.

OpenAPI Specification

lemlist-webhooks-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: lemlist Webhooks API
  version: 1.0.0
  description: The Webhooks operations of the lemlist API, split by tag from the OpenAPI lemlist publishes
    at https://developer.lemlist.com/api-reference/openapi/v2.json. Operation content is carried verbatim
    from the provider spec.
servers:
- url: https://api.lemlist.com/api
security:
- basicAuth: []
tags:
- name: Webhooks
paths:
  /hooks:
    get:
      summary: Get Many Webhooks
      tags:
      - Webhooks
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Webhook'
              example:
              - _id: hoo_Ib5jfViX9hn3FzNqr
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2018-06-05T09:07:07.761Z'
                zapId: 37709957
                type: emailsReplied
                campaignId: cam_FlN1hrYhADZUfspMs
                isFirst: true
              - _id: hoo_SDRr2w4JigZDL7OB2
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2019-06-05T14:38:56.535Z'
                zapId: 59825555
                type: emailsReplied
                campaignId: cam_h3jptAEeqFFpve5mr
              - _id: hoo_IYAPP4HnSyU7UTH3E
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2019-06-05T15:49:36.624Z'
                zapId: 59831776
                type: emailsReplied
                campaignId: cam_qBNYaIFXA77eXM1Ey
                isFirst: true
              - _id: hoo_OQ1eCPucttlQV6uB4
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2019-06-05T19:28:49.130Z'
                zapId: 59852716
                type: emailsReplied
                campaignId: cam_vRotI1zB0rgqEe0Hg
                isFirst: true
              - _id: hoo_bOucNGG13uJhhIQ8g
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2019-10-15T09:53:50.839Z'
                zapId: 47004696
                type: emailsOpened
                campaignId: cam_K6XNvvamP9QTotBC3
              - _id: hoo_hZSI1GetoYUKu76TX
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2019-10-15T09:56:24.197Z'
                zapId: 47004696
                type: emailsOpened
                campaignId: cam_K6XNvvamP9QTotBC3
              - _id: hoo_anErg4PUSFTd3r3dX
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2020-04-27T14:04:33.424Z'
                zapId: 85466371
                type: emailsReplied
                campaignId: cam_rpejDXyLkA2TSbXyC
              - _id: hoo_Y3nL7UuQn85hIFTRV
                targetUrl: https://hooks.zapier.com/hooks/standard/{accountId}/{webhookId}/
                createdAt: '2020-04-27T14:06:38.375Z'
                zapId: 85466371
                type: emailsReplied
                campaignId: cam_rpejDXyLkA2TSbXyC
              - _id: hoo_UAtwcPAd0tK9U6hKG
                targetUrl: https://example.com/webhooks/{id}
                createdAt: '2022-02-10T16:45:28.216Z'
                campaignId: cam_7BE8IZRaqahU44Wp6
        '400':
          description: Bad team
          content:
            text/plain:
              example: Bad team
        '401':
          description: Unauthorized
        '404':
          description: Webhook not found
          content:
            text/plain:
              example: Webhook not found
      parameters: []
    post:
      summary: Add Webhook
      tags:
      - Webhooks
      parameters:
      - name: campaignId
        in: query
        required: false
        description: Webhook for specific campaign
        example: cam_123
        schema:
          type: string
      - name: isFirst
        in: query
        required: false
        description: Webhook for first activity only
        example: 'true'
        schema:
          type: boolean
      - name: zapId
        in: query
        required: false
        description: Zapier ID
        example: '123456789'
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                targetUrl:
                  type: string
                  format: uri
                  description: The URL that will receive webhook POST requests.
                type:
                  type: string
                  description: Optional event type to subscribe to. When omitted, all events are sent.
                    See the full categorized list in the endpoint documentation.
                  enum:
                  - contacted
                  - hooked
                  - attracted
                  - warmed
                  - interested
                  - notInterested
                  - emailsSent
                  - emailsOpened
                  - emailsClicked
                  - emailsReplied
                  - emailsBounced
                  - emailsFailed
                  - emailsInterested
                  - emailsNotInterested
                  - emailsUnsubscribed
                  - linkedinSent
                  - linkedinOpened
                  - linkedinReplied
                  - linkedinInterested
                  - linkedinNotInterested
                  - linkedinSendFailed
                  - linkedinVisitDone
                  - linkedinVisitFailed
                  - linkedinFollowDone
                  - linkedinFollowFailed
                  - linkedinFollowSkipped
                  - linkedinInviteDone
                  - linkedinInviteFailed
                  - linkedinInviteAccepted
                  - linkedinEndorseDone
                  - linkedinEndorseFailed
                  - linkedinEndorseSkipped
                  - linkedinVoiceNoteDone
                  - linkedinVoiceNoteFailed
                  - linkedinLikeLastPostDone
                  - linkedinLikeLastPostNoPost
                  - linkedinLikeLastPostFailed
                  - linkedinWithdrawInvitationDone
                  - linkedinWithdrawInvitationFailed
                  - whatsappMessageSent
                  - whatsappMessageDelivered
                  - whatsappMessageOpened
                  - whatsappReplied
                  - whatsappMessageFailed
                  - smsSent
                  - smsDelivered
                  - smsReplied
                  - smsFailed
                  - aircallCreated
                  - aircallEnded
                  - aircallDone
                  - aircallInterested
                  - aircallNotInterested
                  - apiDone
                  - apiInterested
                  - apiNotInterested
                  - apiFailed
                  - manualInterested
                  - manualNotInterested
                  - paused
                  - resumed
                  - stopped
                  - campaignComplete
                  - customDomainErrors
                  - connectionIssue
                  - sendLimitReached
                  - lemwarmPaused
                  - annotated
                  - enrichmentDone
                  - enrichmentError
                  - callRecordingDone
                  - callTranscriptDone
                  - inboxLabelUpdated
                  - signalRegistered
                  - deliverabilityAlertTriggered
                secret:
                  type: string
                  description: Optional shared secret. Stored encrypted, never returned by GET, and immutable
                    once set. Sent back to your endpoint as a `secret` field in the body of every webhook
                    call so you can verify the request originated from lemlist.
              required:
              - targetUrl
            example:
              targetUrl: https://webhook.site/00000000-0000-0000-0000-000000000000
              type: linkedinInterested
              secret: s3cret-shared-with-my-endpoint
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  _id:
                    type: string
                    description: Unique identifier for the webhook
                  targetUrl:
                    type: string
                    description: The URL where the webhook will send data
                  createdAt:
                    type: string
                    format: date-time
                    description: Timestamp when the webhook was created
                  type:
                    type: string
                    description: Type of webhook event
              example:
                _id: hoo_GvYkkWIcdPf2WsBDY
                targetUrl: https://n8n.example.com/webhook/lemlist-webhook-surprise
                createdAt: '2025-10-29T00:47:42.035Z'
                type: linkedinInterested
        '400':
          description: Bad team
          content:
            text/plain:
              example: Bad team
        '401':
          description: Unauthorized
        '404':
          description: Webhook not found
          content:
            text/plain:
              example: Webhook not found
  /hooks/{hookId}:
    delete:
      summary: Delete Webhook
      tags:
      - Webhooks
      parameters:
      - name: hookId
        in: path
        required: true
        description: Unique webhook ID
        example: hoo_123
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  _id:
                    type: string
                    description: Unique identifier for the webhook
                  targetUrl:
                    type: string
                    description: The URL where the webhook will send data
                  createdAt:
                    type: string
                    format: date-time
                    description: Timestamp when the webhook was created
                  type:
                    type: string
                    description: Type of webhook event
                  campaignId:
                    type: string
                    description: Associated campaign ID, if applicable
              example:
                _id: hoo_fmpVMoBhrEHtw3cgy
                targetUrl: https://n8n.example.com/webhook/lemlist-webhook-surprise
                createdAt: '2024-07-11T13:55:06.276Z'
                type: linkedinInterested
                campaignId: cam_A1B2C3D4E5F6G7H8I9
        '400':
          description: Bad team
          content:
            text/plain:
              example: Bad team
        '401':
          description: Unauthorized
        '404':
          description: Webhook not found
          content:
            text/plain:
              example: Webhook not found
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
  schemas:
    Webhook:
      type: object
      description: Webhooks send real-time HTTP notifications upon campaign events (opens, clicks, replies,
        etc.).
      properties:
        _id:
          type: string
          description: Unique webhook identifier
        targetUrl:
          type: string
          format: uri
          description: Destination URL for event notifications
        type:
          type: string
          description: Event type to listen for. Events are grouped by category — see the endpoint docs
            for a full breakdown.
          enum:
          - contacted
          - hooked
          - attracted
          - warmed
          - interested
          - notInterested
          - emailsSent
          - emailsOpened
          - emailsClicked
          - emailsReplied
          - emailsBounced
          - emailsFailed
          - emailsInterested
          - emailsNotInterested
          - emailsUnsubscribed
          - linkedinSent
          - linkedinOpened
          - linkedinReplied
          - linkedinInterested
          - linkedinNotInterested
          - linkedinSendFailed
          - linkedinVisitDone
          - linkedinVisitFailed
          - linkedinFollowDone
          - linkedinFollowFailed
          - linkedinFollowSkipped
          - linkedinInviteDone
          - linkedinInviteFailed
          - linkedinInviteAccepted
          - linkedinEndorseDone
          - linkedinEndorseFailed
          - linkedinEndorseSkipped
          - linkedinVoiceNoteDone
          - linkedinVoiceNoteFailed
          - linkedinLikeLastPostDone
          - linkedinLikeLastPostNoPost
          - linkedinLikeLastPostFailed
          - linkedinWithdrawInvitationDone
          - linkedinWithdrawInvitationFailed
          - whatsappMessageSent
          - whatsappMessageDelivered
          - whatsappMessageOpened
          - whatsappReplied
          - whatsappMessageFailed
          - smsSent
          - smsDelivered
          - smsReplied
          - smsFailed
          - aircallCreated
          - aircallEnded
          - aircallDone
          - aircallInterested
          - aircallNotInterested
          - apiDone
          - apiInterested
          - apiNotInterested
          - apiFailed
          - manualInterested
          - manualNotInterested
          - paused
          - resumed
          - stopped
          - campaignComplete
          - customDomainErrors
          - connectionIssue
          - sendLimitReached
          - lemwarmPaused
          - annotated
          - enrichmentDone
          - enrichmentError
          - callRecordingDone
          - callTranscriptDone
          - inboxLabelUpdated
          - signalRegistered
          - deliverabilityAlertTriggered
        campaignId:
          type: string
          description: The ID of the campaign the webhook is associated with (if any)
        createdAt:
          type: string
          format: date-time
          description: Creation timestamp
        zapId:
          type: integer
          description: Zapier integration ID (if the destination is a Zapier webhook)