Aircall · AsyncAPI Specification

Aircall Webhooks

Version 1.0.0

AsyncAPI description of Aircall's outbound webhook surface. Aircall delivers event notifications by issuing HTTP POST requests with a JSON body to a subscriber `url` that is registered through the Webhooks REST API or the Aircall dashboard. Each event carries a top-level `event` field that identifies the event class along with a `resource` discriminator and a `data` payload that mirrors the corresponding REST object. Modelled from the Aircall developer reference at https://developer.aircall.io/api-references/#webhooks. Events covered include the call lifecycle (created, ringing, answered, transferred, hungup, ended, voicemail, hold, archive, IVR), call collaboration (commented, tagged, untagged, assigned), contact lifecycle (created, updated, deleted), user lifecycle and presence (created, deleted, connected, disconnected, opened, closed, wrap-up start/end) including the V2 variants, number lifecycle (created, deleted, opened, closed), team lifecycle (created, destroyed), SMS / MMS / WhatsApp messaging (sent, received, status_updated, plus the group_message variants), conversation intelligence (transcription, summary, sentiment, topics, action items, playbook results, real-time utterances, custom summaries, call evaluations), AI Voice Agent (started, ended, escalated, summary), Analytics export jobs (report_created, report_failed) and integration deletions. Security and signing: Aircall does not publish an HMAC signature header for outbound webhooks. The documented verification mechanism is a shared `token` field, which is included on every event payload and is set when the webhook subscription is created. Subscribers should compare the received `token` against the value stored at registration time and respond with a 2xx status code. The `token` field is also surfaced below in `components.securitySchemes` for clarity.

View Spec View on GitHub CommunicationsVoiceCloud PhoneCRMSalesAsyncAPIWebhooksEvents

Channels

/aircall/webhook
publish receiveAircallWebhook
Receive an Aircall webhook event
Single subscriber endpoint that receives every Aircall webhook event the subscription is registered for. The top-level `event` field on the JSON body identifies the event class. Aircall sends one event per HTTP POST.

Messages

