{
  "openapi": "3.1.0",
  "info": {
    "title": "Planos CTT App",
    "version": "4.1.0",
    "description": "API Reference Dinâmica de Alta Fidelidade com Interactive Live Playground e Autenticação JWT"
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Insira o token JWT gerado em /api/auth/login"
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "0. Autenticação & Segurança"
    },
    {
      "name": "6. Webhook Configuration Studio"
    },
    {
      "name": "7. Background Jobs & DLQ"
    },
    {
      "name": "8. Resiliência & Estabilidade"
    },
    {
      "name": "EncomendasCtt"
    },
    {
      "name": "Frotas"
    },
    {
      "name": "Principal"
    },
    {
      "name": "Roteirizacao"
    }
  ],
  "paths": {
    "/api/encomendas_ctt": {
      "get": {
        "summary": "Listar todos os itens do módulo encomendas_ctt",
        "description": "Retorna a lista de registros cadastrados no módulo encomendas_ctt.",
        "tags": [
          "EncomendasCtt"
        ],
        "responses": {
          "200": {
            "description": "Lista recuperada com sucesso",
            "content": {
              "application/json": {
                "example": [
                  {
                    "id": 1,
                    "titulo": "Exemplo",
                    "status": "ativo"
                  }
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Filtrar por status",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "apenas_ativos",
            "in": "query",
            "required": false,
            "description": "Filtrar apenas itens ativos (default True)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "description": "Busca textual por título/descrição",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "required": false,
            "description": "Número da página (default 1)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "description": "Tamanho da página (default 50)",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/encomendas_ctt/metricas": {
      "get": {
        "summary": "Obter métricas e KPIs do módulo encomendas_ctt",
        "description": "Retorna indicadores quantitativos agregados para dashboards executivos.",
        "tags": [
          "EncomendasCtt"
        ],
        "responses": {
          "200": {
            "description": "Métricas consolidadas",
            "content": {
              "application/json": {
                "example": {
                  "total": 10,
                  "ativos": 8,
                  "concluidos": 2,
                  "taxa_conclusao": 20.0
                }
              }
            }
          }
        }
      }
    },
    "/api/encomendas_ctt/obter": {
      "get": {
        "summary": "Obter item de encomendas_ctt por ID",
        "description": "Retorna os detalhes completos de um registro do módulo encomendas_ctt.",
        "tags": [
          "EncomendasCtt"
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "example": {
                  "id": 1,
                  "titulo": "Exemplo"
                }
              }
            }
          },
          "404": {
            "description": "Registro não encontrado",
            "content": {
              "application/json": {
                "example": {
                  "description": "Registro não encontrado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "ID do registro",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/encomendas_ctt/criar": {
      "post": {
        "summary": "Criar novo item no módulo encomendas_ctt",
        "description": "Cadastra um novo registro com emissão de evento no EventBus.",
        "tags": [
          "EncomendasCtt"
        ],
        "responses": {
          "200": {
            "description": "Item criado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "titulo": "Novo Registro EncomendasCtt",
                  "descricao": "Descrição detalhada",
                  "status": "ativo",
                  "dados": {
                    "prioridade": "alta"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/encomendas_ctt/atualizar": {
      "post": {
        "summary": "Atualizar item do módulo encomendas_ctt",
        "description": "Atualiza campos de um registro existente e emite evento de alteração.",
        "tags": [
          "EncomendasCtt"
        ],
        "responses": {
          "200": {
            "description": "Item atualizado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1,
                  "titulo": "EncomendasCtt Atualizado",
                  "status": "concluido"
                }
              }
            }
          }
        }
      }
    },
    "/api/encomendas_ctt/deletar": {
      "post": {
        "summary": "Remover item do módulo encomendas_ctt",
        "description": "Remove logicamente um registro e publica evento de exclusão.",
        "tags": [
          "EncomendasCtt"
        ],
        "responses": {
          "200": {
            "description": "Item removido com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1
                }
              }
            }
          }
        }
      }
    },
    "/api/frotas": {
      "get": {
        "summary": "Listar todos os itens do módulo frotas",
        "description": "Retorna a lista de registros cadastrados no módulo frotas.",
        "tags": [
          "Frotas"
        ],
        "responses": {
          "200": {
            "description": "Lista recuperada com sucesso",
            "content": {
              "application/json": {
                "example": [
                  {
                    "id": 1,
                    "titulo": "Exemplo",
                    "status": "ativo"
                  }
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Filtrar por status",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "apenas_ativos",
            "in": "query",
            "required": false,
            "description": "Filtrar apenas itens ativos (default True)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "description": "Busca textual por título/descrição",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "required": false,
            "description": "Número da página (default 1)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "description": "Tamanho da página (default 50)",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/frotas/metricas": {
      "get": {
        "summary": "Obter métricas e KPIs do módulo frotas",
        "description": "Retorna indicadores quantitativos agregados para dashboards executivos.",
        "tags": [
          "Frotas"
        ],
        "responses": {
          "200": {
            "description": "Métricas consolidadas",
            "content": {
              "application/json": {
                "example": {
                  "total": 10,
                  "ativos": 8,
                  "concluidos": 2,
                  "taxa_conclusao": 20.0
                }
              }
            }
          }
        }
      }
    },
    "/api/frotas/obter": {
      "get": {
        "summary": "Obter item de frotas por ID",
        "description": "Retorna os detalhes completos de um registro do módulo frotas.",
        "tags": [
          "Frotas"
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "example": {
                  "id": 1,
                  "titulo": "Exemplo"
                }
              }
            }
          },
          "404": {
            "description": "Registro não encontrado",
            "content": {
              "application/json": {
                "example": {
                  "description": "Registro não encontrado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "ID do registro",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/frotas/criar": {
      "post": {
        "summary": "Criar novo item no módulo frotas",
        "description": "Cadastra um novo registro com emissão de evento no EventBus.",
        "tags": [
          "Frotas"
        ],
        "responses": {
          "200": {
            "description": "Item criado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "titulo": "Novo Registro Frotas",
                  "descricao": "Descrição detalhada",
                  "status": "ativo",
                  "dados": {
                    "prioridade": "alta"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/frotas/atualizar": {
      "post": {
        "summary": "Atualizar item do módulo frotas",
        "description": "Atualiza campos de um registro existente e emite evento de alteração.",
        "tags": [
          "Frotas"
        ],
        "responses": {
          "200": {
            "description": "Item atualizado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1,
                  "titulo": "Frotas Atualizado",
                  "status": "concluido"
                }
              }
            }
          }
        }
      }
    },
    "/api/frotas/deletar": {
      "post": {
        "summary": "Remover item do módulo frotas",
        "description": "Remove logicamente um registro e publica evento de exclusão.",
        "tags": [
          "Frotas"
        ],
        "responses": {
          "200": {
            "description": "Item removido com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1
                }
              }
            }
          }
        }
      }
    },
    "/api/principal": {
      "get": {
        "summary": "Listar todos os itens do módulo principal",
        "description": "Retorna a lista de registros cadastrados no módulo principal.",
        "tags": [
          "Principal"
        ],
        "responses": {
          "200": {
            "description": "Lista recuperada com sucesso",
            "content": {
              "application/json": {
                "example": [
                  {
                    "id": 1,
                    "titulo": "Exemplo",
                    "status": "ativo"
                  }
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Filtrar por status",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "apenas_ativos",
            "in": "query",
            "required": false,
            "description": "Filtrar apenas itens ativos (default True)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "description": "Busca textual por título/descrição",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "required": false,
            "description": "Número da página (default 1)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "description": "Tamanho da página (default 50)",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/principal/metricas": {
      "get": {
        "summary": "Obter métricas e KPIs do módulo principal",
        "description": "Retorna indicadores quantitativos agregados para dashboards executivos.",
        "tags": [
          "Principal"
        ],
        "responses": {
          "200": {
            "description": "Métricas consolidadas",
            "content": {
              "application/json": {
                "example": {
                  "total": 10,
                  "ativos": 8,
                  "concluidos": 2,
                  "taxa_conclusao": 20.0
                }
              }
            }
          }
        }
      }
    },
    "/api/principal/obter": {
      "get": {
        "summary": "Obter item de principal por ID",
        "description": "Retorna os detalhes completos de um registro do módulo principal.",
        "tags": [
          "Principal"
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "example": {
                  "id": 1,
                  "titulo": "Exemplo"
                }
              }
            }
          },
          "404": {
            "description": "Registro não encontrado",
            "content": {
              "application/json": {
                "example": {
                  "description": "Registro não encontrado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "ID do registro",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/principal/criar": {
      "post": {
        "summary": "Criar novo item no módulo principal",
        "description": "Cadastra um novo registro com emissão de evento no EventBus.",
        "tags": [
          "Principal"
        ],
        "responses": {
          "200": {
            "description": "Item criado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "titulo": "Novo Registro Principal",
                  "descricao": "Descrição detalhada",
                  "status": "ativo",
                  "dados": {
                    "prioridade": "alta"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/principal/atualizar": {
      "post": {
        "summary": "Atualizar item do módulo principal",
        "description": "Atualiza campos de um registro existente e emite evento de alteração.",
        "tags": [
          "Principal"
        ],
        "responses": {
          "200": {
            "description": "Item atualizado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1,
                  "titulo": "Principal Atualizado",
                  "status": "concluido"
                }
              }
            }
          }
        }
      }
    },
    "/api/principal/deletar": {
      "post": {
        "summary": "Remover item do módulo principal",
        "description": "Remove logicamente um registro e publica evento de exclusão.",
        "tags": [
          "Principal"
        ],
        "responses": {
          "200": {
            "description": "Item removido com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1
                }
              }
            }
          }
        }
      }
    },
    "/api/roteirizacao": {
      "get": {
        "summary": "Listar todos os itens do módulo roteirizacao",
        "description": "Retorna a lista de registros cadastrados no módulo roteirizacao.",
        "tags": [
          "Roteirizacao"
        ],
        "responses": {
          "200": {
            "description": "Lista recuperada com sucesso",
            "content": {
              "application/json": {
                "example": [
                  {
                    "id": 1,
                    "titulo": "Exemplo",
                    "status": "ativo"
                  }
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Filtrar por status",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "apenas_ativos",
            "in": "query",
            "required": false,
            "description": "Filtrar apenas itens ativos (default True)",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "busca",
            "in": "query",
            "required": false,
            "description": "Busca textual por título/descrição",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagina",
            "in": "query",
            "required": false,
            "description": "Número da página (default 1)",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "limite",
            "in": "query",
            "required": false,
            "description": "Tamanho da página (default 50)",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/roteirizacao/metricas": {
      "get": {
        "summary": "Obter métricas e KPIs do módulo roteirizacao",
        "description": "Retorna indicadores quantitativos agregados para dashboards executivos.",
        "tags": [
          "Roteirizacao"
        ],
        "responses": {
          "200": {
            "description": "Métricas consolidadas",
            "content": {
              "application/json": {
                "example": {
                  "total": 10,
                  "ativos": 8,
                  "concluidos": 2,
                  "taxa_conclusao": 20.0
                }
              }
            }
          }
        }
      }
    },
    "/api/roteirizacao/obter": {
      "get": {
        "summary": "Obter item de roteirizacao por ID",
        "description": "Retorna os detalhes completos de um registro do módulo roteirizacao.",
        "tags": [
          "Roteirizacao"
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "example": {
                  "id": 1,
                  "titulo": "Exemplo"
                }
              }
            }
          },
          "404": {
            "description": "Registro não encontrado",
            "content": {
              "application/json": {
                "example": {
                  "description": "Registro não encontrado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "ID do registro",
            "schema": {
              "type": "integer"
            }
          }
        ]
      }
    },
    "/api/roteirizacao/criar": {
      "post": {
        "summary": "Criar novo item no módulo roteirizacao",
        "description": "Cadastra um novo registro com emissão de evento no EventBus.",
        "tags": [
          "Roteirizacao"
        ],
        "responses": {
          "200": {
            "description": "Item criado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "titulo": "Novo Registro Roteirizacao",
                  "descricao": "Descrição detalhada",
                  "status": "ativo",
                  "dados": {
                    "prioridade": "alta"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/roteirizacao/atualizar": {
      "post": {
        "summary": "Atualizar item do módulo roteirizacao",
        "description": "Atualiza campos de um registro existente e emite evento de alteração.",
        "tags": [
          "Roteirizacao"
        ],
        "responses": {
          "200": {
            "description": "Item atualizado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1,
                  "titulo": "Roteirizacao Atualizado",
                  "status": "concluido"
                }
              }
            }
          }
        }
      }
    },
    "/api/roteirizacao/deletar": {
      "post": {
        "summary": "Remover item do módulo roteirizacao",
        "description": "Remove logicamente um registro e publica evento de exclusão.",
        "tags": [
          "Roteirizacao"
        ],
        "responses": {
          "200": {
            "description": "Item removido com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "sucesso": true,
                  "id": 1
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": 1
                }
              }
            }
          }
        }
      }
    },
    "/api/roteirizacao/vroom/otimizar": {
      "post": {
        "summary": "Executar otimização matemática de VRP com motor VROOM",
        "description": "Encaminha os dados de frota e encomendas para o contêiner VROOM C++ e retorna as rotas resolvidas.",
        "tags": [
          "Roteirizacao"
        ],
        "responses": {
          "200": {
            "description": "Otimização processada com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "description": "Otimização processada com sucesso"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/login": {
      "post": {
        "summary": "Autenticação JWT (Login)",
        "description": "Gera um token JWT (HS256) seguro contendo perfil e claims de acesso.",
        "tags": [
          "0. Autenticação & Segurança"
        ],
        "responses": {
          "200": {
            "description": "Autenticado com sucesso",
            "content": {
              "application/json": {
                "example": {
                  "token": "eyJhbGciOiJIUzI1Ni...",
                  "tipo": "Bearer",
                  "expira_em": 86400
                }
              }
            }
          },
          "401": {
            "description": "Credenciais inválidas",
            "content": {
              "application/json": {
                "example": {
                  "description": "Credenciais inválidas"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "email": "admin@empresa.com",
                  "password": "admin"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/me": {
      "get": {
        "summary": "Verificar Sessão do Usuário",
        "description": "Decodifica e valida o token JWT enviado no header Authorization.",
        "tags": [
          "0. Autenticação & Segurança"
        ],
        "responses": {
          "200": {
            "description": "Usuário autenticado",
            "content": {
              "application/json": {
                "example": {
                  "autenticado": true,
                  "usuario": {
                    "sub": "admin@empresa.com"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/oauth/login": {
      "get": {
        "summary": "Iniciar Login SSO (OAuth2/OIDC + PKCE)",
        "description": "Gera a URL de autorização do provedor de identidade corporativo (Google Workspace, Microsoft Entra ID, Okta, GitHub) usando Authorization Code + PKCE. O front-end deve redirecionar o navegador para redirect_url.",
        "tags": [
          "0. Autenticação & Segurança"
        ],
        "responses": {
          "200": {
            "description": "URL de autorização gerada",
            "content": {
              "application/json": {
                "example": {
                  "redirect_url": "https://idp.exemplo.com/authorize?...",
                  "state": "a1b2c3"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/oauth/callback": {
      "get": {
        "summary": "Callback OAuth2/OIDC",
        "description": "Troca o authorization code por tokens, valida o id_token via JWKS (RS256) e emite um JWT interno da aplicação com claims e papel corporativo mapeado.",
        "tags": [
          "0. Autenticação & Segurança"
        ],
        "responses": {
          "200": {
            "description": "Login concluído, token JWT interno emitido",
            "content": {
              "application/json": {
                "example": {
                  "description": "Login concluído, token JWT interno emitido"
                }
              }
            }
          },
          "400": {
            "description": "state inválido/expirado ou id_token não pôde ser validado",
            "content": {
              "application/json": {
                "example": {
                  "description": "state inválido/expirado ou id_token não pôde ser validado"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "code",
            "in": "query",
            "required": true,
            "description": "Authorization code retornado pelo provedor",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "State para validação CSRF/PKCE",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/webhooks": {
      "get": {
        "summary": "Listar Webhooks Cadastrados",
        "description": "Retorna os endpoints de webhook ativos configurados para disparo de eventos.",
        "tags": [
          "6. Webhook Configuration Studio"
        ],
        "responses": {
          "200": {
            "description": "Lista de webhooks",
            "content": {
              "application/json": {
                "example": {
                  "description": "Lista de webhooks"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Cadastrar Novo Webhook",
        "description": "Cadastra um novo destino HTTP para recebimento assíncrono de eventos.",
        "tags": [
          "6. Webhook Configuration Studio"
        ],
        "responses": {
          "200": {
            "description": "Webhook cadastrado",
            "content": {
              "application/json": {
                "example": {
                  "description": "Webhook cadastrado"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "url": "https://webhook.site/demo",
                  "secret": "sec_suite_2026",
                  "eventos": "*"
                }
              }
            }
          }
        }
      }
    },
    "/api/webhooks/logs": {
      "get": {
        "summary": "Listar Logs de Webhooks",
        "description": "Retorna o histórico de entregas de webhooks.",
        "tags": [
          "6. Webhook Configuration Studio"
        ],
        "responses": {
          "200": {
            "description": "Lista de logs",
            "content": {
              "application/json": {
                "example": {
                  "description": "Lista de logs"
                }
              }
            }
          }
        }
      }
    },
    "/api/webhooks/remover": {
      "post": {
        "summary": "Remover Webhook",
        "description": "Exclui um endpoint de webhook por ID.",
        "tags": [
          "6. Webhook Configuration Studio"
        ],
        "responses": {
          "200": {
            "description": "Webhook removido",
            "content": {
              "application/json": {
                "example": {
                  "description": "Webhook removido"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        }
      }
    },
    "/api/webhooks/logs/reenviar": {
      "post": {
        "summary": "Reenviar Log de Webhook",
        "description": "Reenvia uma entrega anterior de webhook.",
        "tags": [
          "6. Webhook Configuration Studio"
        ],
        "responses": {
          "200": {
            "description": "Resultado do reenvio",
            "content": {
              "application/json": {
                "example": {
                  "description": "Resultado do reenvio"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        }
      }
    },
    "/api/jobs": {
      "get": {
        "summary": "Listar Jobs em Background (Painel DLQ)",
        "description": "Retorna o estado persistido das tarefas assíncronas: ENFILEIRADO, PROCESSANDO, CONCLUIDO, AGUARDANDO_RETRY ou DLQ.",
        "tags": [
          "7. Background Jobs & DLQ"
        ],
        "responses": {
          "200": {
            "description": "Lista de jobs",
            "content": {
              "application/json": {
                "example": {
                  "description": "Lista de jobs"
                }
              }
            }
          }
        }
      }
    },
    "/api/jobs/reprocessar": {
      "post": {
        "summary": "Reprocessar Job em DLQ",
        "description": "Reencaminha manualmente um job (tipicamente em DLQ) para a fila, zerando o contador de tentativas.",
        "tags": [
          "7. Background Jobs & DLQ"
        ],
        "responses": {
          "200": {
            "description": "Job reencaminhado",
            "content": {
              "application/json": {
                "example": {
                  "description": "Job reencaminhado"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "example": {
                  "id": "b3f1..."
                }
              }
            }
          }
        }
      }
    },
    "/api/circuit-breakers": {
      "get": {
        "summary": "Listar Circuit Breakers",
        "description": "Retorna o status dos Circuit Breakers Nativos protetores de serviços externos.",
        "tags": [
          "8. Resiliência & Estabilidade"
        ],
        "responses": {
          "200": {
            "description": "Lista de Circuit Breakers",
            "content": {
              "application/json": {
                "example": {
                  "description": "Lista de Circuit Breakers"
                }
              }
            }
          }
        }
      }
    }
  }
}