> ## Documentation Index
> Fetch the complete documentation index at: https://developers.gyramais.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> A GYRA+ tem um servidor MCP oficial: https://mcp.gyramais.com.br/mcp. A autenticação é o login do próprio usuário na plataforma, não uma credencial separada. Instalação em https://developers.gyramais.com.br/mcp/instalacao.
> Prefira as tools do MCP a montar chamadas HTTP na mão quando o usuário já tem o conector ligado.
> Para analisar crédito de um CNPJ ou CPF, use create_report_v2 e assine um webhook em vez de fazer polling.
> Para ler um documento (contrato social, comprovante de residência, imposto de renda, balanço), use validate_document: a entrada é um arquivo só e a plataforma reconhece o tipo sozinha.
> Para pedir documentos ao cliente final, use create_collection com o slug de um modelo obtido em list_collection_templates.
> Documento (CNPJ/CPF) é dado pessoal: não o repita em log nem o envie a serviços de terceiros.

# Validar Documento

> Você tem um arquivo e quer o parecer agora.

### Quando usar

Você tem um arquivo e quer o parecer agora. Uma chamada, um arquivo, e o resultado volta na resposta.

### A entrada é única

Você **não diz** que documento está mandando. A plataforma identifica entre os [25 tipos](/onboarding/tipos-de-documento) e o objeto `extraction` da resposta traz os campos **daquele tipo**. O mapa completo está em [Formatos de retorno](/api-reference/onboarding/formatos-de-retorno).

`expectedType` não força nada: diz o que você **pediu**, e a plataforma confronta com o que leu. É o campo que pega o arquivo legítimo enviado no lugar errado. Já `typeHint` **afirma** o tipo e pula a classificação.

### Trate o 202 como caminho normal

Documento longo ou digitalizado passa dos 55 segundos. Continue por [Status do documento](/api-reference/registry/get-registry-documents-docid-status), ou assine o webhook `registry.document.assessed`.

### Leia `effectiveVerdict`

`assessment.verdict` é o parecer da IA, que nunca é reescrito. Quando um operador discorda, a decisão dele entra em `feedbackVerdict` e **`effectiveVerdict` passa a ser ela**.

<Note>
  Contexto e vocabulário em [Análise documental](/onboarding/analise-documental). Autenticação, versionamento e capacidades em [Visão geral da API](/api-reference/onboarding/visao-geral).
</Note>


## OpenAPI

````yaml post /v1/registry/validate-document
openapi: 3.0.0
info:
  title: GYRA+ API - MCP Server
  description: >-
    API da Gyra+ para analise de credito. Spec curada para uso com agentes AI
    via MCP.
  version: '1.0'
  contact: {}
servers:
  - url: https://gyra-core.gyramais.com.br
    description: Producao
