Scheduling

L'API timum gère les disponibilités (Timeslots), les rendez-vous (Appointments), les participations et les clients – le cœur de la planification des rendez-vous.

Aperçu des concepts

- Timeslot (Disponibilité) : Créneau horaire pendant lequel les réservations sont possibles - Appointment (Rendez-vous) : Créneau horaire réservé avec des participants - Participation : Lien entre le Customer et l'Appointment - Customer (Client) : Coordonnées d'une personne qui réserve

Timeslots (Disponibilités)

Un Timeslot définit qu'une ressource est disponible pendant une période donnée. Cette période est divisée en créneaux réservables par une grille.

Concept de grille

Exemple : Une salle de conférence est disponible de 8h00 à 18h00 (Timeslot). Les réservations sont possibles par blocs de 30 minutes (grille = 30). Cela donne 20 créneaux réservables de 30 minutes.

Create Timeslots

Crée un ou plusieurs Timeslots pour une ressource.

POST /crms/:crmId/provider/:providerRef/timeslots
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/timeslots" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "timeslots": [
      {
        "reference": "tsl-2024-01-15@yourCrm",
        "resourceReference": "res-musterstr1@yourCrm",
        "start": "2024-01-15T09:00",
        "end": "2024-01-15T17:00",
        "raster": 30,
        "defaultCapacity": 1,
        "defaultAcceptBookings": true,
        "address": {
          "city": "Berlin",
          "zip": "10115",
          "country": "DE",
          "street": "Musterstraße",
          "number": "1"
        },
        "state": "BOOKABLE"
      }
    ]
  }'

Request Body

ChampTypeObligatoireDescription
timeslotsarrayOuiTableau d'objets Timeslot

Champs de l'objet Timeslot

ChampTypeObligatoireDescription
referencestringNonRéférence Timeslot unique (générée si non indiquée)
resourceReferencestringOuiRéférence de la ressource associée
startdatetimeNonDébut du Timeslot (ISO 8601)
enddatetimeOuiFin du Timeslot (ISO 8601)
rasternumberOuiDurée d'un créneau de réservation en minutes. Divise le Timeslot en unités réservables.
defaultCapacitynumberOuiNombre maximal de participants par Appointment créé
defaultAcceptBookingsbooleanOuitrue : réservable publiquement. false : l'Appointment devient privé (réservations supplémentaires uniquement par le fournisseur).
addressobject | stringNonAdresse pour les Appointments. Peut être un objet ou une chaîne (par ex. "Zoom: https://zoom.us/j/123")
statestringOuiCREATED : masqué (phase de planification). BOOKABLE : visible publiquement et réservable.
Adresse sous forme de chaîne (par ex. pour les appels vidéo)
{
  "address": "Zoom-Meeting: https://zoom.us/j/123456789"
}

Get Timeslots

Récupère tous les Timeslots d'une ressource sur une période donnée.

GET /crms/:crmId/provider/:providerRef/resource/:resourceRef/timeslots
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/resource/res-musterstr1@yourCrm/timeslots?from=2024-01-15T00:00&to=2024-01-22T00:00" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Paramètres de requête

ParamètreTypeObligatoireDescription
fromdatetimeOuiDate de début (ISO 8601)
todatetimeOuiDate de fin (ISO 8601)

Appointments inclus

La réponse contient également les données d'Appointment si un Timeslot comporte déjà des rendez-vous réservés.

Update Timeslot

Met à jour un Timeslot existant. Seuls les champs transmis sont modifiés.

PUT /crms/:crmId/provider/:providerRef/timeslots/:timeslotRef
curl -X PUT "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/timeslots/tsl-2024-01-15@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "start": "2024-01-15T10:00",
    "end": "2024-01-15T16:00",
    "raster": 30,
    "defaultCapacity": 2,
    "defaultAcceptBookings": true,
    "state": "BOOKABLE"
  }'

Delete Timeslot

Supprime un Timeslot.

DELETE /crms/:crmId/provider/:providerRef/timeslots/:timeslotRef
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/timeslots/tsl-2024-01-15@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Condition préalable

