Certificado
Emitir el certificado firmado, descargarlo y verificar que corresponde a un PDF.
El certificado es un XML firmado que acredita el resultado de la revisión de una versión concreta del PDF: su folio, el veredicto y la huella (hash) del documento. Es lo que el controlador usará para comprobar que el PDF no cambió.
Emitir
/v1/avaluos/{folio}/certificadoavaluos:writeEmite el certificado XML firmado del avalúo
Antes de llamar, comprueba que puede_certificar es true en GET /v1/avaluos/{folio}.
curl -X POST "$API_URL/v1/avaluos/AVL-2026-000123/certificado" \
-H "x-api-key: $API_KEY"Sin cuerpo.
{
"folio": "AVL-2026-000123",
"status": "approved",
"certificado": {
"estado": "vigente",
"emitido_at": "2026-06-24T18:42:10.000Z",
"hash_avaluo": "9f2c4a1b7e…",
"sha256_certificado": "a41b09c3d2…",
"url": "https://…?X-Amz-Signature=…"
}
}| Campo | Qué es |
|---|---|
certificado.estado | vigente, o revocado si después se subió otra versión del PDF. |
certificado.hash_avaluo | Huella SHA-256 del contenido del PDF certificado. |
certificado.sha256_certificado | Huella del XML del certificado. |
certificado.url | Descarga temporal del XML. |
Al emitirlo el avalúo pasa a approved.
Puedes repetir la llamada
Si el certificado ya existe, la llamada lo devuelve otra vez con una url de descarga
nueva. Úsalo cuando la URL anterior haya caducado.
Requisitos y errores
El API comprueba los requisitos en este orden y responde con el primero que falle:
| HTTP | code | Falta… | Qué hacer |
|---|---|---|---|
404 | — | El folio, o un documento. | Revisa el folio. |
409 | SIN_EVALUACION | Una evaluación. | Espera a que termine la lectura del PDF. |
409 | DOCUMENTO_NO_LISTO | Que el PDF termine de leerse. | Espera y reintenta. |
409 | DOCUMENTO_CON_ERRORES | Un PDF sin errores. | Sube una versión corregida. |
409 | SIN_HASH | La huella del documento. | Sube de nuevo el PDF; si persiste, repórtalo. |
409 | EVALUACION_NO_COMPLETADA | Que terminen las cinco etapas. | Espera a latest_evaluation.estado: completed. |
409 | CRITICOS_PENDIENTES | Justificar los hallazgos críticos. | Justifica o corrige. |
409 | HALLAZGOS_PENDIENTES | Justificar todos los hallazgos. | Justifica o corrige los que falten. |
{
"statusCode": 409,
"timestamp": "2026-06-24T18:41:00.000Z",
"path": "/v1/avaluos/AVL-2026-000123/certificado",
"method": "POST",
"message": "Hay 2 hallazgo(s) sin justificar; …",
"code": "HALLAZGOS_PENDIENTES"
}Descargar
La url del certificado caduca a los pocos minutos. Para descargarlo más tarde, vuelve a
llamar a POST …/certificado o consulta certificado.url en GET /v1/avaluos/{folio}.
curl -o certificado.xml "$CERTIFICADO_URL"La URL ya va firmada: no le añadas la cabecera x-api-key.
Cuándo se revoca
Subir una versión nueva del PDF revoca el certificado vigente
(certificado.estado: revocado): ya no corresponde al documento actual. La versión nueva
necesita su propio certificado.
Verificar un certificado
Para comprobar que un PDF es exactamente el que se certificó, envía el PDF y el XML:
/v1/avaluos/verifyavaluos:verifyVerifica un avalúo contra su certificado
curl -X POST "$API_URL/v1/avaluos/verify" \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"avaluo_base64\": \"$(base64 -i avaluo.pdf | tr -d '\n')\",
\"certificado_xml\": $(jq -Rs . < certificado.xml)
}"{
"valido": true,
"folio": "AVL-2026-000123",
"firma_valida": true,
"coincide_hash": true,
"certificado_estado": "vigente",
"hash_esperado": "9f2c4a1b7e…",
"hash_calculado": "9f2c4a1b7e…"
}La respuesta es 200 aunque la verificación falle: mira valido y motivo.
firma_valida indica si el XML es auténtico y coincide_hash si el PDF es el certificado.
certificado_estado es vigente, revocado o desconocido (el XML no corresponde a
ningún certificado registrado).
motivo | Qué significa |
|---|---|
| (ausente) | valido: true. El PDF es el certificado. |
certificado_ilegible | El XML no tiene el formato de un certificado. folio y los hashes vienen null. |
firma_invalida | El XML fue alterado o no lo emitió este servicio. |
hash_no_coincide | El PDF no es el que se certificó. |
certificado_revocado | El certificado se revocó por una versión posterior del PDF. |
Este endpoint necesita el scope avaluos:verify y no guarda nada. Para dejar
constancia de la verificación como paso previo al dictamen, el controlador usa
POST /v1/control/verificaciones.