CallCreated
Call created
A new call has been initiated (inbound or outbound).
CallRingingOnAgent
Call ringing on agent
The call is ringing on an agent's phone.
CallAgentDeclined
Agent declined call
An agent declined the incoming call.
CallAnswered
Call answered
The call has been answered.
CallTransferred
Call transferred
The call was transferred between Aircall users.
CallExternalTransferred
Call externally transferred
The call was transferred to an external phone number.
CallUnsuccessfulTransfer
Unsuccessful transfer
A transfer attempt did not complete successfully.
CallHungup
Call hung up
One party hung up the call.
CallEnded
Call ended
The call session has fully ended.
CallVoicemailLeft
Voicemail left
A voicemail was recorded for the call.
CallCommented
Call commented
A note/comment was added to the call.
CallTagged
Call tagged
A tag was applied to the call.
CallUntagged
Call untagged
A tag was removed from the call.
CallAssigned
Call assigned
The call was assigned to a user.
CallArchived
Call archived
The call was archived / marked as resolved.
CallHold
Call placed on hold
The call was placed on hold.
CallUnhold
Call resumed from hold
The call was resumed from hold.
CallIvrOptionSelected
IVR option selected
The caller selected an option in an IVR menu.
CallCommAssetsGenerated
Communication assets generated
Recording / voicemail asset links are available for the call.
ContactCreated
Contact created
A new contact was added to the shared address book.
ContactUpdated
Contact updated
A contact's information was modified.
ContactDeleted
Contact deleted
A contact was removed from the shared address book.
NumberCreated
Number created
A new phone number was added to the workspace.
NumberDeleted
Number deleted
A phone number was removed from the workspace.
NumberOpened
Number opened
The number's status switched to open. Deprecated for Smartflows-enabled lines.
NumberClosed
Number closed
The number's status switched to closed. Deprecated for Smartflows-enabled lines.
UserCreated
User created
A new Aircall user was provisioned.
UserDeleted
User deleted
An Aircall user was deprovisioned.
UserConnected
User connected
The user came online.
UserDisconnected
User disconnected
The user went offline.
UserOpened
User opened phone
The user opened the Aircall phone app.
UserClosed
User closed phone
The user closed the Aircall phone app.
UserWutStart
User wrap-up time started
Wrap-up time began for the user.
UserWutEnd
User wrap-up time ended
Wrap-up time ended for the user.
UserCreatedV2
User created (v2)
V2 variant of user.created. Excludes the `numbers` array present in V1.
UserDeletedV2
User deleted (v2)
V2 variant of user.deleted.
UserConnectedV2
User connected (v2)
V2 variant of user.connected.
UserDisconnectedV2
User disconnected (v2)
V2 variant of user.disconnected.
UserOpenedV2
User opened phone (v2)
V2 variant of user.opened.
UserClosedV2
User closed phone (v2)
V2 variant of user.closed.
UserWutStartV2
User wrap-up time started (v2)
V2 variant of user.wut_start. Includes `last_call_id` when available.
UserWutEndV2
User wrap-up time ended (v2)
V2 variant of user.wut_end. Includes `last_call_id` when available.
TeamCreated
Team created
A new team was created.
TeamDestroyed
Team destroyed
A team was deleted.
MessageSent
Message sent
A message was sent from an Aircall number (SMS, MMS or WhatsApp).
MessageReceived
Message received
A message was received on an Aircall number.
MessageStatusUpdated
Message status updated
A message's delivery status changed.
GroupMessageSent
Group message sent
A group message was sent from an Aircall number.
GroupMessageReceived
Group message received
A group message was received on an Aircall number.
GroupMessageStatusUpdated
Group message status updated
A group message's delivery status changed.
IntegrationDeleted
Integration deleted
A third-party integration was disconnected from the workspace.
SentimentCreated
Sentiment created
Sentiment analysis was generated for a call.
SummaryCreated
Summary created
A summary was generated for a call.
TopicsCreated
Topics created
Key topics were identified for a call.
TranscriptionCreated
Transcription created
A transcription was generated for a call.
ActionItemCreated
Action item created
An action item was extracted from a call.
PlaybookResultCreated
Playbook result created
A playbook evaluation result was created for a call.
PlaybookResultUpdated
Playbook result updated
A playbook evaluation result was updated for a call.
RealtimeTranscriptionUtterancesReceived
Real-time transcription utterances received
Real-time utterances streamed during an active call.
CustomSummaryResultCreated
Custom summary result created
A custom summary result was created for a call.
CustomSummaryResultUpdated
Custom summary result updated
A custom summary result was updated for a call.
CallEvaluationCreated
Call evaluation created
A call evaluation was created.
CallEvaluationUpdated
Call evaluation updated
A call evaluation was updated.
AiVoiceAgentStarted
AI Voice Agent call started
An AI Voice Agent call was initiated.
AiVoiceAgentEnded
AI Voice Agent call ended
An AI Voice Agent call completed.
AiVoiceAgentEscalated
AI Voice Agent escalated
An AI Voice Agent call was escalated to a human agent.
AiVoiceAgentSummary
AI Voice Agent summary
Intake-question answers / summary delivered by the AI Voice Agent.
AnalyticsReportCreated
Analytics report created
An analytics export job completed successfully.
AnalyticsReportFailed
Analytics report failed
An analytics export job failed.

Servers