Échoue si le Timeslot a un Appointment non annulé. Supprimez ou annulez d'abord l'Appointment.

Appointments (Rendez-vous)

Les Appointments sont des rendez-vous réservés. Ils peuvent être créés individuellement, sous forme de séquence ou de série sur plusieurs jours.

Get Appointments

Récupère les Appointments d'un fournisseur. Inclut les rendez-vous actifs et annulés.

GET /crms/:crmId/provider/:providerRef/appointments
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments?productRef=prod-besichtigung@yourCrm&resourceRef=res-musterstr1@yourCrm&includeArchived=false" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Paramètres de requête

ParamètreTypeDescription
productRefstringFiltrage par produit (facultatif)
resourceRefstringFiltrage par ressource (facultatif)
includeArchivedbooleanInclure les Appointments archivés (par défaut : false)

Response

200 OK
[
  {
    "reference": "apt-001@yourCrm",
    "acceptBookings": true,
    "address": {
      "city": "Berlin",
      "countryCode": "DE",
      "street": "Musterstraße",
      "number": "1",
      "zip": "10115"
    },
    "archived": false,
    "capacity": 1,
    "contactReference": "user-123@yourCrm",
    "description": "Besichtigung",
    "start": "2024-01-15T10:00:00Z",
    "end": "2024-01-15T10:30:00Z",
    "notes": null,
    "participations": [
      {
        "reference": "part-001@yourCrm",
        "email": "kunde@example.com",
        "mobile": "+49 170 9876543",
        "name": "Max Kunde",
        "note": "",
        "state": "BOOKED",
        "messages": null
      }
    ],
    "price": null,
    "productReference": "prod-besichtigung@yourCrm",
    "resourceReference": "res-musterstr1@yourCrm",
    "seriesId": null,
    "state": "ACTIVE"
  }
]

Create Appointments

Crée des Appointments. Prend en charge les rendez-vous individuels, les séquences et les séries.

POST /crms/:crmId/provider/:providerRef/appointments - Rendez-vous unique
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "apt-001@yourCrm",
    "start": "2024-01-15T10:00",
    "end": "2024-01-15T11:00",
    "capacity": 1,
    "acceptBookings": true,
    "resourceReference": "res-musterstr1@yourCrm",
    "productReference": "prod-besichtigung@yourCrm",
    "productName": "Besichtigung",
    "contactReference": "user-123@yourCrm",
    "address": {
      "city": "Berlin",
      "zip": "10115",
      "country": "DE",
      "street": "Musterstraße",
      "number": "1"
    },
    "participations": [
      {
        "reference": "part-001@yourCrm",
        "name": "Max Kunde",
        "email": "kunde@example.com",
        "mobile": "+49 170 9876543",
        "note": "Interessiert an 3-Zimmer-Wohnung",
        "state": "BOOKED"
      }
    ],
    "price": {
      "value": 0.00,
      "currency": "EUR"
    }
  }'

Request Body (Rendez-vous unique)

ChampTypeObligatoireDescription
referencestringOui**Obligatoire pour un rendez-vous unique, ignoré pour une série
startdatetimeOuiDébut (ISO 8601)
enddatetimeOuiFin (ISO 8601)
capacitynumberNonNombre max. de participants (par défaut : 0)
acceptBookingsbooleanNonRéservable publiquement (par défaut : false)
resourceReferencestringOuiRéférence de la ressource
productReferencestringOuiRéférence du produit
productNamestringNonRemplace le nom du produit
contactReferencestringNonStaff responsable
addressobject | stringNonAdresse (par défaut : adresse de la ressource)
participationsarrayNonParticipants de l'Appointment
priceobjectNonPrix (value, currency : EUR/CHF)

Objet Participation

ChampTypeObligatoireDescription
referencestringOui**Obligatoire pour un rendez-vous unique
namestringOuiNom du participant
emailstringOuiE-mail du participant
mobilestringNonNuméro de mobile
notestringNonNote sur le participant
statestringOuiRESERVED, REQUESTED, BOOKED, CANCELED, DELETED

