API de Check-in
Los ejemplos muestran el header en formato de transmisión
Authorization: P2S-SIGN-V1 API_KEY:TIMESTAMP:SIGNATURE. Para calcular la firma en tu código, usa el helper signedRequest en Autenticación.Cómo funciona
- Obtienes una API Key con el scope
checkin:read(Admin > Integraciones > API Keys) - Tu backend consulta el estado de check-in de uno o varios colaboradores (por CPF o email)
- SalesOS responde con el último check-in de hoy por colaborador — y, opcionalmente, conteos de engagement semana/mes
El check-in se sigue ejecutando dentro de la app SalesOS (la validación de GPS ocurre en el contexto del usuario). Esta API es para leer el estado de presencia — combínala con un deep link al módulo SalesOS en la acción “Hacer check-in”.
Autenticación
Todas las solicitudes requieren una API Key en el headerAuthorization:
Ambientes
- Producción
- Staging
Base URL:
https://api.play2sell.comReferencia del Endpoint
action: checkin_status y checkin_engagement.
Cada colaborador se identifica por CPF (cualquier formato — los dígitos se normalizan) o email. Cuando se envían ambos, el CPF prevalece.
Action: checkin_status
Último check-in de hoy por colaborador. “Hoy” se calcula en la zona horaria de tu empresa (devuelta comotimezone / reference_date en la respuesta) — nunca en UTC.
Schema de la solicitud
string
requerido
Debe ser
"checkin_status"array
requerido
Array de referencias de colaborador (máx. 500)
string
CPF, cualquier formato (
52998224725 o 529.982.247-25). Debe contener exactamente 11 dígitos.string
Email — usado solo cuando
cpf no se envíaEjemplo
Campos de la respuesta
boolean
Si el CPF/email correspondió a un colaborador de tu empresa. Un colaborador desconocido viene como
found: false — no es un error, y el array mantiene el mismo orden de la solicitud.boolean
Si el colaborador tiene al menos un check-in no rechazado hoy (zona horaria de la empresa).
boolean
true cuando el último check-in está activo/aprobado y el turno aún no expiró — es decir, el colaborador está de turno ahora.object
Check-in más reciente de hoy. Omitido cuando no hay ninguno.
mode es geo (presencial con GPS), home (home office) u offline. status puede ser active, approved, pending (esperando aprobación del líder), expired (turno finalizado normalmente) o checkout.string
Vínculo del colaborador con tu empresa (
active, inactive, …). Un colaborador puede ser encontrado y estar inactivo.Recorrido del dia (include_day)
Envie "include_day": true en checkin_status para recibir, ademas del estado actual, como va el dia turno por turno y cuando se habilita el boton de nuevo. Es lo que una pantalla de inicio necesita para componer el bloque de check-in sin abrir el modulo de SalesOS.
Los turnos salen una sola vez arriba, no repetidos por persona. En un lote de 500 colaboradores esa es la diferencia entre una respuesta liviana y una de megabytes.
Campos
Action: checkin_engagement
Todo lo que devuelvecheckin_status, más conteos de engagement semana/mes por colaborador. Lotes limitados a 100.
string
requerido
Debe ser
"checkin_engagement"array
requerido
Array de referencias de colaborador (máx. 100)
Ejemplo
engagement:
checkins— check-ins en la semana/mes corriente (zona horaria de la empresa;expiredcuenta — es el fin normal de un turno)presence_days— días distintos con al menos un check-in
Modo self (sesión federada)
Si tu app ya posee una sesión federada de SalesOS — el JWT devuelto por un login personalizado, como la federación del Superapp — el mismo endpoint responde por el propio usuario del token, sin API key:- La identidad viene exclusivamente del token verificado — no envíes
collaborators. Una solicitud con ese campo se rechaza conSELF_MODE_NO_COLLABORATORS: un token de usuario nunca consulta a otras personas. - El alcance de empresa viene de la sesión; la respuesta tiene exactamente el mismo formato, con un único ítem en
collaborators. checkin_engagementfunciona de la misma manera ({ "action": "checkin_engagement" }).
Manejo de Errores
Todos los errores siguen la estructura compartida:400 — VALIDATION_ERROR
400 — VALIDATION_ERROR
Body inválido, lote sobre el límite, CPF sin 11 dígitos, o ítem sin
cpf ni email. El array details indica el index del ítem.403 — FORBIDDEN
403 — FORBIDDEN
API key válida, pero sin el scope
checkin:read.405 — METHOD_NOT_ALLOWED
405 — METHOD_NOT_ALLOWED
Solo se acepta
POST.429 — RATE_LIMITED
429 — RATE_LIMITED
Demasiadas solicitudes en esta hora. Espera
retry_after segundos y reintenta.500 — SERVER_ERROR
500 — SERVER_ERROR
Error interno. Reintenta con backoff exponencial (2s, 4s, 8s).
Rate Limits
Seguridad
- Solo lectura: esta API nunca crea ni modifica check-ins
- Cada key está limitada a una única empresa — un CPF de otra empresa responde
found: false - Solicitudes firmadas con HMAC (P2S-SIGN-V1) y registradas para auditoría; los documentos nunca se escriben en logs
Próximos pasos
Autenticación
Aprende a crear y gestionar API Keys
Soporte
¿Necesitas ayuda? Habla con nuestro equipo