https
subscriber {webhookUrl}
Customer-hosted HTTPS endpoint that receives webhook POSTs from Aircall. The full URL is configured per webhook subscription through the Webhooks REST API (`POST /v1/webhooks`) or the Aircall dashboard.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Aircall Webhooks
  version: '1.0.0'
  description: |-
    AsyncAPI description of Aircall's outbound webhook surface. Aircall delivers
    event notifications by issuing HTTP POST requests with a JSON body to a
    subscriber `url` that is registered through the Webhooks REST API or the
    Aircall dashboard. Each event carries a top-level `event` field that
    identifies the event class along with a `resource` discriminator and a
    `data` payload that mirrors the corresponding REST object.

    Modelled from the Aircall developer reference at
    https://developer.aircall.io/api-references/#webhooks. Events covered
    include the call lifecycle (created, ringing, answered, transferred,
    hungup, ended, voicemail, hold, archive, IVR), call collaboration
    (commented, tagged, untagged, assigned), contact lifecycle (created,
    updated, deleted), user lifecycle and presence (created, deleted,
    connected, disconnected, opened, closed, wrap-up start/end) including
    the V2 variants, number lifecycle (created, deleted, opened, closed),
    team lifecycle (created, destroyed), SMS / MMS / WhatsApp messaging
    (sent, received, status_updated, plus the group_message variants),
    conversation intelligence (transcription, summary, sentiment, topics,
    action items, playbook results, real-time utterances, custom summaries,
    call evaluations), AI Voice Agent (started, ended, escalated, summary),
    Analytics export jobs (report_created, report_failed) and integration
    deletions.

    Security and signing:
      Aircall does not publish an HMAC signature header for outbound
      webhooks. The documented verification mechanism is a shared `token`
      field, which is included on every event payload and is set when the
      webhook subscription is created. Subscribers should compare the
      received `token` against the value stored at registration time and
      respond with a 2xx status code. The `token` field is also surfaced
      below in `components.securitySchemes` for clarity.
  contact:
    name: Aircall Developer
    url: https://developer.aircall.io/api-references/
  license:
    name: Aircall Terms of Service
    url: https://aircall.io/terms/

defaultContentType: application/json

servers:
  subscriber:
    url: '{webhookUrl}'
    protocol: https
    description: |-
      Customer-hosted HTTPS endpoint that receives webhook POSTs from Aircall.
      The full URL is configured per webhook subscription through the
      Webhooks REST API (`POST /v1/webhooks`) or the Aircall dashboard.
    variables:
      webhookUrl:
        default: https://example.com/aircall/webhook
        description: Fully-qualified HTTPS URL of the subscriber endpoint.
    security:
      - sharedToken: []

