SIFENDE
Referencia APIAPI de Sesión

Certificado Digital

Subida del certificado digital PKCS12 y Código de Seguridad del Contribuyente (CSC) por sesión Keycloak.

Esta API utiliza autenticación Keycloak. Ver Autenticación para obtener un token JWT.

Cada contribuyente debe tener cargado un certificado digital válido y su Código de Seguridad del Contribuyente (CSC) emitido por SET para poder firmar y transmitir documentos electrónicos.

POST /api/v1/contribuyentes/:id/certificado

Sube el certificado PKCS12 y el CSC asociado al contribuyente.

Autenticación

Authorization: Bearer {keycloak-jwt} (requerido). El usuario debe ser propietario del contribuyente.

Content-Type

multipart/form-data

Form fields

CampoTipoRequeridoDescripción
filefileArchivo PKCS12 (.p12 o .pfx)
passwordstringContraseña del certificado
idCscstringID del CSC (1, 2, etc. — el que tengas activo en e-Kuatia)
cscstringValor del CSC asignado por SET
ambientestringTEST o PROD

El archivo del certificado y la contraseña se almacenan encriptados en reposo. Nunca compartas la contraseña por canales inseguros (chat, email no cifrado, repos públicos). Si sospechás que se filtró, revocá y reemplazá el certificado en SET y volvé a subirlo.

Respuesta exitosa

Status: 200 OK

{
  "status": "success",
  "payload": {
    "certificadoId": 87
  }
}

Errores

StatusTipoCausa
400validation-errorFaltan campos o el archivo no es PKCS12 válido
400validation-errorContraseña incorrecta — no se puede abrir el .p12
403access-deniedEl usuario no es propietario del contribuyente
404contribuyente-not-foundEl :id no existe

Ejemplo

curl -X POST https://api.sifende.com.py/api/v1/contribuyentes/12/certificado \
  -H "Authorization: Bearer $KEYCLOAK_JWT" \
  -F "file=@./certificado-80012345.p12" \
  -F "password=miClaveSecreta" \
  -F "idCsc=1" \
  -F "csc=ABCD1234EFGH5678IJKL9012MNOP3456" \
  -F "ambiente=TEST"

Solo hay un certificado activo a la vez. Subir uno nuevo reemplaza al anterior; si todavía era válido, se desactiva. Esta operación no es reversible: guardá una copia segura del archivo original.

Verificar el estado del certificado

No existe un endpoint GET /certificado. El estado del certificado se expone como el campo tieneCertificado (boolean) dentro del ContribuyenteDTO.

curl https://api.sifende.com.py/api/v1/contribuyentes/12/perfil \
  -H "Authorization: Bearer $KEYCLOAK_JWT" \
  | jq '.payload.tieneCertificado'

Cambiar de ambiente (TEST → PROD)

Para pasar de pruebas a producción debés:

  1. Generar un certificado de producción en SET (si tenés uno separado)
  2. Solicitar el CSC de producción en e-Kuatia
  3. Volver a llamar este endpoint con ambiente=PROD y los datos productivos

Ver la guía de producción para el checklist completo.

On this page