security: []
paths:
  /v1/registry/validate-document:
    post:
      tags:
        - registry
      summary: Validar um documento e receber o parecer
      description: >
        Manda UM arquivo (PDF, JPG ou PNG, ate 15MB) e recebe classificacao,
        campos extraidos, verificacoes e parecer.


        A ENTRADA E UNICA: voce nao diz que documento e. A plataforma reconhece
        sozinha 24 tipos

        (contrato social, alteracao contratual, estatuto, ata de assembleia,
        requerimento de

        empresario, procuracao PJ/PF, certidao da Junta, QSA, IRPJ/ECF,
        declaracao de faturamento,

        extrato bancario, certidao PGFN, FGTS, CADIN federal/estadual, Simples
        Nacional, eSocial,

        documento de identidade, comprovante de residencia, DIRPF, comprovante
        de renda,

        certidao PF, estado civil). O balanco (DEMONSTRACOES_FINANCEIRAS) e o
        25o tipo com leitura

        propria, mas NAO e reconhecido sozinho: mande typeHint
        DEMONSTRACOES_FINANCEIRAS.


        O FORMATO DA SAIDA DEPENDE DO TIPO IDENTIFICADO: o objeto `extraction`
        traz os campos

        daquele tipo. Todo campo folha vem como { value, confidence, page };
        campo ausente vem

        com value null e confidence 0, nunca inventado.


        Responde 200 com o resultado quando o pipeline fecha dentro de
        `waitSeconds`, ou 202 com

        { documentId, statusUrl } quando passa. No 202, continue com
        get_document_status.


        Use `expectedType` para conferir se veio o documento CERTO: a
        classificacao roda normal e o

        tipo lido e confrontado com o pedido. E o que pega o arquivo legitimo
        enviado no campo errado.

        Use `typeHint` so quando a origem ja garante o tipo: ele PULA a
        classificacao.


        O arquivo e arquivado no cadastro de `expectedDocument`, criando o
        cadastro se nao existir.
      operationId: RegistryController_validateDocument
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
                - expectedDocument
              properties:
                file:
                  type: string
                  format: binary
                  description: >-
                    O arquivo, em multipart/form-data. PDF, JPG ou PNG, ate
                    15MB. Acima disso use presign_registry_document +
                    confirm_registry_document.
                expectedDocument:
                  type: string
                  description: >-
                    CNPJ ou CPF da jornada, com ou sem mascara. Obrigatorio: e o
                    dono do cadastro onde o documento sera arquivado.
                expectedName:
                  type: string
                  description: >-
                    Razao social ou nome da jornada. Alimenta a verificacao
                    EXPECTED_NAME_MATCH.
                waitSeconds:
                  type: integer
                  minimum: 5
                  maximum: 55
                  description: Espera maxima pela resposta sincrona, de 5 a 55. Padrao 45.
                typeHint:
                  type: string
                  enum:
                    - CONTRATO_SOCIAL
                    - ALTERACAO_CONTRATUAL
                    - ESTATUTO_SOCIAL
                    - REQUERIMENTO_EMPRESARIO
                    - PROCURACAO_PJ
                    - IRPJ_ECF
                    - DECLARACAO_FATURAMENTO
                    - CERTIDAO_JUNTA
                    - ATA_ASSEMBLEIA
                    - DOC_IDENTIDADE
                    - COMPROVANTE_RESIDENCIA
                    - DIRPF
                    - COMPROVANTE_RENDA
                    - CERTIDAO_PF
                    - PROCURACAO_PF
                    - FORA_DE_ESCOPO
                    - NAO_IDENTIFICADO
                    - CERTIDAO_PGFN_PJ
                    - CERTIDAO_FGTS
                    - CADIN_FEDERAL
                    - CADIN_ESTADUAL
                    - CERTIDAO_QSA
                    - CERTIFICADO_SIMPLES_NACIONAL
                    - ESOCIAL_PJ
                    - COMPROVACAO_ESTADO_CIVIL
                    - DEMONSTRACOES_FINANCEIRAS
                    - EXTRATO_BANCARIO
                  description: >-
                    AFIRMA o tipo do arquivo: o pipeline adota e pula a
                    classificacao. So use quando a origem ja garante o tipo.
                expectedType:
                  type: string
                  enum:
                    - CONTRATO_SOCIAL
                    - ALTERACAO_CONTRATUAL
                    - ESTATUTO_SOCIAL
                    - REQUERIMENTO_EMPRESARIO
                    - PROCURACAO_PJ
                    - IRPJ_ECF
                    - DECLARACAO_FATURAMENTO
                    - CERTIDAO_JUNTA
                    - ATA_ASSEMBLEIA
                    - DOC_IDENTIDADE
                    - COMPROVANTE_RESIDENCIA
                    - DIRPF
                    - COMPROVANTE_RENDA
                    - CERTIDAO_PF
                    - PROCURACAO_PF
                    - FORA_DE_ESCOPO
                    - NAO_IDENTIFICADO
                    - CERTIDAO_PGFN_PJ
                    - CERTIDAO_FGTS
                    - CADIN_FEDERAL
                    - CADIN_ESTADUAL
                    - CERTIDAO_QSA
                    - CERTIFICADO_SIMPLES_NACIONAL
                    - ESOCIAL_PJ
                    - COMPROVACAO_ESTADO_CIVIL
                    - DEMONSTRACOES_FINANCEIRAS
                    - EXTRATO_BANCARIO
                  description: >-
                    PEDE um tipo: a classificacao roda e o tipo lido e
                    confrontado (verificacao EXPECTED_TYPE_MATCH). E o campo que
                    pega documento trocado.
      responses:
        '200':
          description: >-
            Resultado completo (200) com type, extraction, validation.checks[] e
            assessment; ou { documentId, statusUrl } (202) quando ainda
            processa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistryDocumentResult'
              example:
                documentId: 6612a7f30000000000000031
                registryId: 6612a7f30000000000000001
                type: CONTRATO_SOCIAL
                expectedType: CONTRATO_SOCIAL
                expectedTypes: []
                status: VALIDATED
                version: 2
                isCurrent: true
                classification:
                  type: CONTRATO_SOCIAL
                  confidence: 0.94
                  alternatives:
                    - type: ALTERACAO_CONTRATUAL
                      confidence: 0.21
                ambiguous: false
                statusReason: null
                stages:
                  executed:
                    - CLASSIFY
                    - EXTRACT
                    - VALIDATE
                  reused: []
                extraction:
                  cnpj:
                    value: '11444777000161'
                    confidence: 0.97
                    page: 1
                  companyName:
                    value: AURORA COMPONENTES INDUSTRIAIS LTDA
                    confidence: 0.96
                    page: 1
                  signatureDate:
                    value: '2021-04-30T00:00:00.000Z'
                    confidence: 0.93
                    page: 8
                  capitalAmount:
                    value: 1200000
                    confidence: 0.95
                    page: 3
                  capitalCurrency:
                    value: BRL
                    confidence: 0.99
                    page: 3
                  quotaUnitValue:
                    value: null
                    confidence: 0
                    page: null
                  partners:
                    - name:
                        value: CARLOS EDUARDO SILVA
                        confidence: 0.96
                        page: 1
                      document:
                        value: '52998224725'
                        confidence: 0.95
                        page: 1
                      documentType:
                        value: CPF
                        confidence: 0.99
                        page: 1
                      sharePercent:
                        value: 60
                        confidence: 0.95
                        page: 3
                      isAdministrator:
                        value: true
                        confidence: 0.92
                        page: 4
                  representation:
                    regime:
                      value: ISOLADA
                      confidence: 0.95
                      page: 4
                    signersRequired:
                      value: 1
                      confidence: 0.95
                      page: 4
                    clauseNumber:
                      value: CLÁUSULA 8ª
                      confidence: 0.94
                      page: 4
                    clauseExcerpt:
                      value: >-
                        A administração da sociedade caberá isoladamente ao
                        sócio CARLOS EDUARDO SILVA...
                      confidence: 0.94
                      page: 4
                  certification:
                    certificationKind:
                      value: ORGAO_EMISSOR
                      confidence: 0.97
                      page: 1
                    certificationDetail:
                      value: Chancela digital da Junta Comercial
                      confidence: 0.96
                      page: 1
                    verificationCode:
                      value: A1B2C3D4E5
                      confidence: 0.98
                      page: 1
                fieldConfidences:
                  cnpj: 0.97
                  companyName: 0.96
                  capitalAmount: 0.95
                validation:
                  checks:
                    - code: EXPECTED_DOCUMENT_MATCH
                      result: PASS
                      message: O CNPJ do documento é o mesmo da análise.
                      evidence:
                        page: 1
                        excerpt: CNPJ 11.444.777/0001-61
                      source: DETERMINISTIC
                    - code: QSA_SHARE_SUM
                      result: WARN
                      message: >-
                        A soma das participações fecha 98%, fora da tolerância
                        de 0,5 ponto.
                      evidence:
                        page: 3
                        excerpt: CARLOS EDUARDO SILVA 60% ... MARIA HELENA SOUZA 38%
                      source: DETERMINISTIC
                  reconciliation:
                    qsaMatched: true
                assessment:
                  verdict: VALIDO
                  score: 0.91
                  justification: >-
                    Documento íntegro, titularidade confirmada e registro na
                    Junta conferido. A soma das quotas ficou 2 pontos abaixo de
                    100%, o que é ressalva e não impedimento.
                  evidences: []
                  ruleSetVersion: org-v7
                  contentHash: 9f2b7c1e4a...
                  feedbackVerdict: null
                  feedbackComment: null
                  feedbackAt: null
                  feedbackUserId: null
                  effectiveVerdict: VALIDO
                  decidedByOperator: false
                processedAt: '2026-09-05T13:07:44.000Z'
                attempt: 1
        '202':
          description: >-
            O pipeline nao fechou dentro de `waitSeconds`. `statusUrl` e um
            caminho relativo, sem o prefixo de versao: continue por GET nele (ou
            em /v1/registry/documents/{docId}/status), ou assine o webhook
            `registry.document.assessed` e pare de fazer polling.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistryValidateAccepted'
              example:
                documentId: 6612a7f30000000000000031
                statusUrl: /registry/documents/6612a7f30000000000000031/status
        '400':
          description: >-
            Corpo invalido, arquivo ausente, tipo de arquivo fora de PDF/JPG/PNG
            ou conteudo que nao confere com o tipo declarado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 400
                message: O arquivo do documento é obrigatório (campo "file").
        '401':
          description: >-
            Token ausente, expirado ou invalido. Gere outro em POST
            /auth/authenticate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 401
                message: Token de acesso inválido.
        '403':
          description: O usuario autenticado nao tem a permissao exigida pela rota.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 403
                message: Você não tem permissão para acessar este recurso.
        '404':
          description: >-
            O modulo Onboarding nao esta liberado para a organizacao: para ela,
            a rota nao existe.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 404
                message: Recurso não encontrado.
        '413':
          description: >-
            Arquivo acima de 15MB. Para arquivos maiores, use o envio por URL
            assinada (presign + confirmacao).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 413
                message: File too large
        '500':
          description: >-
            Falha nossa. Tente de novo; se persistir, acione o suporte com o
            horario da chamada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 500
                message: Internal server error
        '502':
          description: >-
            O armazenamento ou o servico de cadastro nao respondeu. Tente de
            novo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 502
                message: Não foi possível iniciar a validação do documento.
      security:
        - authorization: []
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: >
            curl --request POST
            'https://gyra-core.gyramais.com.br/v1/registry/validate-document' \
              --header 'Authorization: Bearer <token>' \
              --form 'file=@"/caminho/contrato-social.pdf"' \
              --form 'expectedDocument="11444777000161"'
        - lang: JavaScript
          label: Node
          source: >
            import fs from "node:fs";


            const form = new FormData();

            form.append("file", new
            Blob([fs.readFileSync("/caminho/contrato-social.pdf")]),
            "contrato-social.pdf");

            form.append("expectedDocument", "11444777000161");


            const resposta = await
            fetch("https://gyra-core.gyramais.com.br/v1/registry/validate-document",
            {
              method: "POST",
              headers: { Authorization: `Bearer ${token}` },
              body: form,
            });


            const dados = await resposta.json();
        - lang: Python
          label: Python
          source: |
            import requests

            with open("/caminho/contrato-social.pdf", "rb") as arquivo:
                resposta = requests.post(
                    "https://gyra-core.gyramais.com.br/v1/registry/validate-document",
                    headers={"Authorization": f"Bearer {token}"},
                    files={"file": arquivo},
                    data={"expectedDocument": "11444777000161"},
                )

            dados = resposta.json()
