Tasvalúo SAI

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

POST/v1/avaluos/{folio}/certificadoavaluos:write

Emite 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.

200 OK
{
  "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=…"
  }
}
CampoQué es
certificado.estadovigente, o revocado si después se subió otra versión del PDF.
certificado.hash_avaluoHuella SHA-256 del contenido del PDF certificado.
certificado.sha256_certificadoHuella del XML del certificado.
certificado.urlDescarga 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:

HTTPcodeFalta…Qué hacer
404El folio, o un documento.Revisa el folio.
409SIN_EVALUACIONUna evaluación.Espera a que termine la lectura del PDF.
409DOCUMENTO_NO_LISTOQue el PDF termine de leerse.Espera y reintenta.
409DOCUMENTO_CON_ERRORESUn PDF sin errores.Sube una versión corregida.
409SIN_HASHLa huella del documento.Sube de nuevo el PDF; si persiste, repórtalo.
409EVALUACION_NO_COMPLETADAQue terminen las cinco etapas.Espera a latest_evaluation.estado: completed.
409CRITICOS_PENDIENTESJustificar los hallazgos críticos.Justifica o corrige.
409HALLAZGOS_PENDIENTESJustificar todos los hallazgos.Justifica o corrige los que falten.
409 Conflict
{
  "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:

POST/v1/avaluos/verifyavaluos:verify

Verifica 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)
  }"
200 OK
{
  "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).

motivoQué significa
(ausente)valido: true. El PDF es el certificado.
certificado_ilegibleEl XML no tiene el formato de un certificado. folio y los hashes vienen null.
firma_invalidaEl XML fue alterado o no lo emitió este servicio.
hash_no_coincideEl PDF no es el que se certificó.
certificado_revocadoEl 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.

On this page