{
  "openapi": "3.1.0",
  "info": {
    "title": "SimpleCRM API",
    "version": "1.0.0",
    "description": "API REST do SimpleCRM — plataforma CRM gratuita para gerenciar contatos, empresas, negócios, tarefas, produtos, faturas, cotações, atividades, relatórios e webhooks.",
    "contact": {
      "name": "SimpleCRM",
      "url": "https://crm.acessocomercial.com"
    }
  },
  "servers": [
    {
      "url": "https://crm.acessocomercial.com/api",
      "description": "Produção / Production"
    }
  ],
  "security": [
    {
      "apiKeyHeader": []
    }
  ],
  "tags": [
    {
      "name": "Contatos",
      "description": "CRUD completo para gerenciamento de contatos e leads."
    },
    {
      "name": "Empresas",
      "description": "Gerenciamento de empresas e organizações vinculadas aos contatos."
    },
    {
      "name": "Negócios",
      "description": "Funil de vendas: criação, atualização de estágio e acompanhamento de negócios."
    },
    {
      "name": "Tarefas",
      "description": "Gerenciamento de tarefas, follow-ups e calendário de atividades."
    },
    {
      "name": "Produtos",
      "description": "Catálogo de produtos e serviços com preços e categorias."
    },
    {
      "name": "Faturas",
      "description": "Criação, acompanhamento e gestão de faturas e pagamentos."
    },
    {
      "name": "Cotações",
      "description": "Propostas comerciais com conversão direta para faturas."
    },
    {
      "name": "Atividades",
      "description": "Registro de atividades e timeline de interações com contatos e negócios."
    },
    {
      "name": "Relatórios",
      "description": "Dashboards, métricas de vendas e análises de performance."
    },
    {
      "name": "Webhooks",
      "description": "Consulte seus webhooks configurados. Criação, edição e exclusão são feitas pela interface web."
    }
  ],
  "paths": {
    "/api/contacts": {
      "get": {
        "summary": "Listar Contatos",
        "description": "Retorna a lista paginada de contatos do usuário. Suporta busca por nome ou email.",
        "operationId": "contacts_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página (padrão: 1)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (padrão: 20, máx: 100)"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Busca por nome ou email"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Contatos"
        ]
      },
      "post": {
        "summary": "Criar Contato",
        "description": "Cria um novo contato vinculado ao usuário autenticado.",
        "operationId": "contacts_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nome completo do contato"
                  },
                  "email": {
                    "type": "string",
                    "description": "Email do contato"
                  },
                  "phone": {
                    "type": "string",
                    "description": "Telefone com DDD (+5511...)"
                  },
                  "position": {
                    "type": "string",
                    "description": "Cargo ou função"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Observações livres"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Contatos"
        ]
      }
    },
    "/api/contacts/{id}": {
      "get": {
        "summary": "Buscar Contato por ID",
        "description": "Retorna os dados completos de um contato específico. Apenas o proprietário pode visualizar.",
        "operationId": "contacts_get",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Contatos"
        ]
      },
      "put": {
        "summary": "Atualizar Contato",
        "description": "Atualiza os dados de um contato existente. Envie apenas os campos que deseja modificar.",
        "operationId": "contacts_update",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nome completo"
                  },
                  "email": {
                    "type": "string",
                    "description": "Email"
                  },
                  "phone": {
                    "type": "string",
                    "description": "Telefone"
                  },
                  "position": {
                    "type": "string",
                    "description": "Cargo"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Observações"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Atualizado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Contatos"
        ]
      },
      "delete": {
        "summary": "Remover Contato",
        "description": "Remove permanentemente um contato. Esta ação não pode ser desfeita.",
        "operationId": "contacts_delete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Removido com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Contatos"
        ]
      }
    },
    "/api/companies": {
      "get": {
        "summary": "Listar Empresas",
        "description": "Retorna a lista paginada de empresas do usuário autenticado.",
        "operationId": "companies_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página (padrão: 1)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (padrão: 20, máx: 100)"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Busca por nome ou email"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Empresas"
        ]
      },
      "post": {
        "summary": "Criar Empresa",
        "description": "Cadastra uma nova empresa.",
        "operationId": "companies_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Razão social ou nome fantasia"
                  },
                  "cnpj": {
                    "type": "string",
                    "description": "CNPJ (formato livre, validado automaticamente)"
                  },
                  "website": {
                    "type": "string",
                    "description": "URL do site"
                  },
                  "industry": {
                    "type": "string",
                    "description": "Setor de atuação"
                  },
                  "size": {
                    "type": "string",
                    "description": "Porte: 1-10, 11-50, 51-200, 201-1000, 1000+"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Observações"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Empresas"
        ]
      }
    },
    "/api/companies/{id}": {
      "get": {
        "summary": "Buscar Empresa por ID",
        "description": "Retorna os dados completos de uma empresa específica.",
        "operationId": "companies_get",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Empresas"
        ]
      },
      "put": {
        "summary": "Atualizar Empresa",
        "description": "Atualiza os dados de uma empresa existente. Envie apenas os campos que deseja modificar.",
        "operationId": "companies_update",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Razão social"
                  },
                  "cnpj": {
                    "type": "string",
                    "description": "CNPJ"
                  },
                  "website": {
                    "type": "string",
                    "description": "URL do site"
                  },
                  "industry": {
                    "type": "string",
                    "description": "Setor de atuação"
                  },
                  "size": {
                    "type": "string",
                    "description": "Porte"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Observações"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Atualizado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Empresas"
        ]
      },
      "delete": {
        "summary": "Remover Empresa",
        "description": "Remove permanentemente uma empresa. Contatos vinculados não são excluídos.",
        "operationId": "companies_delete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Removido com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Empresas"
        ]
      }
    },
    "/api/deals": {
      "get": {
        "summary": "Listar Negócios",
        "description": "Retorna todos os negócios do funil de vendas do usuário, com paginação e filtros.",
        "operationId": "deals_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (máx: 100)"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtrar por status: open, won, lost"
          },
          {
            "name": "stage",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtrar por estágio do funil"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Negócios"
        ]
      },
      "post": {
        "summary": "Criar Negócio",
        "description": "Cria um novo negócio no funil de vendas. O status inicial é sempre \"open\".",
        "operationId": "deals_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Título do negócio"
                  },
                  "value": {
                    "type": "number",
                    "description": "Valor estimado em BRL"
                  },
                  "stage": {
                    "type": "string",
                    "description": "Estágio inicial do funil"
                  },
                  "probability": {
                    "type": "integer",
                    "description": "Probabilidade de fechamento (0-100)"
                  },
                  "companyId": {
                    "type": "string",
                    "description": "ID da empresa relacionada"
                  },
                  "contactIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "IDs dos contatos envolvidos"
                  },
                  "expectedCloseDate": {
                    "type": "string",
                    "description": "Data prevista de fechamento (ISO 8601)"
                  }
                },
                "required": [
                  "title",
                  "value"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Negócios"
        ]
      }
    },
    "/api/deals/{id}": {
      "get": {
        "summary": "Buscar Negócio por ID",
        "description": "Retorna os dados completos de um negócio específico.",
        "operationId": "deals_get",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Negócios"
        ]
      },
      "put": {
        "summary": "Atualizar Negócio",
        "description": "Atualiza dados de um negócio. Use para mover entre estágios do funil ou alterar valores.",
        "operationId": "deals_update",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Título"
                  },
                  "value": {
                    "type": "number",
                    "description": "Valor em BRL"
                  },
                  "stage": {
                    "type": "string",
                    "description": "Estágio do funil"
                  },
                  "status": {
                    "type": "string",
                    "description": "Status: open, won, lost"
                  },
                  "probability": {
                    "type": "integer",
                    "description": "Probabilidade (0-100)"
                  },
                  "expectedCloseDate": {
                    "type": "string",
                    "description": "Data prevista (ISO 8601)"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Atualizado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Negócios"
        ]
      },
      "delete": {
        "summary": "Remover Negócio",
        "description": "Remove permanentemente um negócio do funil de vendas.",
        "operationId": "deals_delete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Removido com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Negócios"
        ]
      }
    },
    "/api/deals/pipeline-stats": {
      "get": {
        "summary": "Estatísticas do Funil de Vendas",
        "description": "Retorna estatísticas agregadas do funil de vendas: total por estágio, valores e contagens.",
        "operationId": "deals_pipeline_stats",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Negócios"
        ]
      }
    },
    "/api/tasks": {
      "get": {
        "summary": "Listar Tarefas",
        "description": "Retorna a lista paginada de tarefas do usuário.",
        "operationId": "tasks_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (máx: 100)"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      },
      "post": {
        "summary": "Criar Tarefa",
        "description": "Cria uma nova tarefa vinculada opcionalmente a um contato ou negócio.",
        "operationId": "tasks_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Título da tarefa"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descrição detalhada"
                  },
                  "dueDate": {
                    "type": "string",
                    "description": "Data de vencimento (ISO 8601)"
                  },
                  "priority": {
                    "type": "string",
                    "description": "Prioridade: low, medium, high"
                  },
                  "contactId": {
                    "type": "string",
                    "description": "ID do contato relacionado"
                  },
                  "dealId": {
                    "type": "string",
                    "description": "ID do negócio relacionado"
                  }
                },
                "required": [
                  "title"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      }
    },
    "/api/tasks/{id}": {
      "get": {
        "summary": "Buscar Tarefa por ID",
        "description": "Retorna os dados completos de uma tarefa específica.",
        "operationId": "tasks_get",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      },
      "put": {
        "summary": "Atualizar Tarefa",
        "description": "Atualiza os dados de uma tarefa existente.",
        "operationId": "tasks_update",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Título"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descrição"
                  },
                  "dueDate": {
                    "type": "string",
                    "description": "Data de vencimento (ISO 8601)"
                  },
                  "priority": {
                    "type": "string",
                    "description": "Prioridade: low, medium, high"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Atualizado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      },
      "delete": {
        "summary": "Remover Tarefa",
        "description": "Remove permanentemente uma tarefa.",
        "operationId": "tasks_delete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Removido com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      }
    },
    "/api/tasks/{id}/complete": {
      "post": {
        "summary": "Marcar como Concluída",
        "description": "Marca uma tarefa como concluída. Define o campo completed como true e registra a data.",
        "operationId": "tasks_complete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Tarefa concluída",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "Sem permissão"
          },
          "404": {
            "description": "Não encontrada"
          }
        },
        "tags": [
          "Tarefas"
        ]
      }
    },
    "/api/tasks/overdue": {
      "get": {
        "summary": "Tarefas Atrasadas",
        "description": "Retorna todas as tarefas cujo prazo já venceu e ainda não foram concluídas.",
        "operationId": "tasks_overdue",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      }
    },
    "/api/tasks/upcoming": {
      "get": {
        "summary": "Tarefas Próximas",
        "description": "Retorna as tarefas com vencimento nos próximos 7 dias.",
        "operationId": "tasks_upcoming",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      }
    },
    "/api/tasks/calendar": {
      "get": {
        "summary": "Calendário de Tarefas",
        "description": "Retorna tarefas agrupadas por data para exibição em calendário.",
        "operationId": "tasks_calendar",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Data início do período (ISO 8601)"
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Data fim do período (ISO 8601)"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Tarefas"
        ]
      }
    },
    "/api/products": {
      "get": {
        "summary": "Listar Produtos",
        "description": "Retorna a lista paginada de produtos do catálogo.",
        "operationId": "products_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página (padrão: 1)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (padrão: 20, máx: 100)"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Busca por nome ou email"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Produtos"
        ]
      },
      "post": {
        "summary": "Criar Produto",
        "description": "Adiciona um novo produto ao catálogo. Integrado com cotações e faturas.",
        "operationId": "products_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nome do produto"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descrição"
                  },
                  "price": {
                    "type": "number",
                    "description": "Preço unitário em BRL"
                  },
                  "sku": {
                    "type": "string",
                    "description": "Código SKU"
                  },
                  "category": {
                    "type": "string",
                    "description": "Categoria"
                  }
                },
                "required": [
                  "name",
                  "price"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Produtos"
        ]
      }
    },
    "/api/products/{id}": {
      "get": {
        "summary": "Buscar Produto por ID",
        "description": "Retorna os dados completos de um produto específico.",
        "operationId": "products_get",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Produtos"
        ]
      },
      "put": {
        "summary": "Atualizar Produto",
        "description": "Atualiza os dados de um produto existente.",
        "operationId": "products_update",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nome"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descrição"
                  },
                  "price": {
                    "type": "number",
                    "description": "Preço unitário em BRL"
                  },
                  "sku": {
                    "type": "string",
                    "description": "Código SKU"
                  },
                  "category": {
                    "type": "string",
                    "description": "Categoria"
                  },
                  "active": {
                    "type": "boolean",
                    "description": "Se o produto está ativo"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Atualizado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Produtos"
        ]
      },
      "delete": {
        "summary": "Remover Produto",
        "description": "Remove permanentemente um produto do catálogo. Faturas e cotações existentes não são afetadas.",
        "operationId": "products_delete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Removido com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Produtos"
        ]
      }
    },
    "/api/invoices": {
      "get": {
        "summary": "Listar Faturas",
        "description": "Retorna a lista paginada de faturas do usuário.",
        "operationId": "invoices_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (máx: 100)"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtrar por status: pending, paid, overdue, cancelled"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Faturas"
        ]
      },
      "post": {
        "summary": "Criar Fatura",
        "description": "Gera uma nova fatura com itens do catálogo de produtos.",
        "operationId": "invoices_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "contactId": {
                    "type": "string",
                    "description": "ID do contato (cliente)"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    },
                    "description": "Lista de itens: { productId, quantity, unitPrice }"
                  },
                  "dueDate": {
                    "type": "string",
                    "description": "Data de vencimento (ISO 8601)"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Observações"
                  }
                },
                "required": [
                  "contactId",
                  "items",
                  "dueDate"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Faturas"
        ]
      }
    },
    "/api/invoices/{id}": {
      "get": {
        "summary": "Buscar Fatura por ID",
        "description": "Retorna os dados completos de uma fatura específica com itens detalhados.",
        "operationId": "invoices_get",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Faturas"
        ]
      },
      "put": {
        "summary": "Atualizar Fatura",
        "description": "Atualiza dados de uma fatura. Use para alterar status, itens ou data de vencimento.",
        "operationId": "invoices_update",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "description": "Status: pending, paid, overdue, cancelled"
                  },
                  "dueDate": {
                    "type": "string",
                    "description": "Nova data de vencimento (ISO 8601)"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Observações"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Atualizado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Faturas"
        ]
      },
      "delete": {
        "summary": "Remover Fatura",
        "description": "Remove permanentemente uma fatura. Apenas faturas com status \"pending\" ou \"cancelled\" podem ser removidas.",
        "operationId": "invoices_delete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Removido com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Faturas"
        ]
      }
    },
    "/api/invoices/overdue": {
      "get": {
        "summary": "Faturas Vencidas",
        "description": "Retorna todas as faturas pendentes cujo prazo já expirou.",
        "operationId": "invoices_overdue",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Faturas"
        ]
      }
    },
    "/api/quotes": {
      "get": {
        "summary": "Listar Cotações",
        "description": "Retorna a lista paginada de cotações do usuário.",
        "operationId": "quotes_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (máx: 100)"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filtrar por status: draft, sent, accepted, rejected, converted"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Cotações"
        ]
      },
      "post": {
        "summary": "Criar Cotação",
        "description": "Gera uma proposta comercial com itens do catálogo.",
        "operationId": "quotes_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "contactId": {
                    "type": "string",
                    "description": "ID do contato"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    },
                    "description": "Itens: { productId, quantity, unitPrice, discount }"
                  },
                  "validUntil": {
                    "type": "string",
                    "description": "Data de validade (ISO 8601)"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Condições comerciais"
                  }
                },
                "required": [
                  "contactId",
                  "items"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Cotações"
        ]
      }
    },
    "/api/quotes/{id}": {
      "get": {
        "summary": "Buscar Cotação por ID",
        "description": "Retorna os dados completos de uma cotação específica com itens detalhados.",
        "operationId": "quotes_get",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Registro encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Cotações"
        ]
      },
      "put": {
        "summary": "Atualizar Cotação",
        "description": "Atualiza dados de uma cotação. Use para alterar status, itens ou validade.",
        "operationId": "quotes_update",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "description": "Status: draft, sent, accepted, rejected"
                  },
                  "validUntil": {
                    "type": "string",
                    "description": "Nova data de validade (ISO 8601)"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Condições comerciais"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Atualizado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Cotações"
        ]
      },
      "delete": {
        "summary": "Remover Cotação",
        "description": "Remove permanentemente uma cotação. Apenas cotações com status \"draft\" podem ser removidas.",
        "operationId": "quotes_delete",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "200": {
            "description": "Removido com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          },
          "403": {
            "description": "Sem permissão (não é o proprietário)"
          },
          "404": {
            "description": "Não encontrado"
          }
        },
        "tags": [
          "Cotações"
        ]
      }
    },
    "/api/quotes/{id}/convert-to-invoice": {
      "post": {
        "summary": "Converter em Fatura",
        "description": "Converte uma cotação aceita em fatura. Itens, valores e condições são copiados automaticamente.",
        "operationId": "quotes_convert",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          }
        ],
        "responses": {
          "201": {
            "description": "Fatura gerada a partir da cotação",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Cotação não pode ser convertida (status inválido)"
          },
          "404": {
            "description": "Cotação não encontrada"
          }
        },
        "tags": [
          "Cotações"
        ]
      }
    },
    "/api/activities": {
      "post": {
        "summary": "Registrar Atividade",
        "description": "Registra uma nova atividade vinculada a um contato, empresa ou negócio.",
        "operationId": "activities_create",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "Tipo: call, email, meeting, note, task"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descrição da atividade"
                  },
                  "relatedTo": {
                    "type": "string",
                    "description": "ID da entidade relacionada (contato, empresa ou negócio)"
                  },
                  "relatedType": {
                    "type": "string",
                    "description": "Tipo da entidade: contact, company, deal"
                  },
                  "metadata": {
                    "type": "object",
                    "description": "Dados adicionais livres (ex: duração da ligação)"
                  }
                },
                "required": [
                  "type",
                  "description",
                  "relatedTo",
                  "relatedType"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Criado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos"
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Atividades"
        ]
      }
    },
    "/api/activities/recent": {
      "get": {
        "summary": "Atividades Recentes",
        "description": "Retorna as atividades mais recentes do usuário autenticado.",
        "operationId": "activities_recent",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Quantidade de atividades (padrão: 10, máx: 100)"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Atividades"
        ]
      }
    },
    "/api/activities/entity/{entityId}": {
      "get": {
        "summary": "Atividades por Entidade",
        "description": "Retorna todas as atividades vinculadas a um contato, empresa ou negócio específico.",
        "operationId": "activities_by_entity",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID do recurso (hex 24 chars) / Resource ID (24-char hex)"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número da página"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Itens por página (máx: 100)"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Atividades"
        ]
      }
    },
    "/api/reports/dashboard": {
      "get": {
        "summary": "Dashboard Geral",
        "description": "Retorna as principais métricas do CRM: contatos, negócios, receita e tarefas.",
        "operationId": "reports_dashboard",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Relatórios"
        ]
      }
    },
    "/api/reports/deal-conversion": {
      "get": {
        "summary": "Taxa de Conversão",
        "description": "Retorna métricas de conversão do funil de vendas.",
        "operationId": "reports_conversion",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Relatórios"
        ]
      }
    },
    "/api/reports/task-completion": {
      "get": {
        "summary": "Conclusão de Tarefas",
        "description": "Retorna métricas de conclusão de tarefas: total, concluídas, atrasadas e taxa de conclusão.",
        "operationId": "reports_task_completion",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Relatórios"
        ]
      }
    },
    "/api/reports/pipeline": {
      "get": {
        "summary": "Relatório do Funil de Vendas",
        "description": "Retorna análise detalhada do funil de vendas com métricas por estágio.",
        "operationId": "reports_pipeline",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Relatórios"
        ]
      }
    },
    "/api/webhooks": {
      "get": {
        "summary": "Listar Webhooks",
        "description": "Retorna todos os webhooks configurados pelo usuário. Para criar, editar ou remover webhooks, use a interface web do SimpleCRM.",
        "operationId": "webhooks_list",
        "security": [
          {
            "apiKeyHeader": []
          },
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Lista retornada com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Não autenticado"
          }
        },
        "tags": [
          "Webhooks"
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKeyHeader": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "API key com prefixo crm_sk_ / API key prefixed with crm_sk_"
      },
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API key usada como Bearer token / API key used as Bearer token"
      }
    }
  },
  "webhooks": {
    "entityEvent": {
      "post": {
        "summary": "Notificação de evento webhook / Webhook event notification",
        "description": "SimpleCRM envia requisições POST para sua URL de webhook quando eventos ocorrem. Eventos disponíveis: contact.created, contact.updated, contact.deleted, company.created, company.updated, company.deleted, deal.created, deal.updated, deal.deleted, task.created, task.completed, task.deleted, invoice.created, invoice.updated, invoice.paid, quote.created, quote.updated, product.created, product.updated, product.deleted",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "Tipo do evento / Event type",
                    "enum": [
                      "contact.created",
                      "contact.updated",
                      "contact.deleted",
                      "company.created",
                      "company.updated",
                      "company.deleted",
                      "deal.created",
                      "deal.updated",
                      "deal.deleted",
                      "task.created",
                      "task.completed",
                      "task.deleted",
                      "invoice.created",
                      "invoice.updated",
                      "invoice.paid",
                      "quote.created",
                      "quote.updated",
                      "product.created",
                      "product.updated",
                      "product.deleted"
                    ]
                  },
                  "timestamp": {
                    "type": "integer",
                    "description": "Unix timestamp em segundos / Unix timestamp in seconds"
                  },
                  "data": {
                    "type": "object",
                    "description": "Payload do evento (varia por tipo) / Event payload (varies by type)"
                  }
                },
                "required": [
                  "event",
                  "timestamp",
                  "data"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Webhook recebido com sucesso / Webhook received successfully"
          }
        }
      }
    }
  }
}
