Lista o histórico de um ticket
curl --request GET \ --url 'https://public-api.mspdesk.com.br/v1/tickets/1/activities?filter%5Bid%5D%5Bin%5D=1%2C2%2C3&filter%5Bcategory%5D%5Beq%5D=ALL&filter%5Borigin%5D%5Beq%5D=USER&filter%5Borigin%5D%5Bin%5D=USER%2CCONTACT_CUSTOMER%2CEMAIL_INBOUND%2CNINJA_RMM%2CDATTO_RMM%2CSYSTEM%2CAPI&limit=25&sort=-createdAt&fields=id%2Ctype%2Ccategory&expand=customer%2Cagent' \ --header 'Authorization: Bearer <token>'Escopo exigido: tickets:read. Paginação por cursor opaco (?cursor=), nunca por página/offset — use nextCursor da resposta anterior. A ordenação padrão é -createdAt (o evento mais novo primeiro), a mesma da aba.
Filtre por category, não por type. A categoria é o recorte que a aba oferece e que esta documentação consegue manter estável; type tem dezenas de valores e ganha valores novos a cada funcionalidade do produto. O type continua no corpo da resposta, para quem quiser um recorte mais fino do lado dele.
Seis tipos não têm categoria, e filter[category] não os alcança: GROUPING, UNGROUPING, MERGE, AUTOMATION, FOLLOWER_ADDED e FOLLOWER_REMOVED. Eles aparecem na listagem sem filtro, com category: null, mas nenhum valor de filter[category][eq] os traz — é o mesmo recorte que a aba do produto oferece hoje. Quem sincroniza tudo não deve filtrar por categoria; quem filtra por categoria precisa saber que agrupamento, mesclagem, automação e seguidores ficam de fora.
filter[category][eq]=ALL é aceito e significa sem recorte — o mesmo que omitir o filtro. ALL é valor de entrada apenas: nenhuma entrada do histórico sai com category: \"ALL\".
updatedAt é igual a createdAt em toda entrada: o histórico não é editado. O campo existe para que a sincronização por data funcione igual em todos os sub-recursos.
Autorizações
Seção intitulada “Authorizations”Parâmetros
Seção intitulada “Parameters”Parâmetros de caminho
Seção intitulada “Path Parameters”ID do ticket
Exemplo
1Parâmetros de consulta
Seção intitulada “Query Parameters”Filtra por id igual ao valor informado.
Exemplo
1,2,3Filtra por id igual a um dos valores informados, separados por vírgula (até 100).
Filtra por category igual ao valor informado.
Filtra por origin igual ao valor informado.
Exemplo
USER,CONTACT_CUSTOMER,EMAIL_INBOUND,NINJA_RMM,DATTO_RMM,SYSTEM,APIFiltra por origin igual a um dos valores informados, separados por vírgula (até 100).
Filtra por agentId igual ao valor informado.
Filtra por agentId ter ou não valor: true sem valor; false com valor.
Filtra por createdAt maior ou igual ao valor informado.
Filtra por createdAt menor ou igual ao valor informado.
Filtra por updatedAt maior ou igual ao valor informado.
Filtra por updatedAt menor ou igual ao valor informado.
Itens por página. 1 a 100; padrão 25.
Cursor opaco da próxima página, devolvido em nextCursor da resposta anterior. Omita na primeira página.
Campo de ordenação: createdAt, id (padrão -createdAt). Prefixe com - para descendente (ex.: sort=-createdAt); sempre desempatado por id na mesma direção.
Exemplo
-createdAtCampos de primeiro nível a retornar, separados por vírgula (id sempre volta): id, type, category, description, fieldChanges, agentId, contactId, origin, apiKeyId, apiKeyName, createdAt, updatedAt.
Exemplo
id,type,categoryObjetos a acrescentar à resposta, separados por vírgula, até 3 por requisição: . Sem o escopo exigido de algum item pedido: 403 insufficient_scope.
Exemplo
customer,agentRespostas
Seção intitulada “Responses”Página do histórico
object
Uma entrada do histórico de um ticket.
object
Agente que provocou o evento. Nulo em evento do sistema, de contato ou escrito pela API sem agente no corpo.
Chave de API que gravou o evento. Nulo quando a origem não é API.
Nome atual da chave que gravou o evento — não é uma cópia do nome no momento da escrita. Nulo quando a chave foi excluída.
Categoria do evento, a mesma que a aba oferece. É nula em seis tipos, que hoje não pertencem a categoria nenhuma — GROUPING, UNGROUPING, MERGE, AUTOMATION, FOLLOWER_ADDED e FOLLOWER_REMOVED —, e por isso filter[category] não os alcança. Vale o mesmo na aba do produto.
Contato do cliente que provocou o evento (portal ou e-mail). Nulo nos demais.
Instante do evento. Nunca é nulo.
Texto do evento, como foi gravado. Sempre em português, qualquer que seja o Accept-Language da requisição: o texto é carimbado na coluna no momento da escrita, e não traduzido na leitura — a tela é que o re-renderiza no idioma do usuário. Pode trazer HTML embutido (<br>, <strong>): trate o valor como marcação, não como texto puro. O HTML é servido pela mesma allowlist da escrita (sem <script>, atributos on* ou URL fora de http/https/mailto/tel), inclusive nas entradas antigas. Para tratamento programático, use type e fieldChanges, que não dependem de idioma.
Mudanças estruturadas do evento, quando houver. Lista vazia nos eventos que não gravam mudança campo a campo.
Um campo alterado por um evento do histórico.
object
Nome do campo alterado.
Valor depois da alteração. Nulo quando o campo foi esvaziado.
Valor antes da alteração. Nulo quando o campo estava vazio.
Identificador da entrada do histórico.
Origem da escrita. API é o que esta API gravou.
Tipo do evento registrado.
Igual a createdAt: o histórico não é editado.
Cursor opaco da próxima página; null quando não há mais páginas.
Exemplo
{ "data": [ { "agentId": 42, "apiKeyId": 8, "apiKeyName": "Integração ERP", "category": "INTERACTIONS", "contactId": null, "createdAt": "2026-01-10T12:20:00Z", "description": "Prioridade: [Média] para [Alta]", "fieldChanges": [ { "field": "priority", "newValue": "HIGH", "oldValue": "MEDIUM" } ], "id": 9120, "origin": "API", "type": "UPDATE", "updatedAt": "2026-01-10T12:20:00Z" } ], "nextCursor": "eyJpZCI6MTA0Mn0"}Cabeçalhos
Seção intitulada “Headers”Capacidade do balde mais restritivo consumido nesta requisição
Requisições restantes nesse balde
Segundos até o balde encher de novo
Requisição malformada ou parâmetros de consulta inválidos
Erro no formato RFC 9457 (application/problem+json).
object
Código estável do erro, para tratamento programático.
Explicação legível deste erro específico.
Erros de campo — presente quando a falha vem de validação de campo.
object
Código estável do erro de campo.
Campo com erro, em notação de ponto/colchete. Ausente quando o erro não é de um campo específico.
Mensagem traduzida no locale da requisição.
Presente só no 429
Presente só quando layer=operation
Identificador da requisição — informe-o ao suporte ao reportar um erro.
Presente só no 403 insufficient_scope
Status HTTP da resposta.
Título curto e legível do erro.
URI que identifica o tipo do erro.
Exemplo
{ "code": "not_found", "detail": "O recurso solicitado não foi encontrado.", "errors": [ { "code": "required" } ], "layer": "ip", "operation": "report", "requestId": "7f3a9c2e-4b1d-4f7a-9e0c-2b8d6a1f3c55", "status": 404, "title": "Recurso não encontrado", "type": "https://developers.mspdesk.com.br/erros/#not_found"}Cabeçalhos
Seção intitulada “Headers”Capacidade do balde mais restritivo consumido nesta requisição
Requisições restantes nesse balde
Segundos até o balde encher de novo
Chave de API ausente, inválida, revogada ou expirada
Erro no formato RFC 9457 (application/problem+json).
object
Código estável do erro, para tratamento programático.
Explicação legível deste erro específico.
Erros de campo — presente quando a falha vem de validação de campo.
object
Código estável do erro de campo.
Campo com erro, em notação de ponto/colchete. Ausente quando o erro não é de um campo específico.
Mensagem traduzida no locale da requisição.
Presente só no 429
Presente só quando layer=operation
Identificador da requisição — informe-o ao suporte ao reportar um erro.
Presente só no 403 insufficient_scope
Status HTTP da resposta.
Título curto e legível do erro.
URI que identifica o tipo do erro.
Exemplo
{ "code": "not_found", "detail": "O recurso solicitado não foi encontrado.", "errors": [ { "code": "required" } ], "layer": "ip", "operation": "report", "requestId": "7f3a9c2e-4b1d-4f7a-9e0c-2b8d6a1f3c55", "status": 404, "title": "Recurso não encontrado", "type": "https://developers.mspdesk.com.br/erros/#not_found"}Acesso negado: empresa inativa (account_inactive), API pública desabilitada para a empresa (public_api_disabled), escopo liberado só com a API pública (scope_requires_public_api) ou escopo insuficiente (insufficient_scope)
Erro no formato RFC 9457 (application/problem+json).
object
Código estável do erro, para tratamento programático.
Explicação legível deste erro específico.
Erros de campo — presente quando a falha vem de validação de campo.
object
Código estável do erro de campo.
Campo com erro, em notação de ponto/colchete. Ausente quando o erro não é de um campo específico.
Mensagem traduzida no locale da requisição.
Presente só no 429
Presente só quando layer=operation
Identificador da requisição — informe-o ao suporte ao reportar um erro.
Presente só no 403 insufficient_scope
Status HTTP da resposta.
Título curto e legível do erro.
URI que identifica o tipo do erro.
Exemplo
{ "code": "not_found", "detail": "O recurso solicitado não foi encontrado.", "errors": [ { "code": "required" } ], "layer": "ip", "operation": "report", "requestId": "7f3a9c2e-4b1d-4f7a-9e0c-2b8d6a1f3c55", "status": 404, "title": "Recurso não encontrado", "type": "https://developers.mspdesk.com.br/erros/#not_found"}Cabeçalhos
Seção intitulada “Headers”Capacidade do balde mais restritivo consumido nesta requisição
Requisições restantes nesse balde
Segundos até o balde encher de novo
Recurso inexistente, de outra empresa, ou rota inexistente
Erro no formato RFC 9457 (application/problem+json).
object
Código estável do erro, para tratamento programático.
Explicação legível deste erro específico.
Erros de campo — presente quando a falha vem de validação de campo.
object
Código estável do erro de campo.
Campo com erro, em notação de ponto/colchete. Ausente quando o erro não é de um campo específico.
Mensagem traduzida no locale da requisição.
Presente só no 429
Presente só quando layer=operation
Identificador da requisição — informe-o ao suporte ao reportar um erro.
Presente só no 403 insufficient_scope
Status HTTP da resposta.
Título curto e legível do erro.
URI que identifica o tipo do erro.
Exemplo
{ "code": "not_found", "detail": "O recurso solicitado não foi encontrado.", "errors": [ { "code": "required" } ], "layer": "ip", "operation": "report", "requestId": "7f3a9c2e-4b1d-4f7a-9e0c-2b8d6a1f3c55", "status": 404, "title": "Recurso não encontrado", "type": "https://developers.mspdesk.com.br/erros/#not_found"}Cabeçalhos
Seção intitulada “Headers”Capacidade do balde mais restritivo consumido nesta requisição
Requisições restantes nesse balde
Segundos até o balde encher de novo
Limite de uso atingido (rate_limited); o campo layer indica a camada: ip, company, key, operation ou concurrency
Erro no formato RFC 9457 (application/problem+json).
object
Código estável do erro, para tratamento programático.
Explicação legível deste erro específico.
Erros de campo — presente quando a falha vem de validação de campo.
object
Código estável do erro de campo.
Campo com erro, em notação de ponto/colchete. Ausente quando o erro não é de um campo específico.
Mensagem traduzida no locale da requisição.
Presente só no 429
Presente só quando layer=operation
Identificador da requisição — informe-o ao suporte ao reportar um erro.
Presente só no 403 insufficient_scope
Status HTTP da resposta.
Título curto e legível do erro.
URI que identifica o tipo do erro.
Exemplo
{ "code": "not_found", "detail": "O recurso solicitado não foi encontrado.", "errors": [ { "code": "required" } ], "layer": "ip", "operation": "report", "requestId": "7f3a9c2e-4b1d-4f7a-9e0c-2b8d6a1f3c55", "status": 404, "title": "Recurso não encontrado", "type": "https://developers.mspdesk.com.br/erros/#not_found"}Cabeçalhos
Seção intitulada “Headers”Capacidade do balde mais restritivo consumido nesta requisição
Requisições restantes nesse balde
Segundos até o balde encher de novo
Segundos até poder repetir
Erro interno inesperado
Erro no formato RFC 9457 (application/problem+json).
object
Código estável do erro, para tratamento programático.
Explicação legível deste erro específico.
Erros de campo — presente quando a falha vem de validação de campo.
object
Código estável do erro de campo.
Campo com erro, em notação de ponto/colchete. Ausente quando o erro não é de um campo específico.
Mensagem traduzida no locale da requisição.
Presente só no 429
Presente só quando layer=operation
Identificador da requisição — informe-o ao suporte ao reportar um erro.
Presente só no 403 insufficient_scope
Status HTTP da resposta.
Título curto e legível do erro.
URI que identifica o tipo do erro.
Exemplo
{ "code": "not_found", "detail": "O recurso solicitado não foi encontrado.", "errors": [ { "code": "required" } ], "layer": "ip", "operation": "report", "requestId": "7f3a9c2e-4b1d-4f7a-9e0c-2b8d6a1f3c55", "status": 404, "title": "Recurso não encontrado", "type": "https://developers.mspdesk.com.br/erros/#not_found"}Cabeçalhos
Seção intitulada “Headers”Capacidade do balde mais restritivo consumido nesta requisição
Requisições restantes nesse balde
Segundos até o balde encher de novo