Skip to main content

Documentation Index

Fetch the complete documentation index at: https://help.withallo.com/llms.txt

Use this file to discover all available pages before exploring further.

Events follow the entity.action naming convention. Allo delivers events at least once — your endpoint may receive the same event more than once. Use the webhook-id header to deduplicate. See Best practices for details.

Event summary

EventDescriptionDeduplicated
call.receivedInbound call starts ringingYes
call.triggeredOutbound call initiatedYes
call.completedCall finished with full dataYes
tag.addedTag added to a callNo
tag.removedTag removed from a callNo
sms.receivedInbound SMS receivedYes
sms.sentOutbound SMS sentYes
contact.createdContact createdYes
contact.updatedContact updatedNo

call.received

Fired when an inbound call starts ringing, before the call is answered. When a matching contact is found, the event includes person, company, and deals objects with contact context.
{
  "topic": "call.received",
  "version": "2.0",
  "timestamp": "2025-03-15T14:30:00.000Z",
  "data": {
    "from_number": "+33612345678",
    "to_number": "+33112345678",
    "started_at": "2025-03-15T14:30:00.000Z",
    "user_email": "[email protected]",
    "person": {
      "id": "con_5MiGNHp2vI1AN6sTu4Cw",
      "name": "Marie",
      "last_name": "Dupont",
      "email": "[email protected]",
      "emails": ["[email protected]"],
      "numbers": ["+33612345678"],
      "job_title": "Head of Sales",
      "linkedin_url": "https://linkedin.com/in/mariedupont",
      "lead_source": "Inbound"
    },
    "company": {
      "id": "com-a1b2c3d4e5f6",
      "name": "Acme Corp"
    },
    "deals": [
      {
        "id": "dea-x1y2z3w4v5u6",
        "name": "Enterprise Plan",
        "status": "qualified",
        "value": 25000.00,
        "currency": "EUR",
        "close_date": "2025-06-15T00:00:00"
      }
    ]
  }
}
FieldTypeDescription
from_numberstringCaller’s phone number
to_numberstringYour Allo phone number
started_atstringISO 8601 timestamp when the call started ringing
user_emailstringEmail of the Allo user assigned to the number
personobject or nullMatching contact person. Absent if no contact matches the caller’s number.
companyobject or nullCompany linked to the contact. null if none.
dealsarray or nullDeals linked to the contact. null if none.

Person object

FieldTypeDescription
idstringUnique contact identifier
namestring or nullFirst name
last_namestring or nullLast name
emailstring or nullPrimary email address
emailsarray of stringsAll email addresses
numbersarray of stringsAll phone numbers
job_titlestring or nullJob title
<property>anyEach contact property you have defined appears as a top-level key (e.g. linkedin_url, lead_source). Only non-null values are included.

Company object

FieldTypeDescription
idstringUnique company identifier
namestring or nullCompany name

Deal object

FieldTypeDescription
idstringUnique deal identifier
namestring or nullDeal name
statusstring or nullDeal stage or status
valuenumber or nullDeal monetary value
currencystring or nullCurrency code (e.g. EUR, USD)
close_datestring or nullExpected close date (ISO 8601)

call.triggered

Fired when an outbound call is initiated. When a matching contact is found, the event includes person, company, and deals objects with contact context.
{
  "topic": "call.triggered",
  "version": "2.0",
  "timestamp": "2025-03-15T14:35:00.000Z",
  "data": {
    "from_number": "+33112345678",
    "to_number": "+33612345678",
    "started_at": "2025-03-15T14:35:00.000Z",
    "user_email": "[email protected]",
    "person": {
      "id": "con_5MiGNHp2vI1AN6sTu4Cw",
      "name": "Marie",
      "last_name": "Dupont",
      "email": "[email protected]",
      "emails": ["[email protected]"],
      "numbers": ["+33612345678"],
      "job_title": "Head of Sales"
    },
    "company": {
      "id": "com-a1b2c3d4e5f6",
      "name": "Acme Corp"
    },
    "deals": null
  }
}
FieldTypeDescription
from_numberstringYour Allo phone number
to_numberstringRecipient’s phone number
started_atstringISO 8601 timestamp when the call was initiated
user_emailstringEmail of the Allo user who placed the call
personobject or nullMatching contact person. Absent if no contact matches the recipient’s number.
companyobject or nullCompany linked to the contact. null if none.
dealsarray or nullDeals linked to the contact. null if none.
The person, company, and deals objects use the same schema as call.received.

