Aller au contenu
Documentation
Ouvrir l’app
Documentation/Webhooks

Événements et données

Les neuf événements disponibles, leur enveloppe et leurs données métier.

Sur cette pageEnveloppe communeRendez-vouscustomer.createdvehicle.createdrepair.status_changedcall.completedcallback.requestedquote.requestedGET /events/sample

Enveloppe commune

Webhook envelope
{
  "id": "evt_3f2504e0-...",
  "event": "reservation.created",
  "createdAt": "2026-07-04T10:00:00.000Z",
  "data": {
    "reservationId": 101
  }
}

id identifie la livraison et reste identique lors des nouvelles tentatives. createdAt est la date de construction/livraison du message, pas nécessairement celle de la modification métier.

Rendez-vous

reservation.created signale une création ; reservation.modified une modification de date ou de détails ; reservation.cancelled une annulation. Les trois événements utilisent les données ci-dessous.

Reservation data
{
  "reservationId": 101,
  "status": "confirmed",
  "startTime": "2026-07-06T08:00:00.000Z",
  "startLocal": "2026-07-06T10:00:00.000+02:00",
  "endTime": "2026-07-06T08:30:00.000Z",
  "fullDay": false,
  "service": {
    "id": 11,
    "name": "Vidange",
    "durationType": "fixed"
  },
  "resource": {
    "id": 21,
    "name": "Pont 1"
  },
  "customer": {
    "id": 31,
    "name": "Jean",
    "lastName": "Dupont",
    "email": "jean.dupont@example.com",
    "phone": "+33612345678"
  },
  "guest": null,
  "guestCount": 1,
  "notes": null,
  "cancellationReason": null,
  "vehicle": {
    "id": 41,
    "plate": "AB123CD",
    "make": "Renault",
    "model": "Clio",
    "year": 2019,
    "mileage": "80 000 km",
    "displayName": "Renault Clio AB-123-CD"
  },
  "repairStatus": "in-repair"
}

vehicle contient le véhicule associé au rendez-vous, ou null si aucun véhicule n’est associé. repairStatus est distinct du statut du rendez-vous : ses valeurs possibles sont in-repair (en réparation), ready (prêt), delivered (livré) ou null (non renseigné).

Pour reservation.modified, previousStartTime (UTC) et previousStartLocal sont aussi présents. Pour une annulation, status vaut cancelled et cancellationReason contient le motif. Pour une prestation à la journée, fullDay vaut true, endTime est null et startLocal utilise une date ISO seule dans le fuseau de l’entreprise, par exemple 2026-07-06.

customer.created

Émis lors de la création d’un client.

Customer data
{
  "customerId": 31,
  "name": "Jean",
  "lastName": "Dupont",
  "civility": "Monsieur",
  "email": "jean.dupont@example.com",
  "phone": "+33612345678",
  "metadata": {
    "vehicule": "Renault Clio"
  }
}

vehicle.created

Émis lorsqu’un nouveau véhicule est ajouté à un client. vehicleId identifie le véhicule ; customer contient les coordonnées du client associé.

Vehicle data
{
  "vehicleId": 41,
  "plate": "AB123CD",
  "make": "Renault",
  "model": "Clio",
  "year": 2019,
  "mileage": "80 000 km",
  "displayName": "Renault Clio AB-123-CD",
  "customer": {
    "id": 31,
    "name": "Jean",
    "lastName": "Dupont",
    "email": "jean.dupont@example.com",
    "phone": "+33612345678"
  }
}

Les plaques sont stockées en majuscules, sans séparateurs : par exemple AB123CD. displayName est le libellé lisible affiché dans le tableau de bord. mileage est une chaîne, par exemple 80 000 km ; ne supposez pas une valeur numérique.

repair.status_changed

Émis lorsque le statut de réparation d’un rendez-vous change. Les données reprennent l’intégralité des données du rendez-vous, avec repairStatus pour la nouvelle valeur et previousRepairStatus pour la valeur avant modification. previousRepairStatus vaut null si aucun statut n’était renseigné. L’exemple montre le passage de in-repair à ready.

