timum

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
timeslotsarraySíArray de objetos Timeslot

Campos del objeto Timeslot

CampoTipoObligatorioDescripción
referencestringNoReferencia única de Timeslot (generada si no se indica)
resourceReferencestringSíReferencia del recurso asociado
startdatetimeNoInicio del Timeslot (ISO 8601)
enddatetimeSíFin del Timeslot (ISO 8601)
rasternumberSíDuración de una franja de reserva en minutos. Divide el Timeslot en unidades reservables.
defaultCapacitynumberSíNúmero máximo de participantes por Appointment creado
defaultAcceptBookingsbooleanSítrue: 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")
statestringSíCREATED: 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
fromdatetimeSíFecha de inicio (ISO 8601)
todatetimeSíFecha 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
startdatetimeSíInicio (ISO 8601)
enddatetimeSíFin (ISO 8601)
capacitynumberNoMáx. de participantes (predeterminado: 0)
acceptBookingsbooleanNoReservable públicamente (predeterminado: false)
resourceReferencestringSíReferencia del recurso
productReferencestringSíReferencia 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
namestringSíNombre del participante
emailstringSíCorreo electrónico del participante
mobilestringNoNúmero de móvil
notestringNoNota sobre el participante
statestringSíRESERVED, 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
fromdatetimeSíInicio de la serie (ISO 8601)
todatetimeSíFin de la serie (ISO 8601)
rasternumberSíDuració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
referencestringSíReferencia única de Participation
appointmentReferencestringSíReferencia del Appointment
customerReferencestringSíReferencia del Customer
statestringSíRESERVED, 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
customerReferencestringSíReferencia única de Customer
providerReferencestringSíReferencia del proveedor
userNamestringSíNombre 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