API Reference
La API de Keeep te permite certificar contenido web, gestionar certificados y verificar evidencia de forma programatica. Todas las respuestas son JSON salvo las descargas de archivos binarios.
https://keeep.omniscius.pro/apiContent-Type: application/json
Autenticacion
La API soporta dos metodos de autenticacion. Ambos se envian en el headerAuthorizationde cada peticion.
JWT Bearer Token
Obtenido al hacer login o registro. Expira en 7 dias. Recomendado para aplicaciones frontend y flujos interactivos.
Authorization: Bearer eyJhbG...API KeyBUSINESS+
Keys con prefijo wpk_ para integraciones servidor-a-servidor. No expiran hasta ser revocadas.
Authorization: Bearer wpk_live_a1b2...curl https://keeep.omniscius.pro/api/auth/me \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Limites de uso
Para garantizar la estabilidad del servicio, la API aplica limites de velocidad por IP y por usuario. Cuando se excede un limite, la API responde con429 Too Many Requests.
| Recurso | Limite | Ventana |
|---|---|---|
| Peticiones generales | 100 | 15 minutos |
| Creacion de sesiones | 10 | 1 hora |
| Verificaciones | 30 | 15 minutos |
Nota: Los headers de respuesta incluyen X-RateLimit-Remaining y X-RateLimit-Reset para que puedas gestionar el consumo de forma proactiva.
Autenticacion
Endpoints para registro, login y gestion de la sesion del usuario.
/api/auth/registerCrea una nueva cuenta de usuario. El campo name es opcional. Devuelve el objeto de usuario y un token JWT valido para autenticar las siguientes peticiones.
{
"email": "usuario@ejemplo.com",
"password": "miPassword123",
"name": "Juan Garcia"
}{
"user": {
"id": "usr_abc123",
"email": "usuario@ejemplo.com",
"name": "Juan Garcia",
"plan": "free",
"createdAt": "2026-01-15T10:30:00.000Z"
},
"token": "eyJhbGciOiJIUzI1NiIs..."
}/api/auth/loginInicia sesion con credenciales existentes. Devuelve el usuario y un nuevo token JWT.
{
"email": "usuario@ejemplo.com",
"password": "miPassword123"
}{
"user": {
"id": "usr_abc123",
"email": "usuario@ejemplo.com",
"name": "Juan Garcia",
"plan": "professional",
"createdAt": "2026-01-15T10:30:00.000Z"
},
"token": "eyJhbGciOiJIUzI1NiIs..."
}/api/auth/meDevuelve la informacion del usuario autenticado. Util para validar el token y obtener el estado actual de la cuenta.
{
"user": {
"id": "usr_abc123",
"email": "usuario@ejemplo.com",
"name": "Juan Garcia",
"plan": "professional",
"certsUsed": 3,
"certsLimit": 10,
"createdAt": "2026-01-15T10:30:00.000Z"
}
}Sesiones
Crea y gestiona sesiones de certificacion. Una sesion representa el proceso de captura de una pagina web.
/api/sessionsCrea una nueva sesion de certificacion. El campo sessionType puede ser "static" (captura unica) o "interactive" (sesion con navegacion en vivo, plan Professional+). La URL debe ser accesible publicamente.
{
"targetUrl": "https://ejemplo.com/pagina",
"sessionType": "static"
}{
"session": {
"id": "ses_xyz789",
"targetUrl": "https://ejemplo.com/pagina",
"sessionType": "static",
"status": "created",
"createdAt": "2026-02-14T08:00:00.000Z"
}
}/api/sessions/:id/startInicia la captura de la sesion. El servidor lanzara un navegador headless, capturara la pagina, generara screenshots, y comenzara el proceso de certificacion (hashing, firma, sello temporal).
{
"session": {
"id": "ses_xyz789",
"status": "capturing",
"startedAt": "2026-02-14T08:00:05.000Z"
},
"message": "Sesion iniciada correctamente"
}/api/sessions/:id/stopDetiene una sesion interactiva en curso. Solo aplicable a sesiones de tipo "interactive". Las sesiones estaticas finalizan automaticamente.
{
"session": {
"id": "ses_xyz789",
"status": "processing",
"stoppedAt": "2026-02-14T08:05:00.000Z"
},
"message": "Sesion detenida, procesando certificado"
}/api/sessions/:idObtiene el estado detallado de una sesion. Usa este endpoint para hacer polling del estado mientras la sesion esta en "capturing" o "processing".
{
"session": {
"id": "ses_xyz789",
"targetUrl": "https://ejemplo.com/pagina",
"sessionType": "static",
"status": "completed",
"certificateId": "cert_abc456",
"createdAt": "2026-02-14T08:00:00.000Z",
"startedAt": "2026-02-14T08:00:05.000Z",
"completedAt": "2026-02-14T08:00:35.000Z"
}
}/api/sessionsLista todas las sesiones del usuario autenticado, ordenadas por fecha de creacion descendente. Soporta paginacion con los parametros query ?page=1&limit=20.
{
"sessions": [
{
"id": "ses_xyz789",
"targetUrl": "https://ejemplo.com/pagina",
"status": "completed",
"certificateId": "cert_abc456",
"createdAt": "2026-02-14T08:00:00.000Z"
}
]
}Certificados
Consulta, descarga y gestiona los certificados generados tras completar una sesion de captura.
/api/certificatesLista todos los certificados del usuario. Cada certificado incluye metadatos de verificacion, estado del sello temporal y anclaje Bitcoin si aplica.
{
"certificates": [
{
"id": "cert_abc456",
"url": "https://ejemplo.com/pagina",
"status": "certified",
"verificationCode": "KP-2026-A7X9B2",
"sha256": "a1b2c3d4e5f6...",
"hasRSA": true,
"hasTimestamp": true,
"hasBitcoin": false,
"createdAt": "2026-02-14T08:00:35.000Z"
}
]
}/api/certificates/:idObtiene el detalle completo de un certificado, incluyendo toda la cadena de evidencia: hashes, firma RSA, sello RFC 3161, transaccion Bitcoin (si aplica) y metadatos del proceso.
{
"certificate": {
"id": "cert_abc456",
"url": "https://ejemplo.com/pagina",
"status": "certified",
"verificationCode": "KP-2026-A7X9B2",
"sha256": "a1b2c3d4e5f6...",
"rsaSignature": "base64...",
"timestampToken": "base64...",
"timestampAuthority": "DigiCert TSA",
"bitcoinTx": null,
"screenshots": ["screenshot_001.png"],
"createdAt": "2026-02-14T08:00:35.000Z"
}
}/api/certificates/:id/download-tokenGenera un token temporal de descarga (valido 5 minutos). Necesario para descargar el ZIP o el video de la sesion. Este mecanismo evita exponer el JWT en URLs de descarga directa.
{
"downloadToken": "dt_temp_abc123xyz..."
}/api/certificates/:id/download?dt=TOKENDescarga el paquete ZIP del certificado. Incluye: capturas de pantalla, manifest SHA-256, firma RSA (.sig), sello temporal RFC 3161 (.tsr), certificado PDF y metadatos JSON. Requiere un download token valido.
// Respuesta binaria: application/zip
// Nombre: certificado-KP-2026-A7X9B2.zip
//
// Contenido del ZIP:
// manifest.json
// manifest.json.sig
// timestamp.tsr
// certificate.pdf
// screenshots/
// screenshot_001.png/api/certificates/:id/video?dt=TOKENTransmite el video MP4 de la sesion de captura (solo disponible para sesiones interactivas, plan Professional+). Soporta Range headers para streaming progresivo.
// Respuesta binaria: video/mp4
// Content-Disposition: inline
// Accept-Ranges: bytesVerificacion
Endpoints publicos para verificar la autenticidad de cualquier certificado. No requieren autenticacion.
/api/verify/:codeVerifica un certificado por su codigo de verificacion (ej: KP-2026-A7X9B2). Endpoint publico, no requiere autenticacion. Devuelve el estado de validez y toda la cadena de evidencia verificable.
{
"valid": true,
"certificate": {
"verificationCode": "KP-2026-A7X9B2",
"url": "https://ejemplo.com/pagina",
"sha256": "a1b2c3d4e5f6...",
"certifiedAt": "2026-02-14T08:00:35.000Z",
"hasRSA": true,
"hasTimestamp": true,
"timestampAuthority": "DigiCert TSA",
"hasBitcoin": false
},
"blockchain": {
"anchored": false,
"txId": null,
"confirmations": null
}
}/api/verify/:code/otsDescarga el archivo OpenTimestamps (.ots) del certificado. Permite verificacion independiente del anclaje Bitcoin usando la herramienta ots-cli o cualquier verificador compatible.
// Respuesta binaria: application/octet-stream
// Content-Disposition: attachment; filename="KP-2026-A7X9B2.ots"API Keys
Gestiona API keys para integraciones programaticas. Disponible exclusivamente en el plan Business+.
/api/api-keysCrea una nueva API key para integraciones programaticas. Las keys tienen el prefijo wpk_ y solo se muestran una vez al crearlas. Maximo 5 keys activas por cuenta.
{
"name": "Integracion produccion"
}{
"apiKey": {
"id": "key_abc123",
"name": "Integracion produccion",
"key": "wpk_live_a1b2c3d4e5f6g7h8i9j0...",
"createdAt": "2026-02-14T10:00:00.000Z"
}
}/api/api-keysLista todas las API keys del usuario. Por seguridad, la key completa no se muestra; solo los ultimos 8 caracteres.
{
"apiKeys": [
{
"id": "key_abc123",
"name": "Integracion produccion",
"lastChars": "...i9j0k1l2",
"lastUsedAt": "2026-02-14T09:30:00.000Z",
"createdAt": "2026-02-14T10:00:00.000Z"
}
]
}/api/api-keys/:idRevoca permanentemente una API key. Las peticiones que usen esta key seran rechazadas inmediatamente. Esta accion no se puede deshacer.
{
"success": true
}Certificacion por lotes
Certifica multiples paginas en una sola operacion. Disponible exclusivamente en el plan Business+.
/api/batch/certifyCertifica multiples URLs en una sola peticion (maximo 10 por lote). Crea sesiones estaticas para cada URL y las inicia automaticamente. Ideal para flujos de trabajo automatizados.
{
"urls": [
"https://ejemplo.com/pagina-1",
"https://ejemplo.com/pagina-2",
"https://ejemplo.com/pagina-3"
]
}{
"sessions": [
{
"id": "ses_001",
"targetUrl": "https://ejemplo.com/pagina-1",
"status": "capturing"
},
{
"id": "ses_002",
"targetUrl": "https://ejemplo.com/pagina-2",
"status": "capturing"
},
{
"id": "ses_003",
"targetUrl": "https://ejemplo.com/pagina-3",
"status": "capturing"
}
]
}Exportacion e informes
Exporta datos y genera informes profesionales. Disponible exclusivamente en el plan Business+.
/api/export/certificates?format=csv|jsonExporta todos los certificados del usuario en formato CSV o JSON. Util para auditoria, informes internos o integracion con sistemas externos. El parametro format acepta "csv" o "json".
// format=json
{
"certificates": [
{
"id": "cert_abc456",
"verificationCode": "KP-2026-A7X9B2",
"url": "https://ejemplo.com/pagina",
"sha256": "a1b2c3d4e5f6...",
"status": "certified",
"createdAt": "2026-02-14T08:00:35.000Z"
}
],
"exportedAt": "2026-02-14T12:00:00.000Z",
"total": 1
}
// format=csv
// Content-Type: text/csv
// id,verificationCode,url,sha256,status,createdAt
// cert_abc456,KP-2026-A7X9B2,https://ejemplo.com/pagina,a1b2c3...,certified,2026-02-14T08:00:35.000Z/api/reports/certificate/:idGenera un informe PDF detallado del certificado. Incluye toda la cadena de evidencia, capturas de pantalla, metadatos tecnicos y un codigo QR de verificacion. Ideal para presentar como evidencia en procedimientos legales.
// Respuesta binaria: application/pdf
// Content-Disposition: attachment; filename="informe-KP-2026-A7X9B2.pdf"Usuario
Actualiza el perfil del usuario y gestiona el branding personalizado.
/api/user/profileActualiza el perfil del usuario autenticado. Actualmente permite modificar el nombre mostrado.
{
"name": "Juan Garcia Lopez"
}{
"user": {
"id": "usr_abc123",
"email": "usuario@ejemplo.com",
"name": "Juan Garcia Lopez",
"plan": "professional"
}
}/api/user/logoSube un logotipo personalizado para incluir en los certificados PDF. La imagen debe enviarse codificada en base64. Formatos soportados: PNG, JPG, SVG. Tamano maximo: 2 MB.
{
"logo": "data:image/png;base64,iVBORw0KGgo..."
}{
"logoUrl": "https://keeep.omniscius.pro/uploads/logos/usr_abc123.png"
}/api/user/logoElimina el logotipo personalizado. Los certificados futuros usaran el diseno por defecto.
{
"success": true
}Inicio rapido
Este ejemplo muestra el flujo completo: autenticarte, crear una sesion de certificacion estatica, iniciarla, esperar a que termine y listar tus certificados.
Iniciar sesion
Obtener el token JWT para las siguientes peticiones.
curl -X POST https://keeep.omniscius.pro/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "usuario@ejemplo.com",
"password": "miPassword123"
}'Crear sesion
Crear una sesion estatica con la URL a certificar.
curl -X POST https://keeep.omniscius.pro/api/sessions \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"targetUrl": "https://ejemplo.com/pagina",
"sessionType": "static"
}'Iniciar captura
Lanzar el proceso de captura y certificacion.
curl -X POST https://keeep.omniscius.pro/api/sessions/ses_xyz789/start \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Verificar estado
Hacer polling hasta que el status sea "completed".
curl https://keeep.omniscius.pro/api/sessions/ses_xyz789 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Listar certificados
Confirmar que el certificado ha sido generado.
curl https://keeep.omniscius.pro/api/certificates \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Errores
La API utiliza codigos de estado HTTP estandar. Todos los errores devuelven un JSON con el campo error describiendo el problema.
{
"error": "Descripcion del error"
}| Codigo | Nombre | Descripcion |
|---|---|---|
| 400 | Bad Request | Parametros invalidos o faltantes en la peticion. |
| 401 | Unauthorized | Token ausente, invalido o expirado. |
| 402 | Payment Required | Limite de certificaciones alcanzado en el plan actual. |
| 403 | Forbidden | No tienes permisos para este recurso o accion (ej: endpoint Business+ con plan Free). |
| 404 | Not Found | El recurso solicitado no existe o no pertenece a tu cuenta. |
| 429 | Too Many Requests | Limite de velocidad excedido. Consulta los headers X-RateLimit-*. |
| 500 | Internal Server Error | Error interno del servidor. Si persiste, contacta soporte. |
Buenas practicas
- →Siempre verifica el codigo de estado HTTP antes de procesar el cuerpo de la respuesta.
- →Implementa reintentos con backoff exponencial para errores 429 y 500.
- →Guarda el token JWT de forma segura y renovalo antes de que expire.
- →Usa API keys (wpk_) en lugar de JWT para integraciones servidor-a-servidor de larga duracion.