Scheduling
La API de timum gestiona las disponibilidades (Timeslots), las citas (Appointments), las participaciones (Participations) y los clientes: el corazón de la planificación de citas.
Resumen de conceptos
Timeslots (Disponibilidades)
Un Timeslot define que un recurso está disponible durante un periodo de tiempo. Ese periodo se divide en franjas reservables mediante una cuadrícula.
Concepto de cuadrícula
Create Timeslots
Crea uno o varios Timeslots para un recurso.
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
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
timeslots | array | Sí | Array de objetos Timeslot |
Campos del objeto Timeslot
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
reference | string | No | Referencia única de Timeslot (generada si no se indica) |
resourceReference | string | Sí | Referencia del recurso asociado |
start | datetime | No | Inicio del Timeslot (ISO 8601) |
end | datetime | Sí | Fin del Timeslot (ISO 8601) |
raster | number | Sí | Duración de una franja de reserva en minutos. Divide el Timeslot en unidades reservables. |
defaultCapacity | number | Sí | Número máximo de participantes por Appointment creado |
defaultAcceptBookings | boolean | Sí | true: reservable públicamente. false: el Appointment se vuelve privado (reservas adicionales solo por el proveedor). |
address | object | string | No | Dirección para los Appointments. Puede ser un objeto o una cadena (p. ej., "Zoom: https://zoom.us/j/123") |
state | string | Sí | CREATED: oculto (fase de planificación). BOOKABLE: visible públicamente y reservable. |
{
"address": "Zoom-Meeting: https://zoom.us/j/123456789"
}
Get Timeslots
Recupera todos los Timeslots de un recurso durante un periodo de tiempo.
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"
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
from | datetime | Sí | Fecha de inicio (ISO 8601) |
to | datetime | Sí | Fecha de fin (ISO 8601) |
Appointments incluidos
Update Timeslot
Actualiza un Timeslot existente. Solo se modifican los campos proporcionados.
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
Elimina un Timeslot.
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"
Requisito previo
Appointments (Citas)
Los Appointments son citas reservadas. Se pueden crear de forma individual, como secuencia o como serie a lo largo de varios días.
Get Appointments
Recupera los Appointments de un proveedor. Incluye citas activas y canceladas.
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"
Parámetros de consulta
| Parámetro | Tipo | Descripción |
|---|---|---|
productRef | string | Filtrado por producto (opcional) |
resourceRef | string | Filtrado por recurso (opcional) |
includeArchived | boolean | Incluir Appointments archivados (predeterminado: false) |
Response
[
{
"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
Crea Appointments. Admite citas individuales, secuencias y series.
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 (Cita única)
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
reference | string | Sí* | *Obligatorio para cita única, ignorado en serie |
start | datetime | Sí | Inicio (ISO 8601) |
end | datetime | Sí | Fin (ISO 8601) |
capacity | number | No | Máx. de participantes (predeterminado: 0) |
acceptBookings | boolean | No | Reservable públicamente (predeterminado: false) |
resourceReference | string | Sí | Referencia del recurso |
productReference | string | Sí | Referencia del producto |
productName | string | No | Sobrescribe el nombre del producto |
contactReference | string | No | Staff responsable |
address | object | string | No | Dirección (predeterminado: dirección del recurso) |
participations | array | No | Participantes del Appointment |
price | object | No | Precio (value, currency: EUR/CHF) |
Objeto Participation
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
reference | string | Sí* | *Obligatorio para cita única |
name | string | Sí | Nombre del participante |
email | string | Sí | Correo electrónico del participante |
mobile | string | No | Número de móvil |
note | string | No | Nota sobre el participante |
state | string | Sí | RESERVED, REQUESTED, BOOKED, CANCELED, DELETED |
Estado RESERVED
Crear serie
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"]
}
}'
Objeto series_data
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
from | datetime | Sí | Inicio de la serie (ISO 8601) |
to | datetime | Sí | Fin de la serie (ISO 8601) |
raster | number | Sí | Duración de la franja en minutos |
weekdays | string[] | No* | *Obligatorio para más de 1 día. Array de días de la semana: "1"=lun. a "7"=dom. |
Delete Appointments (sin notificación)
Elimina Appointments sin notificar a los participantes. Para correcciones administrativas.
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
| Campo | Tipo | Descripción |
|---|---|---|
appointmentReference | string | Referencia del Appointment que se va a eliminar |
seriesId | string | O: ID de una serie (elimina todos los Appointments de la serie) |
Sin notificación
Cancel Appointments
Cancela Appointments y notifica a todos los participantes por correo electrónico.
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"
}'
Parámetros de consulta
| Parámetro | Tipo | Descripción |
|---|---|---|
message | string | Mensaje a los participantes (en el correo de cancelación) |
Comportamiento
- Establece el estado del Appointment en CANCELLED
- Establece todos los estados de Participation en CANCELLED
- Envía correos de cancelación a todos los participantes
- El Appointment ya no se puede reservar
Participations (Participaciones)
Las Participations conectan a los Customers con los Appointments. Cada Participation tiene un estado que refleja el proceso de reserva.
Participation States
| Estado | Descripción |
|---|---|
RESERVED | Reservado temporalmente. Se elimina automáticamente después de 3 minutos. |
REQUESTED | Solicitud realizada, a la espera de confirmación por parte del proveedor. |
BOOKED | Confirmado y reservado. |
CANCELED | Cancelado por el Customer o el proveedor. |
DELETED | Eliminado administrativamente (sin notificación). |
Create Participation
Añade un Customer a un Appointment.
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"
}'
Parámetros de consulta
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
ignoreCapacity | boolean | false | Añadir la Participation incluso con capacidad completa |
onDuplicateRaise | boolean | false | Para una referencia existente: true=error, false=actualización |
sendMails | boolean | true | Enviar correos de notificación |
Request Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
reference | string | Sí | Referencia única de Participation |
appointmentReference | string | Sí | Referencia del Appointment |
customerReference | string | Sí | Referencia del Customer |
state | string | Sí | RESERVED, REQUESTED, BOOKED, CANCELED, DELETED |
message | string | No | Mensaje en el correo al Customer |
Update Participation
Cambia el estado de una Participation.
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."
}'
Transiciones de estado con envío de correo electrónico
| Transición | ¿Correo? |
|---|---|
| RESERVED → BOOKED | ✓ Sí |
| REQUESTED → BOOKED | ✓ Sí |
| REQUESTED → CANCELED | ✓ Sí |
| BOOKED → CANCELED | ✓ Sí |
| RESERVED → CANCELED | ✗ No |
| DELETED → CANCELED | ✗ No |
| BOOKED → DELETED | ✗ No (!) |
Transiciones no admitidas
Customers (Clientes)
Los Customers son personas que reservan citas. Pertenecen a un proveedor y pueden participar en varios Appointments.
Get Customer
Recupera un Customer a partir de su referencia.
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
{
"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
| Código | Significado |
|---|---|
200 | Customer encontrado |
204 | No se ha encontrado ningún Customer con esta referencia |
Create Customer
Crea un nuevo Customer para un proveedor.
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
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
customerReference | string | Sí | Referencia única de Customer |
providerReference | string | Sí | Referencia del proveedor |
userName | string | Sí | Nombre del cliente |
email | string | No | Dirección de correo electrónico |
mobile | string | No | Número de móvil (con código de país) |
note | string | No | Nota interna (máx. 1023 caracteres) |
language | string | No | Código de idioma (de, en, etc.) |
Status Codes
| Código | Significado |
|---|---|
201 | Nuevo Customer creado |
200 | El Customer ya existe |
Update Customer
Actualiza un Customer existente.
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"
}'
Cambiar la referencia
Delete Customer
Elimina un Customer.
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"
Parámetros de consulta
| Parámetro | Descripción |
|---|---|
ignoreFutureAppointments | Si se establece: elimina al Customer de todos los Appointments futuros. Se notifica al Customer por correo electrónico (si está configurado). |
Appointments futuros
RGPD
Próximos pasos
- Booking Flow - Endpoints orientados al consumidor para reservas
