{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/signdocs-com-br/json-schema/signdocs-com-br-envelope-verification-response-schema.json",
  "title": "EnvelopeVerificationResponse",
  "description": "Resposta de verificação pública de envelope multi-signatário.\nInclui status do envelope, lista de signatários e URLs de download\nconsolidadas. Cada signatário traz o `evidenceId` da sua evidência\nindividual para drill-down via `GET /v1/verify/{evidenceId}`.\n\nEm envelope com `signerConfidentiality: true`, a resposta confirma só\no envelope (status, hash, emissor, datas): `signers`, `totalSigners`,\n`completedSessions` e `downloads` são omitidos, inclusive após a\nconclusão.\n",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/signdocs-com-br-openapi.yaml#/components/schemas/EnvelopeVerificationResponse",
  "type": "object",
  "required": [
    "envelopeId",
    "status",
    "signingMode",
    "signerConfidentiality",
    "documentHash",
    "createdAt"
  ],
  "properties": {
    "signerConfidentiality": {
      "type": "boolean",
      "description": "Envelope com confidencialidade entre signatários. Quando `true`, os campos de signatários, contagens e downloads não são devolvidos."
    },
    "envelopeId": {
      "type": "string"
    },
    "status": {
      "$ref": "#/$defs/EnvelopeStatus"
    },
    "signingMode": {
      "type": "string",
      "enum": [
        "PARALLEL",
        "SEQUENTIAL"
      ]
    },
    "totalSigners": {
      "type": "integer",
      "description": "Número total de signatários esperados no envelope."
    },
    "completedSessions": {
      "type": "integer",
      "description": "Quantidade de sessões já concluídas."
    },
    "documentHash": {
      "type": "string",
      "description": "Hash SHA-256 do documento original do envelope."
    },
    "tenantName": {
      "type": "string",
      "description": "Nome da empresa/tenant que criou o envelope."
    },
    "tenantCnpj": {
      "type": "string",
      "description": "CNPJ da empresa/tenant que criou o envelope."
    },
    "signers": {
      "type": "array",
      "description": "Lista de signatários do envelope, ordenada por `signerIndex`.\n",
      "items": {
        "type": "object",
        "required": [
          "signerIndex",
          "displayName",
          "status"
        ],
        "properties": {
          "signerIndex": {
            "type": "integer",
            "description": "Posição do signatário no envelope (1-based)."
          },
          "displayName": {
            "type": "string"
          },
          "cpfCnpj": {
            "type": "string",
            "description": "CPF ou CNPJ do signatário, **mascarado** (`123.***.***-09`),\npela mesma razão da verificação por evidência.\n"
          },
          "status": {
            "$ref": "#/$defs/TransactionStatus"
          },
          "policyProfile": {
            "type": "string",
            "description": "Perfil de política aplicado ao signatário (ex.:\n`DIGITAL_CERTIFICATE`, `OTP_ONLY`).\n"
          },
          "evidenceId": {
            "type": "string",
            "description": "Identificador da evidência individual deste signatário,\npresente apenas quando a sessão foi concluída. Use com\n`GET /v1/verify/{evidenceId}` para detalhes.\n"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      }
    },
    "downloads": {
      "type": "object",
      "description": "Artefatos consolidados disponíveis para download. Apenas\npopulado para envelopes em status `COMPLETED`. Os campos\nindividuais são mutuamente exclusivos por formato do\ndocumento (PDF vs não-PDF).\n",
      "properties": {
        "combinedSignedPdf": {
          "description": "PDF combinado com todas as assinaturas digitais embutidas.\nPresente apenas quando o envelope é um PDF e todos os\nsignatários já concluíram. Pode ser omitido para envelopes\nem andamento ou para envelopes não-PDF.\n",
          "type": "object",
          "required": [
            "url",
            "filename"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri"
            },
            "filename": {
              "type": "string"
            }
          }
        },
        "consolidatedSignature": {
          "description": "Arquivo PKCS#7 / CMS detached (`.p7s`) consolidado\ncontendo todos os `SignerInfo` do envelope em um único\narquivo. Presente apenas quando o envelope é um documento\nnão-PDF assinado com certificado digital e todos os\nsignatários concluíram. Pode ser verificado com:\n\n```\nopenssl cms -verify -inform DER -in signature.p7s \\\n  -CAfile icpbrasil-roots.pem\n```\n",
          "type": "object",
          "required": [
            "url",
            "filename"
          ],
          "properties": {
            "url": {
              "type": "string",
              "format": "uri"
            },
            "filename": {
              "type": "string"
            }
          }
        }
      }
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    },
    "completedAt": {
      "type": "string",
      "format": "date-time",
      "description": "Data/hora em que o último signatário concluiu a sessão.\nPresente apenas quando o envelope está em status `COMPLETED`.\n"
    }
  },
  "$defs": {
    "EnvelopeStatus": {
      "type": "string",
      "description": "Status possíveis de um envelope.",
      "enum": [
        "CREATED",
        "ACTIVE",
        "COMPLETED",
        "CANCELLED",
        "EXPIRED"
      ]
    },
    "TransactionStatus": {
      "type": "string",
      "description": "Status possíveis de uma transação.",
      "enum": [
        "CREATED",
        "DOCUMENT_UPLOADED",
        "IN_PROGRESS",
        "COMPLETED",
        "CANCELLED",
        "EXPIRED",
        "FAILED"
      ]
    }
  }
}