{
    "openapi": "3.0.3",
    "info": {
        "title": "TerceirizaChat REST API",
        "description": "API RESTful oficial do **TerceirizaChat** para integração com sistemas externos, automações (n8n, Make, Zapier), CRMs, ERPs, envio automatizado de mensagens WhatsApp e **disparo completo de e-mails transacionais (com protocolo, templates e anexos)**.\n\n### Autenticação\nTodas as requisições autenticadas devem incluir a chave de API no cabeçalho:\n* `X-API-KEY: tc_...` ou\n* `Authorization: Bearer tc_...`\n\nVocê pode gerar e gerenciar suas chaves de API acessando o painel em **Configurações > Chaves de API**.",
        "version": "1.1.0",
        "contact": {
            "name": "Suporte TerceirizaChat",
            "url": "https://chat.terceirizario.com.br"
        }
    },
    "servers": [
        {
            "url": "https://chat.terceirizario.com.br/api/v1",
            "description": "Servidor de Produção API v1"
        }
    ],
    "components": {
        "securitySchemes": {
            "ApiKeyAuth": {
                "type": "apiKey",
                "in": "header",
                "name": "X-API-KEY",
                "description": "Chave de API do workspace gerada no painel."
            },
            "BearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "description": "Bearer token gerado no painel."
            }
        },
        "schemas": {
            "ApiResponse": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "example": "success"
                    },
                    "message": {
                        "type": "string",
                        "example": "Operação realizada com sucesso."
                    }
                }
            },
            "ErrorResponse": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "example": "error"
                    },
                    "message": {
                        "type": "string",
                        "example": "Mensagem descritiva do erro."
                    }
                }
            },
            "Contact": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "example": 12
                    },
                    "name": {
                        "type": "string",
                        "example": "Maria Silva"
                    },
                    "phone": {
                        "type": "string",
                        "example": "5521999998888"
                    },
                    "email": {
                        "type": "string",
                        "example": "maria@email.com"
                    },
                    "status": {
                        "type": "string",
                        "example": "lead"
                    },
                    "created_at": {
                        "type": "string",
                        "example": "2026-08-30 00:00:00"
                    }
                }
            },
            "Message": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "example": 450
                    },
                    "conversation_id": {
                        "type": "integer",
                        "example": 30
                    },
                    "direction": {
                        "type": "string",
                        "enum": [
                            "inbound",
                            "outbound"
                        ],
                        "example": "outbound"
                    },
                    "type": {
                        "type": "string",
                        "example": "text"
                    },
                    "content": {
                        "type": "string",
                        "example": "Olá, tudo bem?"
                    },
                    "status": {
                        "type": "string",
                        "example": "sent"
                    },
                    "created_at": {
                        "type": "string",
                        "example": "2026-08-30 00:00:00"
                    }
                }
            },
            "EmailSendRequest": {
                "type": "object",
                "required": [
                    "to_email",
                    "subject",
                    "body_html"
                ],
                "properties": {
                    "to_email": {
                        "type": "string",
                        "format": "email",
                        "example": "cliente@empresa.com.br",
                        "description": "E-mail do destinatário"
                    },
                    "to_name": {
                        "type": "string",
                        "example": "Carlos Ferreira",
                        "description": "Nome do destinatário (opcional)"
                    },
                    "subject": {
                        "type": "string",
                        "example": "Confirmação do seu Pedido #9821",
                        "description": "Assunto do e-mail"
                    },
                    "body_html": {
                        "type": "string",
                        "example": "<h2>Olá Carlos!</h2><p>Seu pedido foi faturado e enviado.</p>",
                        "description": "Conteúdo em HTML formatado do e-mail"
                    },
                    "from_name": {
                        "type": "string",
                        "example": "Atendimento Loja",
                        "description": "Nome customizado do remetente (opcional)"
                    },
                    "from_email": {
                        "type": "string",
                        "format": "email",
                        "example": "sac@empresa.com.br",
                        "description": "E-mail de envio customizado (opcional)"
                    },
                    "reply_to": {
                        "type": "string",
                        "format": "email",
                        "example": "respostas@empresa.com.br",
                        "description": "E-mail para resposta direta (opcional)"
                    },
                    "protocol": {
                        "type": "string",
                        "example": "202610061830001234",
                        "description": "Protocolo customizado ou deixe vazio para gerar automaticamente"
                    },
                    "sync_inbox": {
                        "type": "boolean",
                        "example": true,
                        "description": "Se verdadeiro (padrão), cria/sincroniza o atendimento no Inbox"
                    },
                    "attachments": {
                        "type": "array",
                        "description": "Lista de anexos codificados em Base64",
                        "items": {
                            "type": "object",
                            "required": [
                                "filename",
                                "content_base64"
                            ],
                            "properties": {
                                "filename": {
                                    "type": "string",
                                    "example": "fatura_9821.pdf"
                                },
                                "mime_type": {
                                    "type": "string",
                                    "example": "application/pdf"
                                },
                                "content_base64": {
                                    "type": "string",
                                    "example": "JVBERi0xLjQKJcTl8uXr..."
                                }
                            }
                        }
                    }
                }
            },
            "EmailTemplateSendRequest": {
                "type": "object",
                "required": [
                    "to_email"
                ],
                "properties": {
                    "to_email": {
                        "type": "string",
                        "format": "email",
                        "example": "cliente@empresa.com.br"
                    },
                    "to_name": {
                        "type": "string",
                        "example": "Carlos Ferreira"
                    },
                    "template_id": {
                        "type": "integer",
                        "example": 3,
                        "description": "ID do modelo de e-mail"
                    },
                    "template_name": {
                        "type": "string",
                        "example": "Boas-vindas VIP",
                        "description": "Nome do modelo (caso não informe o ID)"
                    },
                    "variables": {
                        "type": "object",
                        "example": {
                            "codigo": "849201",
                            "plano": "Enterprise Pro"
                        },
                        "description": "Variáveis dinâmicas para substituição no modelo (ex: {codigo}, {plano})"
                    }
                }
            }
        }
    },
    "security": [
        {
            "ApiKeyAuth": []
        },
        {
            "BearerAuth": []
        }
    ],
    "paths": {
        "/ping": {
            "get": {
                "tags": [
                    "Status & Autenticação"
                ],
                "summary": "Testar Conexão e Validade da Chave de API",
                "description": "Verifica se a chave de API fornecida é válida e retorna o workspace correspondente.",
                "responses": {
                    "200": {
                        "description": "Chave válida e workspace ativo",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "API TerceirizaChat online e autenticada!",
                                    "workspace": {
                                        "id": 1,
                                        "name": "Minha Empresa"
                                    },
                                    "timestamp": "2026-08-30 00:00:00"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Chave não fornecida"
                    },
                    "403": {
                        "description": "Chave inválida ou revogada"
                    }
                }
            }
        },
        "/messages/send-text": {
            "post": {
                "tags": [
                    "Mensagens & WhatsApp"
                ],
                "summary": "Enviar Mensagem de Texto",
                "description": "Envia uma mensagem de texto WhatsApp para qualquer número (formato DDI+DDD+Número, ex: 5521999998888). Cria automaticamente o contato e a conversa caso não existam.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "phone",
                                    "message"
                                ],
                                "properties": {
                                    "phone": {
                                        "type": "string",
                                        "description": "Número com DDI e DDD (somente dígitos ou formatado)",
                                        "example": "5521999998888"
                                    },
                                    "message": {
                                        "type": "string",
                                        "description": "Texto da mensagem a ser enviada",
                                        "example": "Olá! Segue a confirmação do seu agendamento."
                                    },
                                    "contact_name": {
                                        "type": "string",
                                        "description": "Nome do contato (opcional, para criação)",
                                        "example": "João da Silva"
                                    },
                                    "instance_name": {
                                        "type": "string",
                                        "description": "Nome da instância Evolution API (opcional, usa a conectada por padrão)",
                                        "example": "instancia_whatsapp"
                                    },
                                    "channel_id": {
                                        "type": "integer",
                                        "description": "ID do canal (opcional, usa o canal WhatsApp ativo por padrão)",
                                        "example": 1
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Mensagem enviada com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Mensagem enviada com sucesso.",
                                    "data": {
                                        "message_id": 1024,
                                        "conversation_id": 88,
                                        "contact_id": 15,
                                        "status": "sent"
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Telefone ou mensagem ausentes"
                    }
                }
            }
        },
        "/messages/send-media": {
            "post": {
                "tags": [
                    "Mensagens & WhatsApp"
                ],
                "summary": "Enviar Imagem, PDF ou Arquivo",
                "description": "Envia arquivo de mídia (imagem, documento PDF, áudio ou vídeo) via URL pública ou Base64.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "phone",
                                    "media_url",
                                    "media_type"
                                ],
                                "properties": {
                                    "phone": {
                                        "type": "string",
                                        "example": "5521999998888"
                                    },
                                    "media_url": {
                                        "type": "string",
                                        "description": "URL direta do arquivo ou link público",
                                        "example": "https://exemplo.com/documento.pdf"
                                    },
                                    "media_type": {
                                        "type": "string",
                                        "enum": [
                                            "image",
                                            "document",
                                            "audio",
                                            "video"
                                        ],
                                        "example": "document"
                                    },
                                    "caption": {
                                        "type": "string",
                                        "description": "Legenda opcional para a mídia",
                                        "example": "Segue a sua fatura em PDF."
                                    },
                                    "file_name": {
                                        "type": "string",
                                        "description": "Nome do arquivo (para documentos)",
                                        "example": "fatura-agosto.pdf"
                                    },
                                    "instance_name": {
                                        "type": "string",
                                        "description": "Nome da instância Evolution API (opcional, usa a conectada por padrão)",
                                        "example": "instancia_whatsapp"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Mídia enviada com sucesso"
                    }
                }
            }
        },
        "/conversations": {
            "get": {
                "tags": [
                    "Conversas & Atendimento"
                ],
                "summary": "Listar Conversas",
                "description": "Retorna as conversas da empresa com suporte a filtros de status, busca por texto e paginação.",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "all",
                                "open",
                                "pending",
                                "closed",
                                "bot"
                            ]
                        },
                        "description": "Filtrar por status"
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Buscar por nome ou telefone"
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 20
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de conversas"
                    }
                }
            }
        },
        "/conversations/{id}": {
            "get": {
                "tags": [
                    "Conversas & Atendimento"
                ],
                "summary": "Obter Detalhes da Conversa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados completos da conversa"
                    },
                    "404": {
                        "description": "Conversa não encontrada"
                    }
                }
            }
        },
        "/conversations/{id}/messages": {
            "get": {
                "tags": [
                    "Conversas & Atendimento"
                ],
                "summary": "Obter Histórico de Mensagens da Conversa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 50
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Histórico de mensagens"
                    }
                }
            },
            "post": {
                "tags": [
                    "Conversas & Atendimento"
                ],
                "summary": "Enviar Mensagem ou Nota na Conversa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "content"
                                ],
                                "properties": {
                                    "content": {
                                        "type": "string",
                                        "example": "Olá! Como posso ajudar?"
                                    },
                                    "type": {
                                        "type": "string",
                                        "enum": [
                                            "text",
                                            "note"
                                        ],
                                        "default": "text",
                                        "description": "text = envia ao cliente; note = nota interna (cliente não vê)"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Mensagem registrada e enviada"
                    }
                }
            }
        },
        "/conversations/{id}/status": {
            "patch": {
                "tags": [
                    "Conversas & Atendimento"
                ],
                "summary": "Alterar Status da Conversa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "status"
                                ],
                                "properties": {
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "open",
                                            "pending",
                                            "closed",
                                            "bot"
                                        ],
                                        "example": "closed"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Status atualizado com sucesso"
                    }
                }
            }
        },
        "/conversations/{id}/assign": {
            "post": {
                "tags": [
                    "Conversas & Atendimento"
                ],
                "summary": "Atribuir Atendente à Conversa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "user_id"
                                ],
                                "properties": {
                                    "user_id": {
                                        "type": "integer",
                                        "description": "ID do usuário/atendente ou null para desatribuir",
                                        "example": 3
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Atribuição realizada"
                    }
                }
            }
        },
        "/contacts": {
            "get": {
                "tags": [
                    "Contatos & CRM"
                ],
                "summary": "Listar Contatos",
                "parameters": [
                    {
                        "name": "search",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 1
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de contatos"
                    }
                }
            },
            "post": {
                "tags": [
                    "Contatos & CRM"
                ],
                "summary": "Criar ou Atualizar Contato",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "phone"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "example": "Carlos Eduardo"
                                    },
                                    "phone": {
                                        "type": "string",
                                        "example": "5511988887777"
                                    },
                                    "email": {
                                        "type": "string",
                                        "example": "carlos@empresa.com"
                                    },
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "lead",
                                            "customer",
                                            "archived"
                                        ],
                                        "default": "lead"
                                    },
                                    "tags": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "example": [
                                            "VIP",
                                            "Interesse Imóvel"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Contato criado/atualizado"
                    }
                }
            }
        },
        "/contacts/{id}": {
            "get": {
                "tags": [
                    "Contatos & CRM"
                ],
                "summary": "Obter Contato por ID",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados do contato"
                    },
                    "404": {
                        "description": "Contato não encontrado"
                    }
                }
            },
            "put": {
                "tags": [
                    "Contatos & CRM"
                ],
                "summary": "Atualizar Dados do Contato",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string"
                                    },
                                    "phone": {
                                        "type": "string"
                                    },
                                    "email": {
                                        "type": "string"
                                    },
                                    "status": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Contato atualizado com sucesso"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Contatos & CRM"
                ],
                "summary": "Excluir Contato",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Contato excluído"
                    }
                }
            }
        },
        "/crm/stages": {
            "get": {
                "tags": [
                    "CRM & Funil"
                ],
                "summary": "Listar Etapas do Funil (Kanban)",
                "responses": {
                    "200": {
                        "description": "Lista de colunas/estágios do CRM"
                    }
                }
            }
        },
        "/crm/deals": {
            "get": {
                "tags": [
                    "CRM & Funil"
                ],
                "summary": "Listar Negócios / Oportunidades",
                "parameters": [
                    {
                        "name": "stage_id",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "contact_id",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de negócios"
                    }
                }
            },
            "post": {
                "tags": [
                    "CRM & Funil"
                ],
                "summary": "Criar Negócio / Oportunidade",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "title",
                                    "stage_id"
                                ],
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "example": "Contrato Plano Empresarial"
                                    },
                                    "stage_id": {
                                        "type": "integer",
                                        "example": 2
                                    },
                                    "contact_id": {
                                        "type": "integer",
                                        "example": 15
                                    },
                                    "value": {
                                        "type": "number",
                                        "example": 1500
                                    },
                                    "notes": {
                                        "type": "string",
                                        "example": "Cliente interessado no pacote anual."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Oportunidade criada com sucesso"
                    }
                }
            }
        },
        "/crm/deals/{id}": {
            "put": {
                "tags": [
                    "CRM & Funil"
                ],
                "summary": "Atualizar ou Mover Negócio de Etapa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string"
                                    },
                                    "stage_id": {
                                        "type": "integer",
                                        "description": "Novo estágio no Kanban"
                                    },
                                    "value": {
                                        "type": "number"
                                    },
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "open",
                                            "won",
                                            "lost"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Negócio atualizado"
                    }
                }
            },
            "delete": {
                "tags": [
                    "CRM & Funil"
                ],
                "summary": "Excluir Negócio",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Negócio removido"
                    }
                }
            }
        },
        "/flows": {
            "get": {
                "tags": [
                    "Automação & Fluxos"
                ],
                "summary": "Listar Fluxos de Automação",
                "responses": {
                    "200": {
                        "description": "Lista de fluxos cadastrados"
                    }
                }
            }
        },
        "/flows/{id}/trigger": {
            "post": {
                "tags": [
                    "Automação & Fluxos"
                ],
                "summary": "Disparar Execução de Fluxo via API",
                "description": "Inicia a execução de um fluxo imediatamente para um número de telefone com parâmetros personalizados.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "phone"
                                ],
                                "properties": {
                                    "phone": {
                                        "type": "string",
                                        "example": "5521999998888"
                                    },
                                    "name": {
                                        "type": "string",
                                        "example": "Roberto"
                                    },
                                    "custom_data": {
                                        "type": "object",
                                        "description": "Variáveis extras para usar dentro do fluxo",
                                        "example": {
                                            "cupom": "PROMO10",
                                            "pedido_id": 504
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Fluxo disparado com sucesso"
                    }
                }
            }
        },
        "/groups": {
            "get": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Listar Grupos Salvos Localmente",
                "description": "Retorna a lista de todos os grupos do WhatsApp armazenados localmente no banco de dados para o workspace.",
                "responses": {
                    "200": {
                        "description": "Lista de grupos retornada com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "total": 2,
                                    "data": [
                                        {
                                            "id": 1,
                                            "group_jid": "1203630439281@g.us",
                                            "subject": "Grupo de Comunicados",
                                            "description": "Grupo oficial de avisos e novidades.",
                                            "picture_url": "https://exemplo.com/foto.jpg",
                                            "participants_count": 15,
                                            "synced_at": "2026-09-09 17:00:00"
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/groups/sync": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Sincronizar Grupos com a Evolution API",
                "description": "Consulta a Evolution API para buscar todos os grupos da instância conectada e atualiza o armazenamento local do sistema.",
                "responses": {
                    "200": {
                        "description": "Sincronização realizada com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Sincronização concluída com sucesso. 5 grupos sincronizados.",
                                    "synced_count": 5,
                                    "synced_at": "2026-09-09 17:50:00"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/groups/create": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Criar Novo Grupo",
                "description": "Cria um novo grupo no WhatsApp com o nome, lista de participantes e descrição informados.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "subject"
                                ],
                                "properties": {
                                    "subject": {
                                        "type": "string",
                                        "description": "Nome do novo grupo",
                                        "example": "Clientes VIP TerceirizaChat"
                                    },
                                    "description": {
                                        "type": "string",
                                        "description": "Descrição do grupo (opcional)",
                                        "example": "Grupo exclusivo para clientes VIP."
                                    },
                                    "participants": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "Lista de telefones dos membros (DDI+DDD+Número)",
                                        "example": [
                                            "5521999998888",
                                            "5511988887777"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Grupo criado com sucesso"
                    }
                }
            }
        },
        "/groups/post": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Enviar Publicação no Grupo ou Aba Inteira",
                "description": "Envia uma mensagem de texto ou arquivo de mídia (com legenda) para um grupo específico ou para todos os grupos ativos de uma Aba/Categoria.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "target_type": {
                                        "type": "string",
                                        "enum": [
                                            "group",
                                            "category"
                                        ],
                                        "description": "Destino da publicação (group ou category)",
                                        "example": "group"
                                    },
                                    "group_jid": {
                                        "type": "string",
                                        "description": "Identificador JID do grupo (necessário se target_type=group)",
                                        "example": "1203630439281@g.us"
                                    },
                                    "category_id": {
                                        "type": "integer",
                                        "description": "ID da Aba/Categoria (necessário se target_type=category)",
                                        "example": 1
                                    },
                                    "message": {
                                        "type": "string",
                                        "description": "Texto da publicação",
                                        "example": "Atenção membros! Hoje às 19h teremos treinamento ao vivo."
                                    },
                                    "media_url": {
                                        "type": "string",
                                        "description": "URL de imagem ou mídia (opcional)",
                                        "example": "https://exemplo.com/banner-treinamento.jpg"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Publicação enviada com sucesso"
                    }
                }
            }
        },
        "/groups/invite-code": {
            "get": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Obter Link de Convite do Grupo",
                "description": "Gera ou obtém o link oficial de convite do grupo do WhatsApp (ex: https://chat.whatsapp.com/...).",
                "parameters": [
                    {
                        "name": "group_jid",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "example": "1203630439281@g.us"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Link retornado com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "invite_url": {
                                            "type": "string",
                                            "example": "https://chat.whatsapp.com/AbCdEfGhIjKlMnOpQrStUv"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/groups/categories": {
            "get": {
                "tags": [
                    "Grupos do WhatsApp - Abas & Categorias"
                ],
                "summary": "Listar Abas de Grupos",
                "description": "Retorna todas as abas/categorias personalizadas cadastradas para organizar grupos.",
                "responses": {
                    "200": {
                        "description": "Lista de abas de grupos"
                    }
                }
            },
            "post": {
                "tags": [
                    "Grupos do WhatsApp - Abas & Categorias"
                ],
                "summary": "Criar ou Editar Aba de Grupos",
                "description": "Cria uma nova aba (ex: Filipe Ret) ou edita uma aba existente.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "id": {
                                        "type": "integer",
                                        "description": "ID da aba (apenas para edição)",
                                        "example": 0
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Nome da aba",
                                        "example": "Filipe Ret"
                                    },
                                    "color": {
                                        "type": "string",
                                        "description": "Cor hexadecimal (opcional)",
                                        "example": "#2563eb"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Aba salva com sucesso"
                    }
                }
            }
        },
        "/groups/assign-category": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp - Abas & Categorias"
                ],
                "summary": "Atribuir Grupo a uma Aba",
                "description": "Vincula um grupo específico do WhatsApp a uma Aba/Categoria existente.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    },
                                    "category_id": {
                                        "type": "integer",
                                        "description": "ID da aba (ou null para remover da aba)",
                                        "example": 1
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Aba do grupo atribuída com sucesso"
                    }
                }
            }
        },
        "/groups/archive": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Arquivar Grupo",
                "description": "Move o grupo para a aba de Arquivados, ocultando-o da lista principal para evitar alterações acidentais.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Grupo arquivado com sucesso"
                    }
                }
            }
        },
        "/groups/unarchive": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Desarquivar Grupo",
                "description": "Restaura um grupo arquivado de volta para a lista principal de grupos ativos.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Grupo desarquivado com sucesso"
                    }
                }
            }
        },
        "/groups/remove-duplicate": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Remover Contato Duplicado do Grupo (por JID)",
                "description": "Remover a presença de um usuário/JID específico de um determinado grupo de WhatsApp.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid",
                                    "jid"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    },
                                    "jid": {
                                        "type": "string",
                                        "description": "JID exato do participante",
                                        "example": "5521999998888@s.whatsapp.net"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Participante removido do grupo"
                    }
                }
            }
        },
        "/groups/participant": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Gerenciar Participantes (Adicionar, Remover, Promover, Rebaixar)",
                "description": "Altera os membros ou privilégios de administradores de um grupo.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid",
                                    "action",
                                    "participants"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    },
                                    "action": {
                                        "type": "string",
                                        "enum": [
                                            "add",
                                            "remove",
                                            "promote",
                                            "demote"
                                        ],
                                        "description": "Ação a ser executada",
                                        "example": "add"
                                    },
                                    "participants": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "description": "Telefones dos participantes",
                                        "example": [
                                            "5521999998888"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Membros atualizados com sucesso"
                    }
                }
            }
        },
        "/groups/picture": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Atualizar Foto de Perfil do Grupo",
                "description": "Altera o ícone/foto de perfil de um grupo do WhatsApp.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid",
                                    "picture_url"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    },
                                    "picture_url": {
                                        "type": "string",
                                        "description": "URL pública ou Base64 da imagem",
                                        "example": "https://exemplo.com/logo-grupo.png"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Foto atualizada com sucesso"
                    }
                }
            }
        },
        "/groups/description": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Atualizar Descrição do Grupo",
                "description": "Altera o texto descritivo do grupo do WhatsApp.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid",
                                    "description"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    },
                                    "description": {
                                        "type": "string",
                                        "example": "Novas regras do grupo e links úteis."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Descrição atualizada com sucesso"
                    }
                }
            }
        },
        "/groups/leave": {
            "post": {
                "tags": [
                    "Grupos do WhatsApp"
                ],
                "summary": "Sair e Excluir Grupo",
                "description": "Remove o número da conta da empresa do grupo e apaga o registro no sistema.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "group_jid"
                                ],
                                "properties": {
                                    "group_jid": {
                                        "type": "string",
                                        "example": "1203630439281@g.us"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Saída do grupo concluída"
                    }
                }
            }
        },
        "/channels": {
            "get": {
                "tags": [
                    "Canais & Conexões"
                ],
                "summary": "Listar Canais e Status de Conexão WhatsApp",
                "responses": {
                    "200": {
                        "description": "Lista de canais com status ativo/inativo"
                    }
                }
            }
        },
        "/webhooks": {
            "get": {
                "tags": [
                    "Webhooks de Saída"
                ],
                "summary": "Listar Webhooks Cadastrados",
                "responses": {
                    "200": {
                        "description": "Lista de webhooks configurados"
                    }
                }
            },
            "post": {
                "tags": [
                    "Webhooks de Saída"
                ],
                "summary": "Criar Novo Webhook",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "url",
                                    "events"
                                ],
                                "properties": {
                                    "url": {
                                        "type": "string",
                                        "example": "https://meusistema.com/webhook-receiver"
                                    },
                                    "events": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "example": [
                                            "message.received",
                                            "contact.created",
                                            "deal.won"
                                        ]
                                    },
                                    "secret": {
                                        "type": "string",
                                        "example": "minha_chave_secreta_assinatura"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Webhook cadastrado"
                    }
                }
            }
        },
        "/webhooks/{id}": {
            "delete": {
                "tags": [
                    "Webhooks de Saída"
                ],
                "summary": "Excluir Webhook",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Webhook removido"
                    }
                }
            }
        },
        "/emails/send": {
            "post": {
                "tags": [
                    "E-mails & Mensageria Transacional"
                ],
                "summary": "Disparar E-mail Individual com Protocolo e Anexos",
                "description": "Envia um e-mail com conteúdo HTML ou texto simples, gera ou preserva automaticamente um **número de protocolo** no assunto (`[PROTOCOLO #YYYYMMDDHHMMSSXXXX]`), conecta via SMTP ou APIs (Brevo, Mailchimp, SendPulse) e sincroniza automaticamente a conversa no Inbox para atendimento unificado.\n\n### Suporte a Anexos\nEnvie múltiplos anexos (PDFs, imagens, planilhas) no array `attachments` em formato Base64.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/EmailSendRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "E-mail enviado e registrado no Inbox com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "E-mail disparado com sucesso! Protocolo: #202610061830159482",
                                    "data": {
                                        "protocol": "202610061830159482",
                                        "subject": "[PROTOCOLO #202610061830159482] Confirmação do seu Pedido #9821",
                                        "to_email": "cliente@empresa.com.br",
                                        "to_name": "Carlos Ferreira",
                                        "provider": "smtp",
                                        "inbox_synced": true,
                                        "conversation_id": 95,
                                        "message_id": 1420
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Erro de conexão SMTP/Provedor ou cota diária excedida",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "error",
                                    "message": "Limite diário de envio de e-mails atingido para o seu plano hoje."
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Campos obrigatórios (to_email, subject, body_html) ausentes ou inválidos"
                    }
                }
            }
        },
        "/emails/send-template": {
            "post": {
                "tags": [
                    "E-mails & Mensageria Transacional"
                ],
                "summary": "Disparar E-mail Usando Modelo / Template Cadastrado",
                "description": "Dispara e-mail a partir de um template pré-configurado no TerceirizaChat (em **E-mails > Modelos**), substituindo automaticamente variáveis como `{nome}`, `{email}`, `{data}` e quaisquer variáveis customizadas fornecidas no parâmetro `variables`.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/EmailTemplateSendRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "E-mail enviado via template com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "E-mail enviado via template com sucesso! Protocolo: #202610061830159482",
                                    "data": {
                                        "template_id": 3,
                                        "template_name": "Boas-vindas VIP",
                                        "protocol": "202610061830159482",
                                        "subject": "[PROTOCOLO #202610061830159482] Seja muito bem-vindo ao TerceirizaChat VIP",
                                        "to_email": "cliente@empresa.com.br"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Template de e-mail não encontrado"
                    }
                }
            }
        },
        "/emails/templates": {
            "get": {
                "tags": [
                    "E-mails & Mensageria Transacional"
                ],
                "summary": "Listar Modelos / Templates de E-mail",
                "description": "Retorna todos os modelos de e-mail disponíveis no workspace com seus respectivos IDs, nomes, assuntos e categorias.",
                "responses": {
                    "200": {
                        "description": "Lista de templates",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "data": [
                                        {
                                            "id": 1,
                                            "name": "Boas-vindas Padrão",
                                            "subject": "Olá {nome}, seja bem-vindo!",
                                            "category": "Geral",
                                            "created_at": "2026-09-01 10:00:00"
                                        },
                                        {
                                            "id": 2,
                                            "name": "Cobrança & Fatura",
                                            "subject": "Sua fatura de {mes} vence hoje",
                                            "category": "Financeiro",
                                            "created_at": "2026-09-05 14:30:00"
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/emails/quota": {
            "get": {
                "tags": [
                    "E-mails & Mensageria Transacional"
                ],
                "summary": "Consultar Cota Diária de E-mails do Plano",
                "description": "Retorna o limite diário de e-mails contratado no plano do workspace, quantidade já enviada no dia e saldo restante antes da renovação automática à meia-noite.",
                "responses": {
                    "200": {
                        "description": "Status da cota diária",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "data": {
                                        "daily_limit": 1000,
                                        "used_today": 142,
                                        "remaining_today": 858,
                                        "is_unlimited": false,
                                        "can_send": true,
                                        "resets_at": "2026-10-06 23:59:59"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/emails/logs": {
            "get": {
                "tags": [
                    "E-mails & Mensageria Transacional"
                ],
                "summary": "Consultar Histórico de Envios de E-mail",
                "description": "Consulta os logs de e-mails enviados pelo workspace com suporte a filtros por protocolo, status (success/failed), destinatário ou busca textual e paginação.",
                "parameters": [
                    {
                        "name": "protocol",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Filtrar por número de protocolo"
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "success",
                                "failed"
                            ]
                        },
                        "description": "Filtrar por status"
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Termo de busca no e-mail, nome ou assunto"
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 1
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 20
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de logs de envio",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "data": [
                                        {
                                            "id": 501,
                                            "to_email": "cliente@empresa.com.br",
                                            "to_name": "Carlos Ferreira",
                                            "subject": "[PROTOCOLO #202610061830159482] Pedido #9821",
                                            "provider": "smtp",
                                            "status": "success",
                                            "error_message": null,
                                            "protocol": "202610061830159482",
                                            "created_at": "2026-10-06 18:30:15"
                                        }
                                    ],
                                    "pagination": {
                                        "total": 1,
                                        "page": 1,
                                        "limit": 20,
                                        "total_pages": 1
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/emails/sync": {
            "post": {
                "tags": [
                    "E-mails & Mensageria Transacional"
                ],
                "summary": "Sincronizar e Buscar Novos E-mails Recebidos com Protocolo",
                "description": "Conecta ao servidor de e-mail (POP3 ou IMAP) configurado no workspace, varre novas mensagens e importa para o Inbox todas as respostas que contenham um protocolo válido emitido pelo sistema.",
                "responses": {
                    "200": {
                        "description": "Sincronização executada com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Verificação concluída: 15 e-mails verificados, 2 novos importados com protocolo para o Inbox, 13 ignorados.",
                                    "data": {
                                        "checked": 15,
                                        "imported": 2,
                                        "ignored": 13
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Leitura desativada ou dados de conexão inválidos"
                    }
                }
            }
        },
        "/whatsapp-channels": {
            "get": {
                "tags": [
                    "Canais do WhatsApp (Newsletters)"
                ],
                "summary": "Listar Canais do WhatsApp Sincronizados",
                "description": "Retorna a lista de canais (newsletters com terminação @newsletter) detectados na conta conectada via QR Code.",
                "responses": {
                    "200": {
                        "description": "Lista de canais obtida com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "count": 2,
                                    "newsletters": [
                                        {
                                            "id": 1,
                                            "newsletter_jid": "12036302837482910@newsletter",
                                            "name": "Canal Oficial Terceiriza Rio",
                                            "description": "Canal com ofertas exclusivas e atualizações semanais.",
                                            "picture_url": "https://pps.whatsapp.net/...",
                                            "invite_code": "0029Va9abc...",
                                            "subscribers_count": 1450,
                                            "role": "admin",
                                            "is_active": 1,
                                            "synced_at": "2026-10-06 18:00:00"
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Nenhum canal Evolution conectado"
                    }
                }
            }
        },
        "/whatsapp-channels/sync": {
            "post": {
                "tags": [
                    "Canais do WhatsApp (Newsletters)"
                ],
                "summary": "Sincronizar Canais do WhatsApp",
                "description": "Varre a instância Evolution API em busca de canais/newsletters pertencentes à conta e atualiza a base local.",
                "responses": {
                    "200": {
                        "description": "Canais sincronizados com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Canais do WhatsApp sincronizados com sucesso!",
                                    "count": 2,
                                    "channels": [
                                        {
                                            "newsletter_jid": "12036302837482910@newsletter",
                                            "name": "Canal Oficial",
                                            "subscribers_count": 1450
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/whatsapp-channels/post": {
            "post": {
                "tags": [
                    "Canais do WhatsApp (Newsletters)"
                ],
                "summary": "Publicar ou Agendar Postagem de Texto no Canal do WhatsApp",
                "description": "Publica mensagens de texto com suporte a formatação (*negrito*, _itálico_, links e emojis) diretamente no canal do WhatsApp ou agenda para um horário futuro.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "newsletter_jid",
                                    "content"
                                ],
                                "properties": {
                                    "newsletter_jid": {
                                        "type": "string",
                                        "example": "12036302837482910@newsletter",
                                        "description": "JID do canal (terminado em @newsletter)"
                                    },
                                    "content": {
                                        "type": "string",
                                        "example": "🔥 Super Promoção de Primavera! Aproveite nosso cupom especial com 20% OFF: https://chat.terceirizario.com.br",
                                        "description": "Texto da mensagem a ser publicada no canal (suporta links, negrito e emojis)"
                                    },
                                    "scheduled_at": {
                                        "type": "string",
                                        "example": "2026-10-10 14:00:00",
                                        "description": "Data e hora no formato YYYY-MM-DD HH:MM:SS para agendamento (opcional)"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Publicação enviada ou agendada com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "post_id": 84,
                                    "published_at": "2026-10-06 18:35:00",
                                    "message": "Mensagem publicada no Canal do WhatsApp com sucesso!"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Dados de envio inválidos"
                    }
                }
            }
        },
        "/whatsapp-channels/posts": {
            "get": {
                "tags": [
                    "Canais do WhatsApp (Newsletters)"
                ],
                "summary": "Listar Histórico de Publicações e Agendamentos",
                "description": "Retorna o histórico de posts transmitidos, agendados ou que falharam nos canais do WhatsApp.",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "published",
                                "scheduled",
                                "failed"
                            ]
                        },
                        "description": "Filtrar por status"
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 30
                        },
                        "description": "Quantidade máxima de registros"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Histórico retornado com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "count": 1,
                                    "posts": [
                                        {
                                            "id": 84,
                                            "newsletter_jid": "12036302837482910@newsletter",
                                            "newsletter_name": "Canal Oficial Terceiriza Rio",
                                            "type": "text",
                                            "content": "🔥 Super Promoção de Primavera! Aproveite nosso cupom especial com 20% OFF: https://chat.terceirizario.com.br",
                                            "media_url": null,
                                            "scheduled_at": null,
                                            "published_at": "2026-10-06 18:35:00",
                                            "status": "published",
                                            "error_message": null,
                                            "created_at": "2026-10-06 18:35:00"
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/whatsapp-channels/posts/{id}": {
            "delete": {
                "tags": [
                    "Canais do WhatsApp (Newsletters)"
                ],
                "summary": "Excluir Publicação do Histórico",
                "description": "Remove o registro de uma publicação (transmitida ou agendada) do histórico do workspace.",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        },
                        "description": "ID do post no histórico"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Publicação removida com sucesso",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Publicação excluída com sucesso.",
                                    "post_id": 84
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Publicação não encontrada"
                    }
                }
            }
        }
    }
}