Microsoft LinkedIn · AsyncAPI Specification

Microsoft Linkedin Webhooks

Version

View Spec View on GitHub MarketingMicrosoftProfessional NetworkingRecruitingSocial NetworkAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-13'
method: searched
source: https://learn.microsoft.com/en-us/linkedin/shared/api-guide/webhook-validation
description: >-
  LinkedIn's event surface is webhooks only. There is no published AsyncAPI document, no streaming
  endpoint, no message broker, and no event catalog in machine-readable form. Webhooks are gated:
  the Webhooks tab in the Developer Portal is only enabled for applications with an approved
  webhook use case, and Lead Sync subscriptions can only be created through the Lead Notification
  Subscriptions API, never through the UI.
asyncapi_published: false
asyncapi_note: >-
  LinkedIn publishes no AsyncAPI (or CloudEvents) description of its webhook payloads. This artifact
  captures the webhook contract from the prose documentation instead. NOT fabricated as an AsyncAPI
  document — an AsyncAPI here would be our invention, not LinkedIn's contract.
docs:
  - https://learn.microsoft.com/en-us/linkedin/shared/api-guide/webhook-validation
  - https://learn.microsoft.com/en-us/linkedin/marketing/lead-sync/leadsync
transport: https
protocol: HTTP POST callback
https_required: true
ngrok_supported: false
access:
  gated: true
  note: >-
    Webhooks are available only to applications with an approved use case. The Webhooks tab does not
    appear in the Developer Portal otherwise.
registration:
  location: Developer Portal > app > Webhooks tab
  url: https://www.linkedin.com/developers/apps
  exception:
    surface: Lead Sync
    note: >-
      Lead notification subscriptions must be created via the Lead Notification Subscriptions API;
      they cannot be created in the UI.
validation:
  model: challenge-response
  flow:
    - LinkedIn generates a type-4 UUID challengeCode.
    - LinkedIn issues an HTTP GET to the registered endpoint with challengeCode as a query parameter.
    - >-
      The endpoint computes challengeResponse = lowercase hex of HMACSHA256(challengeCode, clientSecret)
      and returns both challengeCode and challengeResponse as JSON with 200 OK within 3 seconds,
      Content-Type application/json.
    - LinkedIn recomputes and compares; a mismatch fails with "This URL did not pass the security challenge check".
  fields:
    - name: applicationId
      required: false
      description: >-
        Sent only for parent-child application integrations such as Apply Connect. Indicates which
        application's clientSecret to use when generating the challenge response.
    - name: challengeCode
      required: true
      description: Randomly generated type-4 UUID created by LinkedIn.
    - name: challengeResponse
      required: true
      description: Hex-encoded HMACSHA256 of the challengeCode keyed by the application clientSecret.
  response_deadline_seconds: 3
  revalidation:
    interval: every 2 hours
    failure_threshold: 3 consecutive failures
    on_failure: endpoint moves to a Blocked state and stops receiving events
    notifications: warning emails per failed attempt, plus a blocked notification
    recovery: manual re-validation from the Developer Portal
delivery:
  signature_header: X-LI-Signature
  signature_algorithm: HMACSHA256
  string_to_sign: '"hmacsha256=" + <raw JSON POST body>'
  signature_encoding: lowercase hex digest only (the hmacsha256= prefix is not part of the header value)
  verification: constant-time comparison; discard the event on mismatch
  body_handling: >-
    Hash the body exactly as received. Re-serializing, pretty-printing or reformatting the JSON
    breaks the signature.
  at_least_once: true
  deduplication:
    required: true
    key: Notification ID in the payload
    note: LinkedIn may deliver the same notification more than once; the consumer must dedupe.
  expected_response: any 2xx; anything else is treated as a delivery failure
events:
  published_catalog: false
  known_surfaces:
    - name: Lead notifications
      product: Lead Sync API
      docs: https://learn.microsoft.com/en-us/linkedin/marketing/lead-sync/leadsync
      subscription: Lead Notification Subscriptions API
      note: >-
        Since version 202603 (effective 2026-03-16) webhook validation is mandatory for new lead
        notifications; unvalidated endpoints receive nothing.
    - name: Apply Connect notifications
      product: Talent Solutions / Apply Connect
      note: Uses the parent-child application model, hence the applicationId validation field.
  note: >-
    LinkedIn does not publish a consolidated event-type registry with payload schemas. Event shapes
    are documented per product rather than centrally, which is why no event list is asserted here
    beyond the surfaces the docs name.
gaps:
  - No AsyncAPI or CloudEvents description of any webhook payload.
  - No central event catalog; no per-event schema registry.
  - No replay or event-history API — a blocked endpoint loses the events sent while blocked.
  - No documented retry policy or backoff schedule for failed deliveries.