Agenda
Referencia de 36 endpoints generados desde mosend-wb-backend/src/modules/agenda/agenda.controller.ts.
/organizations/:orgId/agenda·36 endpoints·Source: mosend-wb-backend/src/modules/agenda/agenda.controller.ts/organizations/:orgId/agenda/settingsConfiguración de la agenda de la organización.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/settings' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/settingsActualiza la configuración de la agenda (habilitar requiere la feature de plan `agenda`).
Path params
orgIdstringrequerido
Body (JSON)
enabledbooleanminNoticeMinnumbermaxAdvanceDaysnumberreminderTemplateNamestringPlantilla aprobada para el recordatorio. Convención de variables: {{1}} = nombre del contacto, {{2}} = fecha y hora local de la cita y, si la plantilla lo tiene, {{3}} = enlace de la reunión.
reminderTemplateLangstringconfirmTemplateNamestringPlantillas para avisar fuera de la ventana de 24 h (confirmación, cambio de hora, cancelación). Mismas variables que el recordatorio. null = sin.
confirmTemplateLangstringrescheduleTemplateNamestringrescheduleTemplateLangstringcancelTemplateNamestringcancelTemplateLangstringreminderHoursBeforenumberHoras antes de la cita (0 = sin recordatorio, máx 72).
reminderPhoneNumberIdstring · uuidbookingFlowIdstring · uuidWhatsAppFlow (local) publicado para reserva con date-picker nativo.
bloquearFestivosbooleanBloquear solos los festivos del país (hoy solo Colombia).
paisFestivosstringCOpaginaPublicabooleanPágina pública de reservas.
paginaSlugstringDirección de la página: app.mosend.dev/reservar/<paginaSlug>.
paginaPhoneNumberIdstring · uuidNúmero al que el cliente escribe para confirmar la reserva.
paginaMensajestringreminder2HoursBeforenumberRecordatorios 2 y 3 (agenda avanzada). 0 o null = apagado.
reminder2TemplateNamestringreminder2TemplateLangstringreminder3HoursBeforenumberreminder3TemplateNamestringreminder3TemplateLangstringcancelarHastaHorasnumberHasta cuántas horas antes puede el cliente cancelar o reprogramar solo.
noShowAutoHorasnumberHoras tras el fin para marcar sola la inasistencia. null = nunca.
anticipoMinutosnumberMinutos para pagar el anticipo antes de liberar el horario.
anticipoTrasInasistenciasnumberPedir anticipo a quien ya faltó tantas veces. null = no.
esperaTemplateNamestringPlantilla para ofrecer un horario liberado a la lista de espera.
esperaTemplateLangstringesperaMinutosnumberMinutos que se aparta un horario ofrecido a la lista de espera.
encuestaTrasCitabooleanEncuesta de satisfacción al marcar la cita como atendida.
volverTemplateNamestringPlantilla de «agenda tu próxima».
volverTemplateLangstring
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/settings' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"enabled": true,"minNoticeMin": 0,"maxAdvanceDays": 0,"reminderTemplateName": "<reminderTemplateName>","reminderTemplateLang": "<reminderTemplateLang>","confirmTemplateName": "<confirmTemplateName>","confirmTemplateLang": "<confirmTemplateLang>","rescheduleTemplateName": "<rescheduleTemplateName>","rescheduleTemplateLang": "<rescheduleTemplateLang>","cancelTemplateName": "<cancelTemplateName>","cancelTemplateLang": "<cancelTemplateLang>","reminderHoursBefore": 0,"reminderPhoneNumberId": "00000000-0000-0000-0000-000000000000","bookingFlowId": "00000000-0000-0000-0000-000000000000","bloquearFestivos": true,"paisFestivos": "CO","paginaPublica": true,"paginaSlug": "<paginaSlug>","paginaPhoneNumberId": "00000000-0000-0000-0000-000000000000","paginaMensaje": "<paginaMensaje>","reminder2HoursBefore": 0,"reminder2TemplateName": "<reminder2TemplateName>","reminder2TemplateLang": "<reminder2TemplateLang>","reminder3HoursBefore": 0,"reminder3TemplateName": "<reminder3TemplateName>","reminder3TemplateLang": "<reminder3TemplateLang>","cancelarHastaHoras": 0,"noShowAutoHoras": 0,"anticipoMinutos": 0,"anticipoTrasInasistencias": 0,"esperaTemplateName": "<esperaTemplateName>","esperaTemplateLang": "<esperaTemplateLang>","esperaMinutos": 0,"encuestaTrasCita": true,"volverTemplateName": "<volverTemplateName>","volverTemplateLang": "<volverTemplateLang>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/icsEstado del feed ICS público (URL de suscripción o deshabilitado).
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/ics' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/ics/rotateGenera o rota el token del feed ICS (rotar revoca las suscripciones previas).
Path params
orgIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/ics/rotate' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/icsDesactiva el feed ICS (borra el token).
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/ics' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/typesLista los tipos de cita (servicios reservables).
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/types' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/typesCrea un servicio (duración, márgenes, intervalo, precio, color, modalidad y quiénes lo atienden).
Path params
orgIdstringrequerido
Body (JSON)
namestringrequeridodurationMinnumberrequeridostaffUserIdstring · uuidQuién atiende (forma anterior a `staffUserIds`, un solo profesional).
descriptionstringbufferMinnumberbufferBeforeMinnumberslotIntervalMinnumber510152030456090120Cada cuánto se ofrece un horario. null = duración + márgenes.
pricenumbercurrencystringISO 4217 (COP, USD…). null = la moneda de la organización.
colorstringmodalitystringPRESENCIALVIRTUALDOMICILIOlocationstringmeetingUrlstring · uricategorystringsortOrdernumbercapacitynumberCupos por horario (1 = una cita a la vez). Más de 1 requiere agenda_avanzada.
anticipoTipostringPORCENTAJEFIJOAnticipo al reservar: PORCENTAJE del precio o valor FIJO (en la moneda del servicio; solo se cobra en COP). null = sin anticipo. Requiere agenda_avanzada.
anticipoValornumberpreguntasPreguntaDelServicioDto[]Formulario del servicio (máximo 8 preguntas). null o [] = sin formulario.
volverEnDiasnumber«Agenda tu próxima»: invitar a volver a los N días de atendida.
recursoIdstring · uuidRecurso compartido que ocupa cada cita (sala, silla). null = ninguno.
staffUserIdsstring[]Quiénes atienden (miembros de la org). Vacío = agenda general. Requiere la función de plan `agenda_avanzada`. Reemplaza la lista completa.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/types' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","durationMin": 0,"staffUserId": "00000000-0000-0000-0000-000000000000","description": "<description>","bufferMin": 0,"bufferBeforeMin": 0,"slotIntervalMin": 5,"price": 0,"currency": "<currency>","color": "<color>","modality": "PRESENCIAL","location": "<location>","meetingUrl": "https://tu-app.com/endpoint","category": "<category>","sortOrder": 0,"capacity": 0,"anticipoTipo": "PORCENTAJE","anticipoValor": 0,"preguntas": [],"volverEnDias": 0,"recursoId": "00000000-0000-0000-0000-000000000000","staffUserIds": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/types/:idActualiza (o desactiva) un tipo de cita.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
namestringdurationMinnumberactivebooleanstaffUserIdstring · uuidQuién atiende (forma anterior). `null` lo devuelve a la agenda general.
descriptionstringbufferMinnumberbufferBeforeMinnumberslotIntervalMinnumber510152030456090120Cada cuánto se ofrece un horario. null = duración + márgenes.
pricenumbercurrencystringISO 4217 (COP, USD…). null = la moneda de la organización.
colorstringmodalitystringPRESENCIALVIRTUALDOMICILIOlocationstringmeetingUrlstring · uricategorystringsortOrdernumbercapacitynumberCupos por horario (1 = una cita a la vez). Más de 1 requiere agenda_avanzada.
anticipoTipostringPORCENTAJEFIJOAnticipo al reservar: PORCENTAJE del precio o valor FIJO (en la moneda del servicio; solo se cobra en COP). null = sin anticipo. Requiere agenda_avanzada.
anticipoValornumberpreguntasPreguntaDelServicioDto[]Formulario del servicio (máximo 8 preguntas). null o [] = sin formulario.
volverEnDiasnumber«Agenda tu próxima»: invitar a volver a los N días de atendida.
recursoIdstring · uuidRecurso compartido que ocupa cada cita (sala, silla). null = ninguno.
staffUserIdsstring[]Quiénes atienden (miembros de la org). Vacío = agenda general. Requiere la función de plan `agenda_avanzada`. Reemplaza la lista completa.
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/types/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","durationMin": 0,"active": true,"staffUserId": "00000000-0000-0000-0000-000000000000","description": "<description>","bufferMin": 0,"bufferBeforeMin": 0,"slotIntervalMin": 5,"price": 0,"currency": "<currency>","color": "<color>","modality": "PRESENCIAL","location": "<location>","meetingUrl": "https://tu-app.com/endpoint","category": "<category>","sortOrder": 0,"capacity": 0,"anticipoTipo": "PORCENTAJE","anticipoValor": 0,"preguntas": [],"volverEnDias": 0,"recursoId": "00000000-0000-0000-0000-000000000000","staffUserIds": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/contacts/:contactId/resumenHistorial resumido de citas de un contacto: atendidas, inasistencias, canceladas y la próxima.
Path params
orgIdstringrequeridocontactIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/contacts/00000000-0000-0000-0000-000000000000/resumen' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/recursosRecursos compartidos (salas, sillas, equipos).
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/recursos' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/recursosCrea un recurso compartido: las citas que lo usan no pasan de su cantidad a la vez.
Path params
orgIdstringrequerido
Body (JSON)
nombrestringrequeridocantidadnumber
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/recursos' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"nombre": "<nombre>","cantidad": 0}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/recursos/:idCambia el nombre o la cantidad de un recurso.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
nombrestringcantidadnumber
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/recursos/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"nombre": "<nombre>","cantidad": 0}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/recursos/:idElimina un recurso (los servicios que lo usaban quedan sin recurso).
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/recursos/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/paquetesPaquetes de sesiones (de un contacto con ?contactId).
Path params
orgIdstringrequerido
Query params
contactIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/paquetes' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/paquetesCarga un paquete de sesiones a un cliente. Sus citas lo usan solas y cada atendida (o no asistida) gasta una sesión.
Path params
orgIdstringrequerido
Body (JSON)
contactIdstring · uuidrequeridoappointmentTypeIdstring · uuidPara qué servicio sirve. Vacío = cualquiera.
nombrestringrequeridosesionesnumberrequeridousadasnumberSesiones que ya usó (al cargar un paquete que venía de antes).
venceAtstring
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/paquetes' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"contactId": "00000000-0000-0000-0000-000000000000","appointmentTypeId": "00000000-0000-0000-0000-000000000000","nombre": "<nombre>","sesiones": 0,"usadas": 0,"venceAt": "<venceAt>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/paquetes/:idAnula un paquete de sesiones.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/paquetes/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/reporteResumen de la agenda en un rango (por defecto, los últimos 30 días): citas, inasistencias, ingresos estimados, anticipos, origen, clientes nuevos y ocupación por profesional.
Path params
orgIdstringrequerido
Query params
desdestringhastastring
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/reporte' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/lista-de-esperaLista de espera (por defecto, esperando u ofrecida).
Path params
orgIdstringrequerido
Query params
estadostringESPERANDOOFRECIDAAGENDADACANCELADAVENCIDAcontactIdstring
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/lista-de-espera' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/lista-de-esperaAnota a un cliente en la lista de espera de un servicio: si se libera un horario en ese rango, se le ofrece.
Path params
orgIdstringrequerido
Body (JSON)
contactIdstring · uuidrequeridotypeIdstring · uuidrequeridostaffUserIdstring · uuidPersona pedida. Vacío = con quien esté libre.
desdestringrequeridoRango de fechas en el que le sirve la cita.
hastastringrequeridonotasstringconversationIdstring · uuidphoneNumberIdstring · uuid
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/lista-de-espera' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"contactId": "00000000-0000-0000-0000-000000000000","typeId": "00000000-0000-0000-0000-000000000000","staffUserId": "00000000-0000-0000-0000-000000000000","desde": "<desde>","hasta": "<hasta>","notas": "<notas>","conversationId": "00000000-0000-0000-0000-000000000000","phoneNumberId": "00000000-0000-0000-0000-000000000000"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Clientes activos",
"description": "Contactos con interacción últimos 30 días"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/lista-de-espera/:idSaca a alguien de la lista de espera.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/lista-de-espera/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/presetConfigura la agenda con el ejemplo de un tipo de negocio (servicios, horario, festivos). No pisa lo existente.
Path params
orgIdstringrequerido
Body (JSON)
tipostringrequeridosalonspaconsultorioasesoriaclases
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/preset' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"tipo": "salon"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/staffProfesionales de la org (para agenda por profesional) + si ya tienen disponibilidad.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/staff' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/availabilityReglas semanales de disponibilidad (weekday + minutos locales de la org). `staffUserId` para agenda por profesional.
Path params
orgIdstringrequerido
Query params
staffUserIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/availability' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/availabilityReemplaza el set completo de reglas semanales.
Path params
orgIdstringrequerido
Query params
staffUserIdstringrequerido
Body (JSON)
rulesAvailabilityRuleDto[]requeridoReemplaza TODAS las reglas de la agenda general (staffUserId null).
Respuestas
- 200
curl -X PUT 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/availability' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"rules": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/exceptionsDías bloqueados (festivos, vacaciones).
Path params
orgIdstringrequerido
Query params
staffUserIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/exceptions' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/exceptionsBloquea un día completo (YYYY-MM-DD local).
Path params
orgIdstringrequerido
Query params
staffUserIdstringrequerido
Body (JSON)
datestringrequeridoDía local de la org, formato YYYY-MM-DD.
dateTostringÚltimo día de un rango (vacaciones), inclusive. Vacío = solo `date`.
startMinutenumberFranja bloqueada en minutos locales (almuerzo 13:00-14:00 = 780-840). Sin ellos se bloquea el día completo.
endMinutenumberreasonstring
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/exceptions' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"date": "<date>","dateTo": "<dateTo>","startMinute": 0,"endMinute": 0,"reason": "<reason>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/exceptions/:idDesbloquea un día.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 204
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/exceptions/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/slotsSlots disponibles para un tipo de cita (TZ de la org; respeta antelación, excepciones y citas existentes).
Path params
orgIdstringrequerido
Query params
typeIdstringrequeridofromstringFecha/hora ISO desde la que buscar (default: ahora).
daysnumberCuántos días explorar (default 7, tope maxAdvanceDays del settings).
staffUserIdstringProfesional cuya disponibilidad consultar. Vacío = agenda general.
seatsnumberPersonas de la reserva (servicios con cupos). Default 1.
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/slots' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/appointmentsLista citas con filtros (rango, estado, contacto).
Path params
orgIdstringrequerido
Query params
fromstringtostringstatusstringCONFIRMEDCANCELLEDNO_SHOWCOMPLETEDcontactIdstringstaffUserIdstringFiltra por profesional. `general` = agenda general (staffUserId null).
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/appointments' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/appointmentsReserva un slot exacto (de GET slots) para un contacto. 409 si el horario ya no está disponible.
Path params
orgIdstringrequerido
Body (JSON)
typeIdstring · uuidrequeridocontactIdstring · uuidrequeridostartAtstringrequeridoInicio exacto de un slot devuelto por GET slots (ISO).
conversationIdstring · uuidphoneNumberIdstring · uuidnotesstringstaffUserIdstring · uuidProfesional con el que se reserva. Vacío = agenda general.
seatsnumberPersonas de la reserva (servicios con cupos). Default 1.
cobrarAnticipobooleanCobrar el anticipo del servicio (desde el panel hay que pedirlo; el bot y la página lo cobran solos cuando el servicio lo tiene).
respuestasobjectRespuestas al formulario del servicio, por id de pregunta.
direccionstringDirección del cliente (servicios a domicilio).
sinPaquetebooleanNo usar el paquete de sesiones del cliente aunque tenga uno vigente.
repetiranyCita recurrente: cada `cadaDias` días, `veces` citas en total.
meetingUrlstring · uriEnlace de la reunión (Meet, Zoom, Teams…), pegado a mano.
inviteEmailstring · emailCorreo del cliente para mandarle la invitación.
pedirCorreobooleanSin correo: pedírselo al cliente por el chat para mandarle la invitación.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/appointments' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"typeId": "00000000-0000-0000-0000-000000000000","contactId": "00000000-0000-0000-0000-000000000000","startAt": "<startAt>","conversationId": "00000000-0000-0000-0000-000000000000","phoneNumberId": "00000000-0000-0000-0000-000000000000","notes": "<notes>","staffUserId": "00000000-0000-0000-0000-000000000000","seats": 0,"cobrarAnticipo": true,"respuestas": {},"direccion": "<direccion>","sinPaquete": true,"repetir": "<repetir>","meetingUrl": "https://tu-app.com/endpoint","inviteEmail": "persona@empresa.com","pedirCorreo": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/appointments/:id/cancelCancela una cita confirmada.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
reasonstringseriebooleanCancelar también las que siguen de la serie (citas recurrentes).
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/appointments/00000000-0000-0000-0000-000000000000/cancel' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"reason": "<reason>","serie": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/appointments/:id/rescheduleReprograma una cita confirmada a un nuevo horario disponible.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
startAtstringrequeridoNuevo inicio (ISO); debe ser un slot disponible del mismo tipo de cita.
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/appointments/00000000-0000-0000-0000-000000000000/reschedule' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"startAt": "<startAt>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/appointments/:idCompleta una cita: enlace de la reunión, correo de la invitación o notas. Si cambia el enlace o el correo, se le reenvía la invitación al cliente.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
meetingUrlstring · uriEnlace de la reunión. Cadena vacía = quitarlo.
inviteEmailstring · emailCorreo de la invitación. Cadena vacía = quitarlo.
notesstring
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/appointments/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"meetingUrl": "https://tu-app.com/endpoint","inviteEmail": "persona@empresa.com","notes": "<notes>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/appointments/:id/pedir-correoLe pide al cliente por WhatsApp el correo para mandarle la invitación. El correo que escriba se guarda solo en la cita.
Path params
orgIdstringrequeridoidstringrequerido
Respuestas
- 200
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/appointments/00000000-0000-0000-0000-000000000000/pedir-correo' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/countsContador de la agenda: citas agendadas que no han terminado, cuántas son hoy y la próxima.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/counts' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/agenda/appointments/:id/statusMarca una cita como COMPLETED o NO_SHOW.
Path params
orgIdstringrequeridoidstringrequerido
Body (JSON)
statusstringrequeridoNO_SHOWCOMPLETED
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/agenda/appointments/00000000-0000-0000-0000-000000000000/status' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"status": "NO_SHOW"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}