Session Events API

This documentation describes how to interact with the Apizee API to retrieve events that occur during video sessions ("video-assistance").

Introduction

Apizee sessions can include interactions such as OCR scans, chat messages, media captures, or survey completions. Until now, this data was not accessible externally.

With the new Session Events API, all meaningful in-session actions are exposed via:

  • a REST API attached to each ticket

  • a webhook that triggers on each new event

These capabilities enable IT systems to:

  • Monitor what happens during video sessions

  • Automate processes based on session content

  • Archive or analyze interaction data

Authentication and Permissions

Access to these endpoints requires:

  • A valid Bearer token

  • Proper role permissions to access ticket data

See Authentication for a step by step documentation.

Rate limiting applies to all event endpoints. See Rate Limits for more details.

Event Model

Each event in the ticket timeline follows a common structure plus event-specific attributes.

Event-specific payload attributes

Depending on the event type triggered, the webhook payload will contain specific attributes:

Event type
Props value example

consent.accepted

ticket.sessionStarted

geo.ansAllowed

 "geoloc":{
  "lat": 48.650032799999998,
  "lng": -3.3655395000000001
 }

geo.ansDisallowed

ticket.approved

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

ticket.new

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

ticket.assigned

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

ticket.completed

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

ticket.cancelled

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

ticket.closed

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

mediaDevice.allowed

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

mediaDevice.disallowed

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

mediaDevice.cameraAllowed

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

mediaDevice.cameraDisallowed

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

mediaDevice.micAllowed

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

mediaDevice.micDisallowed

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

session.established

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

ticket.priorityChanged

"agent": {
    "email": "[email protected]",
    "phone": "",
    "firstname": "François",
    "lastname": "Le Goff"
 },
"oldPriority": 1,
"newPriority": 0

ticket.invitationSent

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

ticket.invitationResent

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

ticket.invitationAccepted

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

ticket.invitationDeclined

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

ticket.invitationExpired

ticket.invitationClicked

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

ticket.invitationNotclicked

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

session.agentContacted

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

media.pictureTaken

“mediaId”: 342432

media.pictureSent

“mediaId”: 342432

survey.answered

"requestor": {
    "email": "[email protected]",
    "phone": "",
    "firstname": "",
    "lastname": "contact Flegoff"
 },
"surveyAnswer": {
  "questions" : [
    {"id":12, //SurveyQuestionAnswer id
    "label": {"fr":"Première question ?","en":"Question one?"}, 
    "answer": "Not satisfied" //Not satisfied, Satisfied, Very satisfied
     }, 
    {"id":14, 
    "label": {"fr":"Deuxième question ?","en":"Question two?"}, 
    "answer": "Satisfied" //Not satisfied, Satisfied, Very satisfied
     }
   ], 
   "feedback": "Ceci est un feedback"  
}

session.agentLeft

"agent": {
    "email": "[email protected]",
    "phone": "+3316565454",
    "firstname": "John",
    "lastname": "Doe"
},

session.userLeft

"requestor": {
    "email": "[email protected]",
    "phone": "0605040302",
    "firstname": "Jane",
    "lastname": "Doe"
  },

media.OCRDone

"text": "Lorem\nipsum"

HTTP REST API to access to ticket's events

Get an event list for a ticket.

get
Authorizations
Path parameters
ticketIdintegerRequired

ID of the wanted ticket

Responses
200
Good case
application/json
Responseany
get
GET /api/v3/tickets/{ticketId}/events HTTP/1.1
Host: 
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "id": 56473,
    "eventType": "ticket.invitationAccepted",
    "timestamp": 1741621530,
    "conversationId": 1345324,
    "data": {
      "requestor": {
        "email": "[email protected]",
        "phone": "+3316565454",
        "firstname": "Jane",
        "lastname": "Doe"
      },
      "oldPriority": 1,
      "newPriority": 0
    }
  },
  {
    "id": 56474,
    "eventType": "ticket.priorityChanged",
    "timestamp": 1741621543,
    "conversationId": 1345324,
    "data": {
      "agent": {
        "email": "[email protected]",
        "phone": "",
        "firstname": "John",
        "lastname": "Doe"
      },
      "oldPriority": 1,
      "newPriority": 0
    }
  },
  {
    "id": 56475,
    "eventType": "media.pictureTaken",
    "timestamp": 1741621550,
    "conversationId": 1345324,
    "data": {
      "mediaId": 342432
    }
  }
]

Listen to webhook callbacks

The conversationevent.create webhook notifies your system in real time whenever a new event occurs during a video session linked to a support ticket. It enables your backend to react immediately to user interactions such as media capture, OCR scans, or survey responses.

How It Works

Once configured, the webhook is triggered for each new event in a ticket's timeline. Your endpoint receives a POST request with a JSON payload describing the event.

Example Payload

{
  "event": "create",
  "time": 1749581447,
  "object": "conversationevent",
  "objectId": 1266,
  "props": {
    "eventType": "media.OCRDone",  // <-- common payload attribute
    "eventCode": 41,  // <-- common payload attribute
    "conversationId": 548,  // <-- common payload attribute
    "ticketId": 361,  // <-- common payload attribute
    "text": "text captured by OCR" // <-- event-specific attribute
    }
}

Payload Fields

To get a complete list of the webhooks payload attributes and how to configure webhooks, please refer to Webhooks.

Last updated