Ir al contenido

GET /api/emisores/certificado/

GET /api/emisores/certificado/

Consulta y baja de certificados; la escritura entra solo por cargar.

No es un ModelViewSet a propósito. La única forma de que un .p12 llegue a la base es cargar, que valida el archivo (validar_pkcs12: integridad, clave, vigencia, llave RSA y NIT del emisor) y exige que Backblaze B2 esté configurado para no dejar material criptográfico en disco local. Mientras esto fue un ModelViewSet, PUT y PATCH seguían publicados y rodeaban las dos comprobaciones: bastaba un PATCH con un archivo nuevo para guardarlo sin validar, o un PATCH de emisor para mover el certificado a otro emisor del alcance.

Por eso quedan solo list, retrieve, destroy y cargar. No hay edición: el alias se fija al subir, y el certificado se reemplaza borrando el que hay y cargando el nuevo.

Tampoco hay un create que devuelva un 405 con la pista de cargar: el router decide qué verbos monta mirando si el viewset tiene el método, no de qué mixin viene, así que definirlo volvería a publicar POST en la ruta de lista y drf-spectacular lo documentaría como una creación normal.

operationId: emisores_certificado_list

Cualquiera de estas credenciales:

  • LlaveApi — Llave de API de una integración. El valor completo es Api-Key <prefijo>.<secreto>, tal como lo imprime manage.py crear_llave_api. La llave alcanza exactamente los mismos emisores que la persona a cuyo nombre se creó.
NombreEnTipoObligatorioDescripción
pagequeryintegernoUn número de página dentro del conjunto de resultados paginado.
searchquerystringnoUn término de búsqueda.
Ventana de terminal
curl "https://api.rededoc.uk/api/emisores/certificado/" \
-H "Authorization: <llaveapi>"
CódigoDescripción
200
401Error
429Error
CampoTipoDescripción
countinteger
nextstring (uri)Admite null.
previousstring (uri)Admite null.
resultsarray<Certificado>
{
"count": 123,
"next": "http://api.example.org/accounts/?page=4",
"previous": "http://api.example.org/accounts/?page=2",
"results": [
{
"id": 1,
"emisor": 1,
"alias": "texto",
"nombre_archivo": "texto",
"vigente_desde": "2026-01-31",
"vigente_hasta": "2026-01-31"
}
]
}
CampoTipoDescripción
detailstringMensaje para mostrar a la persona.
erroresarray<object>Nunca vacía. Cada error trae codigo, que es lo que el cliente mapea —los de DRF tal cual (required, invalid, does_not_exist, not_found…) y los propios en español (campo_desconocido, solicitud_invalida…)—, y mensaje, para la persona. Si el error es de un campo, su ruta va delante del mensaje: detalles[0].impuestos[0].tributo: Este campo es obligatorio.
{
"detail": "texto",
"errores": [
{
"codigo": "texto",
"mensaje": "texto"
}
]
}
CampoTipoDescripción
detailstringMensaje para mostrar a la persona.
erroresarray<object>Nunca vacía. Cada error trae codigo, que es lo que el cliente mapea —los de DRF tal cual (required, invalid, does_not_exist, not_found…) y los propios en español (campo_desconocido, solicitud_invalida…)—, y mensaje, para la persona. Si el error es de un campo, su ruta va delante del mensaje: detalles[0].impuestos[0].tributo: Este campo es obligatorio.
{
"detail": "texto",
"errores": [
{
"codigo": "texto",
"mensaje": "texto"
}
]
}

RedEDoc es un servicio de Semántica Digital S.A.S.