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

- Timeslot (Disponibilidad): Franja horaria durante la cual se pueden realizar reservas - Appointment (Cita): Franja horaria reservada con participantes - Participation (Participación): Vínculo entre el Customer y el Appointment - Customer (Cliente): Datos de contacto de la persona que reserva

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

Ejemplo: Una sala de conferencias está disponible de 8:00 a 18:00 (Timeslot). Las reservas son posibles en bloques de 30 minutos (cuadrícula = 30). Esto da como resultado 20 franjas reservables de 30 minutos.

Create Timeslots

Crea uno o varios Timeslots para un recurso.

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

CampoTipoObligatorioDescripción
timeslotsarrayArray de objetos Timeslot

Campos del objeto Timeslot

CampoTipoObligatorioDescripción
referencestringNoReferencia única de Timeslot (generada si no se indica)
resourceReferencestringReferencia del recurso asociado
startdatetimeNoInicio del Timeslot (ISO 8601)
enddatetimeFin del Timeslot (ISO 8601)
rasternumberDuración de una franja de reserva en minutos. Divide el Timeslot en unidades reservables.
defaultCapacitynumberNúmero máximo de participantes por Appointment creado
defaultAcceptBookingsbooleantrue: reservable públicamente. false: el Appointment se vuelve privado (reservas adicionales solo por el proveedor).
addressobject | stringNoDirección para los Appointments. Puede ser un objeto o una cadena (p. ej., "Zoom: https://zoom.us/j/123")
statestringCREATED: oculto (fase de planificación). BOOKABLE: visible públicamente y reservable.
Dirección como cadena (p. ej., para videollamadas)
{
  "address": "Zoom-Meeting: https://zoom.us/j/123456789"
}

Get Timeslots

Recupera todos los Timeslots de un recurso durante un periodo de tiempo.

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"

Parámetros de consulta

ParámetroTipoObligatorioDescripción
fromdatetimeFecha de inicio (ISO 8601)
todatetimeFecha de fin (ISO 8601)

Appointments incluidos

La respuesta también contiene datos de Appointment si un Timeslot ya tiene citas reservadas.

Update Timeslot

Actualiza un Timeslot existente. Solo se modifican los campos proporcionados.

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

Elimina 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"

Requisito previo

Falla si el Timeslot tiene un Appointment no cancelado. Elimine o cancele primero el Appointment.

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.

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"

Parámetros de consulta

ParámetroTipoDescripción
productRefstringFiltrado por producto (opcional)
resourceRefstringFiltrado por recurso (opcional)
includeArchivedbooleanIncluir Appointments archivados (predeterminado: 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

Crea Appointments. Admite citas individuales, secuencias y series.

POST /crms/:crmId/provider/:providerRef/appointments - Cita única
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)

CampoTipoObligatorioDescripción
referencestringSí**Obligatorio para cita única, ignorado en serie
startdatetimeInicio (ISO 8601)
enddatetimeFin (ISO 8601)
capacitynumberNoMáx. de participantes (predeterminado: 0)
acceptBookingsbooleanNoReservable públicamente (predeterminado: false)
resourceReferencestringReferencia del recurso
productReferencestringReferencia del producto
productNamestringNoSobrescribe el nombre del producto
contactReferencestringNoStaff responsable
addressobject | stringNoDirección (predeterminado: dirección del recurso)
participationsarrayNoParticipantes del Appointment
priceobjectNoPrecio (value, currency: EUR/CHF)

Objeto Participation

CampoTipoObligatorioDescripción
referencestringSí**Obligatorio para cita única
namestringNombre del participante
emailstringCorreo electrónico del participante
mobilestringNoNúmero de móvil
notestringNoNota sobre el participante
statestringRESERVED, REQUESTED, BOOKED, CANCELED, DELETED

Estado RESERVED

¡Las Participations con estado RESERVED se eliminan automáticamente después de 3 minutos!

Crear serie

POST /crms/:crmId/provider/:providerRef/appointments - 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

CampoTipoObligatorioDescripción
fromdatetimeInicio de la serie (ISO 8601)
todatetimeFin de la serie (ISO 8601)
rasternumberDuración de la franja en minutos
weekdaysstring[]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.

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

CampoTipoDescripción
appointmentReferencestringReferencia del Appointment que se va a eliminar
seriesIdstringO: ID de una serie (elimina todos los Appointments de la serie)

Sin notificación

¡Los participantes no son informados de la eliminación! Utilice esto únicamente para correcciones administrativas.

Cancel Appointments

Cancela Appointments y notifica a todos los participantes por correo electrónico.

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"
  }'

Parámetros de consulta

ParámetroTipoDescripción
messagestringMensaje 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

EstadoDescripción
RESERVEDReservado temporalmente. Se elimina automáticamente después de 3 minutos.
REQUESTEDSolicitud realizada, a la espera de confirmación por parte del proveedor.
BOOKEDConfirmado y reservado.
CANCELEDCancelado por el Customer o el proveedor.
DELETEDEliminado administrativamente (sin notificación).

Create Participation

Añade un Customer a 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"
  }'

Parámetros de consulta

ParámetroTipoPredeterminadoDescripción
ignoreCapacitybooleanfalseAñadir la Participation incluso con capacidad completa
onDuplicateRaisebooleanfalsePara una referencia existente: true=error, false=actualización
sendMailsbooleantrueEnviar correos de notificación

Request Body

CampoTipoObligatorioDescripción
referencestringReferencia única de Participation
appointmentReferencestringReferencia del Appointment
customerReferencestringReferencia del Customer
statestringRESERVED, REQUESTED, BOOKED, CANCELED, DELETED
messagestringNoMensaje en el correo al Customer

Update Participation

Cambia el estado de una 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."
  }'

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

No es posible realizar transiciones a RESERVED o REQUESTED. En su lugar, cree una nueva Participation.

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.

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

CódigoSignificado
200Customer encontrado
204No se ha encontrado ningún Customer con esta referencia

Create Customer

Crea un nuevo Customer para un proveedor.

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

CampoTipoObligatorioDescripción
customerReferencestringReferencia única de Customer
providerReferencestringReferencia del proveedor
userNamestringNombre del cliente
emailstringNoDirección de correo electrónico
mobilestringNoNúmero de móvil (con código de país)
notestringNoNota interna (máx. 1023 caracteres)
languagestringNoCódigo de idioma (de, en, etc.)

Status Codes

CódigoSignificado
201Nuevo Customer creado
200El Customer ya existe

Update Customer

Actualiza un Customer existente.

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"
  }'

Cambiar la referencia

También puede cambiar customerReference. userName y customerReference no se pueden establecer en null/vacío.

Delete Customer

Elimina 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"

Parámetros de consulta

ParámetroDescripción
ignoreFutureAppointmentsSi se establece: elimina al Customer de todos los Appointments futuros. Se notifica al Customer por correo electrónico (si está configurado).

Appointments futuros

Sin ignoreFutureAppointments, la solicitud falla si el Customer participa en Appointments futuros.

RGPD

Al eliminar un Customer se eliminan todos los datos personales conforme al RGPD. El historial de reservas se conserva de forma anonimizada.

Próximos pasos

  • Booking Flow - Endpoints orientados al consumidor para reservas

Temas relacionados