call.completed

Fired after a call ends. Includes the full call data: recording, transcript, summary, tags, and transfer details. This event is typically sent about 30 seconds after the call hangs up.
{
  "topic": "call.completed",
  "version": "2.0",
  "timestamp": "2025-03-15T14:45:00.000Z",
  "data": {
    "id": "cll_2NfDKEm9sF8xK3pQr1Zt",
    "start_date": "2025-03-15T14:30:00.000Z",
    "recording_url": "https://storage.withallo.com/recordings/abc123.mp3",
    "from_number": "+33612345678",
    "from_name": "Marie Dupont",
    "to": "+33112345678",
    "to_name": "Support Acme",
    "length_in_minutes": 5.5,
    "length": "5m 30s",
    "tag": "support",
    "tags": ["support", "urgent"],
    "summary": "The customer called about a billing issue with their last invoice. The agent confirmed the charge was correct and explained the new pricing plan.",
    "transcriptions": [
      {
        "source": "EXTERNAL",
        "time": "2025-03-15T14:30:05.000Z",
        "text": "Hi, I have a question about my last invoice."
      },
      {
        "source": "USER",
        "time": "2025-03-15T14:30:12.000Z",
        "text": "Of course, let me pull up your account."
      }
    ],
    "concatenated_transcript": "Hi, I have a question about my last invoice.\nOf course, let me pull up your account.",
    "data_collected": {
      "account_number": "12345"
    },
    "type": "INBOUND",
    "result": "ANSWERED",
    "integration_id": null,
    "transfer_from": {
      "number": null,
      "user_email": null,
      "user_name": null
    },
    "transfer_to": {
      "number": null,
      "user_email": null,
      "user_name": null
    },
    "user_email": "[email protected]",
    "original_to_number": null,
    "original_to_name": null,
    "transfer_original_call_id": null,
    "ivr_result": [
      {
        "dtmf_key": "2",
        "text_key": "Support"
      }
    ]
  }
}

Fields

FieldTypeDescription
idstringUnique call identifier
start_datestringISO 8601 timestamp when the call started
recording_urlstring or nullURL to the call recording (MP3). Null if recording is disabled.
from_numberstringCaller’s phone number
from_namestringCaller’s name (from contacts) or your business name
tostringRecipient’s phone number
to_namestringRecipient’s name (from contacts) or your business name
length_in_minutesnumberCall duration in minutes (decimal)
lengthstringHuman-readable duration (e.g., "5m 30s")
tagstring or nullPrimary tag assigned to the call
tagsarray of stringsAll tags assigned to the call
summarystringAI-generated call summary
transcriptionsarrayCall transcript entries (see below)
concatenated_transcriptstringFull transcript as a single string
data_collectedobjectCustom data collected during the call (e.g., from IVR)
typestringINBOUND or OUTBOUND
resultstringCall outcome (see values below)
integration_idstring or nullExternal CRM integration ID for the contact
transfer_fromobjectTransfer origin details (see below)
transfer_toobjectTransfer destination details (see below)
user_emailstringEmail of the Allo user who handled the call
original_to_numberstring or nullOriginal dialed number (if the call was routed)
original_to_namestring or nullOriginal recipient name
transfer_original_call_idstring or nullCall ID of the original call if this was a transfer
ivr_resultarrayIVR menu selections made during the call (see below)

Call result values

ValueDescription
ANSWEREDCall was answered
VOICEMAILCaller left a voicemail
TRANSFERRED_AICall was handled by the AI agent
TRANSFERRED_EXTERNALCall was transferred to an external number
BLOCKEDCall was blocked
FAILEDCall failed to connect

Transcription entry

FieldTypeDescription
sourcestringUSER (your side) or EXTERNAL (caller/recipient)
timestringISO 8601 timestamp of the transcription segment
textstringTranscribed text

Transfer object

FieldTypeDescription
numberstring or nullPhone number involved in the transfer
user_emailstring or nullEmail of the Allo user
user_namestring or nullName of the Allo user

IVR result entry

FieldTypeDescription
dtmf_keystring or nullDTMF digit pressed by the caller
text_keystring or nullMenu label selected

tag.added

