{
  "openapi": "3.0.3",
  "info": {
    "title": "Brief App — Startup as a Service API",
    "version": "v1.0.0",
    "description": "Especificação OpenAPI oficial da API REST central da Brief App (Startup as a Service). Inclui módulos de autenticação 2FA, pagamentos com split, faturamento recorrente, catálogo, agendamento, mobilidade, storage e governança.",
    "contact": {
      "name": "Brief App Suporte Técnico",
      "url": "https://fm.brief.app.br/startup-as-a-service/",
      "email": "dev@brief.app.br"
    }
  },
  "servers": [
    {
      "url": "{baseUrl}",
      "description": "Informada na criação do tenant",
      "variables": {
        "baseUrl": {
          "default": "https://fm.brief.app.br",
          "description": "URL base do Gateway da plataforma ou do tenant"
        }
      }
    },
    {
      "url": "https://fm.brief.app.br/startup-as-a-service/api/sandbox.php",
      "description": "Sandbox & Mock Testing Environment for AI Agents (Safe Dry-Run)"
    }
  ],
  "tags": [
    {
      "name": "AdminProviders",
      "description": "Endpoints administrativos para auditoria, visibilidade, validação prévia (preflight) e chaveamento dinâmico de provedores controlados via HashiCorp Vault."
    },
    {
      "name": "AdminTenants",
      "description": ""
    },
    {
      "name": "Billing",
      "description": "Endpoints de billing — créditos e assinaturas."
    },
    {
      "name": "Catalog",
      "description": "Endpoints do catálogo — ofertas, parceiros e contratação avulsa. Leitura usa OutputCache de 2 minutos (dado semi-estático)."
    },
    {
      "name": "Email",
      "description": "Envio de e-mail transacional (consumido por BriefApp.Sdk.IEmailApi). Restrito a Admin/Suporte: enviar para destinatários arbitrários é vetor de spam/phishing."
    },
    {
      "name": "EmailWebhooks",
      "description": "Recebe webhooks do Resend (eventos de entrega de e-mail). Valida a assinatura HMAC-SHA256 via Svix antes de processar qualquer evento. Endpoint: POST /api/webhooks/email/resend Headers Svix obrigatórios: svix-id, svix-timestamp, svix-signature"
    },
    {
      "name": "FileStorage",
      "description": "Endpoints para upload seguro, consulta e streaming de arquivos/imagens (avatars, perfil, galeria). Integrado dinamicamente com HashiCorp Vault (S3, FileSystem, Firebase) via BriefApp.FileStorage."
    },
    {
      "name": "Gallery",
      "description": "Endpoints for managing partner portfolio gallery media items (photos and showcases)."
    },
    {
      "name": "Identity",
      "description": "Endpoints de autenticação e gestão de usuários. Rate limit para auth: 5 tentativas/min por IP (proteção brute-force)."
    },
    {
      "name": "KanbanAdmin",
      "description": "Admin da plataforma: política do Kanban por tenant — habilitação, eventos e ações permitidos nas automações e limites. Campos omitidos (nulos) herdam o padrão global Kanban:Politica."
    },
    {
      "name": "KanbanBoards",
      "description": "Kanban as a service: quadros, schema de campos dos cartões, colunas, cartões de um quadro e automações. Tudo é isolado pelo tenant do token; exige o escopo kanban (ou role Parceiro/Admin)."
    },
    {
      "name": "KanbanCards",
      "description": "Cartões do Kanban: edição, movimento, histórico, comentários, anexos (FileStorage) e vínculos com entidades."
    },
    {
      "name": "KanbanWebhooks",
      "description": "Webhooks de saída do Kanban (assinados com HMAC-SHA256: X-BriefApp-Signature: sha256=hex(HMAC(segredo, \"{timestamp}.{corpo}\"))), catálogo de eventos e consulta de cartões por entidade de negócio."
    },
    {
      "name": "Kyc",
      "description": "Consulta KYC (CPF/CNPJ e PDF) com chaveamento dinâmico via HashiCorp Vault (ApiBrasil e PdfExtractor). Restrito a Admin: a resposta traz dados pessoais (LGPD) e cada consulta é cobrada pelo provedor."
    },
    {
      "name": "MobilityAdmin",
      "description": "Back-office do Mobility: aprovação de motoristas, tabela de preços, operação e reclamações."
    },
    {
      "name": "MobilityDelivery",
      "description": "Entregas de pedidos de outros sistemas (restaurante, farmácia, loja, catálogo). O pedido continua no sistema de origem; aqui vive só a logística, ligada por (tipo, id) do pedido."
    },
    {
      "name": "MobilityDrivers",
      "description": "Perfil operacional do motorista/entregador. Qualquer usuário logado pode se cadastrar e acompanhar a análise; depois que um Admin aprova o cadastro, o Admin também concede o papel Motorista no Identity, que libera ficar online, enviar posição e ver ganhos."
    },
    {
      "name": "MobilityPricing",
      "description": "Consultas públicas (sem login) para a tela de pedir corrida: categorias e estimativa de preço."
    },
    {
      "name": "MobilityRides",
      "description": "Corridas: o cliente pede e acompanha; o motorista aceita e conduz."
    },
    {
      "name": "Notifications",
      "description": "Endpoints for device registration and push notification token management."
    },
    {
      "name": "OpenFinance",
      "description": "Módulo de Open Finance, conciliação bancária multiconector (Pluggy) e BPO Financeiro com IA. Permite sincronizar extratos em tempo real, gerenciar contas bancárias, metas e histórico de atendimentos."
    },
    {
      "name": "PartnerDirectory",
      "description": "Vitrine de parceiros: listagem pública (para usuários logados) só com campos não sensíveis."
    },
    {
      "name": "PartnerProfile",
      "description": "Endpoints for partner professional profile management, including address, KYC documents, payout/banking settings, and automatic booking acceptance toggling."
    },
    {
      "name": "PartnerServices",
      "description": "Endpoints for managing customized services offered by partners."
    },
    {
      "name": "Payments",
      "description": "Endpoints de pagamento — suporta Asaas, Mercado Pago e PagBank. Rate limit: 10 req/min por token (anti-fraude)."
    },
    {
      "name": "Refunds",
      "description": "Endpoints for handling dispute resolution and refund workflows between clients, partners, and administrators."
    },
    {
      "name": "Reviews",
      "description": "Endpoints for customer feedback and partner reviews. Supports both directions: clients rating professionals, and professionals rating clients."
    },
    {
      "name": "Scheduling",
      "description": "Endpoints de agendamento — disponibilidade, marcação, cancelamento e remarcação."
    },
    {
      "name": "SchedulingPartner",
      "description": "Agenda do parceiro (grade semanal, exceções, geração e bloqueio de horários), listagens de agendamentos e conclusão. As operações de agenda são do próprio parceiro ou de um Admin."
    },
    {
      "name": "Skills",
      "description": "Skill catalogue management and partner skill assignments. Skills represent professional specialties (e.g. \"Corte Feminino\", \"Coloração\", \"Depilação a Laser\")."
    },
    {
      "name": "Spaces",
      "description": "Endpoints for managing provider workspaces and physical salon locations."
    },
    {
      "name": "TenantToken",
      "description": "Endpoint OAuth2/OpenID Connect para emissão de tokens de Tenant (client credentials e on-behalf-of)."
    },
    {
      "name": "Transfers",
      "description": "Endpoints for managing balance withdrawals, transfer requests, and admin payout processing."
    },
    {
      "name": "Webhooks",
      "description": "Recebe webhooks de gateways de pagamento (Asaas, Mercado Pago, PagBank). Valida a assinatura HMAC antes de processar qualquer evento."
    }
  ],
  "paths": {
    "/api/admin/providers": {
      "get": {
        "tags": [
          "AdminProviders"
        ],
        "summary": "Retorna o estado completo de provedores: efetivos (por tenant ou plataforma), catálogo de provedores suportados e divisão de origem (padrão vs override por tenant).",
        "operationId": "AdminProviders_GetProviders",
        "parameters": [
          {
            "name": "tenantId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/admin/providers/preflight": {
      "post": {
        "tags": [
          "AdminProviders"
        ],
        "summary": "Executa verificação prévia (preflight) ativa antes de comutar um provedor. Valida chaves necessárias no Vault e executa health checks sem aplicar a troca.",
        "operationId": "AdminProviders_RunPreflight",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Component": {
                    "type": "string"
                  },
                  "TargetProvider": {
                    "type": "string"
                  },
                  "TenantId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "Component",
                  "TargetProvider"
                ]
              }
            }
          }
        }
      }
    },
    "/api/admin/providers/switch": {
      "post": {
        "tags": [
          "AdminProviders"
        ],
        "summary": "Comuta o provedor ativo de um componente (plataforma ou tenant específico) no Vault. Executa preflight obrigatório antes de salvar e invalida o cache do seletor. Suporta modo dry-run para teste operacional sem persistência.",
        "operationId": "AdminProviders_SwitchProvider",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Component": {
                    "type": "string"
                  },
                  "TargetProvider": {
                    "type": "string"
                  },
                  "TenantId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "DryRun": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "Component",
                  "TargetProvider",
                  "DryRun"
                ]
              }
            }
          }
        }
      }
    },
    "/api/admin/tenants": {
      "post": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "CreateTenant",
        "operationId": "AdminTenants_CreateTenant",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Slug": {
                    "type": "string"
                  },
                  "Name": {
                    "type": "string"
                  },
                  "Plan": {
                    "type": "string"
                  },
                  "RateLimitRpm": {
                    "type": "integer"
                  },
                  "RateLimitBurst": {
                    "type": "integer"
                  },
                  "AllowedOrigins": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "AllowedBundleIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "Slug",
                  "Name",
                  "Plan"
                ]
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "ListTenants",
        "operationId": "AdminTenants_ListTenants",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/admin/tenants/{id}": {
      "get": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "GetTenant",
        "operationId": "AdminTenants_GetTenant",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/admin/tenants/{id}/suspend": {
      "put": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "SuspendTenant",
        "operationId": "AdminTenants_SuspendTenant",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "Reason"
                ]
              }
            }
          }
        }
      }
    },
    "/api/admin/tenants/{id}/activate": {
      "put": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "ActivateTenant",
        "operationId": "AdminTenants_ActivateTenant",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/admin/tenants/{id}/cancel": {
      "put": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "CancelTenant",
        "operationId": "AdminTenants_CancelTenant",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "Reason"
                ]
              }
            }
          }
        }
      }
    },
    "/api/admin/tenants/{id}/keys": {
      "post": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "CreateApiKey",
        "operationId": "AdminTenants_CreateApiKey",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Name": {
                    "type": "string"
                  },
                  "Type": {
                    "type": "string"
                  },
                  "Scopes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "ExpiresAt": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "AllowedOrigins": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "AllowedBundleIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "Name",
                  "Type",
                  "Scopes"
                ]
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "ListApiKeys",
        "operationId": "AdminTenants_ListApiKeys",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/admin/tenants/{id}/keys/{keyId}": {
      "delete": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "RevokeApiKey",
        "operationId": "AdminTenants_RevokeApiKey",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "keyId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "Reason"
                ]
              }
            }
          }
        }
      }
    },
    "/api/admin/tenants/{id}/keys/{keyId}/rotate": {
      "post": {
        "tags": [
          "AdminTenants"
        ],
        "summary": "RotateApiKey",
        "operationId": "AdminTenants_RotateApiKey",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "keyId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "OverlapWindow": {
                    "type": "string"
                  },
                  "NewName": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/billing/credits/{clienteId}": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Consulta o saldo de créditos disponível de um cliente.",
        "operationId": "Billing_GetCreditBalance",
        "parameters": [
          {
            "name": "clienteId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/billing/credits/{clienteId}/add": {
      "post": {
        "tags": [
          "Billing"
        ],
        "summary": "Adiciona créditos ao saldo de um cliente (ex: compra de pacote).",
        "operationId": "Billing_AddCredits",
        "parameters": [
          {
            "name": "clienteId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Quantidade": {
                    "type": "integer"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "ReferenciaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ValidadeDias": {
                    "type": "integer"
                  }
                },
                "required": [
                  "Quantidade",
                  "Descricao"
                ]
              }
            }
          }
        }
      }
    },
    "/api/billing/credits/{clienteId}/debit": {
      "post": {
        "tags": [
          "Billing"
        ],
        "summary": "Debita créditos do saldo de um cliente (ex: consumo de agendamento).",
        "operationId": "Billing_DebitCredits",
        "parameters": [
          {
            "name": "clienteId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Quantidade": {
                    "type": "integer"
                  },
                  "Motivo": {
                    "type": "string"
                  },
                  "ReferenciaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "Quantidade",
                  "Motivo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/billing/credits/{clienteId}/refund": {
      "post": {
        "tags": [
          "Billing"
        ],
        "summary": "Estorna créditos debitados (ex: cancelamento de agendamento).",
        "operationId": "Billing_RefundCredits",
        "parameters": [
          {
            "name": "clienteId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Quantidade": {
                    "type": "integer"
                  },
                  "Motivo": {
                    "type": "string"
                  },
                  "ReferenciaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "Quantidade",
                  "Motivo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/billing/plans": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Lista os planos. Quem não é Admin/Financeiro só vê os ativos (os que aceitam novas assinaturas); staff pode pedir também os inativos e descontinuados com includeInactive=true.",
        "operationId": "Billing_ListPlans",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Billing"
        ],
        "summary": "Cria um plano de assinatura (Admin/Financeiro).",
        "operationId": "Billing_CreatePlan",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Preco": {
                    "type": "number"
                  },
                  "Periodicidade": {
                    "type": "string"
                  },
                  "CreditosPorCiclo": {
                    "type": "integer"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "DiasCarenciaInadimplencia": {
                    "type": "integer"
                  },
                  "ValidadeDiasCreditos": {
                    "type": "integer"
                  }
                },
                "required": [
                  "Nome",
                  "Preco",
                  "Periodicidade",
                  "CreditosPorCiclo",
                  "DiasCarenciaInadimplencia",
                  "ValidadeDiasCreditos"
                ]
              }
            }
          }
        }
      }
    },
    "/api/billing/plans/{planId}": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "GetPlan",
        "operationId": "Billing_GetPlan",
        "parameters": [
          {
            "name": "planId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "Billing"
        ],
        "summary": "Atualiza nome, descrição, preço e créditos. Quem já assina mantém o valor contratado; a mudança vale para novas assinaturas.",
        "operationId": "Billing_UpdatePlan",
        "parameters": [
          {
            "name": "planId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Preco": {
                    "type": "number"
                  },
                  "CreditosPorCiclo": {
                    "type": "integer"
                  },
                  "Descricao": {
                    "type": "string"
                  }
                },
                "required": [
                  "Nome",
                  "Preco",
                  "CreditosPorCiclo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/billing/plans/{planId}/status": {
      "patch": {
        "tags": [
          "Billing"
        ],
        "summary": "Ativo ↔ Inativo é reversível; Descontinuado é definitivo.",
        "operationId": "Billing_SetPlanStatus",
        "parameters": [
          {
            "name": "planId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Status": {
                    "type": "string"
                  }
                },
                "required": [
                  "Status"
                ]
              }
            }
          }
        }
      }
    },
    "/api/billing/subscriptions": {
      "post": {
        "tags": [
          "Billing"
        ],
        "summary": "Cria uma nova assinatura para um cliente.",
        "operationId": "Billing_CreateSubscription",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ClienteId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "PlanoId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "IniciarComoTrial": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "ClienteId",
                  "PlanoId",
                  "IniciarComoTrial"
                ]
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Lista assinaturas, paginado, com filtro de status e plano (Admin/Financeiro).",
        "operationId": "Billing_ListSubscriptions",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "planId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/billing/subscriptions/{clienteId}": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Consulta a assinatura ativa de um cliente.",
        "operationId": "Billing_GetSubscription",
        "parameters": [
          {
            "name": "clienteId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/billing/subscriptions/client/{clienteId}": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Histórico de assinaturas de um cliente (ativas e encerradas).",
        "operationId": "Billing_GetSubscriptionHistory",
        "parameters": [
          {
            "name": "clienteId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/billing/subscriptions/{assinaturaId}/cancel": {
      "post": {
        "tags": [
          "Billing"
        ],
        "summary": "Cancela uma assinatura (imediatamente ou ao fim do ciclo vigente).",
        "operationId": "Billing_CancelSubscription",
        "parameters": [
          {
            "name": "assinaturaId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "403": {
            "description": "Sem permissão"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ClienteId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Motivo": {
                    "type": "string"
                  },
                  "Imediato": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "ClienteId",
                  "Motivo",
                  "Imediato"
                ]
              }
            }
          }
        }
      }
    },
    "/api/catalog/offers": {
      "get": {
        "tags": [
          "Catalog"
        ],
        "summary": "Lista ofertas com paginação e filtros opcionais (categoria, parceiro, tipo). Cache de 2 minutos com invalidação por tag \"catalog\".",
        "operationId": "Catalog_ListOffers",
        "parameters": [
          {
            "name": "categoriaId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "parceiroId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "tipo",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      },
      "post": {
        "tags": [
          "Catalog"
        ],
        "summary": "Cria uma nova oferta (apenas Parceiro/Admin).",
        "operationId": "Catalog_CreateOffer",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ParceiroId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "CategoriaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Titulo": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "Preco": {
                    "type": "number"
                  },
                  "Tipo": {
                    "type": "string"
                  },
                  "QuantidadeCreditos": {
                    "type": "integer"
                  },
                  "PeriodicidadeMeses": {
                    "type": "integer"
                  },
                  "ImagemUrl": {
                    "type": "string"
                  }
                },
                "required": [
                  "ParceiroId",
                  "CategoriaId",
                  "Titulo",
                  "Descricao",
                  "Preco",
                  "Tipo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/catalog/offers/{offerId}": {
      "get": {
        "tags": [
          "Catalog"
        ],
        "summary": "Retorna os detalhes de uma oferta pelo ID.",
        "operationId": "Catalog_GetOffer",
        "parameters": [
          {
            "name": "offerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      },
      "put": {
        "tags": [
          "Catalog"
        ],
        "summary": "Atualiza uma oferta existente (apenas Parceiro dono ou Admin).",
        "operationId": "Catalog_UpdateOffer",
        "parameters": [
          {
            "name": "offerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Titulo": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "Preco": {
                    "type": "number"
                  },
                  "ImagemUrl": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/catalog/offers/{offerId}/hire": {
      "post": {
        "tags": [
          "Catalog"
        ],
        "summary": "Contratação direta sem agendamento (serviço avulso imediato).",
        "operationId": "Catalog_HireOffer",
        "parameters": [
          {
            "name": "offerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ClienteId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "ClienteId"
                ]
              }
            }
          }
        }
      }
    },
    "/api/email/send": {
      "post": {
        "tags": [
          "Email"
        ],
        "summary": "Envia um e-mail transacional pelo provedor configurado no Vault (com failover automático).",
        "operationId": "Email_Send",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "403": {
            "description": "Sem permissão"
          },
          "502": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "To": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Subject": {
                    "type": "string"
                  },
                  "HtmlBody": {
                    "type": "string"
                  },
                  "TextBody": {
                    "type": "string"
                  },
                  "From": {
                    "type": "string"
                  },
                  "Cc": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Bcc": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Tag": {
                    "type": "string"
                  },
                  "Provider": {
                    "type": "string"
                  }
                },
                "required": [
                  "To",
                  "Subject"
                ]
              }
            }
          }
        }
      }
    },
    "/api/webhooks/email/resend": {
      "post": {
        "tags": [
          "EmailWebhooks"
        ],
        "summary": "Webhook do Resend. Valida assinatura via headers Svix (svix-id, svix-timestamp, svix-signature). Ref: https://resend.com/docs/dashboard/webhooks/introduction",
        "operationId": "EmailWebhooks_ResendWebhook",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Erro"
          }
        },
        "security": []
      }
    },
    "/api/storage/upload": {
      "post": {
        "tags": [
          "FileStorage"
        ],
        "summary": "Faz upload seguro de um arquivo (imagem, documento) para o storage configurado no Vault (S3, FileSystem ou Firebase).",
        "operationId": "FileStorage_Upload",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "403": {
            "description": "Sem permissão"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/storage/{id}": {
      "get": {
        "tags": [
          "FileStorage"
        ],
        "summary": "Retorna os metadados de um arquivo por ID.",
        "operationId": "FileStorage_GetById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      },
      "delete": {
        "tags": [
          "FileStorage"
        ],
        "summary": "Exclusão lógica (soft delete) e remoção do arquivo do storage de origem.",
        "operationId": "FileStorage_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/storage/files/{**storagePath}": {
      "get": {
        "tags": [
          "FileStorage"
        ],
        "summary": "Streaming direto e seguro de arquivos públicos com cabeçalhos de cache. Resolve automaticamente o provedor de origem gravado no banco de dados.",
        "operationId": "FileStorage_Download",
        "parameters": [
          {
            "name": "storagePath",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/storage/{id}/download": {
      "get": {
        "tags": [
          "FileStorage"
        ],
        "summary": "Streaming de arquivo por ID com resolução garantida do provedor original.",
        "operationId": "FileStorage_DownloadById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/partner/gallery/{partnerId}": {
      "get": {
        "tags": [
          "Gallery"
        ],
        "summary": "Lists all gallery portfolio media items for a specific partner. Publicly accessible.",
        "operationId": "Gallery_GetGallery",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/partner/gallery": {
      "post": {
        "tags": [
          "Gallery"
        ],
        "summary": "Adds a new media item to a partner's portfolio.",
        "operationId": "Gallery_AddItem",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "PartnerId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Url": {
                    "type": "string"
                  },
                  "Type": {
                    "type": "string"
                  },
                  "Caption": {
                    "type": "string"
                  },
                  "Order": {
                    "type": "integer"
                  }
                },
                "required": [
                  "PartnerId",
                  "Url",
                  "Type",
                  "Order"
                ]
              }
            }
          }
        }
      }
    },
    "/api/partner/gallery/{itemId}": {
      "put": {
        "tags": [
          "Gallery"
        ],
        "summary": "Updates an existing gallery item's caption, type, URL, or ordering.",
        "operationId": "Gallery_UpdateItem",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Url": {
                    "type": "string"
                  },
                  "Type": {
                    "type": "string"
                  },
                  "Caption": {
                    "type": "string"
                  },
                  "Order": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Gallery"
        ],
        "summary": "Removes an item from the gallery portfolio.",
        "operationId": "Gallery_DeleteItem",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/auth/login": {
      "post": {
        "tags": [
          "Identity"
        ],
        "summary": "Autentica um usuário com email e senha. Se a conta ainda não tem 2FA configurado, retorna requiresTwoFactorSetup=true (e o userId) para o cliente ir direto para a configuração — 2FA é obrigatório para todas as contas. Se já tem 2FA habilitado, retorna requiresTwoFactor=true e um segundo passo com o código TOTP é necessário.",
        "operationId": "Identity_Login",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "401": {
            "description": "Erro"
          },
          "429": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Email": {
                    "type": "string"
                  },
                  "Password": {
                    "type": "string"
                  },
                  "TwoFactorCode": {
                    "type": "string"
                  }
                },
                "required": [
                  "Email",
                  "Password"
                ]
              }
            }
          }
        }
      }
    },
    "/api/auth/register": {
      "post": {
        "tags": [
          "Identity"
        ],
        "summary": "Registra um novo usuário. Roles Admin/Parceiro requerem aprovação administrativa — ficam com status PendingApproval.",
        "operationId": "Identity_Register",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Email": {
                    "type": "string"
                  },
                  "Password": {
                    "type": "string"
                  },
                  "FullName": {
                    "type": "string"
                  },
                  "PhoneNumber": {
                    "type": "string"
                  },
                  "RequestedRole": {
                    "type": "string"
                  }
                },
                "required": [
                  "Email",
                  "Password",
                  "FullName"
                ]
              }
            }
          }
        }
      }
    },
    "/api/auth/refresh": {
      "post": {
        "tags": [
          "Identity"
        ],
        "summary": "Renova o access token usando um refresh token válido.",
        "operationId": "Identity_RefreshToken",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "401": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "UserId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "RefreshToken": {
                    "type": "string"
                  }
                },
                "required": [
                  "UserId",
                  "RefreshToken"
                ]
              }
            }
          }
        }
      }
    },
    "/api/auth/me": {
      "get": {
        "tags": [
          "Identity"
        ],
        "summary": "Retorna o perfil do usuário autenticado (lido do JWT).",
        "operationId": "Identity_GetProfile",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "401": {
            "description": "Não autenticado"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/auth/2fa/setup": {
      "post": {
        "tags": [
          "Identity"
        ],
        "summary": "Gera a chave secreta e o QR Code URI para configurar o autenticador TOTP.",
        "operationId": "Identity_Setup2fa",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "UserId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "SetupToken": {
                    "type": "string"
                  }
                },
                "required": [
                  "UserId"
                ]
              }
            }
          }
        }
      }
    },
    "/api/auth/2fa/verify": {
      "post": {
        "tags": [
          "Identity"
        ],
        "summary": "Confirma o código TOTP, habilita o 2FA permanentemente na conta e autentica a sessão (retorna os mesmos tokens de um login bem-sucedido).",
        "operationId": "Identity_Verify2fa",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "UserId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "SecretKey": {
                    "type": "string"
                  },
                  "Code": {
                    "type": "string"
                  },
                  "SetupToken": {
                    "type": "string"
                  }
                },
                "required": [
                  "UserId",
                  "SecretKey",
                  "Code"
                ]
              }
            }
          }
        }
      }
    },
    "/api/auth/users/{userId}/approve": {
      "put": {
        "tags": [
          "Identity"
        ],
        "summary": "Aprova um usuário com status PendingApproval (apenas Admin).",
        "operationId": "Identity_ApproveUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "403": {
            "description": "Sem permissão"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/auth/users/{userId}/reject": {
      "put": {
        "tags": [
          "Identity"
        ],
        "summary": "Rejeita um cadastro com status PendingApproval (apenas Admin).",
        "operationId": "Identity_RejectUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "Reason"
                ]
              }
            }
          }
        }
      }
    },
    "/api/auth/users": {
      "get": {
        "tags": [
          "Identity"
        ],
        "summary": "Lista usuários com paginação e filtros opcionais de papel, status e busca (nome, e-mail, telefone).",
        "operationId": "Identity_ListUsers",
        "parameters": [
          {
            "name": "role",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/auth/users/{userId}": {
      "get": {
        "tags": [
          "Identity"
        ],
        "summary": "Detalhe de um usuário. O próprio usuário ou um Admin.",
        "operationId": "Identity_GetUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "403": {
            "description": "Sem permissão"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/auth/users/{userId}/status": {
      "put": {
        "tags": [
          "Identity"
        ],
        "summary": "Muda o status de um usuário já aprovado: Active, Suspended ou Blocked (apenas Admin). Suspender/bloquear revoga os refresh tokens.",
        "operationId": "Identity_ChangeUserStatus",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Status": {
                    "type": "string"
                  },
                  "Reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "Status"
                ]
              }
            }
          }
        }
      }
    },
    "/api/auth/users/{userId}/roles/{role}": {
      "put": {
        "tags": [
          "Identity"
        ],
        "summary": "Concede um papel ao usuário (apenas Admin) — ex.: Motorista ou Parceiro depois que o cadastro operacional foi aprovado. O usuário recebe o papel no próximo refresh/login. Idempotente.",
        "operationId": "Identity_GrantRole",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "role",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Identity"
        ],
        "summary": "Remove um papel do usuário (apenas Admin). Não é possível remover o próprio papel de Admin.",
        "operationId": "Identity_RevokeRole",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "role",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/auth/users/{userId}/profile": {
      "put": {
        "tags": [
          "Identity"
        ],
        "summary": "Atualiza nome e/ou telefone. O próprio usuário ou um Admin; campos nulos ficam como estão.",
        "operationId": "Identity_UpdateUserProfile",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "403": {
            "description": "Sem permissão"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "FullName": {
                    "type": "string"
                  },
                  "PhoneNumber": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/firebase-login": {
      "post": {
        "tags": [
          "Identity"
        ],
        "summary": "Verifica um Firebase ID token e sincroniza o usuário (cria no primeiro login).",
        "operationId": "Identity_FirebaseLogin",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "IdToken": {
                    "type": "string"
                  }
                },
                "required": [
                  "IdToken"
                ]
              }
            }
          }
        }
      }
    },
    "/api/admin/kanban/policies": {
      "get": {
        "tags": [
          "KanbanAdmin"
        ],
        "summary": "Tenants com política personalizada.",
        "operationId": "KanbanAdmin_ListPolicies",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/admin/kanban/tenants/{tenantId}/policy": {
      "get": {
        "tags": [
          "KanbanAdmin"
        ],
        "summary": "Política efetiva do tenant (personalização + padrão global).",
        "operationId": "KanbanAdmin_GetPolicy",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "KanbanAdmin"
        ],
        "summary": "Substitui a personalização do tenant. Vale em até 30 s em todas as réplicas (na hora nesta).",
        "operationId": "KanbanAdmin_SetPolicy",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Habilitado": {
                    "type": "boolean"
                  },
                  "EventosPermitidos": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "AcoesPermitidas": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "MaximoQuadros": {
                    "type": "integer"
                  },
                  "MaximoAutomacoesPorQuadro": {
                    "type": "integer"
                  },
                  "MaximoWebhooks": {
                    "type": "integer"
                  },
                  "MaximoAnexoBytes": {
                    "type": "integer"
                  },
                  "MaximoAnexosPorCartao": {
                    "type": "integer"
                  },
                  "IntervalosRetrySegundos": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "LimiteFalhasParaDesativar": {
                    "type": "integer"
                  },
                  "Observacao": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "KanbanAdmin"
        ],
        "summary": "Remove a personalização: o tenant volta ao padrão global.",
        "operationId": "KanbanAdmin_ResetPolicy",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards": {
      "get": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Quadros do tenant.",
        "operationId": "KanbanBoards_ListBoards",
        "parameters": [
          {
            "name": "includeArchived",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Cria um quadro, opcionalmente já com campos e colunas.",
        "operationId": "KanbanBoards_CreateBoard",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Chave": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "Campos": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Colunas": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "Nome"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}": {
      "get": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Quadro com campos, colunas (em ordem) e a contagem de cartões ativos por coluna.",
        "operationId": "KanbanBoards_GetBoard",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "UpdateBoard",
        "operationId": "KanbanBoards_UpdateBoard",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  }
                },
                "required": [
                  "Nome"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}/archive": {
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Arquiva o quadro: fica somente leitura e para de disparar automações.",
        "operationId": "KanbanBoards_ArchiveBoard",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards/{boardId}/restore": {
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "RestoreBoard",
        "operationId": "KanbanBoards_RestoreBoard",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards/{boardId}/policy": {
      "put": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Estreita, neste quadro, os eventos e ações de automação que a política do tenant permite (nunca amplia). Nulo remove a restrição; automações já salvas que saírem da regra deixam de executar.",
        "operationId": "KanbanBoards_SetBoardRestrictions",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "EventosPermitidos": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "AcoesPermitidas": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}/fields": {
      "get": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "ListFields",
        "operationId": "KanbanBoards_ListFields",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Substitui todos os campos. Campos removidos têm os valores apagados de todos os cartões.",
        "operationId": "KanbanBoards_ReplaceFields",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "AddField",
        "operationId": "KanbanBoards_AddField",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Chave": {
                    "type": "string"
                  },
                  "Rotulo": {
                    "type": "string"
                  },
                  "Tipo": {
                    "type": "string"
                  },
                  "Obrigatorio": {
                    "type": "boolean"
                  },
                  "Opcoes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Minimo": {
                    "type": "number"
                  },
                  "Maximo": {
                    "type": "number"
                  },
                  "Padrao": {
                    "type": "string"
                  },
                  "ValorPadrao": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  }
                },
                "required": [
                  "Chave",
                  "Rotulo",
                  "Tipo",
                  "Obrigatorio"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}/fields/{key}": {
      "put": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Atualiza um campo. O tipo não muda: para outro tipo, remova e crie com outra chave.",
        "operationId": "KanbanBoards_UpdateField",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "key",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Chave": {
                    "type": "string"
                  },
                  "Rotulo": {
                    "type": "string"
                  },
                  "Tipo": {
                    "type": "string"
                  },
                  "Obrigatorio": {
                    "type": "boolean"
                  },
                  "Opcoes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Minimo": {
                    "type": "number"
                  },
                  "Maximo": {
                    "type": "number"
                  },
                  "Padrao": {
                    "type": "string"
                  },
                  "ValorPadrao": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  }
                },
                "required": [
                  "Chave",
                  "Rotulo",
                  "Tipo",
                  "Obrigatorio"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "RemoveField",
        "operationId": "KanbanBoards_RemoveField",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "key",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards/{boardId}/columns": {
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "CreateColumn",
        "operationId": "KanbanBoards_CreateColumn",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Posicao": {
                    "type": "integer"
                  },
                  "LimiteWip": {
                    "type": "integer"
                  },
                  "WipEstrito": {
                    "type": "boolean"
                  },
                  "Final": {
                    "type": "boolean"
                  },
                  "Cor": {
                    "type": "string"
                  },
                  "Transicoes": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                },
                "required": [
                  "Nome",
                  "WipEstrito",
                  "Final"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}/columns/{columnId}": {
      "put": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Atualiza a coluna. transicoes: nulo mantém, lista vazia libera qualquer destino.",
        "operationId": "KanbanBoards_UpdateColumn",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "columnId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Posicao": {
                    "type": "integer"
                  },
                  "LimiteWip": {
                    "type": "integer"
                  },
                  "WipEstrito": {
                    "type": "boolean"
                  },
                  "Final": {
                    "type": "boolean"
                  },
                  "Cor": {
                    "type": "string"
                  },
                  "Transicoes": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                },
                "required": [
                  "Nome",
                  "WipEstrito",
                  "Final"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Remove a coluna; se houver cartões, moveCardsTo indica para onde vão.",
        "operationId": "KanbanBoards_DeleteColumn",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "columnId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "moveCardsTo",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards/{boardId}/columns/order": {
      "put": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Nova ordem das colunas (todas, cada uma uma vez).",
        "operationId": "KanbanBoards_ReorderColumns",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Colunas": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    }
                  }
                },
                "required": [
                  "Colunas"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}/cards": {
      "get": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Cartões paginados, ordenados por coluna e posição. Filtros por campo customizado como ?field.prioridade=Alta&amp;field.valor=150 (igualdade; em multisseleção, \"contém\"). archived: omitido = ativos, true = só arquivados, false = todos.",
        "operationId": "KanbanBoards_ListCards",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "columnId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "archived",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Cria um cartão. Sem coluna, entra na primeira; sem âncora, no fim. Campos validados pelo schema do quadro.",
        "operationId": "KanbanBoards_CreateCard",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Titulo": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "ColunaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Campos": {
                    "type": "string"
                  },
                  "AposCartaoId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "AntesCartaoId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "Titulo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}/automations": {
      "get": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "ListAutomations",
        "operationId": "KanbanBoards_ListAutomations",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Cria uma regra \"quando → se → então\". Gatilho: evento do Kanban (\"kanban.cartao.movido\") ou de qualquer módulo (\"payments.pagamento.confirmado\", \"scheduling.*\"). Ações: mover, atualizar campos, comentar, arquivar, criar cartão, vincular entidade, e-mail, notificação, OCR, KYC, cobrança e webhook. Textos aceitam {{caminho}}.",
        "operationId": "KanbanBoards_CreateAutomation",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Gatilho": {
                    "type": "string"
                  },
                  "Acoes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Condicoes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "Nome",
                  "Gatilho",
                  "Acoes",
                  "Ativa"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/boards/{boardId}/automations/{automationId}": {
      "get": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "GetAutomation",
        "operationId": "KanbanBoards_GetAutomation",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "automationId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "UpdateAutomation",
        "operationId": "KanbanBoards_UpdateAutomation",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "automationId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Gatilho": {
                    "type": "string"
                  },
                  "Acoes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Condicoes": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "Nome",
                  "Gatilho",
                  "Acoes",
                  "Ativa"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "DeleteAutomation",
        "operationId": "KanbanBoards_DeleteAutomation",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "automationId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards/{boardId}/automations/{automationId}/enable": {
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "EnableAutomation",
        "operationId": "KanbanBoards_EnableAutomation",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "automationId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards/{boardId}/automations/{automationId}/disable": {
      "post": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "DisableAutomation",
        "operationId": "KanbanBoards_DisableAutomation",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "automationId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/boards/{boardId}/automations/{automationId}/executions": {
      "get": {
        "tags": [
          "KanbanBoards"
        ],
        "summary": "Histórico de execuções (ações executadas, saídas e erros).",
        "operationId": "KanbanBoards_ListAutomationExecutions",
        "parameters": [
          {
            "name": "boardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "automationId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "success",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/cards/{cardId}": {
      "get": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "GetCard",
        "operationId": "KanbanCards_GetCard",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "patch": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Atualização parcial. Em campos só as chaves enviadas mudam e null apaga o valor. Concorrência otimista por versaoEsperada ou cabeçalho If-Match (409 se o cartão mudou).",
        "operationId": "KanbanCards_UpdateCard",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Titulo": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "Campos": {
                    "type": "string"
                  },
                  "VersaoEsperada": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Exclui definitivamente o cartão e o seu histórico.",
        "operationId": "KanbanCards_DeleteCard",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/cards/{cardId}/move": {
      "post": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Move para a coluna, depois de aposCartaoId e/ou antes de antesCartaoId (sem âncora: fim). Respeita WIP e transições.",
        "operationId": "KanbanCards_MoveCard",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ColunaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "AposCartaoId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "AntesCartaoId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "VersaoEsperada": {
                    "type": "integer"
                  }
                },
                "required": [
                  "ColunaId"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/cards/{cardId}/archive": {
      "post": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "ArchiveCard",
        "operationId": "KanbanCards_ArchiveCard",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/cards/{cardId}/restore": {
      "post": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Restaura ao fim da coluna de origem ou de colunaId.",
        "operationId": "KanbanCards_RestoreCard",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ColunaId": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/kanban/cards/{cardId}/activity": {
      "get": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Histórico do cartão, mais recente primeiro.",
        "operationId": "KanbanCards_ListActivity",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/cards/{cardId}/comments": {
      "post": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Comment",
        "operationId": "KanbanCards_Comment",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Texto": {
                    "type": "string"
                  }
                },
                "required": [
                  "Texto"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/cards/{cardId}/attachments": {
      "get": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "ListAttachments",
        "operationId": "KanbanCards_ListAttachments",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Envia um arquivo (multipart, campo file) para o provedor de storage ativo do tenant.",
        "operationId": "KanbanCards_UploadAttachment",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/cards/{cardId}/attachments/{attachmentId}/content": {
      "get": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "DownloadAttachment",
        "operationId": "KanbanCards_DownloadAttachment",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "attachmentId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/cards/{cardId}/attachments/{attachmentId}": {
      "delete": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "DeleteAttachment",
        "operationId": "KanbanCards_DeleteAttachment",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "attachmentId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/cards/{cardId}/links": {
      "get": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "ListLinks",
        "operationId": "KanbanCards_ListLinks",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "Vincula o cartão a uma entidade (ex.: {\"entidade\":\"cobranca\",\"entidadeId\":\"…\"}). Tipos conhecidos (GET /api/kanban/entities) são conferidos no tenant; outros são aceitos como ids externos.",
        "operationId": "KanbanCards_AddLink",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Entidade": {
                    "type": "string"
                  },
                  "EntidadeId": {
                    "type": "string"
                  },
                  "Rotulo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Entidade",
                  "EntidadeId"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/cards/{cardId}/links/{linkId}": {
      "delete": {
        "tags": [
          "KanbanCards"
        ],
        "summary": "RemoveLink",
        "operationId": "KanbanCards_RemoveLink",
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "linkId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/events": {
      "get": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Tipos de evento do Kanban (webhooks e gatilhos) e tipos de entidade com checagem de existência.",
        "operationId": "KanbanWebhooks_Catalog",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/policy": {
      "get": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Política efetiva do tenant: eventos e ações permitidos nas automações e limites (definida pelo Admin).",
        "operationId": "KanbanWebhooks_MyPolicy",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/entities": {
      "get": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Tipos de entidade conferidos ao vincular (os demais são aceitos como ids externos).",
        "operationId": "KanbanWebhooks_EntityTypes",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/entities/{entity}/{entityId}/cards": {
      "get": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Cartões de todos os quadros vinculados à entidade (ex.: /entities/cobranca/{id}/cards).",
        "operationId": "KanbanWebhooks_CardsByEntity",
        "parameters": [
          {
            "name": "entity",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeArchived",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/webhooks": {
      "get": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "ListWebhooks",
        "operationId": "KanbanWebhooks_ListWebhooks",
        "parameters": [
          {
            "name": "boardId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Cria a assinatura. O segredo HMAC só aparece nesta resposta (e na rotação).",
        "operationId": "KanbanWebhooks_CreateWebhook",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Url": {
                    "type": "string"
                  },
                  "Eventos": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "QuadroId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "Url",
                  "Ativa"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kanban/webhooks/{webhookId}": {
      "get": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "GetWebhook",
        "operationId": "KanbanWebhooks_GetWebhook",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "UpdateWebhook",
        "operationId": "KanbanWebhooks_UpdateWebhook",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Url": {
                    "type": "string"
                  },
                  "Eventos": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "QuadroId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "Url",
                  "Ativa"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "DeleteWebhook",
        "operationId": "KanbanWebhooks_DeleteWebhook",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/webhooks/{webhookId}/rotate-secret": {
      "post": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "RotateSecret",
        "operationId": "KanbanWebhooks_RotateSecret",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/webhooks/{webhookId}/ping": {
      "post": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Enfileira um evento kanban.ping só para esta assinatura (teste de conectividade e assinatura).",
        "operationId": "KanbanWebhooks_Ping",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/webhooks/{webhookId}/deliveries": {
      "get": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Entregas da assinatura (status, tentativas, último HTTP/erro).",
        "operationId": "KanbanWebhooks_ListDeliveries",
        "parameters": [
          {
            "name": "webhookId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kanban/webhooks/deliveries/{deliveryId}/redeliver": {
      "post": {
        "tags": [
          "KanbanWebhooks"
        ],
        "summary": "Reenfileira uma entrega já concluída ou falha.",
        "operationId": "KanbanWebhooks_Redeliver",
        "parameters": [
          {
            "name": "deliveryId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/kyc/consulta": {
      "post": {
        "tags": [
          "Kyc"
        ],
        "summary": "Consulta um CPF ou CNPJ no provedor de KYC configurado no Vault para o tenant. Pontuação (., -, /) é aceita e removida.",
        "operationId": "Kyc_Consultar",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "503": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "TipoDocumento": {
                    "type": "string"
                  },
                  "Documento": {
                    "type": "string"
                  }
                },
                "required": [
                  "TipoDocumento",
                  "Documento"
                ]
              }
            }
          }
        }
      }
    },
    "/api/kyc/consulta/pdf": {
      "post": {
        "tags": [
          "Kyc"
        ],
        "summary": "Consulta e extração estruturada de dados KYC a partir de um documento PDF.",
        "operationId": "Kyc_ConsultarPdf",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "503": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/drivers": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "ListDrivers",
        "operationId": "MobilityAdmin_ListDrivers",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/drivers/{id}": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "GetDriver",
        "operationId": "MobilityAdmin_GetDriver",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/drivers/{id}/decision": {
      "patch": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "Aprova/rejeita cadastros pendentes e ativa/suspende/bloqueia quem já foi aprovado.",
        "operationId": "MobilityAdmin_DecideDriver",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Decisao": {
                    "type": "string"
                  },
                  "Motivo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Decisao"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/admin/categories": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "ListCategories",
        "operationId": "MobilityAdmin_ListCategories",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "CreateCategory",
        "operationId": "MobilityAdmin_CreateCategory",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "TipoVeiculo": {
                    "type": "string"
                  },
                  "TarifaBase": {
                    "type": "number"
                  },
                  "PrecoKm": {
                    "type": "number"
                  },
                  "PrecoMinuto": {
                    "type": "number"
                  },
                  "MaxPassageiros": {
                    "type": "integer"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "IconeUrl": {
                    "type": "string"
                  },
                  "Ordem": {
                    "type": "integer"
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "Nome",
                  "TipoVeiculo",
                  "TarifaBase",
                  "PrecoKm",
                  "PrecoMinuto",
                  "MaxPassageiros",
                  "Ordem",
                  "Ativa"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/admin/categories/{id}": {
      "put": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "UpdateCategory",
        "operationId": "MobilityAdmin_UpdateCategory",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "TipoVeiculo": {
                    "type": "string"
                  },
                  "TarifaBase": {
                    "type": "number"
                  },
                  "PrecoKm": {
                    "type": "number"
                  },
                  "PrecoMinuto": {
                    "type": "number"
                  },
                  "MaxPassageiros": {
                    "type": "integer"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "IconeUrl": {
                    "type": "string"
                  },
                  "Ordem": {
                    "type": "integer"
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "Nome",
                  "TipoVeiculo",
                  "TarifaBase",
                  "PrecoKm",
                  "PrecoMinuto",
                  "MaxPassageiros",
                  "Ordem",
                  "Ativa"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/admin/price-rules": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "ListPriceRules",
        "operationId": "MobilityAdmin_ListPriceRules",
        "parameters": [
          {
            "name": "categoryId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "CreatePriceRule",
        "operationId": "MobilityAdmin_CreatePriceRule",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "CategoriaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Regiao": {
                    "type": "string"
                  },
                  "DistanciaMinimaKm": {
                    "type": "number"
                  },
                  "TarifaMinima": {
                    "type": "number"
                  },
                  "PrecoKm": {
                    "type": "number"
                  },
                  "PercentualTaxaPlataforma": {
                    "type": "number"
                  },
                  "PercentualImpostoMunicipal": {
                    "type": "number"
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "CategoriaId",
                  "Regiao",
                  "DistanciaMinimaKm",
                  "TarifaMinima",
                  "PrecoKm",
                  "PercentualTaxaPlataforma",
                  "PercentualImpostoMunicipal",
                  "Ativa"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/admin/price-rules/{id}": {
      "put": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "UpdatePriceRule",
        "operationId": "MobilityAdmin_UpdatePriceRule",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "CategoriaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Regiao": {
                    "type": "string"
                  },
                  "DistanciaMinimaKm": {
                    "type": "number"
                  },
                  "TarifaMinima": {
                    "type": "number"
                  },
                  "PrecoKm": {
                    "type": "number"
                  },
                  "PercentualTaxaPlataforma": {
                    "type": "number"
                  },
                  "PercentualImpostoMunicipal": {
                    "type": "number"
                  },
                  "Ativa": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "CategoriaId",
                  "Regiao",
                  "DistanciaMinimaKm",
                  "TarifaMinima",
                  "PrecoKm",
                  "PercentualTaxaPlataforma",
                  "PercentualImpostoMunicipal",
                  "Ativa"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "DeletePriceRule",
        "operationId": "MobilityAdmin_DeletePriceRule",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/rides": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "ListRides",
        "operationId": "MobilityAdmin_ListRides",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clientId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "driverId",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/deliveries": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "ListDeliveries",
        "operationId": "MobilityAdmin_ListDeliveries",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/metrics": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "Metrics",
        "operationId": "MobilityAdmin_Metrics",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/complaints": {
      "get": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "ListComplaints",
        "operationId": "MobilityAdmin_ListComplaints",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/admin/complaints/{id}": {
      "patch": {
        "tags": [
          "MobilityAdmin"
        ],
        "summary": "HandleComplaint",
        "operationId": "MobilityAdmin_HandleComplaint",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Status": {
                    "type": "string"
                  },
                  "Resposta": {
                    "type": "string"
                  }
                },
                "required": [
                  "Status"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/delivery": {
      "post": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Pede a entrega de um pedido. Idempotente por (referenciaTipo, referenciaId). O cliente pede para si; um Parceiro pede em nome de um cliente (fica como emissor); Admin/Financeiro/Suporte podem tudo.",
        "operationId": "MobilityDelivery_Request",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "403": {
            "description": "Sem permissão"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ClienteId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ReferenciaTipo": {
                    "type": "string"
                  },
                  "ReferenciaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Coleta": {
                    "type": "string"
                  },
                  "Destino": {
                    "type": "string"
                  },
                  "ParceiroId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Descricao": {
                    "type": "string"
                  },
                  "DestinatarioNome": {
                    "type": "string"
                  },
                  "DestinatarioTelefone": {
                    "type": "string"
                  },
                  "TipoVeiculoExigido": {
                    "type": "string"
                  },
                  "ValorFrete": {
                    "type": "number"
                  }
                },
                "required": [
                  "ClienteId",
                  "ReferenciaTipo",
                  "ReferenciaId",
                  "Coleta",
                  "Destino"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/delivery/{id}": {
      "get": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "GetDelivery",
        "operationId": "MobilityDelivery_GetDelivery",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/delivery/by-reference/{tipo}/{referenciaId}": {
      "get": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Quem acompanha a logística do pedido: cliente, emissor, ou (sincronização entre sistemas) Admin/Financeiro/Suporte.",
        "operationId": "MobilityDelivery_GetByReference",
        "parameters": [
          {
            "name": "tipo",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "referenciaId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/delivery/mine": {
      "get": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Entregas do usuário (como cliente ou parceiro emissor).",
        "operationId": "MobilityDelivery_Mine",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/delivery/{id}/cancelar": {
      "post": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Cancel",
        "operationId": "MobilityDelivery_Cancel",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Motivo": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/mobility/delivery/{id}/avaliar": {
      "post": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Rate",
        "operationId": "MobilityDelivery_Rate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nota": {
                    "type": "integer"
                  },
                  "Comentario": {
                    "type": "string"
                  }
                },
                "required": [
                  "Nota"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/delivery/available": {
      "get": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Entregas aguardando entregador, compatíveis com o veículo, das mais próximas às mais distantes.",
        "operationId": "MobilityDelivery_Available",
        "parameters": [
          {
            "name": "lat",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "lng",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/delivery/{id}/aceitar": {
      "post": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Accept",
        "operationId": "MobilityDelivery_Accept",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/delivery/{id}/coletar": {
      "post": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Pickup",
        "operationId": "MobilityDelivery_Pickup",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/delivery/{id}/concluir": {
      "post": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Complete",
        "operationId": "MobilityDelivery_Complete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ComprovanteUrl": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/mobility/delivery/{id}/falha": {
      "post": {
        "tags": [
          "MobilityDelivery"
        ],
        "summary": "Fail",
        "operationId": "MobilityDelivery_Fail",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Motivo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Motivo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/drivers/register": {
      "post": {
        "tags": [
          "MobilityDrivers"
        ],
        "summary": "Cadastra documentos e veículo. O motorista só opera depois que um admin aprova.",
        "operationId": "MobilityDrivers_Register",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Cpf": {
                    "type": "string"
                  },
                  "Cnh": {
                    "type": "string"
                  },
                  "CategoriaCnh": {
                    "type": "string"
                  },
                  "Veiculo": {
                    "type": "string"
                  },
                  "Telefone": {
                    "type": "string"
                  },
                  "ValidadeCnh": {
                    "type": "string",
                    "format": "date"
                  },
                  "DocumentoCnhUrl": {
                    "type": "string"
                  },
                  "DocumentoVeiculoUrl": {
                    "type": "string"
                  },
                  "SelfieUrl": {
                    "type": "string"
                  },
                  "ChavePix": {
                    "type": "string"
                  },
                  "TipoChavePix": {
                    "type": "string"
                  },
                  "FotoUrl": {
                    "type": "string"
                  }
                },
                "required": [
                  "Nome",
                  "Cpf",
                  "Cnh",
                  "CategoriaCnh",
                  "Veiculo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/drivers/me": {
      "get": {
        "tags": [
          "MobilityDrivers"
        ],
        "summary": "GetMe",
        "operationId": "MobilityDrivers_GetMe",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "MobilityDrivers"
        ],
        "summary": "UpdateMe",
        "operationId": "MobilityDrivers_UpdateMe",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Cnh": {
                    "type": "string"
                  },
                  "CategoriaCnh": {
                    "type": "string"
                  },
                  "Veiculo": {
                    "type": "string"
                  },
                  "Telefone": {
                    "type": "string"
                  },
                  "ValidadeCnh": {
                    "type": "string",
                    "format": "date"
                  },
                  "ChavePix": {
                    "type": "string"
                  },
                  "TipoChavePix": {
                    "type": "string"
                  },
                  "FotoUrl": {
                    "type": "string"
                  },
                  "DocumentoCnhUrl": {
                    "type": "string"
                  },
                  "DocumentoVeiculoUrl": {
                    "type": "string"
                  },
                  "SelfieUrl": {
                    "type": "string"
                  }
                },
                "required": [
                  "Nome",
                  "Cnh",
                  "CategoriaCnh",
                  "Veiculo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/drivers/me/availability": {
      "put": {
        "tags": [
          "MobilityDrivers"
        ],
        "summary": "Fica online/offline. Ao ficar online sem posição gravada, informe latitude e longitude.",
        "operationId": "MobilityDrivers_SetAvailability",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Online": {
                    "type": "boolean"
                  },
                  "Latitude": {
                    "type": "number"
                  },
                  "Longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "Online"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/drivers/me/location": {
      "patch": {
        "tags": [
          "MobilityDrivers"
        ],
        "summary": "Atualiza a posição (a cada ~5 s). Prefira o hub /hubs/mobility (AtualizarLocalizacao).",
        "operationId": "MobilityDrivers_UpdateLocation",
        "parameters": [],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Latitude": {
                    "type": "number"
                  },
                  "Longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "Latitude",
                  "Longitude"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/drivers/me/earnings": {
      "get": {
        "tags": [
          "MobilityDrivers"
        ],
        "summary": "Earnings",
        "operationId": "MobilityDrivers_Earnings",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/pricing/categories": {
      "get": {
        "tags": [
          "MobilityPricing"
        ],
        "summary": "Categorias de corrida ativas.",
        "operationId": "MobilityPricing_Categories",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/mobility/pricing/estimate": {
      "post": {
        "tags": [
          "MobilityPricing"
        ],
        "summary": "Distância, tempo e tarifa estimada de cada categoria para o trajeto.",
        "operationId": "MobilityPricing_Estimate",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "OrigemLat": {
                    "type": "number"
                  },
                  "OrigemLng": {
                    "type": "number"
                  },
                  "DestinoLat": {
                    "type": "number"
                  },
                  "DestinoLng": {
                    "type": "number"
                  },
                  "OrigemEndereco": {
                    "type": "string"
                  }
                },
                "required": [
                  "OrigemLat",
                  "OrigemLng",
                  "DestinoLat",
                  "DestinoLng"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/rides/nearby-drivers": {
      "get": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Motoristas disponíveis por perto (só posição e distância — sem identificação).",
        "operationId": "MobilityRides_NearbyDrivers",
        "parameters": [
          {
            "name": "lat",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "lng",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Pede uma corrida. Sem motorista por perto, a corrida volta com status SemMotorista.",
        "operationId": "MobilityRides_Request",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "CategoriaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Origem": {
                    "type": "string"
                  },
                  "Destino": {
                    "type": "string"
                  },
                  "MetodoPagamento": {
                    "type": "string"
                  },
                  "AgendamentoId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ClienteTelefone": {
                    "type": "string"
                  }
                },
                "required": [
                  "CategoriaId",
                  "Origem",
                  "Destino"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/rides/{id}": {
      "get": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "GetRide",
        "operationId": "MobilityRides_GetRide",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides/active": {
      "get": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Corrida em curso do usuário (como cliente ou motorista). 204 quando não há.",
        "operationId": "MobilityRides_GetActive",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides/history": {
      "get": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "History",
        "operationId": "MobilityRides_History",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides/{id}/cancelar": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Cancela (cliente ou motorista da corrida). Corrida em andamento não pode ser cancelada.",
        "operationId": "MobilityRides_Cancel",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Motivo": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/mobility/rides/{id}/cobranca": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Vincula a cobrança (Payments) à corrida. Só o cliente da corrida (ou um administrador).",
        "operationId": "MobilityRides_LinkCharge",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "CobrancaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "MetodoPagamento": {
                    "type": "string"
                  }
                },
                "required": [
                  "CobrancaId",
                  "MetodoPagamento"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/rides/{id}/avaliar": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Avalia a corrida: o cliente avalia o motorista; o motorista avalia o cliente.",
        "operationId": "MobilityRides_Rate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nota": {
                    "type": "integer"
                  },
                  "Comentario": {
                    "type": "string"
                  }
                },
                "required": [
                  "Nota"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/rides/{id}/messages": {
      "get": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "GetMessages",
        "operationId": "MobilityRides_GetMessages",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "SendMessage",
        "operationId": "MobilityRides_SendMessage",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Conteudo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Conteudo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/rides/{id}/reclamacoes": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "OpenComplaint",
        "operationId": "MobilityRides_OpenComplaint",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Categoria": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  }
                },
                "required": [
                  "Categoria",
                  "Descricao"
                ]
              }
            }
          }
        }
      }
    },
    "/api/mobility/rides/{id}/aceitar": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Accept",
        "operationId": "MobilityRides_Accept",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides/{id}/recusar": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Decline",
        "operationId": "MobilityRides_Decline",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides/{id}/chegou": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Arrived",
        "operationId": "MobilityRides_Arrived",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides/{id}/iniciar": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Start",
        "operationId": "MobilityRides_Start",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/mobility/rides/{id}/concluir": {
      "post": {
        "tags": [
          "MobilityRides"
        ],
        "summary": "Complete",
        "operationId": "MobilityRides_Complete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/notifications/{userId}": {
      "get": {
        "tags": [
          "Notifications"
        ],
        "summary": "Gets all notifications for a user.",
        "operationId": "Notifications_GetNotifications",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "unreadOnly",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/notifications/{notificationId}/read": {
      "patch": {
        "tags": [
          "Notifications"
        ],
        "summary": "Marks a notification as read.",
        "operationId": "Notifications_MarkAsRead",
        "parameters": [
          {
            "name": "notificationId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/openfinance/summary": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Retorna o saldo acumulado e extrato sincronizado de todas as contas no PostgreSQL.",
        "operationId": "OpenFinance_GetSummary",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/openfinance/sync": {
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Executa a sincronização em tempo real das contas e transações via MCP e persiste no PostgreSQL.",
        "operationId": "OpenFinance_Sync",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/openfinance/accounts": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Lista as contas bancárias ativas persistidas no PostgreSQL.",
        "operationId": "OpenFinance_ListAccounts",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/openfinance/transactions": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Lista transações bancárias com paginação e filtro por conta no PostgreSQL.",
        "operationId": "OpenFinance_ListTransactions",
        "parameters": [
          {
            "name": "accountId",
            "in": "query",
            "required": false,
            "description": "Identificador da conta bancária para filtragem.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "description": "Quantidade máxima de transações a retornar (padrão 50).",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/openfinance/transactions/{id}/conciliate": {
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Marca uma transação bancária como conciliada no PostgreSQL.",
        "operationId": "OpenFinance_ConciliateTransaction",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identificador interno ou externo da transação.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ConciliatedBy": {
                    "type": "string"
                  },
                  "Notes": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/openfinance/sessions": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Lista o histórico de chamadas e atendimentos de diagnóstico BPO com IA.",
        "operationId": "OpenFinance_ListSessions",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": true,
            "description": "Limite de sessões a retornar (padrão 20).",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Persiste uma sessão de atendimento de voz e transcrições no PostgreSQL.",
        "operationId": "OpenFinance_SaveSession",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "CallSid": {
                    "type": "string"
                  },
                  "CallerName": {
                    "type": "string"
                  },
                  "CallerPhone": {
                    "type": "string"
                  },
                  "DurationSeconds": {
                    "type": "integer"
                  },
                  "Summary": {
                    "type": "string"
                  },
                  "ActionItems": {
                    "type": "string"
                  },
                  "Sentiment": {
                    "type": "string"
                  },
                  "Transcriptions": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "CallerName",
                  "DurationSeconds"
                ]
              }
            }
          }
        }
      }
    },
    "/api/openfinance/goals": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Lista as metas financeiras e planejamento orçamentário do cliente no PostgreSQL.",
        "operationId": "OpenFinance_ListGoals",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Cria ou atualiza uma meta financeira do cliente no PostgreSQL.",
        "operationId": "OpenFinance_UpsertGoal",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Id": {
                    "type": "string"
                  },
                  "Title": {
                    "type": "string"
                  },
                  "TargetAmount": {
                    "type": "number"
                  },
                  "CurrentAmount": {
                    "type": "number"
                  },
                  "Deadline": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "Status": {
                    "type": "string"
                  },
                  "Category": {
                    "type": "string"
                  }
                },
                "required": [
                  "Title",
                  "TargetAmount",
                  "CurrentAmount"
                ]
              }
            }
          }
        }
      }
    },
    "/api/openfinance/missions": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Lista as missões de rotina financeira e tarefas pendentes no PostgreSQL.",
        "operationId": "OpenFinance_ListMissions",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Cria ou atualiza uma missão financeira de rotina no PostgreSQL.",
        "operationId": "OpenFinance_UpsertMission",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Id": {
                    "type": "string"
                  },
                  "Title": {
                    "type": "string"
                  },
                  "Description": {
                    "type": "string"
                  },
                  "Status": {
                    "type": "string"
                  },
                  "DueDate": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "AssignedTo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Title"
                ]
              }
            }
          }
        }
      }
    },
    "/api/openfinance/connect-url": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Retorna a URL de conexão do widget Pluggy Connect para autenticação de novas contas bancárias.",
        "operationId": "OpenFinance_GetConnectUrl",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/openfinance/config": {
      "get": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Obtém a configuração ativa e endpoints do toolkit MCP Open Finance.",
        "operationId": "OpenFinance_GetConfig",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Atualiza os endpoints e credenciais do MCP Open Finance no PostgreSQL.",
        "operationId": "OpenFinance_UpdateConfig",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ToolkitUrl": {
                    "type": "string"
                  },
                  "ConnectUrl": {
                    "type": "string"
                  },
                  "AuthToken": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/openfinance/test": {
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Testa a conectividade com o MCP Toolkit e serviços bancários.",
        "operationId": "OpenFinance_TestConnection",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/openfinance/clear-mock": {
      "post": {
        "tags": [
          "OpenFinance"
        ],
        "summary": "Desativa dados de mock e ativa operação 100% real no PostgreSQL.",
        "operationId": "OpenFinance_ClearMock",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/partner/profiles": {
      "get": {
        "tags": [
          "PartnerDirectory"
        ],
        "summary": "Lists partners. Only active partners (and only public fields) unless an Admin asks for includeInactive=true. Proximity search needs lat, lon and radiusKm and sorts by distance; otherwise sorted by rating.",
        "operationId": "PartnerDirectory_ListProfiles",
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "specialty",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lat",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "lon",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "radiusKm",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/partner/profile": {
      "post": {
        "tags": [
          "PartnerProfile"
        ],
        "summary": "Creates the partner profile of a user (onboarding, open to any signed-in user). The user is the caller; an Admin may create it for another user by sending ProfessionalId. The profile starts pending (IsActive=false, hidden from public listings) until an Admin activates it; profiles created by an Admin start active. One profile per user: 409 when it already exists.",
        "operationId": "PartnerProfile_CreateProfile",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Specialty": {
                    "type": "string"
                  },
                  "ProfessionalId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "Nome",
                  "Specialty"
                ]
              }
            }
          }
        }
      }
    },
    "/api/partner/profile/{partnerId}/status": {
      "patch": {
        "tags": [
          "PartnerProfile"
        ],
        "summary": "Activates/deactivates a partner (Admin). Inactive partners disappear from public listings.",
        "operationId": "PartnerProfile_SetStatus",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "IsActive": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "IsActive"
                ]
              }
            }
          }
        }
      }
    },
    "/api/partner/profile/{partnerId}": {
      "get": {
        "tags": [
          "PartnerProfile"
        ],
        "summary": "Returns the full profile of a partner professional by ID.",
        "operationId": "PartnerProfile_GetProfile",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "PartnerProfile"
        ],
        "summary": "Updates personal, address, and banking details of a partner.",
        "operationId": "PartnerProfile_UpdateProfile",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Cpf": {
                    "type": "string"
                  },
                  "BirthDate": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "Phone": {
                    "type": "string"
                  },
                  "InstagramUrl": {
                    "type": "string"
                  },
                  "Bio": {
                    "type": "string"
                  },
                  "WorkingHours": {
                    "type": "string"
                  },
                  "ZipCode": {
                    "type": "string"
                  },
                  "Street": {
                    "type": "string"
                  },
                  "Number": {
                    "type": "string"
                  },
                  "Complement": {
                    "type": "string"
                  },
                  "Neighborhood": {
                    "type": "string"
                  },
                  "City": {
                    "type": "string"
                  },
                  "State": {
                    "type": "string"
                  },
                  "Lat": {
                    "type": "number"
                  },
                  "Lon": {
                    "type": "number"
                  },
                  "BankName": {
                    "type": "string"
                  },
                  "BankBranch": {
                    "type": "string"
                  },
                  "BankAccount": {
                    "type": "string"
                  },
                  "BankAccountType": {
                    "type": "string"
                  },
                  "PixKeyType": {
                    "type": "string"
                  },
                  "PixKey": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/partner/profile/{partnerId}/auto-accept": {
      "patch": {
        "tags": [
          "PartnerProfile"
        ],
        "summary": "Toggles the auto-acceptance configuration for new booking requests.",
        "operationId": "PartnerProfile_SetAutoAccept",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "AutoAccept": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "AutoAccept"
                ]
              }
            }
          }
        }
      }
    },
    "/api/partner/services/{partnerId}": {
      "get": {
        "tags": [
          "PartnerServices"
        ],
        "summary": "Lists all services registered by a specific partner.",
        "operationId": "PartnerServices_GetServices",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/partner/services": {
      "post": {
        "tags": [
          "PartnerServices"
        ],
        "summary": "Creates a new service offering for a partner.",
        "operationId": "PartnerServices_CreateService",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "PartnerId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Nome": {
                    "type": "string"
                  },
                  "Description": {
                    "type": "string"
                  },
                  "Price": {
                    "type": "number"
                  },
                  "Duration": {
                    "type": "string"
                  }
                },
                "required": [
                  "PartnerId",
                  "Nome",
                  "Price",
                  "Duration"
                ]
              }
            }
          }
        }
      }
    },
    "/api/partner/services/{serviceId}": {
      "put": {
        "tags": [
          "PartnerServices"
        ],
        "summary": "Updates an existing service's details, name, or price.",
        "operationId": "PartnerServices_UpdateService",
        "parameters": [
          {
            "name": "serviceId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Description": {
                    "type": "string"
                  },
                  "Price": {
                    "type": "number"
                  },
                  "Duration": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "PartnerServices"
        ],
        "summary": "Deletes a service offered by a partner. Fails with conflict if there are active appointments booked for this service.",
        "operationId": "PartnerServices_DeleteService",
        "parameters": [
          {
            "name": "serviceId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/payments": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Inicia um pagamento (PIX, Boleto ou Cartão de Crédito). Suporta os gateways: Asaas, MercadoPago e PagBank. Se omitido, o gateway é selecionado dinamicamente via Vault.",
        "operationId": "Payments_CriarPagamento",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "429": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "PedidoId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ClienteId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ParceiroId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ValorTotal": {
                    "type": "number"
                  },
                  "Metodo": {
                    "type": "string"
                  },
                  "Provedor": {
                    "type": "string"
                  },
                  "PayerEmail": {
                    "type": "string"
                  },
                  "PayerName": {
                    "type": "string"
                  },
                  "PayerCpfCnpj": {
                    "type": "string"
                  },
                  "PercentualRepasseParceiro": {
                    "type": "number"
                  },
                  "TaxaFixaPlataforma": {
                    "type": "number"
                  },
                  "DataVencimento": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "required": [
                  "PedidoId",
                  "ClienteId",
                  "ParceiroId",
                  "ValorTotal",
                  "Metodo",
                  "PercentualRepasseParceiro",
                  "TaxaFixaPlataforma"
                ]
              }
            }
          }
        }
      }
    },
    "/api/payments/{cobrancaId}/refund": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Solicita estorno total ou parcial de um pagamento. O gateway correto é selecionado automaticamente com base no registro da cobrança.",
        "operationId": "Payments_EstornarPagamento",
        "parameters": [
          {
            "name": "cobrancaId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Valor": {
                    "type": "number"
                  },
                  "Motivo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Valor",
                  "Motivo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/payments/{transactionId}/status": {
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "Consulta o status atual de uma cobrança pelo transactionId do gateway.",
        "operationId": "Payments_ConsultarStatus",
        "parameters": [
          {
            "name": "transactionId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/payments/{cobrancaId}/splits": {
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "Lista todos os splits de repasse de uma cobrança. Retorna os detalhes do repasse ao parceiro: valor bruto, taxa da plataforma, valor líquido e status (Pendente / Liquidado / Bloqueado).",
        "operationId": "Payments_ListarSplits",
        "parameters": [
          {
            "name": "cobrancaId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/payments/splits/{splitId}/liquidar": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Liquida manualmente um split, confirmando o repasse ao parceiro. Normalmente a liquidação ocorre automaticamente via webhook de pagamento confirmado. Use este endpoint para liquidações administrativas ou fallback.",
        "operationId": "Payments_LiquidarSplit",
        "parameters": [
          {
            "name": "splitId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/payments/splits/{splitId}/bloquear": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Bloqueia um split, impedindo o repasse ao parceiro. Usado em casos de chargeback, suspeita de fraude ou disputa. O webhook de chargeback bloqueia automaticamente; use este endpoint para bloqueio manual.",
        "operationId": "Payments_BloquearSplit",
        "parameters": [
          {
            "name": "splitId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/payments/parceiros/{parceiroId}/repasses": {
      "get": {
        "tags": [
          "Payments"
        ],
        "summary": "Retorna o extrato paginado de repasses de um parceiro. Suporta filtro por status: Pendente, Liquidado, Bloqueado, Cancelado.",
        "operationId": "Payments_ListarRepasses",
        "parameters": [
          {
            "name": "parceiroId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/refunds": {
      "get": {
        "tags": [
          "Refunds"
        ],
        "summary": "Lists all refund requests across the platform (Admin role).",
        "operationId": "Refunds_ListRefunds",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Refunds"
        ],
        "summary": "Submits a new refund request for an appointment.",
        "operationId": "Refunds_CreateRefund",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "AppointmentId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ClientId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "PartnerId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Amount": {
                    "type": "number"
                  },
                  "Reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "AppointmentId",
                  "ClientId",
                  "PartnerId",
                  "Amount",
                  "Reason"
                ]
              }
            }
          }
        }
      }
    },
    "/api/refunds/partner/{partnerId}": {
      "get": {
        "tags": [
          "Refunds"
        ],
        "summary": "Lists all refund requests involving a specific partner.",
        "operationId": "Refunds_GetPartnerRefunds",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/refunds/client/{clientId}": {
      "get": {
        "tags": [
          "Refunds"
        ],
        "summary": "Lists all refund requests submitted by a specific client.",
        "operationId": "Refunds_GetClientRefunds",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/refunds/{refundId}/partner-decision": {
      "patch": {
        "tags": [
          "Refunds"
        ],
        "summary": "Records the partner's decision (Aprovado / Rejeitado) on a pending refund. Rejection requires a reason note.",
        "operationId": "Refunds_PartnerDecision",
        "parameters": [
          {
            "name": "refundId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Decision": {
                    "type": "string"
                  },
                  "PartnerNote": {
                    "type": "string"
                  }
                },
                "required": [
                  "Decision"
                ]
              }
            }
          }
        }
      }
    },
    "/api/refunds/{refundId}/admin-decision": {
      "patch": {
        "tags": [
          "Refunds"
        ],
        "summary": "Records the admin's mediation decision on a contested or escalated refund.",
        "operationId": "Refunds_AdminDecision",
        "parameters": [
          {
            "name": "refundId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Decision": {
                    "type": "string"
                  },
                  "AdminNote": {
                    "type": "string"
                  }
                },
                "required": [
                  "Decision"
                ]
              }
            }
          }
        }
      }
    },
    "/api/refunds/{refundId}/contest": {
      "post": {
        "tags": [
          "Refunds"
        ],
        "summary": "Contests a partner's rejected refund decision, escalating to platform administration.",
        "operationId": "Refunds_ContestRefund",
        "parameters": [
          {
            "name": "refundId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ContestReason": {
                    "type": "string"
                  },
                  "ContestedBy": {
                    "type": "string"
                  }
                },
                "required": [
                  "ContestReason",
                  "ContestedBy"
                ]
              }
            }
          }
        }
      }
    },
    "/api/reviews/professionals/{partnerId}": {
      "get": {
        "tags": [
          "Reviews"
        ],
        "summary": "Lists public reviews received by a professional partner.",
        "operationId": "Reviews_GetProfessionalReviews",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/reviews/professional": {
      "post": {
        "tags": [
          "Reviews"
        ],
        "summary": "Submits a review and rating for a professional. Updates average rating & review count.",
        "operationId": "Reviews_CreateProfessionalReview",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "PartnerId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "CustomerId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Rating": {
                    "type": "integer"
                  },
                  "Comment": {
                    "type": "string"
                  }
                },
                "required": [
                  "PartnerId",
                  "CustomerId",
                  "Rating"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/availability": {
      "get": {
        "tags": [
          "Scheduling"
        ],
        "summary": "Consulta os slots de horário disponíveis para um parceiro em uma data. Cache de 30s, variado por partnerId + date.",
        "operationId": "Scheduling_GetAvailability",
        "parameters": [
          {
            "name": "partnerId",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/scheduling/appointments": {
      "post": {
        "tags": [
          "Scheduling"
        ],
        "summary": "Cria um agendamento consumindo um slot disponível. Pagamento pode ser via créditos ou avulso.",
        "operationId": "Scheduling_BookAppointment",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ClienteId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "ParceiroId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "OfertaId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "SlotId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "TipoPagamento": {
                    "type": "string"
                  },
                  "ValorAvulso": {
                    "type": "number"
                  },
                  "QuantidadeCreditos": {
                    "type": "integer"
                  }
                },
                "required": [
                  "ClienteId",
                  "ParceiroId",
                  "OfertaId",
                  "SlotId",
                  "TipoPagamento",
                  "ValorAvulso",
                  "QuantidadeCreditos"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/appointments/{appointmentId}": {
      "get": {
        "tags": [
          "Scheduling"
        ],
        "summary": "Retorna os detalhes de um agendamento pelo ID.",
        "operationId": "Scheduling_GetAppointment",
        "parameters": [
          {
            "name": "appointmentId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Scheduling"
        ],
        "summary": "Cancela um agendamento. Aplica política de estorno de créditos conforme configuração.",
        "operationId": "Scheduling_CancelAppointment",
        "parameters": [
          {
            "name": "appointmentId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Motivo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Motivo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/appointments/{appointmentId}/reschedule": {
      "put": {
        "tags": [
          "Scheduling"
        ],
        "summary": "Remarca um agendamento para outro slot disponível.",
        "operationId": "Scheduling_RescheduleAppointment",
        "parameters": [
          {
            "name": "appointmentId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "NovoSlotId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "NovoSlotId"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/partners/{partnerId}/availability/weekly": {
      "get": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Grade semanal de atendimento do parceiro (horários locais do parceiro).",
        "operationId": "SchedulingPartner_GetWeeklyAvailability",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "put": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Substitui a grade semanal inteira. Faixas de um mesmo dia não podem se sobrepor e a duração precisa caber na faixa. Lista vazia limpa a grade. DiaSemana: Monday … Sunday.",
        "operationId": "SchedulingPartner_SetWeeklyAvailability",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Regras": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "Regras"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/partners/{partnerId}/availability/exceptions": {
      "get": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "GetExceptions",
        "operationId": "SchedulingPartner_GetExceptions",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Marca uma data como indisponível (folga, feriado, férias). Os horários livres dessa data que já existem são bloqueados; os já reservados permanecem. UtcOffsetMinutes: fuso do parceiro (ex.: -180).",
        "operationId": "SchedulingPartner_AddException",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "409": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Data": {
                    "type": "string",
                    "format": "date"
                  },
                  "Motivo": {
                    "type": "string"
                  },
                  "UtcOffsetMinutes": {
                    "type": "integer"
                  }
                },
                "required": [
                  "Data",
                  "Motivo",
                  "UtcOffsetMinutes"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/partners/{partnerId}/availability/exceptions/{date}": {
      "delete": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Remove a exceção da data. Os horários que ela bloqueou continuam bloqueados até serem liberados.",
        "operationId": "SchedulingPartner_RemoveException",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/scheduling/partners/{partnerId}/slots/generate": {
      "post": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Gera os horários das próximas Semanas (1 a 12) a partir de DataInicio (data local do parceiro), pela grade semanal e respeitando as exceções. Idempotente: horários que já existem não são recriados.",
        "operationId": "SchedulingPartner_GenerateSlots",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "DataInicio": {
                    "type": "string",
                    "format": "date"
                  },
                  "Semanas": {
                    "type": "integer"
                  },
                  "UtcOffsetMinutes": {
                    "type": "integer"
                  }
                },
                "required": [
                  "DataInicio",
                  "Semanas",
                  "UtcOffsetMinutes"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/partners/{partnerId}/slots": {
      "get": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Calendário do parceiro: todos os horários (livres, reservados e bloqueados) em [from, to). Máx. 62 dias.",
        "operationId": "SchedulingPartner_GetSlots",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/scheduling/slots/{slotId}/block": {
      "post": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "BlockSlot",
        "operationId": "SchedulingPartner_BlockSlot",
        "parameters": [
          {
            "name": "slotId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Motivo": {
                    "type": "string"
                  }
                },
                "required": [
                  "Motivo"
                ]
              }
            }
          }
        }
      }
    },
    "/api/scheduling/slots/{slotId}/unblock": {
      "post": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "UnblockSlot",
        "operationId": "SchedulingPartner_UnblockSlot",
        "parameters": [
          {
            "name": "slotId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/scheduling/appointments/client/{clientId}": {
      "get": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Agendamentos de um cliente, do mais recente ao mais antigo. status: PendentePagamento, Confirmado, EmAndamento, Concluido, Cancelado, NoShow.",
        "operationId": "SchedulingPartner_GetClientAppointments",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/scheduling/appointments/partner/{partnerId}": {
      "get": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "Agendamentos de um parceiro no intervalo [from, to) (UTC), do mais cedo ao mais tarde.",
        "operationId": "SchedulingPartner_GetPartnerAppointments",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/scheduling/appointments/{appointmentId}/complete": {
      "post": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "O parceiro conclui o atendimento (agendamento confirmado ou em andamento).",
        "operationId": "SchedulingPartner_CompleteAppointment",
        "parameters": [
          {
            "name": "appointmentId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/scheduling/appointments/{appointmentId}/no-show": {
      "post": {
        "tags": [
          "SchedulingPartner"
        ],
        "summary": "O parceiro registra que o cliente não compareceu.",
        "operationId": "SchedulingPartner_MarkNoShow",
        "parameters": [
          {
            "name": "appointmentId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "404": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/skills": {
      "get": {
        "tags": [
          "Skills"
        ],
        "summary": "List skills with optional filtering by category, name and active status. Results are paginated (default page size = 20).",
        "operationId": "Skills_ListSkills",
        "parameters": [
          {
            "name": "categoria",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nome",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "apenasAtivas",
            "in": "query",
            "required": false,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      },
      "post": {
        "tags": [
          "Skills"
        ],
        "summary": "Create a new skill in the catalogue. Requires Admin role.",
        "operationId": "Skills_CreateSkill",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Categoria": {
                    "type": "string"
                  },
                  "Descricao": {
                    "type": "string"
                  }
                },
                "required": [
                  "Nome",
                  "Categoria"
                ]
              }
            }
          }
        }
      }
    },
    "/api/skills/{skillId}": {
      "get": {
        "tags": [
          "Skills"
        ],
        "summary": "Get a single skill by its ID.",
        "operationId": "Skills_GetSkill",
        "parameters": [
          {
            "name": "skillId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/skills/{skillId}/status": {
      "patch": {
        "tags": [
          "Skills"
        ],
        "summary": "Activate or deactivate a skill (soft toggle). Requires Admin role.",
        "operationId": "Skills_SetSkillStatus",
        "parameters": [
          {
            "name": "skillId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "ativa",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/skills/partners/{partnerId}": {
      "get": {
        "tags": [
          "Skills"
        ],
        "summary": "List all skills assigned to a specific partner.",
        "operationId": "Skills_GetPartnerSkills",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      },
      "post": {
        "tags": [
          "Skills"
        ],
        "summary": "Assign an existing skill to a partner. Requires Admin role or the partner themselves.",
        "operationId": "Skills_AssignSkill",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "SkillId": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "SkillId"
                ]
              }
            }
          }
        }
      }
    },
    "/api/skills/partners/{partnerId}/{skillId}": {
      "delete": {
        "tags": [
          "Skills"
        ],
        "summary": "Remove a skill assignment from a partner. Requires Admin role or the partner themselves.",
        "operationId": "Skills_RemoveSkill",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "skillId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/spaces/partner/{partnerId}": {
      "get": {
        "tags": [
          "Spaces"
        ],
        "summary": "Lists physical spaces registered by a partner. Publicly accessible.",
        "operationId": "Spaces_GetSpacesByPartner",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/spaces": {
      "post": {
        "tags": [
          "Spaces"
        ],
        "summary": "Registers a new workspace/physical space for a partner.",
        "operationId": "Spaces_CreateSpace",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "PartnerId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Nome": {
                    "type": "string"
                  },
                  "Address": {
                    "type": "string"
                  },
                  "About": {
                    "type": "string"
                  },
                  "Photos": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "IsActive": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "PartnerId",
                  "Nome",
                  "Address",
                  "About",
                  "IsActive"
                ]
              }
            }
          }
        }
      }
    },
    "/api/spaces/{spaceId}": {
      "put": {
        "tags": [
          "Spaces"
        ],
        "summary": "Updates details, address, or photos of a registered space.",
        "operationId": "Spaces_UpdateSpace",
        "parameters": [
          {
            "name": "spaceId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Nome": {
                    "type": "string"
                  },
                  "Address": {
                    "type": "string"
                  },
                  "About": {
                    "type": "string"
                  },
                  "Photos": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "IsActive": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Spaces"
        ],
        "summary": "Deletes a registered workspace.",
        "operationId": "Spaces_DeleteSpace",
        "parameters": [
          {
            "name": "spaceId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/spaces/{spaceId}/toggle-active": {
      "patch": {
        "tags": [
          "Spaces"
        ],
        "summary": "Toggles the active status of a workspace.",
        "operationId": "Spaces_ToggleActive",
        "parameters": [
          {
            "name": "spaceId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "isActive",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/tenants/token": {
      "post": {
        "tags": [
          "TenantToken"
        ],
        "summary": "Emite um token de acesso JWT (10 min) a partir de uma API Key válida do Tenant. Suporta formatos JSON e application/x-www-form-urlencoded.",
        "operationId": "TenantToken_IssueToken",
        "parameters": [],
        "responses": {
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/transfers": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Lists all transfer requests across the platform (Admin role).",
        "operationId": "Transfers_ListTransfers",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      },
      "post": {
        "tags": [
          "Transfers"
        ],
        "summary": "Submits a new withdrawal/transfer request to a PIX key.",
        "operationId": "Transfers_RequestTransfer",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Erro"
          },
          "409": {
            "description": "Erro"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "PartnerId": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "Amount": {
                    "type": "number"
                  },
                  "PixKey": {
                    "type": "string"
                  },
                  "PixKeyType": {
                    "type": "string"
                  }
                },
                "required": [
                  "PartnerId",
                  "Amount",
                  "PixKey",
                  "PixKeyType"
                ]
              }
            }
          }
        }
      }
    },
    "/api/transfers/partner/{partnerId}": {
      "get": {
        "tags": [
          "Transfers"
        ],
        "summary": "Returns financial balance and transfer history for a specific partner.",
        "operationId": "Transfers_GetPartnerBalance",
        "parameters": [
          {
            "name": "partnerId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ]
      }
    },
    "/api/transfers/{transferId}/status": {
      "patch": {
        "tags": [
          "Transfers"
        ],
        "summary": "Updates the status of a transfer request (Admin role).",
        "operationId": "Transfers_UpdateTransferStatus",
        "parameters": [
          {
            "name": "transferId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "404": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão"
          }
        },
        "security": [
          {
            "Bearer": []
          },
          {
            "ApiKey": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Status": {
                    "type": "string"
                  },
                  "AdminNote": {
                    "type": "string"
                  }
                },
                "required": [
                  "Status"
                ]
              }
            }
          }
        }
      }
    },
    "/api/webhooks/asaas": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Webhook do Asaas. Valida assinatura via header \"asaas-access-token\" (HMAC-SHA256 Hex).",
        "operationId": "Webhooks_AsaasWebhook",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "401": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/webhooks/mercadopago": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Webhook do Mercado Pago. Valida assinatura via header \"x-signature\" (HMAC-SHA256 Hex).",
        "operationId": "Webhooks_MercadoPagoWebhook",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "401": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    },
    "/api/webhooks/pagbank": {
      "post": {
        "tags": [
          "Webhooks"
        ],
        "summary": "Webhook do PagBank (PagSeguro). Valida assinatura via header \"x-pagbank-signature\" (HMAC-SHA256 Base64). Payload: { charges: [{ id, status, amount: { value (centavos) } }] }",
        "operationId": "Webhooks_PagBankWebhook",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Sucesso"
          },
          "401": {
            "description": "Erro"
          },
          "400": {
            "description": "Dados inválidos ou regra de negócio violada"
          }
        },
        "security": []
      }
    }
  },
  "components": {
    "securitySchemes": {
      "Bearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Token JWT emitido via POST /api/auth/login ou POST /api/tenants/token"
      },
      "ApiKey": {
        "type": "apiKey",
        "name": "X-Api-Key",
        "in": "header",
        "description": "Chave de API do tenant (sk_live_... ou pk_live_...)"
      }
    }
  }
}