Saltar a contenido

Endpoints de la API REST

1. Autenticacion /auth

Todos los endpoints de autenticacion son publicos (no requieren JWT).

Nota: Los tokens JWT tienen una expiracion de 24 horas. El refresh token dura 7 dias.

POST /auth/registrar

Registra un nuevo usuario en el sistema.

Request:

{
  "email": "usuario@ejemplo.com",
  "password": "contrasena123",
  "name": "Nombre del Usuario"
}

Response 200:

{
  "jwtToken": "eyJhbGciOiJIUzI1NiJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiJ9..."
}


POST /auth/acceder

Autentica un usuario y devuelve tokens JWT.

Request:

{
  "email": "usuario@ejemplo.com",
  "password": "contrasena123"
}

Response 200:

{
  "jwtToken": "eyJhbGciOiJIUzI1NiJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiJ9..."
}

Response 401:

{
  "error": "Credenciales invalidas"
}


POST /auth/refrescar

Refresca el token de acceso usando el refresh token.

Header requerido: Authorization: Bearer <refresh_token>

Response 200:

{
  "jwtToken": "eyJhbGciOiJIUzI1NiJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiJ9..."
}


2. Usuarios /api/v2/users

GET /api/v2/users

Lista todos los usuarios. Requiere autenticacion.

Response 200:

[
  {
    "name": "Nombre del Usuario",
    "email": "usuario@ejemplo.com",
    "enabled": true,
    "authorized": true
  }
]


3. Grupos de Proceso de Firma /api/v2/grupo-proceso-firma

POST /api/v2/grupo-proceso-firma/iniciar-grupo

Inicia un nuevo grupo de proceso de firma. Requiere autenticacion.

Request (formato nuevo):

{
  "idFirmante": "12345678",
  "idProceso": 1,
  "documentos": [
    {
      "nombre": "documento.pdf",
      "codigo": "COD001",
      "contenido": "base64...",
      "configuraciones": ["firma.estilo=3"],
      "imagen": "base64..."
    }
  ],
  "configuracionesComunes": ["firma.visible=true"]
}

Request (formato legacy):

{
  "idFirmante": "12345678",
  "idProceso": 1,
  "nombres": ["documento.pdf"],
  "contenidos": ["base64..."],
  "configuraciones": ["firma.visible=true"]
}

Response 200:

{
  "gruProFirId": 123,
  "estado": true,
  "mensaje": "Operacion exitosa",
  "propiedades": {
    "firma.repositorio": "Windows-MY",
    "firma.visible": "false",
    "firma.algoritmo": "SHA256"
  }
}


POST /api/v2/grupo-proceso-firma/iniciar-grupo-v2

Inicia grupo mediante multipart/form-data. Requiere autenticacion.

Parametro Tipo Requerido Descripcion
idFirmante String Si Identificador del firmante
idProceso String Si ID del proceso
nombres List Si Nombres (soporta nombre.pdf\|codigo)
configuraciones List Si Configuraciones de firma
archivos List Si Archivos PDF
imagen MultipartFile No Imagen de firma (max 2MB)

GET /api/v2/grupo-proceso-firma/verificar-grupo-firmado/{idGP}

Verifica si el grupo esta firmado. Requiere autenticacion.

Solo funciona si el grupo esta en estado 4 (UPLOADED).

Response 200:

{
  "estado": true,
  "mensaje": "Operacion exitosa",
  "gpf": {
    "documentos": [
      {
        "id": 1,
        "documento": "documento.pdf",
        "idGPF": 123,
        "firmado": true,
        "contenido": "base64..."
      }
    ]
  }
}


GET /api/v2/grupo-proceso-firma/{idGP}/estado

Obtiene el estado detallado de un grupo. Requiere autenticacion.

Response 200:

{
  "estado": true,
  "mensaje": "Operacion exitosa",
  "grupoId": 123,
  "estadoGrupo": "UPLOADED",
  "totalDocs": 3,
  "docsListos": 3,
  "docsPendientes": 0,
  "docsFallidos": 0,
  "readyToDownload": true,
  "updatedAt": "2026-01-15T10:30:00"
}


