Lista os apontamentos de um ticket
curl --request GET \ --url 'https://public-api.mspdesk.com.br/v1/tickets/1/appointments?filter%5Bid%5D%5Bin%5D=1%2C2%2C3&filter%5BagentId%5D%5Bin%5D=1%2C2%2C3&filter%5BserviceType%5D%5Beq%5D=INTERNAL&filter%5BserviceType%5D%5Bin%5D=INTERNAL%2CEXTERNAL&filter%5Bdate%5D%5Bgte%5D=2026-09-23T14%3A30&filter%5Bdate%5D%5Blte%5D=2026-09-23T14%3A30&limit=25&sort=-date&fields=id%2CagentId%2Cdescription&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 é a da aba: -date, desempatada pelo id na mesma direção.
sort= aceita só date e id. createdAt e updatedAt são filtro e não ordenação: são colunas novas, nulas no que foi registrado antes desta API, e um valor nulo não serve de chave de paginação estável.
O atendimento em andamento também aparece na lista, com open: true: ele ainda não tem fim, então date traz o instante em que começou. Use filter[open][eq]=false para ver só o que já foi encerrado.
filter[date][gte] e filter[date][lte] recebem data e hora sem fuso (2026-09-23T14:30), porque é isso que a coluna guarda; filter[createdAt][gte] e filter[updatedAt][gte], ao contrário, exigem o fuso (2026-09-23T14:30:00Z).
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 agentId igual ao valor informado.
Exemplo
1,2,3Filtra por agentId igual a um dos valores informados, separados por vírgula (até 100).
Filtra por serviceType igual ao valor informado.
Exemplo
INTERNAL,EXTERNALFiltra por serviceType igual a um dos valores informados, separados por vírgula (até 100).
Filtra por open igual ao valor informado.
Filtra por slaEligible igual ao valor informado.
Exemplo
2026-09-23T14:30Filtra por date maior ou igual ao valor informado.
Exemplo
2026-09-23T14:30Filtra por date menor ou igual ao valor informado.
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: date, id (padrão -date). Prefixe com - para descendente (ex.: sort=-date); sempre desempatado por id na mesma direção.
Exemplo
-dateCampos de primeiro nível a retornar, separados por vírgula (id sempre volta): id, agentId, description, serviceType, slaEligible, open, date, startTime, endTime, timeSpent, backdateReason, attachmentIds, createdAt, updatedAt.
Exemplo
id,agentId,descriptionObjetos 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 de apontamentos
object
Apontamento (atendimento registrado) de um ticket.
object
Agente que assina o apontamento.
Anexos do ticket vinculados a este apontamento. Somente leitura: quem vincula arquivo é o envio de anexo, não a criação do apontamento.
Justificativa do lançamento retroativo, quando houve.
Instante de criação do registro. Nulo em apontamento anterior a esta API.
Data e hora do apontamento, sem fuso, em yyyy-MM-ddTHH:mm:ss — os segundos saem sempre, mesmo zerados. Enquanto o atendimento está em andamento, é o instante em que ele começou. Nulo apenas em registro antigo que não tem data nenhuma gravada; ele existe, é listado e ordena antes de todos os outros.
Descrição do atendimento, em HTML.
Hora de término, sem fuso.
Identificador do apontamento.
O atendimento ainda está em andamento: true enquanto ninguém o encerrou. Um apontamento em andamento não entra no resumo de horas.
Tipo de serviço do atendimento.
O apontamento conta para o SLA de resposta.
Hora de início, sem fuso.
Tempo gasto no formato HH:mm.
Instante da última alteração do registro. Nulo em apontamento anterior a esta API que nunca foi alterado desde então.
Cursor opaco da próxima página; null quando não há mais páginas.
Exemplo
{ "data": [ { "agentId": 42, "attachmentIds": [], "backdateReason": null, "createdAt": "2026-01-10T13:02:00Z", "date": "2026-01-10T09:00:00", "description": "<p>Driver da impressora reinstalado e fila de impressão limpa.</p>", "endTime": "10:00", "id": 3021, "open": false, "serviceType": "INTERNAL", "slaEligible": true, "startTime": "09:00", "timeSpent": "01:00", "updatedAt": "2026-01-10T13:02: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