Repair status change data
{
  "reservationId": 101,
  "status": "confirmed",
  "startTime": "2026-07-06T08:00:00.000Z",
  "startLocal": "2026-07-06T10:00:00.000+02:00",
  "endTime": "2026-07-06T08:30:00.000Z",
  "fullDay": false,
  "service": {
    "id": 11,
    "name": "Vidange",
    "durationType": "fixed"
  },
  "resource": {
    "id": 21,
    "name": "Pont 1"
  },
  "customer": {
    "id": 31,
    "name": "Jean",
    "lastName": "Dupont",
    "email": "jean.dupont@example.com",
    "phone": "+33612345678"
  },
  "guest": null,
  "guestCount": 1,
  "notes": null,
  "cancellationReason": null,
  "vehicle": {
    "id": 41,
    "plate": "AB123CD",
    "make": "Renault",
    "model": "Clio",
    "year": 2019,
    "mileage": "80 000 km",
    "displayName": "Renault Clio AB-123-CD"
  },
  "repairStatus": "ready",
  "previousRepairStatus": "in-repair"
}

call.completed

Call data
{
  "callRecordId": 51,
  "callId": "demo-call-1",
  "direction": "inbound",
  "startedAt": "2026-07-06T07:58:00.000Z",
  "endedAt": "2026-07-06T08:01:00.000Z",
  "durationSeconds": 180,
  "outcome": "booked",
  "callerNumber": "+33612345678",
  "calledNumber": "+33987654321",
  "reservationId": 101,
  "callbackRequested": false
}

callback.requested

Callback data
{
  "callRecordId": 52,
  "reason": "Demande de rappel pour un devis",
  "urgency": "urgent",
  "callerNumber": "+33612345678",
  "customer": {
    "id": 31,
    "name": "Jean",
    "lastName": "Dupont",
    "phone": "+33612345678"
  }
}

quote.requested

Les données sont transmises telles quelles par l’outil vocal, sans schéma fixe ni ligne métier associée. Les champs possibles incluent customerName, verifiedCallerPhone, vehicle, requestedServices, plate, mileage et notes. Ne les considérez pas tous comme obligatoires.

GET /events/sample

Le paramètre event est obligatoire et doit correspondre à un des neuf événements, y compris vehicle.created et repair.status_changed. limit est compris entre 1 et 10, avec 3 par défaut. La réponse est un tableau JSON direct, sans propriété docs.

Request
curl 'https://app.kawlya.com/api/integrations/v1/events/sample?event=reservation.created&limit=3' \
  -H "Authorization: Bearer $KAWLYA_API_KEY"
200 OK
[
  {
    "id": "evt_sample_a1b2c3d4",
    "event": "reservation.created",
    "createdAt": "2026-07-04T10:00:00.000Z",
    "data": {
      "reservationId": 101,
      "status": "confirmed",
      "startTime": "2026-07-06T08:00:00.000Z",
      "startLocal": "2026-07-06T10:00:00.000+02:00",
      "endTime": "2026-07-06T08:30:00.000Z",
      "fullDay": false,
      "service": {
        "id": 11,
        "name": "Vidange",
        "durationType": "fixed"
      },
      "resource": {
        "id": 21,
        "name": "Pont 1"
      },
      "customer": {
        "id": 31,
        "name": "Jean",
        "lastName": "Dupont",
        "email": "jean.dupont@example.com",
        "phone": "+33612345678"
      },
      "guest": null,
      "guestCount": 1,
      "notes": null,
      "cancellationReason": null,
      "vehicle": {
        "id": 41,
        "plate": "AB123CD",
        "make": "Renault",
        "model": "Clio",
        "year": 2019,
        "mileage": "80 000 km",
        "displayName": "Renault Clio AB-123-CD"
      },
      "repairStatus": "in-repair"
    }
  }
]

Les exemples utilisent les données récentes de votre entreprise avec les mêmes fonctions de construction que les livraisons réelles. Sans données, un exemple de démonstration est utilisé ; c’est toujours le cas pour quote.requested. Erreurs : 400 unknown event ou 401 pour une clé invalide.

Mis à jour le