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

# Reprocessar Documento

> A classificação errou o tipo, a régua mudou, ou a leitura merece outra tentativa.

### Quando usar

A classificação errou o tipo, a régua mudou, ou a leitura merece outra tentativa.

### Reprocessar não cobra de novo

A cobrança é por documento, não por tentativa.

Sem `stages`, roda o pipeline inteiro. Com um subconjunto de `CLASSIFY`, `EXTRACT` e `VALIDATE`, as etapas de fora reaproveitam a tentativa anterior. Confira `stages.executed` e `stages.reused` no resultado.

`forceType` corrige uma classificação errada. Como ele afirma o tipo, a conferência `EXPECTED_TYPE_MATCH` sai `SKIP` naquela tentativa.

### Dois limites

* Documento que um operador já decidiu responde `409`. Mande `overrideFeedback: true` para substituir a decisão pelo parecer novo.
* Cada documento aceita até 5 tentativas. Depois disso, a resposta é `429` com `Limite de reprocessamentos atingido.`

A resposta `202` traz `documentId`, `status` (`RECEIVED`) e `attempt`, a tentativa que acabou de começar.

<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/{id}/documents/{docId}/reprocess
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/{id}/documents/{docId}/reprocess:
    post:
      tags:
        - registry
      summary: Reprocessar um documento
      description: >
        Roda o pipeline de novo. Sem `stages`, roda inteiro; com um subconjunto
        de

        CLASSIFY/EXTRACT/VALIDATE, as etapas de fora reaproveitam a tentativa
        anterior.


        Duas regras que evitam surpresa: pular EXTRACT so funciona quando existe
        extracao gravada antes,

        e reexecutar EXTRACT sempre revalida. Confira stages.executed e
        stages.reused no resultado.


        `forceType` corrige uma classificacao errada; como afirma o tipo, a
        conferencia

        EXPECTED_TYPE_MATCH sai SKIP naquela tentativa.


        REPROCESSAR NAO COBRA DE NOVO: a cobranca e por documento, nao por
        tentativa.
      operationId: RegistryController_reprocessDocument
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
          description: Id do cadastro.
        - name: docId
          required: true
          in: path
          schema:
            type: string
          description: Id do documento.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReprocessRegistryDocumentDto'
            example:
              stages:
                - VALIDATE
              forceType: ALTERACAO_CONTRATUAL
      responses:
        '202':
          description: >-
            Confirmacao do reprocessamento (202), com a tentativa nova. O
            documento volta a RECEIVED.
          content:
            application/json:
              schema:
                type: object
                properties:
                  documentId:
                    type: string
                  status:
                    type: string
                    description: Sempre RECEIVED nesta resposta.
                  attempt:
                    type: integer
                    description: A tentativa que acabou de comecar.
              example:
                documentId: 6612a7f30000000000000031
                status: RECEIVED
                attempt: 2
        '400':
          description: >-
            Corpo invalido (etapa fora de CLASSIFY/EXTRACT/VALIDATE, tipo fora
            da lista, URL invalida) ou identificador fora do formato ObjectId.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 400
                message: >-
                  each value in stages must be one of the following values:
                  CLASSIFY, EXTRACT, VALIDATE
        '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: >-
            Recurso inexistente OU capacidade nao liberada para a organizacao.
            As duas coisas respondem 404 de proposito: para quem nao tem o
            modulo, a rota nao existe.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 404
                message: Documento não encontrado.
        '409':
          description: >-
            Um operador ja decidiu este documento. Mande overrideFeedback true
            para substituir a decisao pelo parecer novo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 409
                message: >-
                  Este documento já foi decidido por um operador. Reprocessar
                  vai substituir essa decisão pelo novo parecer.
        '429':
          description: O documento ja chegou ao limite de 5 tentativas.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                code: 429
                message: Limite de reprocessamentos atingido.
        '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 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 reprocessar o documento.
      security:
        - authorization: []
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: >
            curl --request POST
            'https://gyra-core.gyramais.com.br/v1/registry/6612a7f30000000000000001/documents/6612a7f30000000000000001/reprocess'
            \
              --header 'Authorization: Bearer <token>' \
              --header 'Content-Type: application/json' \
              --data '{"stages":["VALIDATE"],"forceType":"ALTERACAO_CONTRATUAL"}'
        - lang: JavaScript
          label: Node
          source: >
            const resposta = await
            fetch("https://gyra-core.gyramais.com.br/v1/registry/6612a7f30000000000000001/documents/6612a7f30000000000000001/reprocess",
            {
              method: "POST",
              headers: {
                Authorization: `Bearer ${token}`,
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                "stages": [
                  "VALIDATE"
                ],
                "forceType": "ALTERACAO_CONTRATUAL"
              }),
            });


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

            resposta = requests.post(
                "https://gyra-core.gyramais.com.br/v1/registry/6612a7f30000000000000001/documents/6612a7f30000000000000001/reprocess",
                headers={"Authorization": f"Bearer {token}"},
                json={
                    "stages": [
                        "VALIDATE"
                    ],
                    "forceType": "ALTERACAO_CONTRATUAL"
                },
            )

            dados = resposta.json()
components:
  schemas:
    ReprocessRegistryDocumentDto:
      type: object
      properties:
        forceType:
          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: >-
            Força o tipo documental (corrige uma classificação errada) e, com
            isso, dispensa a etapa de classificação.
        stages:
          type: array
          example:
            - VALIDATE
          description: >-
            Etapas a reexecutar. Omitir significa reprocessar tudo (classificar,
            extrair e validar). Cada etapa de fora da lista é pulada e o
            resultado da tentativa anterior é reaproveitado, o que aparece no
            resultado do documento em stages.reused. Pular EXTRACT exige
            tentativa anterior com extração gravada: sem ela a etapa roda
            normalmente, nunca devolvendo resultado vazio. Reexecutar EXTRACT
            força a revalidação mesmo que VALIDATE não esteja na lista: parecer
            antigo sobre extração nova seria mentira.
          items:
            type: string
            enum:
              - CLASSIFY
              - EXTRACT
              - VALIDATE
        callbackUrl:
          type: string
          description: Webhook chamado quando o reprocessamento terminar.
        overrideFeedback:
          type: boolean
          description: >-
            Confirma a substituição da decisão que um operador já tomou sobre o
            parecer. Sem ela, documento já decidido recusa o reprocessamento com
            409: a decisão humana não pode ser apagada em silêncio pelo parecer
            da tentativa nova.
    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.
  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.