channels:
  /aircall/webhook:
    description: |-
      Single subscriber endpoint that receives every Aircall webhook event the
      subscription is registered for. The top-level `event` field on the JSON
      body identifies the event class. Aircall sends one event per HTTP POST.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receiveAircallWebhook
      summary: Receive an Aircall webhook event
      description: |-
        Aircall POSTs a JSON event to the subscriber endpoint. Subscribers
        should respond with a 2xx status code and verify the shared `token`
        on every payload.
      message:
        oneOf:
          # Call lifecycle
          - $ref: '#/components/messages/CallCreated'
          - $ref: '#/components/messages/CallRingingOnAgent'
          - $ref: '#/components/messages/CallAgentDeclined'
          - $ref: '#/components/messages/CallAnswered'
          - $ref: '#/components/messages/CallTransferred'
          - $ref: '#/components/messages/CallExternalTransferred'
          - $ref: '#/components/messages/CallUnsuccessfulTransfer'
          - $ref: '#/components/messages/CallHungup'
          - $ref: '#/components/messages/CallEnded'
          - $ref: '#/components/messages/CallVoicemailLeft'
          - $ref: '#/components/messages/CallCommented'
          - $ref: '#/components/messages/CallTagged'
          - $ref: '#/components/messages/CallUntagged'
          - $ref: '#/components/messages/CallAssigned'
          - $ref: '#/components/messages/CallArchived'
          - $ref: '#/components/messages/CallHold'
          - $ref: '#/components/messages/CallUnhold'
          - $ref: '#/components/messages/CallIvrOptionSelected'
          - $ref: '#/components/messages/CallCommAssetsGenerated'
          # Contact lifecycle
          - $ref: '#/components/messages/ContactCreated'
          - $ref: '#/components/messages/ContactUpdated'
          - $ref: '#/components/messages/ContactDeleted'
          # Number lifecycle
          - $ref: '#/components/messages/NumberCreated'
          - $ref: '#/components/messages/NumberDeleted'
          - $ref: '#/components/messages/NumberOpened'
          - $ref: '#/components/messages/NumberClosed'
          # User lifecycle and presence (V1)
          - $ref: '#/components/messages/UserCreated'
          - $ref: '#/components/messages/UserDeleted'
          - $ref: '#/components/messages/UserConnected'
          - $ref: '#/components/messages/UserDisconnected'
          - $ref: '#/components/messages/UserOpened'
          - $ref: '#/components/messages/UserClosed'
          - $ref: '#/components/messages/UserWutStart'
          - $ref: '#/components/messages/UserWutEnd'
          # User lifecycle and presence (V2)
          - $ref: '#/components/messages/UserCreatedV2'
          - $ref: '#/components/messages/UserDeletedV2'
          - $ref: '#/components/messages/UserConnectedV2'
          - $ref: '#/components/messages/UserDisconnectedV2'
          - $ref: '#/components/messages/UserOpenedV2'
          - $ref: '#/components/messages/UserClosedV2'
          - $ref: '#/components/messages/UserWutStartV2'
          - $ref: '#/components/messages/UserWutEndV2'
          # Team lifecycle
          - $ref: '#/components/messages/TeamCreated'
          - $ref: '#/components/messages/TeamDestroyed'
          # Messaging
          - $ref: '#/components/messages/MessageSent'
          - $ref: '#/components/messages/MessageReceived'
          - $ref: '#/components/messages/MessageStatusUpdated'
          - $ref: '#/components/messages/GroupMessageSent'
          - $ref: '#/components/messages/GroupMessageReceived'
          - $ref: '#/components/messages/GroupMessageStatusUpdated'
          # Integration
          - $ref: '#/components/messages/IntegrationDeleted'
          # Conversation Intelligence
          - $ref: '#/components/messages/SentimentCreated'
          - $ref: '#/components/messages/SummaryCreated'
          - $ref: '#/components/messages/TopicsCreated'
          - $ref: '#/components/messages/TranscriptionCreated'
          - $ref: '#/components/messages/ActionItemCreated'
          - $ref: '#/components/messages/PlaybookResultCreated'
          - $ref: '#/components/messages/PlaybookResultUpdated'
          - $ref: '#/components/messages/RealtimeTranscriptionUtterancesReceived'
          - $ref: '#/components/messages/CustomSummaryResultCreated'
          - $ref: '#/components/messages/CustomSummaryResultUpdated'
          - $ref: '#/components/messages/CallEvaluationCreated'
          - $ref: '#/components/messages/CallEvaluationUpdated'
          # AI Voice Agent
          - $ref: '#/components/messages/AiVoiceAgentStarted'
          - $ref: '#/components/messages/AiVoiceAgentEnded'
          - $ref: '#/components/messages/AiVoiceAgentEscalated'
          - $ref: '#/components/messages/AiVoiceAgentSummary'
          # Analytics
          - $ref: '#/components/messages/AnalyticsReportCreated'
          - $ref: '#/components/messages/AnalyticsReportFailed'