components:
  schemas:
    RegistryDocumentResult:
      type: object
      description: Resultado completo de um documento, da classificacao ao parecer.
      properties:
        documentId:
          type: string
        registryId:
          type: string
        type:
          type: string
          enum:
            - CONTRATO_SOCIAL
            - ALTERACAO_CONTRATUAL
            - ESTATUTO_SOCIAL
            - REQUERIMENTO_EMPRESARIO
            - ATA_ASSEMBLEIA
            - PROCURACAO_PJ
            - CERTIDAO_JUNTA
            - CERTIDAO_QSA
            - IRPJ_ECF
            - DECLARACAO_FATURAMENTO
            - CERTIFICADO_SIMPLES_NACIONAL
            - DEMONSTRACOES_FINANCEIRAS
            - EXTRATO_BANCARIO
            - CERTIDAO_PGFN_PJ
            - CERTIDAO_FGTS
            - CADIN_FEDERAL
            - CADIN_ESTADUAL
            - ESOCIAL_PJ
            - DOC_IDENTIDADE
            - COMPROVANTE_RESIDENCIA
            - DIRPF
            - COMPROVANTE_RENDA
            - CERTIDAO_PF
            - PROCURACAO_PF
            - COMPROVACAO_ESTADO_CIVIL
            - FORA_DE_ESCOPO
            - NAO_IDENTIFICADO
          description: O tipo LIDO pela classificacao.
        expectedType:
          type: string
          nullable: true
          enum:
            - CONTRATO_SOCIAL
            - ALTERACAO_CONTRATUAL
            - ESTATUTO_SOCIAL
            - REQUERIMENTO_EMPRESARIO
            - ATA_ASSEMBLEIA
            - PROCURACAO_PJ
            - CERTIDAO_JUNTA
            - CERTIDAO_QSA
            - IRPJ_ECF
            - DECLARACAO_FATURAMENTO
            - CERTIFICADO_SIMPLES_NACIONAL
            - DEMONSTRACOES_FINANCEIRAS
            - EXTRATO_BANCARIO
            - CERTIDAO_PGFN_PJ
            - CERTIDAO_FGTS
            - CADIN_FEDERAL
            - CADIN_ESTADUAL
            - ESOCIAL_PJ
            - DOC_IDENTIDADE
            - COMPROVANTE_RESIDENCIA
            - DIRPF
            - COMPROVANTE_RENDA
            - CERTIDAO_PF
            - PROCURACAO_PF
            - COMPROVACAO_ESTADO_CIVIL
            - FORA_DE_ESCOPO
            - NAO_IDENTIFICADO
            - null
          description: O tipo PEDIDO no envio. Sustenta a verificacao EXPECTED_TYPE_MATCH.
        expectedTypes:
          type: array
          items:
            type: string
            enum:
              - CONTRATO_SOCIAL
              - ALTERACAO_CONTRATUAL
              - ESTATUTO_SOCIAL
              - REQUERIMENTO_EMPRESARIO
              - ATA_ASSEMBLEIA
              - PROCURACAO_PJ
              - CERTIDAO_JUNTA
              - CERTIDAO_QSA
              - IRPJ_ECF
              - DECLARACAO_FATURAMENTO
              - CERTIFICADO_SIMPLES_NACIONAL
              - DEMONSTRACOES_FINANCEIRAS
              - EXTRATO_BANCARIO
              - CERTIDAO_PGFN_PJ
              - CERTIDAO_FGTS
              - CADIN_FEDERAL
              - CADIN_ESTADUAL
              - ESOCIAL_PJ
              - DOC_IDENTIDADE
              - COMPROVANTE_RESIDENCIA
              - DIRPF
              - COMPROVANTE_RENDA
              - CERTIDAO_PF
              - PROCURACAO_PF
              - COMPROVACAO_ESTADO_CIVIL
              - FORA_DE_ESCOPO
              - NAO_IDENTIFICADO
          description: O CONJUNTO pedido, quando o item nasceu de um requisito societario.
        status:
          type: string
          enum:
            - RECEIVED
            - CLASSIFYING
            - CLASSIFIED
            - EXTRACTING
            - EXTRACTED
            - VALIDATING
            - VALIDATED
            - FAILED
            - MANUAL_REVIEW
            - OUT_OF_SCOPE
            - REJECTED_QUALITY
        version:
          type: integer
        isCurrent:
          type: boolean
        classification:
          type: object
          nullable: true
          description: O que a classificacao concluiu, com as alternativas consideradas.
          properties:
            type:
              type: string
              enum:
                - CONTRATO_SOCIAL
                - ALTERACAO_CONTRATUAL
                - ESTATUTO_SOCIAL
                - REQUERIMENTO_EMPRESARIO
                - ATA_ASSEMBLEIA
                - PROCURACAO_PJ
                - CERTIDAO_JUNTA
                - CERTIDAO_QSA
                - IRPJ_ECF
                - DECLARACAO_FATURAMENTO
                - CERTIFICADO_SIMPLES_NACIONAL
                - DEMONSTRACOES_FINANCEIRAS
                - EXTRATO_BANCARIO
                - CERTIDAO_PGFN_PJ
                - CERTIDAO_FGTS
                - CADIN_FEDERAL
                - CADIN_ESTADUAL
                - ESOCIAL_PJ
                - DOC_IDENTIDADE
                - COMPROVANTE_RESIDENCIA
                - DIRPF
                - COMPROVANTE_RENDA
                - CERTIDAO_PF
                - PROCURACAO_PF
                - COMPROVACAO_ESTADO_CIVIL
                - FORA_DE_ESCOPO
                - NAO_IDENTIFICADO
            confidence:
              type: number
              description: 0 a 1.
            alternatives:
              type: array
              items:
                type: object
                properties:
                  type:
                    type: string
                    enum:
                      - CONTRATO_SOCIAL
                      - ALTERACAO_CONTRATUAL
                      - ESTATUTO_SOCIAL
                      - REQUERIMENTO_EMPRESARIO
                      - ATA_ASSEMBLEIA
                      - PROCURACAO_PJ
                      - CERTIDAO_JUNTA
                      - CERTIDAO_QSA
                      - IRPJ_ECF
                      - DECLARACAO_FATURAMENTO
                      - CERTIFICADO_SIMPLES_NACIONAL
                      - DEMONSTRACOES_FINANCEIRAS
                      - EXTRATO_BANCARIO
                      - CERTIDAO_PGFN_PJ
                      - CERTIDAO_FGTS
                      - CADIN_FEDERAL
                      - CADIN_ESTADUAL
                      - ESOCIAL_PJ
                      - DOC_IDENTIDADE
                      - COMPROVANTE_RESIDENCIA
                      - DIRPF
                      - COMPROVANTE_RENDA
                      - CERTIDAO_PF
                      - PROCURACAO_PF
                      - COMPROVACAO_ESTADO_CIVIL
                      - FORA_DE_ESCOPO
                      - NAO_IDENTIFICADO
                  confidence:
                    type: number
        ambiguous:
          type: boolean
          description: true quando outra alternativa passou de 0,35 de confianca.
        statusReason:
          type: string
          nullable: true
          description: Por que o documento parou num terminal que nao e falha tecnica.
        stages:
          type: object
          nullable: true
          description: O que rodou nesta tentativa e o que veio reaproveitado.
          properties:
            executed:
              type: array
              items:
                type: string
                enum:
                  - CLASSIFY
                  - EXTRACT
                  - VALIDATE
            reused:
              type: array
              items:
                type: object
                properties:
                  stage:
                    type: string
                    enum:
                      - CLASSIFY
                      - EXTRACT
                      - VALIDATE
                  fromAttempt:
                    type: integer
        extraction:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Os campos lidos. A FORMA DEPENDE DO TIPO identificado: cada um dos
            25 tipos tem o seu conjunto, documentado campo a campo em
            https://developers.gyramais.com.br/api-reference/kyc/formatos-de-retorno.
            Todo campo folha vem como { value, confidence, page }; campo ausente
            vem com value null e confidence 0.
        fieldConfidences:
          type: object
          nullable: true
          additionalProperties:
            type: number
          description: Confianca por caminho de campo.
        validation:
          type: object
          nullable: true
          properties:
            checks:
              type: array
              items:
                $ref: '#/components/schemas/RegistryCheck'
            reconciliation:
              type: object
              nullable: true
              additionalProperties: true
              description: Conferencia contra a fonte oficial.
        assessment:
          type: object
          nullable: true
          properties:
            verdict:
              type: string
              enum:
                - VALIDO
                - INVALIDO
                - INCONCLUSIVO
                - ANALISE_MANUAL
              description: >-
                O parecer da IA. NAO e o veredito que vale: use
                effectiveVerdict.
            score:
              type: number
              description: 0 a 1.
            justification:
              type: string
              description: Por que, em portugues.
            evidences:
              type: array
              items:
                type: object
                properties:
                  page:
                    type: integer
                    nullable: true
                  excerpt:
                    type: string
                    nullable: true
                  checkCode:
                    type: string
            ruleSetVersion:
              type: string
              description: Qual versao da regua julgou este documento.
            contentHash:
              type: string
              nullable: true
              description: Selo do parecer, conferivel na rota de integridade.
            feedbackVerdict:
              type: string
              nullable: true
              enum:
                - VALIDO
                - INVALIDO
                - INCONCLUSIVO
                - ANALISE_MANUAL
                - null
              description: A decisao que um operador registrou, quando houve.
            feedbackComment:
              type: string
              nullable: true
            feedbackAt:
              type: string
              nullable: true
              format: date-time
            feedbackUserId:
              type: string
              nullable: true
            effectiveVerdict:
              type: string
              nullable: true
              enum:
                - VALIDO
                - INVALIDO
                - INCONCLUSIVO
                - ANALISE_MANUAL
                - null
              description: >-
                O VEREDITO QUE VALE HOJE (feedbackVerdict ?? verdict). Leia
                este.
            decidedByOperator:
              type: boolean
              description: true quando quem decidiu foi uma pessoa, e nao o pipeline.
        processedAt:
          type: string
          nullable: true
          format: date-time
        attempt:
          type: integer
    RegistryValidateAccepted:
      type: object
      description: 'Resposta 202: o pipeline nao fechou dentro de waitSeconds.'
      properties:
        documentId:
          type: string
        statusUrl:
          type: string
          description: Endereco para continuar por polling ate o status ser terminal.
    ApiError:
      type: object
      description: >-
        Formato unico de erro da API. Nao faca match exato da mensagem: use o
        code.
      properties:
        code:
          type: integer
          description: Codigo HTTP.
        message:
          type: string
          description: >-
            Mensagem em portugues. Em erro de validacao, traz TODAS as falhas
            concatenadas por virgula.
    RegistryCheck:
      type: object
      properties:
        code:
          type: string
          description: 'Codigo da verificacao no catalogo (ex.: EXPECTED_DOCUMENT_MATCH).'
        result:
          type: string
          enum:
            - PASS
            - WARN
            - FAIL
            - SKIP
          description: 'WARN e ressalva: aparece no parecer e nao reprova sozinha.'
        message:
          type: string
          description: Frase em portugues explicando o resultado.
        evidence:
          type: object
          nullable: true
          description: Onde no documento a verificacao se apoiou.
          properties:
            page:
              type: integer
              nullable: true
            excerpt:
              type: string
              nullable: true
            checkCode:
              type: string
        details:
          type: array
          items:
            type: string
          description: Indicios individuais, quando a verificacao produz varios.
        source:
          type: string
          enum:
            - DETERMINISTIC
            - RECONCILIATION
            - LLM
          description: Quem produziu o resultado.
        rfi:
          type: integer
  securitySchemes:
    authorization:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Enter JWT token

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.