{"openapi":"3.1.0","info":{"title":"API do FlowDesk","version":"1.0.0","summary":"Consulta dos tickets de atendimento e de grupo do WhatsApp.","description":"API **somente de consulta**: outro sistema da sua empresa (NOC, BI, ERP...) lê os tickets do FlowDesk. Ela não envia mensagens nem muda nada.\n\n**Chave de API:** quem é cliente do FlowDesk cria a chave em *Integrações › API do FlowDesk*. Cada chave só enxerga a própria empresa e só o que os escopos dela permitem. Guarde a chave no servidor do seu sistema, nunca em página ou aplicativo que o usuário final abre.\n\n**Limite:** 120 pedidos por minuto por chave (cabeçalhos `X-RateLimit-Limit` e `X-RateLimit-Remaining`; ao passar, erro 429 com `Retry-After`).\n\n**Datas** em ISO 8601 (UTC na resposta). **Mensagens:** até 1000 por ticket, da abertura ao encerramento; as notas internas da equipe não saem pela API."},"servers":[{"url":"https://www.flowdeskk.com","description":"FlowDesk"}],"security":[{"chaveApi":[]}],"tags":[{"name":"Chave","description":"Conferir a chave de API."},{"name":"Tickets de atendimento","description":"Um ticket por atendimento de cliente (do início ao encerramento). Escopo `tickets.ler`."},{"name":"Tickets de grupo","description":"Um ticket por assunto num grupo do WhatsApp ligado no FlowDesk. Escopo `tickets_grupo.ler`."}],"paths":{"/api/v1":{"get":{"tags":["Chave"],"operationId":"conferirChave","summary":"Conferir a chave","description":"Diz de qual empresa é a chave e o que ela pode consultar. Bom para testar a integração.","responses":{"200":{"description":"A chave funciona.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Chave"},"example":{"dados":{"empresa_id":4,"chave":"Sistema do NOC","escopos":[{"escopo":"tickets.ler","descricao":"Consultar tickets de atendimento"},{"escopo":"tickets_grupo.ler","descricao":"Consultar tickets de grupo"}],"rotas":["GET /api/v1/tickets","GET /api/v1/tickets/{numero}"]}}}}},"401":{"description":"Chave ausente, errada ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":401,"message":"Chave de API inválida ou revogada."}}}},"429":{"description":"Passou de 120 pedidos por minuto. Veja o cabeçalho Retry-After (segundos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":429,"message":"Limite de 120 pedidos por minuto. Tente de novo em 12s."}}}}}}},"/api/v1/tickets":{"get":{"tags":["Tickets de atendimento"],"operationId":"listarTickets","summary":"Listar tickets de atendimento","description":"Lista paginada, da atualização mais recente para a mais antiga (ou o contrário com `ordem=antigos`).","parameters":[{"name":"status","in":"query","required":false,"description":"Situação do ticket.","schema":{"type":"string","enum":["aberto","encerrado"]}},{"name":"aberto_desde","in":"query","required":false,"description":"Abertos a partir desta data (ISO 8601). Ex.: 2026-11-01T00:00:00-03:00","schema":{"type":"string","format":"date-time"}},{"name":"aberto_ate","in":"query","required":false,"description":"Abertos até esta data (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"atualizado_desde","in":"query","required":false,"description":"Só o que mudou desde esta data. Use para sincronizar de tempos em tempos sem baixar tudo de novo.","schema":{"type":"string","format":"date-time"}},{"name":"canal_id","in":"query","required":false,"description":"Número de WhatsApp (canal) do FlowDesk.","schema":{"type":"integer"}},{"name":"ordem","in":"query","required":false,"description":"Por data de atualização: recentes (padrão) ou antigos primeiro.","schema":{"type":"string","enum":["recentes","antigos"],"default":"recentes"}},{"name":"pagina","in":"query","required":false,"description":"Página (começa em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"por_pagina","in":"query","required":false,"description":"Itens por página.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"telefone","in":"query","required":false,"description":"Telefone do cliente (só os números contam: +55 (86) 99999-0000 = 5586999990000).","schema":{"type":"string"}},{"name":"cpf_cnpj","in":"query","required":false,"description":"CPF ou CNPJ do cliente (só os números contam).","schema":{"type":"string"}}],"responses":{"200":{"description":"Tickets da empresa da chave.","content":{"application/json":{"schema":{"type":"object","required":["dados","paginacao"],"properties":{"dados":{"type":"array","items":{"$ref":"#/components/schemas/TicketAtendimento"}},"paginacao":{"$ref":"#/components/schemas/Paginacao"}},"example":{"dados":[{"numero":1000245,"status":"encerrado","cliente":{"nome":"Maria Souza","telefone":"5586999990000","cpf_cnpj":"12345678900"},"canal_id":19,"atendente":"Ana Lima","atendido_pela_ia":false,"tag_atual":"ENCERRADO","motivo_encerramento":{"id":4,"nome":"Problema resolvido"},"aberto_em":"2026-11-02T13:05:00.000Z","atualizado_em":"2026-11-02T13:41:00.000Z","encerrado_em":"2026-11-02T13:41:00.000Z","duracao_minutos":36}],"paginacao":{"pagina":1,"por_pagina":50,"total":1,"total_paginas":1}}},"example":{"dados":[{"numero":1000245,"status":"encerrado","cliente":{"nome":"Maria Souza","telefone":"5586999990000","cpf_cnpj":"12345678900"},"canal_id":19,"atendente":"Ana Lima","atendido_pela_ia":false,"tag_atual":"ENCERRADO","motivo_encerramento":{"id":4,"nome":"Problema resolvido"},"aberto_em":"2026-11-02T13:05:00.000Z","atualizado_em":"2026-11-02T13:41:00.000Z","encerrado_em":"2026-11-02T13:41:00.000Z","duracao_minutos":36}],"paginacao":{"pagina":1,"por_pagina":50,"total":1,"total_paginas":1}}}}},"400":{"description":"Filtro inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":400,"message":"status deve ser \"aberto\" ou \"encerrado\"."}}}},"401":{"description":"Chave ausente, errada ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":401,"message":"Chave de API inválida ou revogada."}}}},"403":{"description":"A chave não tem o escopo desta rota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":403,"message":"Esta chave não tem permissão para: Consultar tickets de atendimento (escopo tickets.ler)."}}}},"429":{"description":"Passou de 120 pedidos por minuto. Veja o cabeçalho Retry-After (segundos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":429,"message":"Limite de 120 pedidos por minuto. Tente de novo em 12s."}}}}}}},"/api/v1/tickets/{numero}":{"get":{"tags":["Tickets de atendimento"],"operationId":"consultarTicket","summary":"Consultar um ticket de atendimento","parameters":[{"name":"numero","in":"path","required":true,"description":"Número do ticket (o mesmo que aparece no FlowDesk).","schema":{"type":"integer"},"example":1000245},{"name":"mensagens","in":"query","required":false,"description":"true para trazer as mensagens do ticket junto.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"O ticket (com `mensagens` e `mensagens_truncadas` quando pedido).","content":{"application/json":{"schema":{"type":"object","properties":{"dados":{"$ref":"#/components/schemas/TicketAtendimento"}}},"example":{"dados":{"numero":1000245,"status":"encerrado","cliente":{"nome":"Maria Souza","telefone":"5586999990000","cpf_cnpj":"12345678900"},"canal_id":19,"atendente":"Ana Lima","atendido_pela_ia":false,"tag_atual":"ENCERRADO","motivo_encerramento":{"id":4,"nome":"Problema resolvido"},"aberto_em":"2026-11-02T13:05:00.000Z","atualizado_em":"2026-11-02T13:41:00.000Z","encerrado_em":"2026-11-02T13:41:00.000Z","duracao_minutos":36}}}}},"401":{"description":"Chave ausente, errada ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":401,"message":"Chave de API inválida ou revogada."}}}},"403":{"description":"A chave não tem o escopo desta rota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":403,"message":"Esta chave não tem permissão para: Consultar tickets de atendimento (escopo tickets.ler)."}}}},"404":{"description":"Não existe nesta empresa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":404,"message":"Ticket 1000245 não encontrado."}}}},"429":{"description":"Passou de 120 pedidos por minuto. Veja o cabeçalho Retry-After (segundos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":429,"message":"Limite de 120 pedidos por minuto. Tente de novo em 12s."}}}}}}},"/api/v1/tickets/{numero}/mensagens":{"get":{"tags":["Tickets de atendimento"],"operationId":"mensagensDoTicket","summary":"Mensagens de um ticket de atendimento","description":"As mensagens trocadas durante o atendimento, em ordem cronológica.","parameters":[{"name":"numero","in":"path","required":true,"description":"Número do ticket (o mesmo que aparece no FlowDesk).","schema":{"type":"integer"},"example":1000245}],"responses":{"200":{"description":"Mensagens do ticket.","content":{"application/json":{"schema":{"type":"object","properties":{"numero":{"type":"integer"},"mensagens":{"type":"array","items":{"$ref":"#/components/schemas/Mensagem"}},"mensagens_truncadas":{"type":"boolean","description":"true quando o ticket tem mais de 1000 mensagens (vêm as primeiras 1000)."}},"example":{"numero":1000245,"mensagens":[{"id":"3EB0A1B2C3D4E5F6","enviada_em":"2026-11-02T13:05:10.000Z","de":"cliente","tipo":"Conversation","texto":"Estou sem internet desde ontem","midia_url":null,"arquivo":null}],"mensagens_truncadas":false}},"example":{"numero":1000245,"mensagens":[{"id":"3EB0A1B2C3D4E5F6","enviada_em":"2026-11-02T13:05:10.000Z","de":"cliente","tipo":"Conversation","texto":"Estou sem internet desde ontem","midia_url":null,"arquivo":null}],"mensagens_truncadas":false}}}},"401":{"description":"Chave ausente, errada ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":401,"message":"Chave de API inválida ou revogada."}}}},"403":{"description":"A chave não tem o escopo desta rota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":403,"message":"Esta chave não tem permissão para: Consultar tickets de atendimento (escopo tickets.ler)."}}}},"404":{"description":"Não existe nesta empresa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":404,"message":"Ticket 1000245 não encontrado."}}}},"429":{"description":"Passou de 120 pedidos por minuto. Veja o cabeçalho Retry-After (segundos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":429,"message":"Limite de 120 pedidos por minuto. Tente de novo em 12s."}}}}}}},"/api/v1/tickets-grupo":{"get":{"tags":["Tickets de grupo"],"operationId":"listarTicketsDeGrupo","summary":"Listar tickets de grupo","description":"Cada assunto num grupo vira um ticket: abre com a mensagem de um participante e encerra pelo atendente ou sozinho, depois de um tempo sem mensagens.","parameters":[{"name":"status","in":"query","required":false,"description":"Situação do ticket.","schema":{"type":"string","enum":["aberto","encerrado"]}},{"name":"aberto_desde","in":"query","required":false,"description":"Abertos a partir desta data (ISO 8601). Ex.: 2026-11-01T00:00:00-03:00","schema":{"type":"string","format":"date-time"}},{"name":"aberto_ate","in":"query","required":false,"description":"Abertos até esta data (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"name":"atualizado_desde","in":"query","required":false,"description":"Só o que mudou desde esta data. Use para sincronizar de tempos em tempos sem baixar tudo de novo.","schema":{"type":"string","format":"date-time"}},{"name":"canal_id","in":"query","required":false,"description":"Número de WhatsApp (canal) do FlowDesk.","schema":{"type":"integer"}},{"name":"ordem","in":"query","required":false,"description":"Por data de atualização: recentes (padrão) ou antigos primeiro.","schema":{"type":"string","enum":["recentes","antigos"],"default":"recentes"}},{"name":"pagina","in":"query","required":false,"description":"Página (começa em 1).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"por_pagina","in":"query","required":false,"description":"Itens por página.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"grupo","in":"query","required":false,"description":"Id do grupo (ex.: 120363225392860006@g.us; só os números contam).","schema":{"type":"string"}}],"responses":{"200":{"description":"Tickets de grupo da empresa da chave.","content":{"application/json":{"schema":{"type":"object","required":["dados","paginacao"],"properties":{"dados":{"type":"array","items":{"$ref":"#/components/schemas/TicketGrupo"}},"paginacao":{"$ref":"#/components/schemas/Paginacao"}},"example":{"dados":[{"numero":5000012,"status":"aberto","grupo":{"nome":"Equipe Técnica","id":"120363225392860006@g.us"},"canal_id":19,"aberto_por":{"nome":"Zé Técnico","telefone":"5586911112222"},"primeira_mensagem":"Cliente 123 sem sinal na rua das Flores","responsavel":"Ana Lima","aberto_em":"2026-11-02T10:00:00.000Z","primeira_resposta_em":"2026-11-02T10:04:00.000Z","minutos_ate_primeira_resposta":4,"ultima_mensagem_em":"2026-11-02T10:25:00.000Z","atualizado_em":"2026-11-02T10:25:00.000Z","encerrado_em":null,"encerrado_por":null,"encerrado_por_nome":null,"motivo_encerramento":null,"nota_encerramento":null,"reaberturas":0,"duracao_minutos":null}],"paginacao":{"pagina":1,"por_pagina":50,"total":1,"total_paginas":1}}},"example":{"dados":[{"numero":5000012,"status":"aberto","grupo":{"nome":"Equipe Técnica","id":"120363225392860006@g.us"},"canal_id":19,"aberto_por":{"nome":"Zé Técnico","telefone":"5586911112222"},"primeira_mensagem":"Cliente 123 sem sinal na rua das Flores","responsavel":"Ana Lima","aberto_em":"2026-11-02T10:00:00.000Z","primeira_resposta_em":"2026-11-02T10:04:00.000Z","minutos_ate_primeira_resposta":4,"ultima_mensagem_em":"2026-11-02T10:25:00.000Z","atualizado_em":"2026-11-02T10:25:00.000Z","encerrado_em":null,"encerrado_por":null,"encerrado_por_nome":null,"motivo_encerramento":null,"nota_encerramento":null,"reaberturas":0,"duracao_minutos":null}],"paginacao":{"pagina":1,"por_pagina":50,"total":1,"total_paginas":1}}}}},"400":{"description":"Filtro inválido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":400,"message":"Data inválida em \"aberto_desde\". Use ISO 8601, ex.: 2026-11-01T10:00:00-03:00."}}}},"401":{"description":"Chave ausente, errada ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":401,"message":"Chave de API inválida ou revogada."}}}},"403":{"description":"A chave não tem o escopo desta rota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":403,"message":"Esta chave não tem permissão para: Consultar tickets de atendimento (escopo tickets.ler)."}}}},"429":{"description":"Passou de 120 pedidos por minuto. Veja o cabeçalho Retry-After (segundos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":429,"message":"Limite de 120 pedidos por minuto. Tente de novo em 12s."}}}}}}},"/api/v1/tickets-grupo/{numero}":{"get":{"tags":["Tickets de grupo"],"operationId":"consultarTicketDeGrupo","summary":"Consultar um ticket de grupo","parameters":[{"name":"numero","in":"path","required":true,"description":"Número do ticket (o mesmo que aparece no FlowDesk).","schema":{"type":"integer"},"example":5000012},{"name":"mensagens","in":"query","required":false,"description":"true para trazer as mensagens do ticket junto.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"O ticket (com `mensagens` e `mensagens_truncadas` quando pedido).","content":{"application/json":{"schema":{"type":"object","properties":{"dados":{"$ref":"#/components/schemas/TicketGrupo"}}},"example":{"dados":{"numero":5000012,"status":"aberto","grupo":{"nome":"Equipe Técnica","id":"120363225392860006@g.us"},"canal_id":19,"aberto_por":{"nome":"Zé Técnico","telefone":"5586911112222"},"primeira_mensagem":"Cliente 123 sem sinal na rua das Flores","responsavel":"Ana Lima","aberto_em":"2026-11-02T10:00:00.000Z","primeira_resposta_em":"2026-11-02T10:04:00.000Z","minutos_ate_primeira_resposta":4,"ultima_mensagem_em":"2026-11-02T10:25:00.000Z","atualizado_em":"2026-11-02T10:25:00.000Z","encerrado_em":null,"encerrado_por":null,"encerrado_por_nome":null,"motivo_encerramento":null,"nota_encerramento":null,"reaberturas":0,"duracao_minutos":null}}}}},"401":{"description":"Chave ausente, errada ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":401,"message":"Chave de API inválida ou revogada."}}}},"403":{"description":"A chave não tem o escopo desta rota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":403,"message":"Esta chave não tem permissão para: Consultar tickets de atendimento (escopo tickets.ler)."}}}},"404":{"description":"Não existe nesta empresa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":404,"message":"Ticket 5000012 não encontrado."}}}},"429":{"description":"Passou de 120 pedidos por minuto. Veja o cabeçalho Retry-After (segundos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":429,"message":"Limite de 120 pedidos por minuto. Tente de novo em 12s."}}}}}}},"/api/v1/tickets-grupo/{numero}/mensagens":{"get":{"tags":["Tickets de grupo"],"operationId":"mensagensDoTicketDeGrupo","summary":"Mensagens de um ticket de grupo","description":"As mensagens do assunto, com o participante que escreveu cada uma (`autor`).","parameters":[{"name":"numero","in":"path","required":true,"description":"Número do ticket (o mesmo que aparece no FlowDesk).","schema":{"type":"integer"},"example":5000012}],"responses":{"200":{"description":"Mensagens do ticket.","content":{"application/json":{"schema":{"type":"object","properties":{"numero":{"type":"integer"},"mensagens":{"type":"array","items":{"$ref":"#/components/schemas/Mensagem"}},"mensagens_truncadas":{"type":"boolean","description":"true quando o ticket tem mais de 1000 mensagens (vêm as primeiras 1000)."}},"example":{"numero":1000245,"mensagens":[{"id":"3EB0A1B2C3D4E5F6","enviada_em":"2026-11-02T13:05:10.000Z","de":"participante","tipo":"Conversation","texto":"Cliente 123 sem sinal na rua das Flores","midia_url":null,"arquivo":null,"autor":"Zé Técnico"}],"mensagens_truncadas":false}},"example":{"numero":5000012,"mensagens":[{"id":"3EB0A1B2C3D4E5F6","enviada_em":"2026-11-02T13:05:10.000Z","de":"participante","tipo":"Conversation","texto":"Cliente 123 sem sinal na rua das Flores","midia_url":null,"arquivo":null,"autor":"Zé Técnico"}],"mensagens_truncadas":false}}}},"401":{"description":"Chave ausente, errada ou revogada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":401,"message":"Chave de API inválida ou revogada."}}}},"403":{"description":"A chave não tem o escopo desta rota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":403,"message":"Esta chave não tem permissão para: Consultar tickets de atendimento (escopo tickets.ler)."}}}},"404":{"description":"Não existe nesta empresa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":404,"message":"Ticket 5000012 não encontrado."}}}},"429":{"description":"Passou de 120 pedidos por minuto. Veja o cabeçalho Retry-After (segundos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erro"},"example":{"error":true,"statusCode":429,"message":"Limite de 120 pedidos por minuto. Tente de novo em 12s."}}}}}}}},"components":{"securitySchemes":{"chaveApi":{"type":"http","scheme":"bearer","description":"Authorization: Bearer fdk_... (também aceita o cabeçalho X-Api-Key). Criada em Integrações › API do FlowDesk."}},"schemas":{"Erro":{"type":"object","properties":{"error":{"type":"boolean","const":true},"statusCode":{"type":"integer"},"message":{"type":"string","description":"O que aconteceu, em português. Leia este campo."},"statusMessage":{"type":"string","description":"O mesmo texto (mantido por compatibilidade)."}}},"Paginacao":{"type":"object","properties":{"pagina":{"type":"integer"},"por_pagina":{"type":"integer"},"total":{"type":"integer","description":"Total de itens com estes filtros."},"total_paginas":{"type":"integer"}}},"Chave":{"type":"object","properties":{"dados":{"type":"object","properties":{"empresa_id":{"type":"integer"},"chave":{"type":"string","description":"Nome dado à chave."},"escopos":{"type":"array","items":{"type":"object","properties":{"escopo":{"type":"string"},"descricao":{"type":"string"}}}},"rotas":{"type":"array","items":{"type":"string"}}}}}},"Motivo":{"type":["object","null"],"properties":{"id":{"type":"integer"},"nome":{"type":["string","null"]}},"description":"Motivo escolhido ao encerrar (null se não houver)."},"TicketAtendimento":{"type":"object","properties":{"numero":{"type":"integer","description":"Número do ticket (protocolo do atendimento)."},"status":{"type":"string","enum":["aberto","encerrado"]},"cliente":{"type":"object","properties":{"nome":{"type":["string","null"]},"telefone":{"type":["string","null"]},"cpf_cnpj":{"type":["string","null"],"description":"Preenchido quando o FlowDesk identificou o cliente no ERP."}}},"canal_id":{"type":["integer","null"],"description":"Número de WhatsApp (canal) do atendimento."},"atendente":{"type":["string","null"],"description":"Atendente humano atual ou o último. null quando só a IA atendeu."},"atendido_pela_ia":{"type":"boolean"},"tag_atual":{"type":["string","null"],"description":"Onde o atendimento está ou como terminou (ex.: FILA - Aguardando atendente, ATIVO - Atendimento humano, RESOLVIDO PELA IA)."},"motivo_encerramento":{"$ref":"#/components/schemas/Motivo"},"aberto_em":{"type":"string","format":"date-time","description":"Início do atendimento."},"atualizado_em":{"type":"string","format":"date-time","description":"Última mudança no ticket."},"encerrado_em":{"type":["string","null"],"format":"date-time","description":"Encerramento (null se ainda aberto)."},"duracao_minutos":{"type":["integer","null"],"description":"Da abertura ao encerramento."},"mensagens":{"type":"array","items":{"$ref":"#/components/schemas/Mensagem"},"description":"Só com ?mensagens=true."},"mensagens_truncadas":{"type":"boolean","description":"Só com ?mensagens=true."}}},"TicketGrupo":{"type":"object","properties":{"numero":{"type":"integer","description":"Número do ticket de grupo (a partir de 5000001)."},"status":{"type":"string","enum":["aberto","encerrado"]},"grupo":{"type":"object","properties":{"nome":{"type":["string","null"]},"id":{"type":["string","null"],"description":"Id do grupo no WhatsApp (…@g.us)."}}},"canal_id":{"type":["integer","null"]},"aberto_por":{"type":"object","description":"Participante que mandou a 1ª mensagem.","properties":{"nome":{"type":["string","null"]},"telefone":{"type":["string","null"]}}},"primeira_mensagem":{"type":["string","null"]},"responsavel":{"type":["string","null"],"description":"Atendente que assumiu o ticket."},"aberto_em":{"type":"string","format":"date-time","description":"Abertura."},"primeira_resposta_em":{"type":["string","null"],"format":"date-time","description":"1ª mensagem da empresa depois da abertura."},"minutos_ate_primeira_resposta":{"type":["integer","null"]},"ultima_mensagem_em":{"type":["string","null"],"format":"date-time","description":"Última mensagem do assunto."},"atualizado_em":{"type":"string","format":"date-time","description":"Última mudança no ticket."},"encerrado_em":{"type":["string","null"],"format":"date-time","description":"Encerramento (null se ainda aberto)."},"encerrado_por":{"type":["string","null"],"enum":["atendente","inatividade",null],"description":"inatividade = encerrou sozinho, sem mensagens pelo tempo configurado no grupo."},"encerrado_por_nome":{"type":["string","null"]},"motivo_encerramento":{"$ref":"#/components/schemas/Motivo"},"nota_encerramento":{"type":["string","null"],"description":"Nota escrita por quem encerrou."},"reaberturas":{"type":"integer","description":"Vezes que uma mensagem logo depois do encerramento (carência) reabriu este ticket."},"duracao_minutos":{"type":["integer","null"]},"mensagens":{"type":"array","items":{"$ref":"#/components/schemas/Mensagem"},"description":"Só com ?mensagens=true."},"mensagens_truncadas":{"type":"boolean","description":"Só com ?mensagens=true."}}},"Mensagem":{"type":"object","properties":{"id":{"type":["string","null"],"description":"Id da mensagem no WhatsApp."},"enviada_em":{"type":"string","format":"date-time","description":"Quando foi enviada."},"de":{"type":"string","enum":["cliente","empresa","participante"],"description":"participante = alguém do grupo (tickets de grupo)."},"autor":{"type":["string","null"],"description":"Só nos tickets de grupo: quem escreveu."},"tipo":{"type":"string","description":"Tipo da mensagem no WhatsApp (Conversation, ImageMessage, AudioMessage, DocumentMessage...)."},"texto":{"type":["string","null"],"description":"Texto ou legenda (áudios transcritos aparecem aqui)."},"midia_url":{"type":["string","null"],"description":"Link da imagem, áudio, vídeo ou documento."},"arquivo":{"type":["string","null"],"description":"Nome do arquivo (documentos)."}}}}}}