Tíquetes
Listar tíquetes
https://api.picchat.com.br/v1/ticketsLista os tíquetes da conta, paginados e ordenados por updated_at decrescente por padrão. Todos os filtros se combinam (E). Cada tíquete vem com status, contato, atendente, canal e tags. Usuário restrito a canais só vê tíquetes desses canais.
Parâmetros de consulta (query)
pageintegerpadrão 1Página, começando em 1. Valor ausente, inválido ou menor que 1 vira 1.
limitintegerpadrão 20Itens por página. Padrão 20, máximo 100: acima disso é reduzido para 100 sem erro; valor inválido ou menor que 1 vira 20.
statusstringNome do status, sem diferenciar maiúsculas (ABERTOS, AGUARDANDO, EM ATENDIMENTO, RESOLVIDOS, FECHADOS — veja GET /v1/ticket-status).
status_idstring (uuid)ID do status (alternativa a `status`).
channel_idstring (uuid)Só tíquetes deste canal. Usuário com grupo de permissão e vinculado a canais só vê os desses canais; `channel_id` fora do escopo → 403 `channel_out_of_scope`.
contact_idstring (uuid)Só tíquetes deste contato.
user_idstringSó tíquetes deste atendente (UUID). Use `none` para os sem responsável.
tag_idstring (uuid)Só tíquetes com esta tag.
openbooleantrue = só em aberto; false = só encerrados; ausente = todos. Aceita `true`/`false` (também `1`/`0`, `yes`/`no`, `sim`/`nao`); outro valor é ignorado.
unreadbooleantrue = só com mensagens não lidas (`unread > 0`). false não filtra. Aceita `true`/`false` (também `1`/`0`, `yes`/`no`, `sim`/`nao`); outro valor é ignorado.
fromstringInício do período por `created_at` (inclusive), em ISO 8601 (`2026-09-01` ou `2026-09-01T03:00:00Z`). Só a data = 00:00 UTC. Valor inválido → 400.
tostringFim do período por `created_at` (inclusive), em ISO 8601. Só a data inclui o dia inteiro (até 23:59:59.999 UTC). Valor inválido → 400.
updated_fromstringInício do período por `updated_at` (inclusive), em ISO 8601 (`2026-09-01` ou `2026-09-01T03:00:00Z`). Só a data = 00:00 UTC. Valor inválido → 400.
updated_tostringFim do período por `updated_at` (inclusive), em ISO 8601. Só a data inclui o dia inteiro (até 23:59:59.999 UTC). Valor inválido → 400.
searchstringBusca sem diferenciar maiúsculas em nome, sobrenome e e-mail do contato e na última mensagem. Se for só dígitos, também procura o número público do tíquete (`public_id`) e o telefone do contato (DDI 55 é acrescentado quando o número tem até 11 dígitos).
sortstringpadrão "updated_at"Campo de ordenação. Valor fora da lista usa `updated_at`.
orderstringpadrão "desc"Direção da ordenação por `sort`. Qualquer outro valor usa o padrão.
Respostas
200OK
itemsarray<Ticket>obrigatórioRegistros da página.
items[].idstring (uuid)obrigatórioID do tíquete.
items[].public_idintegerobrigatórioNúmero público sequencial do tíquete (o que aparece na inbox).
items[].created_atstring (date-time)obrigatórioCriação.
items[].updated_atstring (date-time)obrigatórioÚltima atualização.
items[].end_atstring (date-time) | nullobrigatórioQuando foi encerrado.
items[].expiration_atstring (date-time) | nullobrigatórioFim da janela de atendimento de 24 h do WhatsApp oficial, quando aplicável.
items[].openboolean | nullobrigatóriotrue = em aberto; false = encerrado.
items[].unreadinteger | nullobrigatórioQuantidade de mensagens não lidas.
items[].fromMeboolean | nullobrigatórioSe a última mensagem foi enviada pela conta.
items[].created_fromMeboolean | nullobrigatórioSe o tíquete foi aberto pela conta (envio ativo) e não pelo contato.
items[].typestring | nullobrigatórioTipo da última mensagem.
textimagevideoaudiodocumentlocationcontactsstickerinteractiveunsupportedreactiontemplatebuttonnullitems[].categorystring | nullobrigatórioCategoria atribuída ao tíquete.
items[].commentstring | nullobrigatórioComentário/resumo do tíquete.
items[].last_messagestring | nullobrigatórioTexto da última mensagem.
items[].last_message_datestring (date-time) | nullobrigatórioData da última mensagem.
items[].first_message_date_from_mestring (date-time) | nullobrigatórioData da primeira resposta da conta.
items[].ticket_statusobject | nullobrigatórioStatus atual.
items[].ticket_status.idstring (uuid)obrigatórioID do status.
items[].ticket_status.namestring | nullobrigatórioNome interno (ex.: ABERTOS, RESOLVIDOS).
items[].ticket_status.public_namestring | nullobrigatórioNome exibido, quando houver.
items[].ticket_status.colorstring | nullobrigatórioCor do status (token de cor do front).
items[].contactobject | nullobrigatórioContato do tíquete.
items[].contact.idstring (uuid)obrigatórioID do contato.
items[].contact.first_namestring | nullobrigatórioNome.
items[].contact.last_namestring | nullobrigatórioSobrenome.
items[].contact.mobilephonestring | nullobrigatórioTelefone só com dígitos, com DDI (ex.: 5511999990000).
items[].contact.emailstring | nullobrigatórioE-mail.
items[].contact.userNamestring | nullobrigatórioUsuário do Instagram, quando o contato veio de lá.
items[].userobject | nullobrigatórioAtendente responsável (null = sem responsável).
items[].user.idstring (uuid)obrigatórioID do usuário.
items[].user.namestringobrigatórioNome.
items[].user.lastNamestring | nullobrigatórioSobrenome.
items[].channelobjectobrigatórioCanal resumido.
items[].channel.idstring (uuid)obrigatórioID do canal.
items[].channel.namestringobrigatórioNome do canal.
items[].channel.typestringobrigatórioTipo do canal.
whatsappwhatsapp_litesmsemailwebhookchatinstagramrcsitems[].tagsarray<TagRef>obrigatórioTags aplicadas ao tíquete.
items[].tags[].idstring (uuid)obrigatórioID da tag.
items[].tags[].namestringobrigatórioNome da tag.
items[].tags[].colorstring | nullobrigatórioCor da tag.
totalintegerobrigatórioTotal de registros que casam com os filtros (todas as páginas).
pageintegerobrigatórioPágina devolvida (começa em 1).
limitintegerobrigatórioItens por página efetivamente usados (1–100).
pagesintegerobrigatórioTotal de páginas: `max(1, ceil(total / limit))`. Nunca é 0, mesmo sem resultados.
400Parâmetro de data (`from`, `to`, `updated_from`, `updated_to`) fora do formato ISO 8601.
403Acesso negado: usuário do token sem a permissão da rota (`permission_denied`) ou token não ligado a um usuário ativo (`token_without_user`) — para token de integração da conta isso só é aplicado quando `access.enforced` é true (veja GET /v1/me); token pessoal e JWT de sessão são sempre verificados; `channel_id` fora dos canais do usuário (`channel_out_of_scope`); `account_id` na query diferente da conta do token; conta do tipo INFRA.
498Token ausente, inválido, de outra finalidade (ex.: token do canal chat) ou revogado. Note o status não padrão 498.