components:
  securitySchemes:
    sharedToken:
      type: httpApiKey
      in: query
      name: token
      description: |-
        Shared verification token. Aircall does not sign webhook deliveries
        with HMAC; instead every JSON payload carries a `token` field set
        when the subscription is created. Subscribers must compare it to
        the stored value before trusting the event. Modelled as an API key
        here because the value is transmitted on the request body rather
        than in an HTTP header.

  messages:
    # ---------------- Call lifecycle ----------------
    CallCreated:
      name: call.created
      title: Call created
      summary: A new call has been initiated (inbound or outbound).
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallRingingOnAgent:
      name: call.ringing_on_agent
      title: Call ringing on agent
      summary: The call is ringing on an agent's phone.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallAgentDeclined:
      name: call.agent_declined
      title: Agent declined call
      summary: An agent declined the incoming call.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallAnswered:
      name: call.answered
      title: Call answered
      summary: The call has been answered.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallTransferred:
      name: call.transferred
      title: Call transferred
      summary: The call was transferred between Aircall users.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallExternalTransferred:
      name: call.external_transferred
      title: Call externally transferred
      summary: The call was transferred to an external phone number.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallUnsuccessfulTransfer:
      name: call.unsuccessful_transfer
      title: Unsuccessful transfer
      summary: A transfer attempt did not complete successfully.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallHungup:
      name: call.hungup
      title: Call hung up
      summary: One party hung up the call.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallEnded:
      name: call.ended
      title: Call ended
      summary: The call session has fully ended.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallVoicemailLeft:
      name: call.voicemail_left
      title: Voicemail left
      summary: A voicemail was recorded for the call.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallCommented:
      name: call.commented
      title: Call commented
      summary: A note/comment was added to the call.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallTagged:
      name: call.tagged
      title: Call tagged
      summary: A tag was applied to the call.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallUntagged:
      name: call.untagged
      title: Call untagged
      summary: A tag was removed from the call.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallAssigned:
      name: call.assigned
      title: Call assigned
      summary: The call was assigned to a user.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallArchived:
      name: call.archived
      title: Call archived
      summary: The call was archived / marked as resolved.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallHold:
      name: call.hold
      title: Call placed on hold
      summary: The call was placed on hold.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallUnhold:
      name: call.unhold
      title: Call resumed from hold
      summary: The call was resumed from hold.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallIvrOptionSelected:
      name: call.ivr_option_selected
      title: IVR option selected
      summary: The caller selected an option in an IVR menu.
      payload:
        $ref: '#/components/schemas/CallEvent'
    CallCommAssetsGenerated:
      name: call.comm_assets_generated
      title: Communication assets generated
      summary: Recording / voicemail asset links are available for the call.
      payload:
        $ref: '#/components/schemas/CallEvent'

    # ---------------- Contact lifecycle ----------------
    ContactCreated:
      name: contact.created
      title: Contact created
      summary: A new contact was added to the shared address book.
      payload:
        $ref: '#/components/schemas/ContactEvent'
    ContactUpdated:
      name: contact.updated
      title: Contact updated
      summary: A contact's information was modified.
      payload:
        $ref: '#/components/schemas/ContactEvent'
    ContactDeleted:
      name: contact.deleted
      title: Contact deleted
      summary: A contact was removed from the shared address book.
      payload:
        $ref: '#/components/schemas/ContactEvent'

    # ---------------- Number lifecycle ----------------
    NumberCreated:
      name: number.created
      title: Number created
      summary: A new phone number was added to the workspace.
      payload:
        $ref: '#/components/schemas/NumberEvent'
    NumberDeleted:
      name: number.deleted
      title: Number deleted
      summary: A phone number was removed from the workspace.
      payload:
        $ref: '#/components/schemas/NumberEvent'
    NumberOpened:
      name: number.opened
      title: Number opened
      summary: The number's status switched to open. Deprecated for Smartflows-enabled lines.
      payload:
        $ref: '#/components/schemas/NumberEvent'
    NumberClosed:
      name: number.closed
      title: Number closed
      summary: The number's status switched to closed. Deprecated for Smartflows-enabled lines.
      payload:
        $ref: '#/components/schemas/NumberEvent'

    # ---------------- User lifecycle / presence V1 ----------------
    UserCreated:
      name: user.created
      title: User created
      summary: A new Aircall user was provisioned.
      payload:
        $ref: '#/components/schemas/UserEvent'
    UserDeleted:
      name: user.deleted
      title: User deleted
      summary: An Aircall user was deprovisioned.
      payload:
        $ref: '#/components/schemas/UserEvent'
    UserConnected:
      name: user.connected
      title: User connected
      summary: The user came online.
      payload:
        $ref: '#/components/schemas/UserEvent'
    UserDisconnected:
      name: user.disconnected
      title: User disconnected
      summary: The user went offline.
      payload:
        $ref: '#/components/schemas/UserEvent'
    UserOpened:
      name: user.opened
      title: User opened phone
      summary: The user opened the Aircall phone app.
      payload:
        $ref: '#/components/schemas/UserEvent'
    UserClosed:
      name: user.closed
      title: User closed phone
      summary: The user closed the Aircall phone app.
      payload:
        $ref: '#/components/schemas/UserEvent'
    UserWutStart:
      name: user.wut_start
      title: User wrap-up time started
      summary: Wrap-up time began for the user.
      payload:
        $ref: '#/components/schemas/UserEvent'
    UserWutEnd:
      name: user.wut_end
      title: User wrap-up time ended
      summary: Wrap-up time ended for the user.
      payload:
        $ref: '#/components/schemas/UserEvent'

    # ---------------- User lifecycle / presence V2 ----------------
    UserCreatedV2:
      name: user.created.v2
      title: User created (v2)
      summary: V2 variant of user.created. Excludes the `numbers` array present in V1.
      payload:
        $ref: '#/components/schemas/UserEventV2'
    UserDeletedV2:
      name: user.deleted.v2
      title: User deleted (v2)
      summary: V2 variant of user.deleted.
      payload:
        $ref: '#/components/schemas/UserEventV2'
    UserConnectedV2:
      name: user.connected.v2
      title: User connected (v2)
      summary: V2 variant of user.connected.
      payload:
        $ref: '#/components/schemas/UserEventV2'
    UserDisconnectedV2:
      name: user.disconnected.v2
      title: User disconnected (v2)
      summary: V2 variant of user.disconnected.
      payload:
        $ref: '#/components/schemas/UserEventV2'
    UserOpenedV2:
      name: user.opened.v2
      title: User opened phone (v2)
      summary: V2 variant of user.opened.
      payload:
        $ref: '#/components/schemas/UserEventV2'
    UserClosedV2:
      name: user.closed.v2
      title: User closed phone (v2)
      summary: V2 variant of user.closed.
      payload:
        $ref: '#/components/schemas/UserEventV2'
    UserWutStartV2:
      name: user.wut_start.v2
      title: User wrap-up time started (v2)
      summary: V2 variant of user.wut_start. Includes `last_call_id` when available.
      payload:
        $ref: '#/components/schemas/UserEventV2'
    UserWutEndV2:
      name: user.wut_end.v2
      title: User wrap-up time ended (v2)
      summary: V2 variant of user.wut_end. Includes `last_call_id` when available.
      payload:
        $ref: '#/components/schemas/UserEventV2'

    # ---------------- Team lifecycle ----------------
    TeamCreated:
      name: team.created
      title: Team created
      summary: A new team was created.
      payload:
        $ref: '#/components/schemas/TeamEvent'
    TeamDestroyed:
      name: team.destroyed
      title: Team destroyed
      summary: A team was deleted.
      payload:
        $ref: '#/components/schemas/TeamEvent'

    # ---------------- Messaging ----------------
    MessageSent:
      name: message.sent
      title: Message sent
      summary: A message was sent from an Aircall number (SMS, MMS or WhatsApp).
      payload:
        $ref: '#/components/schemas/MessageEvent'
    MessageReceived:
      name: message.received
      title: Message received
      summary: A message was received on an Aircall number.
      payload:
        $ref: '#/components/schemas/MessageEvent'
    MessageStatusUpdated:
      name: message.status_updated
      title: Message status updated
      summary: A message's delivery status changed.
      payload:
        $ref: '#/components/schemas/MessageEvent'
    GroupMessageSent:
      name: group_message.sent
      title: Group message sent
      summary: A group message was sent from an Aircall number.
      payload:
        $ref: '#/components/schemas/MessageEvent'
    GroupMessageReceived:
      name: group_message.received
      title: Group message received
      summary: A group message was received on an Aircall number.
      payload:
        $ref: '#/components/schemas/MessageEvent'
    GroupMessageStatusUpdated:
      name: group_message.status_updated
      title: Group message status updated
      summary: A group message's delivery status changed.
      payload:
        $ref: '#/components/schemas/MessageEvent'

    # ---------------- Integration ----------------
    IntegrationDeleted:
      name: integration.deleted
      title: Integration deleted
      summary: A third-party integration was disconnected from the workspace.
      payload:
        $ref: '#/components/schemas/IntegrationEvent'

    # ---------------- Conversation Intelligence ----------------
    SentimentCreated:
      name: sentiment.created
      title: Sentiment created
      summary: Sentiment analysis was generated for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    SummaryCreated:
      name: summary.created
      title: Summary created
      summary: A summary was generated for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    TopicsCreated:
      name: topics.created
      title: Topics created
      summary: Key topics were identified for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    TranscriptionCreated:
      name: transcription.created
      title: Transcription created
      summary: A transcription was generated for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    ActionItemCreated:
      name: action_item.created
      title: Action item created
      summary: An action item was extracted from a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    PlaybookResultCreated:
      name: playbook_result.created
      title: Playbook result created
      summary: A playbook evaluation result was created for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    PlaybookResultUpdated:
      name: playbook_result.updated
      title: Playbook result updated
      summary: A playbook evaluation result was updated for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    RealtimeTranscriptionUtterancesReceived:
      name: realtime_transcription.utterances_received
      title: Real-time transcription utterances received
      summary: Real-time utterances streamed during an active call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    CustomSummaryResultCreated:
      name: custom_summary.result_created
      title: Custom summary result created
      summary: A custom summary result was created for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    CustomSummaryResultUpdated:
      name: custom_summary.result_updated
      title: Custom summary result updated
      summary: A custom summary result was updated for a call.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    CallEvaluationCreated:
      name: call_evaluation.created
      title: Call evaluation created
      summary: A call evaluation was created.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'
    CallEvaluationUpdated:
      name: call_evaluation.updated
      title: Call evaluation updated
      summary: A call evaluation was updated.
      payload:
        $ref: '#/components/schemas/ConversationIntelligenceEvent'

    # ---------------- AI Voice Agent ----------------
    AiVoiceAgentStarted:
      name: ai_voice_agent.started
      title: AI Voice Agent call started
      summary: An AI Voice Agent call was initiated.
      payload:
        $ref: '#/components/schemas/AiVoiceAgentEvent'
    AiVoiceAgentEnded:
      name: ai_voice_agent.ended
      title: AI Voice Agent call ended
      summary: An AI Voice Agent call completed.
      payload:
        $ref: '#/components/schemas/AiVoiceAgentEvent'
    AiVoiceAgentEscalated:
      name: ai_voice_agent.escalated
      title: AI Voice Agent escalated
      summary: An AI Voice Agent call was escalated to a human agent.
      payload:
        $ref: '#/components/schemas/AiVoiceAgentEvent'
    AiVoiceAgentSummary:
      name: ai_voice_agent.summary
      title: AI Voice Agent summary
      summary: Intake-question answers / summary delivered by the AI Voice Agent.
      payload:
        $ref: '#/components/schemas/AiVoiceAgentEvent'

    # ---------------- Analytics ----------------
    AnalyticsReportCreated:
      name: analytics.report_created
      title: Analytics report created
      summary: An analytics export job completed successfully.
      payload:
        $ref: '#/components/schemas/AnalyticsEvent'
    AnalyticsReportFailed:
      name: analytics.report_failed
      title: Analytics report failed
      summary: An analytics export job failed.
      payload:
        $ref: '#/components/schemas/AnalyticsEvent'

  schemas:
    # ---------------- Envelope ----------------
    EventEnvelope:
      type: object
      description: |-
        Common envelope shared by every Aircall webhook event. The specific
        event type is identified by the `event` field; the `data` field
        contains the affected object and mirrors the corresponding REST
        resource. The `token` field is the shared verification secret set
        when the subscription was created.
      required:
        - event
        - resource
        - timestamp
        - token
        - data
      properties:
        event:
          type: string
          description: Event type identifier, e.g. `call.created`.
        resource:
          type: string
          description: The kind of object affected by the event.
          enum:
            - call
            - contact
            - number
            - user
            - team
            - message
            - group_message
            - integration
            - sentiment
            - summary
            - topics
            - transcription
            - action_item
            - playbook_result
            - realtime_transcription
            - custom_summary
            - call_evaluation
            - ai_voice_agent
            - analytics
        timestamp:
          type: integer
          format: int64
          description: UTC epoch timestamp at which the event occurred.
        token:
          type: string
          description: |-
            Shared verification token configured when the webhook
            subscription was created. Subscribers must compare this
            value to the stored secret before acting on the event.
        data:
          description: Affected object. The shape mirrors the corresponding REST resource.

    # ---------------- Per-resource envelopes ----------------
    CallEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: call
            data:
              $ref: '#/components/schemas/Call'

    ContactEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: contact
            data:
              $ref: '#/components/schemas/Contact'

    NumberEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: number
            data:
              $ref: '#/components/schemas/Number'

    UserEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: user
            data:
              $ref: '#/components/schemas/User'

    UserEventV2:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: user
            data:
              $ref: '#/components/schemas/UserV2'

    TeamEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: team
            data:
              $ref: '#/components/schemas/Team'

    MessageEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              description: |-
                Either `message` for SMS/MMS/WhatsApp single-recipient
                messages or `group_message` for group conversations.
              enum: [message, group_message]
            data:
              $ref: '#/components/schemas/Message'

    IntegrationEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: integration
            data:
              $ref: '#/components/schemas/Integration'

    ConversationIntelligenceEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              description: |-
                The conversation-intelligence resource kind: `sentiment`,
                `summary`, `topics`, `transcription`, `action_item`,
                `playbook_result`, `realtime_transcription`,
                `custom_summary` or `call_evaluation`.
            data:
              $ref: '#/components/schemas/ConversationIntelligenceResult'

    AiVoiceAgentEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: ai_voice_agent
            data:
              $ref: '#/components/schemas/AiVoiceAgentResult'

    AnalyticsEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            resource:
              type: string
              const: analytics
            data:
              $ref: '#/components/schemas/AnalyticsReport'

    # ---------------- Domain objects ----------------
    Call:
      type: object
      description: |-
        Aircall Call object as delivered on webhook events. Fields mirror
        the REST `/v1/calls` resource. Not every field is present on every
        event; for example `answered_at` only appears once the call has
        been answered and `asset` / `recording` only appear after
        `call.comm_assets_generated`.
      properties:
        id:
          type: integer
        sid:
          type: string
        call_uuid:
          type: string
        direct_link:
          type: string
          format: uri
        direction:
          type: string
          enum: [inbound, outbound]
        status:
          type: string
          enum: [initial, answered, done]
        missed_call_reason:
          type: string
        started_at:
          type: integer
          format: int64
          description: UTC epoch seconds when the call started.
        answered_at:
          type: integer
          format: int64
          description: UTC epoch seconds when the call was answered, if any.
        ended_at:
          type: integer
          format: int64
          description: UTC epoch seconds when the call ended, if any.
        duration:
          type: integer
          description: Call duration in seconds.
        raw_digits:
          type: string
        archived:
          type: boolean
        voicemail:
          type: string
          format: uri
        recording:
          type: string
          format: uri
        recording_short_url:
          type: string
          format: uri
        voicemail_short_url:
          type: string
          format: uri
        asset:
          type: string
          format: uri
          description: Recording / voicemail asset URL (set on call.comm_assets_generated).
        cost:
          type: string
        number:
          $ref: '#/components/schemas/Number'
        user:
          $ref: '#/components/schemas/User'
        contact:
          $ref: '#/components/schemas/Contact'
        assigned_to:
          $ref: '#/components/schemas/User'
        transferred_by:
          $ref: '#/components/schemas/User'
        transferred_to:
          $ref: '#/components/schemas/User'
        external_transferred_to:
          type: string
          description: External phone number the call was transferred to.
        external_caller_number:
          type: string
        teams:
          type: array
          items:
            $ref: '#/components/schemas/Team'
        comments:
          type: array
          items:
            $ref: '#/components/schemas/Comment'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Tag'
        participants:
          type: array
          items:
            type: object
            additionalProperties: true
        ivr_options_selected:
          type: array
          items:
            type: object
            additionalProperties: true

    Contact:
      type: object
      description: Aircall Contact object as delivered on webhook events.
      properties:
        id:
          type: integer
        direct_link:
          type: string
          format: uri
        first_name:
          type: string
        last_name:
          type: string
        company_name:
          type: string
        information:
          type: string
        is_shared:
          type: boolean
        created_at:
          type: string
        updated_at:
          type: string
        phone_numbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
        emails:
          type: array
          items:
            $ref: '#/components/s

# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/aircall/refs/heads/main/asyncapi/aircall-webhooks-asyncapi.yml