Statut RESERVED

Les Participations avec le statut RESERVED sont automatiquement supprimées après 3 minutes !

Créer une série

POST /crms/:crmId/provider/:providerRef/appointments - Série
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "2024-01-15T09:00",
    "to": "2024-01-15T17:00",
    "capacity": 1,
    "acceptBookings": true,
    "resourceReference": "res-musterstr1@yourCrm",
    "productReference": "prod-besichtigung@yourCrm",
    "series_data": {
      "from": "2024-01-15T09:00",
      "to": "2024-01-19T17:00",
      "raster": 30,
      "weekdays": ["1", "2", "3", "4", "5"]
    }
  }'

Objet series_data

ChampTypeObligatoireDescription
fromdatetimeOuiDébut de la série (ISO 8601)
todatetimeOuiFin de la série (ISO 8601)
rasternumberOuiDurée du créneau en minutes
weekdaysstring[]Non**Obligatoire pour plus d'un jour. Tableau de jours de la semaine : "1"=lun. à "7"=dim.

Delete Appointments (sans notification)

Supprime des Appointments sans notifier les participants. Pour les corrections administratives.

DELETE /crms/:crmId/provider/:providerRef/appointments/withoutNotification
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments/withoutNotification" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "appointmentReference": "apt-001@yourCrm"
  }'

Request Body

ChampTypeDescription
appointmentReferencestringRéférence de l'Appointment à supprimer
seriesIdstringOU : ID d'une série (supprime tous les Appointments de la série)

Aucune notification

Les participants ne sont pas informés de la suppression ! Utilisez ceci uniquement pour des corrections administratives.

Cancel Appointments

Annule les Appointments et notifie tous les participants par e-mail.

DELETE /crms/:crmId/provider/:providerRef/appointments
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/appointments?message=Der%20Termin%20muss%20leider%20abgesagt%20werden" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "appointmentReference": "apt-001@yourCrm"
  }'

Paramètres de requête

ParamètreTypeDescription
messagestringMessage aux participants (dans l'e-mail d'annulation)

Comportement

  • Définit l'état de l'Appointment sur CANCELLED
  • Définit tous les états de Participation sur CANCELLED
  • Envoie des e-mails d'annulation à tous les participants
  • L'Appointment n'est plus réservable

Participations

Les Participations relient les Customers aux Appointments. Chaque Participation a un statut qui reflète le processus de réservation.

Participation States

ÉtatDescription
RESERVEDRéservé temporairement. Supprimé automatiquement après 3 minutes.
REQUESTEDDemande effectuée, en attente de confirmation par le fournisseur.
BOOKEDConfirmé et réservé.
CANCELEDAnnulé par le Customer ou le fournisseur.
DELETEDSupprimé administrativement (sans notification).

Create Participation

Ajoute un Customer à un Appointment.

POST /crms/:crmId/provider/:providerRef/participations
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/participations?ignoreCapacity=false&onDuplicateRaise=false&sendMails=true" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "part-002@yourCrm",
    "appointmentReference": "apt-001@yourCrm",
    "customerReference": "cust-001@yourCrm",
    "state": "BOOKED",
    "message": "Bestätigung Ihrer Terminbuchung"
  }'

Paramètres de requête

ParamètreTypePar défautDescription
ignoreCapacitybooleanfalseAjouter la Participation même en cas de capacité complète
onDuplicateRaisebooleanfalsePour une référence existante : true=erreur, false=mise à jour
sendMailsbooleantrueEnvoyer des e-mails de notification

Request Body

ChampTypeObligatoireDescription
referencestringOuiRéférence Participation unique
appointmentReferencestringOuiRéférence de l'Appointment
customerReferencestringOuiRéférence du Customer
statestringOuiRESERVED, REQUESTED, BOOKED, CANCELED, DELETED
messagestringNonMessage dans l'e-mail au Customer

Update Participation

Modifie le statut d'une Participation.