Fired when a tag is added to a call.
{
  "topic": "tag.added",
  "version": "2.0",
  "timestamp": "2025-03-15T15:00:00.000Z",
  "data": {
    "call_id": "cll_2NfDKEm9sF8xK3pQr1Zt",
    "tag_key": "urgent",
    "tag_name": "Urgent",
    "user_email": "[email protected]"
  }
}
FieldTypeDescription
call_idstringID of the call the tag was added to
tag_keystringTag identifier
tag_namestringHuman-readable tag name
user_emailstring or nullEmail of the user who added the tag

tag.removed

Fired when a tag is removed from a call.
{
  "topic": "tag.removed",
  "version": "2.0",
  "timestamp": "2025-03-15T15:05:00.000Z",
  "data": {
    "call_id": "cll_2NfDKEm9sF8xK3pQr1Zt",
    "tag_key": "urgent",
    "tag_name": "Urgent",
    "user_email": "[email protected]"
  }
}
FieldTypeDescription
call_idstringID of the call the tag was removed from
tag_keystringTag identifier
tag_namestringHuman-readable tag name
user_emailstring or nullEmail of the user who removed the tag

sms.received

Fired when an inbound SMS is received.
{
  "topic": "sms.received",
  "version": "2.0",
  "timestamp": "2025-03-15T16:00:00.000Z",
  "data": {
    "id": "msg_3KgELFn0tG9yL4qRs2Au",
    "direction": "INBOUND",
    "type": "SMS",
    "content": "Hi, I'd like to schedule an appointment.",
    "sent_at": "2025-03-15T16:00:00.000Z",
    "from_number": "+33612345678",
    "to_number": "+33112345678",
    "from_name": "Marie Dupont",
    "to_name": "Support Acme",
    "user_email": "[email protected]"
  }
}
FieldTypeDescription
idstringUnique message identifier
directionstringINBOUND
typestringSMS or MMS
contentstringMessage text
sent_atstringISO 8601 timestamp
from_numberstringSender’s phone number
to_numberstringYour Allo phone number
from_namestringSender’s name (from contacts)
to_namestringYour business name
user_emailstringEmail of the Allo user assigned to the number

sms.sent

Fired when an outbound SMS is sent.
{
  "topic": "sms.sent",
  "version": "2.0",
  "timestamp": "2025-03-15T16:10:00.000Z",
  "data": {
    "id": "msg_4LhFMGo1uH0zM5rSt3Bv",
    "direction": "OUTBOUND",
    "type": "SMS",
    "content": "Your appointment is confirmed for tomorrow at 2pm.",
    "sent_at": "2025-03-15T16:10:00.000Z",
    "from_number": "+33112345678",
    "to_number": "+33612345678",
    "from_name": "Support Acme",
    "to_name": "Marie Dupont",
    "user_email": "[email protected]"
  }
}
FieldTypeDescription
idstringUnique message identifier
directionstringOUTBOUND
typestringSMS or MMS
contentstringMessage text
sent_atstringISO 8601 timestamp
from_numberstringYour Allo phone number
to_numberstringRecipient’s phone number
from_namestringYour business name
to_namestringRecipient’s name (from contacts)
user_emailstringEmail of the Allo user who sent the message

contact.created

Fired when a new contact is created.
{
  "topic": "contact.created",
  "version": "2.0",
  "timestamp": "2025-03-15T17:00:00.000Z",
  "data": {
    "id": "con_5MiGNHp2vI1AN6sTu4Cw",
    "name": "Marie",
    "last_name": "Dupont",
    "company": "Acme Corp",
    "emails": ["[email protected]"],
    "numbers": ["+33612345678"]
  }
}
FieldTypeDescription
idstringUnique contact identifier
namestringFirst name
last_namestringLast name
companystring or nullCompany name
emailsarray of strings or nullEmail addresses
numbersarray of stringsPhone numbers

contact.updated

Fired when an existing contact is modified.
{
  "topic": "contact.updated",
  "version": "2.0",
  "timestamp": "2025-03-15T17:05:00.000Z",
  "data": {
    "id": "con_5MiGNHp2vI1AN6sTu4Cw",
    "name": "Marie",
    "last_name": "Dupont",
    "company": "Acme Corp",
    "emails": ["[email protected]", "[email protected]"],
    "numbers": ["+33612345678", "+33698765432"]
  }
}
The payload structure is identical to contact.created. The data object contains the full contact state after the update.