Desarrolladores
Agentes de IA y programas de gestión, bienvenidos.
Dos puertas: MCP para que un asistente (Claude, ChatGPT, el tuyo) gestione reservas en nombre de un cliente, y el Protocolo TAC para que un programa de gestión reciba reservas del hub. Solo documentamos lo que ya funciona.
MCP · Model Context Protocol
Conecta tu asistente de IA a Todo a un clic
El servidor MCP expone las mismas herramientas que usa Clic. Se ejecutan en nuestro servidor como el usuario autenticado: el agente nunca ve tarjetas ni datos de otros clientes.
1. Endpoint
Transporte Streamable HTTP (POST, GET y DELETE) fuera del prefijo /v1. Descubrimiento público en GET https://api.todoaunclic.es/.well-known/mcp.json.
https://api.todoaunclic.es/mcp2. Autenticación
Cabecera Authorization: Bearer <token>. El token es un token personal con prefijo tac_pat_ que Todo a un clic emite para programas de gestión y agentes autorizados (no lo gestiona el usuario final desde la app); se entrega una sola vez y se puede revocar. También se acepta el JWT de sesión de la app.
Ejemplo de configuración en un cliente MCP:
{
"mcpServers": {
"todoaunclic": {
"url": "https://api.todoaunclic.es/mcp",
"headers": { "Authorization": "Bearer tac_pat_…" }
}
}
}3. La regla de oro: confirmar
create_booking y cancel_booking no ejecutan nada: crean una confirmación pendiente (10 minutos) y devuelven un resumen legible con el importe. El agente debe enseñárselo al usuario y, solo tras su «sí» explícito, llamar a confirm_action. El cliente también recibe un aviso en la app por si prefiere confirmar allí.
- Errores tipados: slot_taken, closed, not_bookable, confirmation_expired, amount_over_limit…
- Horas siempre en local del negocio (Europe/Madrid), fechas YYYY-MM-DD.
- Cada usuario tiene un límite de importe por acción de agente que fija en la app.
Herramientas
list_favorites
—
Negocios de confianza del cliente, con su profesional y servicio por defecto ("mi peluquería", "mi peluquero").
search_businesses
{ query?, category?, bookableOnly? }
Busca negocios en el directorio (usa la última ubicación conocida si hay).
get_business
{ business }
Ficha de un negocio con sus servicios, profesionales, horario y opciones de pago. Acepta id, slug o nombre aproximado.
get_availability
{ business, serviceId, date, staffId?, partySize?, preferred? }
Huecos reales de la agenda del negocio para un día, más una lista de horas "redondas" sugeridas.
create_booking
{ business, serviceId, date, time, staffId?, partySize?, notes? }
No reserva: crea una confirmación pendiente y devuelve { confirmationId, summary, amountCents, expiresAt }. Caduca a los 10 minutos.
confirm_action
{ confirmationId }
Ejecuta la confirmación tras el «sí» del cliente. Devuelve la confirmación con la transacción creada.
cancel_booking
{ transactionId }
Pide cancelar una reserva. También crea una confirmación pendiente que hay que confirmar.
list_my_bookings
{ status?, limit? }
Reservas del cliente (próximas y pasadas).
get_points_balance
—
Clics totales y saldo por negocio.
Además: get_context, reject_action y set_favorite_defaults.
Protocolo TAC · para programas de gestión
Recibe reservas del hub en tu programa
Si haces un programa de gestión (agenda de peluquería, reservas de restaurante, partes de fontanero…), el Protocolo TAC es lo que implementa tu servidor para que Todo a un clic lea tu catálogo y te envíe reservas. Reservada ya lo usa en producción.
Lectura (pública, sin firma)
Bajo tu URL base, /tac/v1. Cacheamos 5 minutos.
GET /tac/v1/tenant/{slug} → negocio, horario, capacidades
GET /tac/v1/tenant/{slug}/services → servicios (duración, precio)
GET /tac/v1/tenant/{slug}/staff → profesionales
GET /tac/v1/availability?tenant=&service_id=&date=YYYY-MM-DD[&staff_id=][&party_size=]
GET /tac/v1/availability/month?tenant=&service_id=&month=YYYY-MM (opcional)Capacidades que puedes declarar: booking, booking.cancel, booking.staff, online_payment, table_booking, quote, order. El hub solo ofrece al cliente lo que declares.
Escritura (firmada con HMAC)
POST /tac/v1/partner/booking → crear reserva
POST /tac/v1/partner/booking/{id}/cancel → cancelar (recomendado)
GET /tac/v1/partner/booking/{id}?tenant= → consultar estado (opcional)Cabeceras: X-Partner-Id: todoaunclic, X-Timestamp, X-Idempotency-Key y X-Signature. La firma se calcula sobre timestamp + "." + bytes del cuerpo con el secreto que os entregamos una sola vez:
const body = JSON.stringify(payload); // se serializa UNA vez
const ts = Math.floor(Date.now() / 1000); // X-Timestamp (UTC, segundos)
const sig = crypto.createHmac('sha256', SECRET)
.update(`${ts}.${body}`).digest('hex');
headers['X-Signature'] = `v1=${sig}`; // ventana de ±5 minVector de prueba: secreto test-secret, timestamp 1758300000, cuerpo {"a":1} → 3a0e826c…afc24c.
Idempotencia
Generamos X-Idempotency-Key: tac-<ULID> antes de llamarte y la reutilizamos en cada reintento. Si ya la has visto, devuelve la misma respuesta (mismo booking_id) con 200 y no crees otra cita.
Cuerpo de la reserva: tenant, service_id, staff_id|null, date, time, client_name, client_phone (E.164), client_email, notes, source: "partner:todoaunclic", partner_customer_id, party_size. Respuesta: { ok:true, data:{ booking_id, status, total, end_time } }.
Errores esperados: 400 campos, 404 tenant/servicio, 400 hueco ocupado, 401 firma o timestamp fuera de ventana (±5 min), 403 reservas de socio desactivadas.
Webhooks hacia el hub
Cuando una reserva creada por nosotros cambie (el negocio la cancela, la mueve, la completa…), avísanos. Firmado igual. Respondemos 200 siempre que la firma sea válida, aunque el evento esté repetido.
POST https://api.todoaunclic.es/v1/webhooks/saas/tac/{businessPublicId}
X-Timestamp: 1758300000
X-Signature: v1=<hex(hmac_sha256(timestamp + "." + body, secreto))>
{
"id": "evt_8f3c…", // único: lo usamos para deduplicar
"event": "booking.cancelled", // booking.confirmed | rescheduled | cancelled | completed | no_show
"tenant": "mi-negocio",
"booking_id": 40455,
"status": "cancelled",
"date": "2026-09-25", "time": "17:30",
"reason": "Cerrado por vacaciones",
"occurred_at": "2026-09-20T10:15:00Z"
}¿Quieres integrar tu programa?
Escríbenos a hola@todoaunclic.es con la URL base de tu API. Te damos un negocio de pruebas en el hub, el secreto de firma y revisamos juntos la primera reserva.
La API completa del hub (favoritos, transacciones, confirmaciones, dispositivos de voz, pagos) está documentada en OpenAPI.
Abrir api.todoaunclic.es/docs¿Buscabas ClicVoz?