POST /crms/:crmId/provider/:providerRef/participations/:participationRef
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/participations/part-002@yourCrm?sendMails=true" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "CANCELED",
    "message": "Leider müssen wir Ihren Termin stornieren."
  }'

Transitions d'état avec envoi d'e-mail

TransitionE-mail ?
RESERVED → BOOKED✓ Oui
REQUESTED → BOOKED✓ Oui
REQUESTED → CANCELED✓ Oui
BOOKED → CANCELED✓ Oui
RESERVED → CANCELED✗ Non
DELETED → CANCELED✗ Non
BOOKED → DELETED✗ Non (!)

Transitions non prises en charge

Les transitions vers RESERVED ou REQUESTED ne sont pas possibles. Créez plutôt une nouvelle Participation.

Customers (Clients)

Les Customers sont des personnes qui réservent des rendez-vous. Ils appartiennent à un fournisseur et peuvent participer à plusieurs Appointments.

Get Customer

Récupère un Customer à partir de sa référence.

GET /crms/:crmId/provider/:providerRef/customers/:customerRef
curl -X GET "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers/cust-001@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Response

200 OK
{
  "api-info": {
    "version": "1"
  },
  "customer": {
    "customerReference": "cust-001@yourCrm",
    "email": "kunde@example.com",
    "note": "Interessiert an 3-Zimmer-Wohnungen",
    "userName": "Max Kunde",
    "mobile": "+49 170 9876543",
    "language": "de",
    "providerReference": "prov-001@yourCrm"
  }
}

Status Codes

CodeSignification
200Customer trouvé
204Aucun Customer trouvé avec cette référence

Create Customer

Crée un nouveau Customer pour un fournisseur.

POST /crms/:crmId/provider/:providerRef/customers
curl -X POST "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "customerReference": "cust-001@yourCrm",
    "providerReference": "prov-001@yourCrm",
    "userName": "Max Kunde",
    "email": "kunde@example.com",
    "mobile": "+49 170 9876543",
    "note": "Interessiert an 3-Zimmer-Wohnungen",
    "language": "de"
  }'

Request Body

ChampTypeObligatoireDescription
customerReferencestringOuiRéférence Customer unique
providerReferencestringOuiRéférence du fournisseur
userNamestringOuiNom du client
emailstringNonAdresse e-mail
mobilestringNonNuméro de mobile (avec indicatif du pays)
notestringNonNote interne (1023 caractères max.)
languagestringNonCode de langue (de, en, etc.)

Status Codes

CodeSignification
201Nouveau Customer créé
200Le Customer existe déjà

Update Customer

Met à jour un Customer existant.

PUT /crms/:crmId/provider/:providerRef/customers/:customerRef
curl -X PUT "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers/cust-001@yourCrm" \
  -H "X-TIMUM-CLIENT-ID: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "customerReference": "cust-001-new@yourCrm",
    "email": "neue-email@example.com",
    "userName": "Max Neukunde",
    "mobile": "+49 170 1111111",
    "note": "Aktualisierte Notiz"
  }'

Modifier la référence

Vous pouvez également modifier customerReference. userName et customerReference ne peuvent pas être définis sur null/vide.

Delete Customer

Supprime un Customer.

DELETE /crms/:crmId/provider/:providerRef/customers/:customerRef
curl -X DELETE "https://www.timum.de/crms/{crmId}/provider/prov-001@yourCrm/customers/cust-001@yourCrm?ignoreFutureAppointments" \
  -H "X-TIMUM-CLIENT-ID: your-api-key"

Paramètres de requête

ParamètreDescription
ignoreFutureAppointmentsSi défini : supprime le Customer de tous les Appointments à venir. Le Customer est notifié par e-mail (si configuré).

Appointments à venir

Sans ignoreFutureAppointments, la requête échoue si le Customer participe à des Appointments à venir.

RGPD

La suppression d'un Customer supprime toutes les données personnelles conformément au RGPD. L'historique des réservations est conservé sous forme anonymisée.

Étapes suivantes

  • Booking Flow - Endpoints orientés consommateur pour les réservations

Sujets connexes