Todo en un lugar
Cómo empezar
- El dueño del club crea una llave en app.passid.com.mx → Mi club → Cámaras → «API del club». Empieza con
cbk_, se ve una sola vez, vence a los 90 días y se puede revocar cuando quieras. - Prueba la llave:
curl https://mi.passid.com.mx/api/club/v1/me \ -H "Authorization: Bearer cbk_TU_LLAVE" \ -H "X-Request-Id: prueba-0001"
- Aparta una cancha:
curl -X POST https://mi.passid.com.mx/api/club/v1/reservations \ -H "Authorization: Bearer cbk_TU_LLAVE" \ -H "X-Request-Id: CARB-000123-1" \ -H "Content-Type: application/json" \ -d '{"court":"carbono-cancha-01","startUtc":"2026-11-02T18:00:00-06:00", "minutes":60,"phone":"3312345678","name":"Pepe","externalId":"CARB-000123"}'
El contrato
Authorization: Bearer cbk_… — de un solo club, vence y se revoca.
X-Request-Id obligatorio. Te lo regresamos; si repites un POST/DELETE con el mismo, te damos la respuesta original sin duplicar.
Con tu requestId y nuestro reservationId: así se vinculan los dos sistemas. Manda también tu externalId.
GET /requests/{id} dice qué pasó con una solicitud; GET /logs trae respuesta, código y segundos de cada llamada (hoy por defecto).
120 llamadas por minuto por llave.
🔌 MCP para agentes de IA
URL https://mi.passid.com.mx/mcp con la misma llave. Herramientas: club_info, list_courts,
check_availability, create_reservation, get_reservation, list_reservations,
cancel_reservation, request_status, call_log.
{ "mcpServers": { "passid-club": {
"type": "http", "url": "https://mi.passid.com.mx/mcp",
"headers": { "Authorization": "Bearer cbk_TU_LLAVE" } } } }📨 Webhook: los clips de regreso
En Mi club → Cámaras → «Webhook del club» el dueño pone una URL https y un secreto. Cada clip y repetición
llega como clip.ready con la cancha, los videos (URL de 1 hora) y quién lo recibió.
Firma: X-PassID-Signature: sha256=HMAC(secreto, "{timestamp}.{cuerpo}") con X-PassID-Timestamp. Verifícala y revisa que el timestamp sea reciente.