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

# Análise detalhada

> Retorna o resultado detalhado da análise: lista de checks com status, drivers de risco e sumário.
Disponível apenas após o run completar.

Requer escopo `runs:read`.




## OpenAPI

````yaml GET /api/v1/bureau/runs/{run_id}/analysis
openapi: 3.0.3
info:
  title: kycert API
  version: '2026-06-03'
  description: >
    API KYC/AML para corretoras de câmbio autorizadas pelo Banco Central do
    Brasil.

    Permite rodar verificações de bureau em CPF ou CNPJ e receber o resultado
    via webhook.


    **Fluxo principal:**

    ```

    POST /runs → 202 (run_id) → [bureau processa 5–30s] → webhook entregue →
    agir

    ```
  contact:
    name: kycert
    url: https://kycert.com.br
  license:
    name: Proprietário
    url: https://kycert.com.br
servers:
  - url: https://admin.kycert.com.br
    description: Produção (sk_live_...)
  - url: https://admin.kycert.com.br
    description: Sandbox (sk_test_...)
security:
  - ApiKeyHeader: []
  - BearerToken: []
tags:
  - name: Runs
    description: Execução de bureau para CPF ou CNPJ
  - name: Customers
    description: Gestão de clientes do tenant
paths:
  /api/v1/bureau/runs/{run_id}/analysis:
    get:
      tags:
        - Runs
      summary: Obter análise completa de um run
      description: >
        Retorna o resultado detalhado da análise: lista de checks com status,
        drivers de risco e sumário.

        Disponível apenas após o run completar.


        Requer escopo `runs:read`.
      operationId: getRunAnalysis
      parameters:
        - name: run_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: x-kycert-api-version
          in: header
          required: false
          schema:
            type: string
            example: '2026-06-03'
      responses:
        '200':
          description: Análise completa do run
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
            X-Kycert-Api-Version:
              schema:
                type: string
            X-RateLimit-Limit:
              schema:
                type: integer
            X-RateLimit-Remaining:
              schema:
                type: integer
            X-RateLimit-Reset:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunAnalysis'
              example:
                meta:
                  schema_version: v1
                  generated_at: '2026-06-12T14:00:18Z'
                  run_id: 550e8400-e29b-41d4-a716-446655440000
                  external_id: null
                metadata: null
                analysis:
                  schema_version: v1
                  built_at: '2026-06-12T14:00:17Z'
                  decision: rejected
                  operative_decision: rejected
                  confidence: full
                  findings:
                    - check_id: cnpj_sit_sanctions
                      source_id: compliance_pj
                      source_label: Compliance Regulatório PJ
                      severity: high
                      title: Empresa em lista de sanções regulatórias
                      detail: CNPJ consta em lista de sanções com vigência ativa.
                  blocked_by:
                    - tier: 1
                      check_id: cnpj_sit_sanctions
                      source_id: compliance_pj
                      check_label: Sanções Regulatórias PJ
                      source_label: Compliance Regulatório PJ
                  source_groups:
                    - id: compliance
                      label: Compliance e Sanções
                      status: attention
                      sources_count: 1
                      findings_count: 1
                      sources:
                        - source_id: compliance_pj
                          label: Compliance Regulatório PJ
                          status: INVALID
                          duration_ms: 380
                          summary_label: Sanção ativa detectada
                  review_reasons: []
                  risk_dimensions:
                    - id: sanctions
                      label: Sanções
                      band: alto
                      score: 100
                      detail: >-
                        Empresa identificada em lista de sanções regulatórias
                        ativas.
                  subject_profile:
                    type: pj
                    fields:
                      - label: Razão Social
                        value: Empresa Exemplo Comércio Ltda.
                      - label: Situação Cadastral
                        value: Ativa
                    cnaes:
                      - 4511-1/01
                  incomplete_sources: []
                livemode: true
        '202':
          description: Run ainda em execução
          headers:
            X-Request-Id:
              schema:
                type: string
                format: uuid
            X-RateLimit-Remaining:
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                properties:
                  run_id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                      - running
                  message:
                    type: string
                  livemode:
                    type: boolean
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    RunAnalysis:
      type: object
      description: Resposta do endpoint GET /bureau/runs/{id}/analysis
      properties:
        meta:
          type: object
          description: Metadados da análise gerada
          properties:
            schema_version:
              type: string
              enum:
                - v1
              description: Versão do schema da análise. Sempre "v1".
            generated_at:
              type: string
              format: date-time
              description: Momento em que a análise foi gerada (ISO 8601).
            run_id:
              type: string
              format: uuid
              description: UUID do bureau run ao qual esta análise pertence.
            external_id:
              type: string
              nullable: true
              description: >-
                Echo do external_id enviado no POST /bureau/runs. null se não
                foi enviado.
        metadata:
          type: object
          nullable: true
          description: >-
            Echo do metadata enviado no POST /bureau/runs. null se não foi
            enviado.
        analysis:
          type: object
          description: Análise KYC/AML calculada pelo motor bureau.
          properties:
            schema_version:
              type: string
              enum:
                - v1
              description: Versão do schema interno da análise.
            built_at:
              type: string
              format: date-time
              nullable: true
              description: Momento em que a análise foi construída.
            decision:
              type: string
              enum:
                - approved
                - rejected
                - review
              description: >
                Decisão de negócio calculada pelo motor:

                - approved — nenhuma fonte crítica ou importante retornou
                irregularidade

                - rejected — fonte crítica bloqueante ou risco acima do limiar

                - review — fonte importante com problema, aguarda revisão do
                analista
            operative_decision:
              type: string
              enum:
                - approved
                - rejected
                - hold
              description: >
                Decisão operacional do motor. Diverge de decision quando fontes
                críticas (tier 1) falharam por erro técnico:

                - hold — fontes críticas incompletas, resultado incerto (ver
                incomplete_sources)

                - rejected — fonte crítica retornou INVALID com bloqueio

                - approved — todas as fontes críticas concluíram sem restrição
            confidence:
              type: string
              enum:
                - full
                - conditional
              description: >
                - full — todas as fontes do template responderam

                - conditional — uma ou mais fontes não concluíram (ver
                incomplete_sources)
            findings:
              type: array
              description: >-
                Lista de achados que requerem atenção do analista ou do
                integrador.
              items:
                type: object
                properties:
                  check_id:
                    type: string
                    description: Identificador do check que gerou o achado.
                  source_id:
                    type: string
                    description: Identificador da fonte de dados.
                  source_label:
                    type: string
                    description: Nome legível da fonte de dados.
                  severity:
                    type: string
                    enum:
                      - high
                      - medium
                      - low
                    description: |
                      Severidade do achado:
                      - high — achado crítico, tipicamente causa rejeição
                      - medium — achado importante, pode gerar revisão
                      - low — informacional
                  title:
                    type: string
                    description: Título resumido do achado em português.
                  detail:
                    type: string
                    nullable: true
                    description: >-
                      Detalhamento adicional do achado. null quando não
                      disponível.
            blocked_by:
              type: array
              description: >-
                Fontes críticas que ativaram short-circuit e bloquearam o run.
                Vazio quando decision não é rejected por short-circuit.
              items:
                type: object
                properties:
                  tier:
                    type: integer
                    description: >-
                      Nível de criticidade da fonte (1 = crítica, 2 =
                      importante).
                  check_id:
                    type: string
                    description: Identificador do check bloqueante.
                  source_id:
                    type: string
                    description: Identificador da fonte bloqueante.
                  check_label:
                    type: string
                    description: Nome legível do check bloqueante.
                  source_label:
                    type: string
                    description: Nome legível da fonte bloqueante.
            source_groups:
              type: array
              description: Fontes agrupadas por categoria para exibição em relatório.
              items:
                type: object
                properties:
                  id:
                    type: string
                    description: Identificador do grupo.
                  label:
                    type: string
                    description: Nome legível do grupo.
                  status:
                    type: string
                    enum:
                      - ok
                      - attention
                      - incomplete
                    description: |
                      - ok — todas as fontes do grupo concluíram sem achados
                      - attention — há achados em fontes deste grupo
                      - incomplete — uma ou mais fontes do grupo não concluíram
                  sources_count:
                    type: integer
                    description: Número de fontes no grupo.
                  findings_count:
                    type: integer
                    description: Número de achados provenientes de fontes deste grupo.
                  sources:
                    type: array
                    description: Fontes individuais dentro do grupo.
                    items:
                      type: object
                      properties:
                        source_id:
                          type: string
                          description: Identificador da fonte.
                        label:
                          type: string
                          description: Nome legível da fonte.
                        status:
                          type: string
                          description: >-
                            Status da consulta nesta fonte (VALID, INVALID,
                            NO_DATA, ERROR).
                        duration_ms:
                          type: integer
                          nullable: true
                          description: >-
                            Duração da consulta em milissegundos. null se não
                            disponível.
                        summary_label:
                          type: string
                          description: Resumo do resultado em texto legível.
            review_reasons:
              type: array
              description: >-
                Fontes importantes com problema que motivaram decision review.
                Vazio quando decision não é review.
              items:
                type: object
                properties:
                  check_id:
                    type: string
                  check_label:
                    type: string
                  source_id:
                    type: string
                  source_label:
                    type: string
            risk_dimensions:
              type: array
              description: >-
                Dimensões de risco calculadas pelo motor (ex. sanções, PEP,
                histórico financeiro).
              items:
                type: object
                properties:
                  id:
                    type: string
                    description: Identificador da dimensão de risco.
                  label:
                    type: string
                    description: Nome legível da dimensão.
                  band:
                    type: string
                    nullable: true
                    enum:
                      - baixo
                      - medio
                      - alto
                    description: Faixa de risco desta dimensão. null quando não calculável.
                  score:
                    type: integer
                    nullable: true
                    description: >-
                      Score numérico 0-100 desta dimensão. null quando não
                      calculável.
                  detail:
                    type: string
                    description: Explicação textual do score e band desta dimensão.
            subject_profile:
              type: object
              nullable: true
              description: Perfil cadastral do sujeito extraído das fontes de dados.
              properties:
                type:
                  type: string
                  enum:
                    - pf
                    - pj
                  description: Tipo do sujeito (pf = pessoa física, pj = pessoa jurídica).
                fields:
                  type: array
                  description: Campos cadastrais extraídos das fontes.
                  items:
                    type: object
                    properties:
                      label:
                        type: string
                        description: Nome do campo.
                      value:
                        type: string
                        description: Valor do campo em texto legível.
                cnaes:
                  type: array
                  items:
                    type: string
                  description: Códigos CNAE da empresa. Presente apenas para type "pj".
            incomplete_sources:
              type: array
              description: >-
                Fontes que não concluíram a consulta. Vazio quando confidence é
                "full".
              items:
                type: object
                properties:
                  source_id:
                    type: string
                    description: Identificador da fonte.
                  label:
                    type: string
                    description: Nome legível da fonte.
                  tier:
                    type: integer
                    description: >-
                      Nível de criticidade (1 = crítica, 2 = importante, 3 =
                      adicional).
                  status:
                    type: string
                    enum:
                      - error
                      - timeout
                    description: Motivo da incompletude.
                  impact:
                    type: string
                    description: Descrição do impacto desta fonte incompleta na análise.
        livemode:
          type: boolean
          description: >-
            true = análise de produção real. false = análise gerada em modo
            sandbox.
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
                - invalid_request_error
                - authentication_error
                - authorization_error
                - billing_error
                - server_error
            code:
              type: string
              description: Código específico do erro
            message:
              type: string
              description: Descrição legível do erro
            param:
              type: string
              nullable: true
              description: Campo que causou o erro (quando aplicável)
  responses:
    Unauthorized:
      description: API key ausente ou inválida
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missing_api_key:
              value:
                error:
                  type: authentication_error
                  code: missing_api_key
                  message: API key ausente.
                  param: null
            invalid_api_key:
              value:
                error:
                  type: authentication_error
                  code: invalid_api_key
                  message: API key inválida ou inativa.
                  param: null
    Forbidden:
      description: Escopo insuficiente para esta operação
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              type: authorization_error
              code: insufficient_scope
              message: Esta chave não tem permissão para criar runs.
              param: null
    NotFound:
      description: Run não encontrado ou não pertence ao tenant
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              type: invalid_request_error
              code: run_not_found
              message: Run não encontrado.
              param: null
    InternalError:
      description: Falha interna — tente novamente com backoff exponencial
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              type: server_error
              code: internal_error
              message: Erro interno. Tente novamente.
              param: null
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: API key no header x-api-key (recomendado)
    BearerToken:
      type: http
      scheme: bearer
      description: API key como Bearer token no header Authorization

````