GET /api/v2/grupo-proceso-firma/{idGP}/documentos

Obtiene el manifiesto de documentos de un grupo. Requiere autenticacion.

Response 200:

{
  "estado": true,
  "mensaje": "Operacion exitosa",
  "grupoId": 123,
  "documentos": [
    {
      "idDoc": 1,
      "nombreOriginal": "documento.pdf",
      "nombreFirmado": "documento_signed.pdf",
      "confirmado": true,
      "intentosDescarga": 0,
      "downloadUrl": "/api/v2/documento/descargar-firmado-blob/1"
    }
  ]
}


GET /api/v2/grupo-proceso-firma/cancelar-grupo/{idGP}

Cancela un grupo de proceso de firma. Requiere autenticacion.

Solo funciona si el grupo esta en estado 1 o 2.

Response 200:

{
  "estado": true,
  "mensaje": "Operacion exitosa"
}


4. SSigner /api/v2/ssigner

POST /api/v2/ssigner/generar-hash

Genera hashes de pre-firma para documentos. Requiere autenticacion.

El grupo debe estar en estado 1 (INITIATED).

Request:

{
  "idGP": "123",
  "idFirmante": "12345678",
  "certifcadoPublicoFirmante": "base64...",
  "userMotivo": "Firma de documento",
  "userLocacion": "Lima, Peru"
}

Response 200:

{
  "hashes": ["base64..."],
  "estado": true,
  "mensaje": "Operacion exitosa",
  "algoritmo": "SHA256",
  "campo": "__signature__",
  "propiedades": {
    "firma.visible": "true",
    "firma.motivo": "Firma de documento"
  },
  "nombresDocumentos": ["documento.pdf"],
  "configuracionesIndividuales": {}
}


POST /api/v2/ssigner/insertar-hash-firmado

Inserta los hashes firmados en los documentos. Requiere autenticacion.

El grupo debe estar en estado 2 (DICHARGED).

Request:

{
  "idpg": 123,
  "hashesFirmados": ["base64..."]
}

Response 200:

{
  "estado": true,
  "mensaje": "Operacion exitosa"
}


POST /api/v2/ssigner/obtener-configuracion

Obtiene la configuracion de firma para un firmante. Requiere autenticacion.

Request:

{
  "idFirmante": "12345678"
}

Response 200:

{
  "estado": true,
  "propiedades": {
    "firma.estilo": "3",
    "firma.visible": "true"
  },
  "idGrupo": 123
}


5. Documentos /api/v2/documento

GET /api/v2/documento/descargar-firmado-blob/{id}

Descarga un documento firmado como binary stream. Requiere autenticacion.

Response: - Content-Type: application/pdf - Content-Disposition: attachment; filename="documento.pdf" - Body: Flujo binario del PDF


6. Clientes /api/v2/clientes

GET /api/v2/clientes

Lista todos los clientes. Requiere autenticacion.

Response 200:

[
  {
    "id": 1,
    "name": "Cliente SAETA",
    "email": "cliente@saeta.com",
    "enabled": true,
    "authorized": true
  }
]


POST /api/v2/clientes

Crea un nuevo cliente. Requiere autenticacion.

Request:

{
  "name": "Nuevo Cliente",
  "email": "cliente@nuevo.com",
  "password": "password123"
}

Response 201:

{
  "id": 2,
  "name": "Nuevo Cliente",
  "email": "cliente@nuevo.com",
  "enabled": true,
  "authorized": true
}


PATCH /api/v2/clientes/{id}/estado

Cambia el estado de un cliente. Requiere autenticacion.

Request:

{
  "enabled": true,
  "authorized": false
}

Response 200:

{
  "id": 2,
  "name": "Nuevo Cliente",
  "email": "cliente@nuevo.com",
  "enabled": true,
  "authorized": false
}