Integre o DeskPrime a qualquer sistema. Autenticação via Bearer Token, respostas em JSON.
Para obter seu token de API, crie uma conta no DeskPrime e acesse Administração → Configurações da Conta → API para criar um novo token. Substitua SEU_TOKEN_AQUI pelo token gerado e https://suaempresa.deskprime.app pela URL da sua instância.
A API do DeskPrime utiliza autenticação via Bearer Token. Todas as requisições devem incluir o header Authorization com o token gerado no painel.
https://suaempresa.deskprime.appInclua o header em todas as requisições:
Authorization: Bearer SEU_TOKEN_AQUI Content-Type: application/json
curl -X GET https://suaempresa.deskprime.app/api/v1/tickets/ \ -H "Authorization: Bearer SEU_TOKEN_AQUI" \ -H "Content-Type: application/json"
import requests
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Content-Type": "application/json"
}
response = requests.get(
"https://suaempresa.deskprime.app/api/v1/tickets/",
headers=headers
)
print(response.json())const axios = require('axios');
const api = axios.create({
baseURL: 'https://suaempresa.deskprime.app',
headers: { Authorization: 'Bearer SEU_TOKEN_AQUI' }
});
api.get('/api/v1/tickets/')
.then(res => console.log(res.data));using System.Net.Http;
using System.Net.Http.Headers;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "SEU_TOKEN_AQUI");
var res = await client.GetAsync(
"https://suaempresa.deskprime.app/api/v1/tickets/");
Console.WriteLine(await res.Content.ReadAsStringAsync());| Permissão | GET | POST | PUT/PATCH | DELETE |
|---|---|---|---|---|
| Leitura | ✅ | ❌ | ❌ | ❌ |
| Leitura e Escrita | ✅ | ✅ | ✅ | ✅ |
Todos os endpoints são prefixados com https://suaempresa.deskprime.app/api/v1/
| Método | Endpoint | Descrição | Permissão |
|---|---|---|---|
| GET | /api/v1/ | Informações da API e usuário autenticado | Leitura |
| GET | /api/v1/me/ | Dados do usuário autenticado | Leitura |
| GET | /api/v1/tickets/ | Lista todos os tickets (com filtros) | Leitura |
| POST | /api/v1/tickets/ | Cria um novo ticket | Escrita |
| GET | /api/v1/tickets/{id}/ | Detalhes de um ticket específico | Leitura |
| PATCH | /api/v1/tickets/{id}/ | Atualiza campos de um ticket | Escrita |
| GET | /api/v1/tickets/{id}/comentarios/ | Lista comentários de um ticket | Leitura |
| POST | /api/v1/tickets/{id}/comentarios/ | Adiciona comentário a um ticket | Escrita |
| GET | /api/v1/usuarios/ | Lista usuários da empresa | Leitura |
| GET | /api/v1/categorias/ | Lista categorias disponíveis | Leitura |
| GET | /api/v1/artigos/ | Lista artigos da base de conhecimento | Leitura |
| GET | /api/v1/artigos/{id}/ | Detalhes de um artigo | Leitura |
| Ativos e Inventário | |||
| GET | /api/v1/ativos/ | Lista ativos de TI | Leitura |
| GET | /api/v1/ativos/{id}/ | Detalhes de um ativo | Leitura |
| POST | /api/v1/ativos/heartbeat/ | Heartbeat do agente de inventário | Escrita |
| Telefonia e CTI | |||
| GET | /api/v1/telefonia/chamadas/ | Lista histórico de chamadas | Leitura |
| GET | /api/v1/telefonia/contatos/search/ | Busca contatos por número | Leitura |
| POST | /api/v1/telefonia/webhook/yeastar/{id}/ | Webhook para PABX Yeastar | Escrita |
| POST | /api/v1/telefonia/webhook/3cx/{id}/ | Webhook para PABX 3CX | Escrita |
| Omnichannel (WhatsApp) | |||
| GET | /chat/api/lista-conversas/ | Lista conversas ativas | Leitura |
| POST | /chat/api/conversa/{id}/enviar/ | Envia mensagem de texto | Escrita |
| POST | /chat/api/conversa/{id}/finalizar/ | Finaliza uma conversa | Escrita |
| POST | /chat/api/conversa/{id}/transferir/ | Transfere conversa para outro agente | Escrita |
| Dashboard TV | |||
| GET | /dashboard/api/publico/{token}/ | Dados em tempo real para TV | Leitura |
Retorna uma lista paginada de tickets. Suporta os seguintes filtros via query string:
| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
status | string | Filtrar por status | aberto, em_andamento, resolvido, fechado |
prioridade | string | Filtrar por prioridade | baixa, media, alta, critica |
categoria_id | integer | Filtrar por categoria | 5 |
atribuido_a_id | integer | Filtrar por agente responsável | 12 |
q | string | Busca por título ou descrição | servidor+fora |
page | integer | Página (padrão: 1) | 2 |
page_size | integer | Itens por página (padrão: 20, máx: 100) | 50 |
{
"tickets": [
{
"id": 42,
"numero": "SD-0042",
"titulo": "Servidor fora do ar",
"status": "aberto",
"prioridade": "critica",
"tipo": "incidente",
"categoria": { "id": 3, "nome": "Infraestrutura" },
"solicitante": { "id": 7, "nome": "João Silva", "email": "[email protected]" },
"atribuido_a": null,
"equipe": { "id": 2, "nome": "Infraestrutura" },
"criado_em": "2026-03-13T10:30:00Z",
"atualizado_em": "2026-03-13T10:30:00Z",
"prazo": "2026-03-13T12:30:00Z",
"resolvido_em": null,
"sla": { "primeira_resposta_em": null },
"avaliacao": null
}
],
"total": 1,
"pagina": 1,
"total_paginas": 1
}
Cria um novo ticket. Requer permissão de Escrita.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
titulo | string | ✅ Sim | Título do ticket (máx. 255 caracteres) |
descricao | string | ✅ Sim | Descrição detalhada do problema |
prioridade | string | Não | baixa, media (padrão), alta, critica |
tipo | string | Não | incidente (padrão), requisicao, problema, mudanca |
categoria_id | integer | Não | ID da categoria (use GET /api/v1/categorias/) |
email_solicitante | string | Não | E-mail do solicitante (cria usuário se não existir) |
nome_solicitante | string | Não | Nome do solicitante (usado ao criar novo usuário) |
empresa_cliente_id | integer | Não | ID da empresa cliente |
empresa_token | string | Não | Token de integração da empresa cliente. Identifica a empresa e atribui o ticket ao usuário de sistema automaticamente. Recomendado para integrações com RMM. |
curl -X POST https://suaempresa.deskprime.app/api/v1/tickets/ \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"titulo": "Servidor fora do ar",
"descricao": "O servidor principal está inacessível.",
"prioridade": "critica",
"categoria_id": 3,
"solicitante_email": "[email protected]"
}'import requests
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Content-Type": "application/json"
}
payload = {
"titulo": "Servidor fora do ar",
"descricao": "O servidor principal está inacessível.",
"prioridade": "critica",
"categoria_id": 3,
"solicitante_email": "[email protected]"
}
response = requests.post(
"https://suaempresa.deskprime.app/api/v1/tickets/",
json=payload, headers=headers
)
print(response.json())const axios = require('axios');
axios.post(
'https://suaempresa.deskprime.app/api/v1/tickets/',
{
titulo: 'Servidor fora do ar',
descricao: 'O servidor principal está inacessível.',
prioridade: 'critica',
categoria_id: 3,
solicitante_email: '[email protected]'
},
{ headers: { Authorization: 'Bearer SEU_TOKEN_AQUI' } }
).then(res => console.log(res.data)); 'Servidor fora do ar',
'descricao' => 'O servidor principal está inacessível.',
'prioridade' => 'critica',
'categoria_id' => 3,
'solicitante_email' => '[email protected]'
]);
$ch = curl_init('https://suaempresa.deskprime.app/api/v1/tickets/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_TOKEN_AQUI',
'Content-Type: application/json'
]);
$ticket = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($ticket);using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "SEU_TOKEN_AQUI");
var payload = new {
titulo = "Servidor fora do ar",
descricao = "O servidor principal está inacessível.",
prioridade = "critica",
categoria_id = 3,
solicitante_email = "[email protected]"
};
var json2 = JsonSerializer.Serialize(payload);
var body = new StringContent(json2, Encoding.UTF8, "application/json");
var res = await client.PostAsync(
"https://suaempresa.deskprime.app/api/v1/tickets/", body);
Console.WriteLine(await res.Content.ReadAsStringAsync());{
"id": 42,
"numero": "SD-0042",
"titulo": "Servidor fora do ar",
"status": "aberto",
"prioridade": "critica",
"criado_em": "2026-03-13T10:30:00Z"
}
Adiciona um comentário a um ticket existente.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
texto | string | ✅ Sim | Conteúdo do comentário |
interno | boolean | Não | Se true, comentário interno (não visível ao cliente). Padrão: false |
curl -X POST https://suaempresa.deskprime.app/api/v1/tickets/42/comentarios/ \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{"texto": "Iniciando investigação do servidor.", "interno": false}'import requests
headers = {
"Authorization": "Bearer SEU_TOKEN_AQUI",
"Content-Type": "application/json"
}
payload = {
"texto": "Iniciando investigação do servidor.",
"interno": False # True = nota interna
}
response = requests.post(
"https://suaempresa.deskprime.app/api/v1/tickets/42/comentarios/",
json=payload, headers=headers
)
print(response.json())const axios = require('axios');
axios.post(
'https://suaempresa.deskprime.app/api/v1/tickets/42/comentarios/',
{ texto: 'Iniciando investigação do servidor.', interno: false },
{ headers: { Authorization: 'Bearer SEU_TOKEN_AQUI' } }
).then(res => console.log(res.data)); 'Iniciando investigação do servidor.',
'interno' => false
]);
$ch = curl_init('https://suaempresa.deskprime.app/api/v1/tickets/42/comentarios/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_TOKEN_AQUI',
'Content-Type: application/json'
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($res);using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "SEU_TOKEN_AQUI");
var payload = new { texto = "Iniciando investigação do servidor.", interno = false };
var body = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var res = await client.PostAsync(
"https://suaempresa.deskprime.app/api/v1/tickets/42/comentarios/", body);
Console.WriteLine(await res.Content.ReadAsStringAsync());Retorna todas as categorias disponíveis para uso ao criar tickets.
curl -X GET https://suaempresa.deskprime.app/api/v1/categorias/ \ -H "Authorization: Bearer SEU_TOKEN_AQUI"
import requests
headers = {"Authorization": "Bearer SEU_TOKEN_AQUI"}
response = requests.get(
"https://suaempresa.deskprime.app/api/v1/categorias/",
headers=headers
)
for cat in response.json()["categorias"]:
print(f"{cat['id']} - {cat['nome']}")const axios = require('axios');
axios.get(
'https://suaempresa.deskprime.app/api/v1/categorias/',
{ headers: { Authorization: 'Bearer SEU_TOKEN_AQUI' } }
).then(res => console.log(res.data.categorias));using System.Net.Http;
using System.Net.Http.Headers;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "SEU_TOKEN_AQUI");
var res = await client.GetAsync(
"https://suaempresa.deskprime.app/api/v1/categorias/");
Console.WriteLine(await res.Content.ReadAsStringAsync());{
"categorias": [
{ "id": 1, "nome": "Suporte Geral", "descricao": "" },
{ "id": 2, "nome": "Infraestrutura", "descricao": "Servidores e redes" },
{ "id": 3, "nome": "Software", "descricao": "Instalações e configurações" }
]
}
Retorna os usuários (agentes e admins) da empresa.
curl -X GET https://suaempresa.deskprime.app/api/v1/usuarios/ \ -H "Authorization: Bearer SEU_TOKEN_AQUI"
import requests
headers = {"Authorization": "Bearer SEU_TOKEN_AQUI"}
response = requests.get(
"https://suaempresa.deskprime.app/api/v1/usuarios/",
headers=headers
)
for user in response.json()["usuarios"]:
print(f"{user['id']} - {user['nome']} ({user['email']})")const axios = require('axios');
axios.get(
'https://suaempresa.deskprime.app/api/v1/usuarios/',
{ headers: { Authorization: 'Bearer SEU_TOKEN_AQUI' } }
).then(res => console.log(res.data.usuarios));using System.Net.Http;
using System.Net.Http.Headers;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "SEU_TOKEN_AQUI");
var res = await client.GetAsync(
"https://suaempresa.deskprime.app/api/v1/usuarios/");
Console.WriteLine(await res.Content.ReadAsStringAsync());Retorna os dados do usuário dono do token utilizado.
curl -X GET https://suaempresa.deskprime.app/api/v1/me/ -H "Authorization: Bearer SEU_TOKEN_AQUI"
Além da API REST, o DeskPrime aceita criação de tickets via HTTP POST direto no endpoint de tickets. Isso permite que qualquer sistema externo crie tickets automaticamente ao disparar um evento.
POST https://suaempresa.deskprime.app/api/v1/tickets/ Authorization: Bearer SEU_TOKEN_AQUI Content-Type: application/json
{
"titulo": "Alerta: CPU acima de 90% no servidor-01",
"descricao": "CPU atingiu 95% às 14:32. Servidor: servidor-01.",
"prioridade": "alta"
}
{
"titulo": "Alerta: CPU acima de 90% no servidor-01",
"descricao": "CPU atingiu 95% às 14:32. Servidor: servidor-01.",
"prioridade": "alta",
"tipo": "incidente",
"categoria_id": 2,
"email_solicitante": "[email protected]",
"nome_solicitante": "Sistema de Monitoramento"
}
| Código HTTP | Significado | Causa comum |
|---|---|---|
| 200 / 201 | Sucesso | Requisição processada com sucesso |
| 400 | Bad Request | Campos obrigatórios ausentes ou inválidos |
| 401 | Unauthorized | Token ausente, inválido ou expirado |
| 403 | Forbidden | Token sem permissão de escrita |
| 404 | Not Found | Recurso não encontrado (ticket, categoria, etc.) |
| 500 | Server Error | Erro interno — entre em contato com o suporte |
{
"erro": "Dados inválidos.",
"detalhes": {
"titulo": "Campo obrigatório.",
"descricao": "Campo obrigatório."
}
}
Teste a API diretamente nesta página. Cole seu token e a URL da sua instância para fazer chamadas reais sem sair da documentação.
As requisições são feitas diretamente do seu navegador para a sua instância do DeskPrime.
Histórico de versões e alterações da API REST do DeskPrime.
/api/v1/tickets/{id}/comentarios/ para comentários e notas internas via APIinterno (boolean) para notas internassolicitante_email na listagem de tickets/api/v1/usuarios/me/ para consultar o usuário autenticadodetail em portuguêsPOST /api/v1/webhook/entrada/tags (array) ao criar e listar ticketscount, next e previousdata_inicio, data_fim, agente_id/api/v1/categorias//api/v1/usuarios/prioridade aceita valores em minúsculascategoria_id agora retorna 400GET e POST /api/v1/tickets/Os manuais abaixo descrevem como configurar cada sistema para enviar dados ao DeskPrime automaticamente. Todos utilizam a API REST com autenticação via Bearer Token.
O Tactical RMM suporta webhooks nativos que podem ser configurados para criar tickets no DeskPrime automaticamente quando alertas são disparados.
No DeskPrime, acesse Configurações > API Tokens, clique em Novo Token, nomeie como Tactical RMM e salve. Copie o token gerado.
Para que o DeskPrime identifique automaticamente a empresa cliente e atribua o ticket ao usuário de sistema correto, é necessário criar um campo customizado no Tactical RMM:
| Campo | Valor |
|---|---|
| Target | Client |
| Name | TokenEmpresa |
| Field Type | Text |
Após criar o campo, acesse cada cliente no Tactical RMM, clique em Edit e cole o Token de Integração da empresa correspondente no campo TokenEmpresa. O token de cada empresa está disponível na página de detalhes da empresa no DeskPrime (card Token de Integração (API)).
| Campo | Valor |
|---|---|
| Name | DeskPrime API |
| URL Pattern | /api/v1/tickets/ |
| Method | POST |
Na aba Request Headers do webhook, adicione:
Authorization: Bearer SEU_TOKEN_AQUI Content-Type: application/json
Na aba Request Body, insira o JSON abaixo. O campo empresa_token usa o campo customizado criado no Passo 2 para identificar automaticamente a empresa cliente:
{
"titulo": "[RMM] {{agent.site.client.name}} - {{agent.hostname}}: {{alert.message}}",
"descricao": "Alerta automático gerado pelo Tactical RMM.\n\n- **Cliente**: {{agent.site.client.name}}\n- **Site**: {{agent.site.name}}\n- **Agente**: {{agent.hostname}}\n- **Tipo de Alerta**: {{alert.alert_type}}\n- **Severidade**: {{alert.severity}}\n- **Mensagem**: {{alert.message}}\n- **Saída do Check**: {{alert.get_result.stdout}}",
"empresa_token": "{{client.TokenEmpresa}}"
}
{{client.TokenEmpresa}} acessa o campo customizado do tipo Client diretamente. Certifique-se de que o campo foi criado com o nome exato TokenEmpresa (sem espaços, respeitando maiúsculas e minúsculas).
| Variável | Descrição |
|---|---|
{{agent.site.client.name}} | Nome do cliente |
{{agent.site.name}} | Nome do site/localização |
{{agent.hostname}} | Nome do host do agente |
{{agent.last_seen}} | Último acesso do agente |
{{alert.severity}} | Severidade do alerta (info, warning, error) |
{{alert.message}} | Mensagem do alerta |
{{alert.alert_type}} | Tipo do alerta (availability, check, task) |
{{alert.get_result.stdout}} | Saída do check que gerou o alerta |
{{client.TokenEmpresa}} | Token de integração da empresa (campo customizado) |
empresa_token. O DeskPrime identifica a empresa, cria o ticket automaticamente e o atribui ao usuário de sistema correspondente, mantendo o histórico organizado por cliente.
O Datto RMM permite integração via API REST v2 e Webhooks de Alertas. A abordagem recomendada é usar os webhooks de alertas para criar tickets automaticamente.
https://<seu_subdominio>.centrastage.net| Campo | Valor |
|---|---|
| Name | DeskPrime Tickets |
| URL | /api/v1/tickets/ |
| Method | POST |
| Content-Type | application/json |
{
"titulo": "Datto RMM: {{alertMessage}} — {{deviceHostname}}",
"descricao": "Dispositivo: {{deviceHostname}}\nCliente: {{accountName}}\nSite: \nAlerta: {{alertMessage}}\nCategoria: {{alertCategory}}\nData: {{alertTimestamp}}",
"prioridade": "alta",
"empresa_token": "TOKEN_DA_EMPRESA_AQUI"
}
TOKEN_DA_EMPRESA_AQUI pelo token de integração da empresa cliente correspondente, disponível na página de detalhes da empresa no DeskPrime.
| Variável | Descrição |
|---|---|
{{alertMessage}} | Mensagem do alerta |
{{alertCategory}} | Categoria do alerta |
{{alertTimestamp}} | Data/hora do alerta |
{{deviceHostname}} | Nome do dispositivo |
{{accountName}} | Nome da conta/cliente |
| Nome do site |
{{deviceType}} | Tipo do dispositivo |
{{deviceOS}} | Sistema operacional |
O NinjaRMM suporta webhooks de notificação que podem ser configurados para criar tickets no DeskPrime quando condições de alerta são atendidas.
| Campo | Valor |
|---|---|
| Name | DeskPrime |
| URL | /api/v1/tickets/ |
| Authorization Header | Bearer SEU_TOKEN_AQUI |
{
"titulo": "NinjaRMM: {{activityType}} — {{deviceName}}",
"descricao": "Dispositivo: {{deviceName}}\nCliente: {{organizationName}}\nLocalização: {{locationName}}\nAtividade: {{activityType}}\nMensagem: {{message}}\nData: {{timestamp}}",
"prioridade": "alta",
"empresa_token": "TOKEN_DA_EMPRESA_AQUI"
}
TOKEN_DA_EMPRESA_AQUI pelo token de integração da empresa cliente correspondente, disponível na página de detalhes da empresa no DeskPrime.
O Zabbix suporta integração via Media Type Webhook, que executa um script JavaScript para enviar alertas ao DeskPrime.
| Campo | Valor |
|---|---|
| Name | DeskPrime |
| Type | Webhook |
| Nome | Valor |
|---|---|
deskprime_url | /api/v1/tickets/ |
deskprime_token | SEU_TOKEN_AQUI |
empresa_token | Token de integração da empresa cliente (obtido no DeskPrime) |
trigger_name | {TRIGGER.NAME} |
trigger_severity | {TRIGGER.SEVERITY} |
trigger_status | {TRIGGER.STATUS} |
host_name | {HOST.NAME} |
host_ip | {HOST.IP} |
event_id | {EVENT.ID} |
event_date | {EVENT.DATE} |
event_time | {EVENT.TIME} |
var params = JSON.parse(value);
// Mapear severidade para prioridade do DeskPrime
var prioridadeMap = {
'Disaster': 'critica',
'High': 'alta',
'Average': 'media',
'Warning': 'baixa',
'Information': 'baixa',
'Not classified': 'baixa'
};
var prioridade = prioridadeMap[params.trigger_severity] || 'media';
var payload = {
titulo: 'Zabbix: ' + params.trigger_name + ' — ' + params.host_name,
descricao: [
'Host: ' + params.host_name,
'IP: ' + params.host_ip,
'Severidade: ' + params.trigger_severity,
'Status: ' + params.trigger_status,
'Evento ID: ' + params.event_id,
'Data/Hora: ' + params.event_date + ' ' + params.event_time
].join('\n'),
prioridade: prioridade,
empresa_token: params.empresa_token
};
var request = new HttpRequest();
request.addHeader('Content-Type: application/json');
request.addHeader('Authorization: Bearer ' + params.deskprime_token);
var response = request.post(params.deskprime_url, JSON.stringify(payload));
if (request.getStatus() != 201) {
throw 'Erro ao criar ticket: ' + response;
}
return JSON.parse(response).id;
DeskPrime NotificationsO Datadog suporta webhooks nativos que podem ser configurados para criar tickets no DeskPrime quando alertas (Monitors) são disparados.
| Campo | Valor |
|---|---|
| Name | deskprime |
| URL | /api/v1/tickets/ |
{"Authorization": "Bearer SEU_TOKEN_AQUI", "Content-Type": "application/json"}
{
"titulo": "Datadog: $EVENT_TITLE",
"descricao": "Monitor: $ALERT_TITLE\nStatus: $ALERT_STATUS\nHost: $HOSTNAME\nMétrica: $METRIC_NAMESPACE\nLink: $LINK\nMensagem: $TEXT_ONLY_MSG",
"prioridade": "alta",
"empresa_token": "TOKEN_DA_EMPRESA_AQUI"
}
TOKEN_DA_EMPRESA_AQUI pelo token de integração da empresa cliente correspondente, disponível na página de detalhes da empresa no DeskPrime.
| Variável | Descrição |
|---|---|
$EVENT_TITLE | Título do evento |
$ALERT_TITLE | Título do monitor de alerta |
$ALERT_STATUS | Status: Triggered, Recovered, etc. |
$HOSTNAME | Nome do host afetado |
$METRIC_NAMESPACE | Namespace da métrica |
$LINK | Link para o evento no Datadog |
$TEXT_ONLY_MSG | Mensagem do alerta sem formatação |
$PRIORITY | Prioridade: normal ou low |
Na mensagem do Monitor, adicione @webhook-deskprime para que o webhook seja ticket quando o alerta disparar.
O New Relic permite integração via Notification Channels com suporte a webhooks personalizados.
| Campo | Valor |
|---|---|
| Name | DeskPrime |
| Endpoint URL | /api/v1/tickets/ |
Em Custom Headers, adicione: Authorization: Bearer SEU_TOKEN_AQUI
{
"titulo": "New Relic: {{issueTitle}}",
"descricao": "Política: {{policyName}}\nCondição: {{conditionName}}\nEntidade: {{entitiesData.names}}\nPrioridade: {{priority}}\nLink: {{issuePageUrl}}",
"prioridade": "alta",
"empresa_token": "TOKEN_DA_EMPRESA_AQUI"
}
TOKEN_DA_EMPRESA_AQUI pelo token de integração da empresa cliente correspondente, disponível na página de detalhes da empresa no DeskPrime.
A integração com o Salesforce permite criar tickets no DeskPrime automaticamente quando casos (Cases) são criados ou atualizados no Salesforce, usando Flow ou Apex Callout.
| Campo | Valor |
|---|---|
| URL | /api/v1/tickets/ |
| Method | POST |
| Header: Authorization | Bearer SEU_TOKEN_AQUI |
| Header: Content-Type | application/json |
{
"titulo": "Salesforce Case #{!$Record.CaseNumber}: {!$Record.Subject}",
"descricao": "Caso: {!$Record.CaseNumber}\nCliente: {!$Record.Account.Name}\nContato: {!$Record.Contact.Name}\nPrioridade: {!$Record.Priority}\nDescrição: {!$Record.Description}",
"prioridade": "media",
"categoria": "Suporte"
}
@future(callout=true)
public static void criarTicketDeskPrime(Id caseId) {
Case c = [SELECT Id, CaseNumber, Subject, Description, Priority,
Account.Name, Contact.Name
FROM Case WHERE Id = :caseId LIMIT 1];
String payload = JSON.serialize(new Map<String, Object>{
'titulo' => 'Salesforce Case #' + c.CaseNumber + ': ' + c.Subject,
'descricao' => 'Caso: ' + c.CaseNumber + '\nCliente: ' + c.Account.Name + '\nDescrição: ' + c.Description,
'prioridade' => 'media',
'categoria' => 'Suporte'
});
Http http = new Http();
HttpRequest req = new HttpRequest();
req.setEndpoint('/api/v1/tickets/');
req.setMethod('POST');
req.setHeader('Authorization', 'Bearer SEU_TOKEN_AQUI');
req.setHeader('Content-Type', 'application/json');
req.setBody(payload);
HttpResponse res = http.send(req);
System.debug('DeskPrime response: ' + res.getStatusCode() + ' ' + res.getBody());
}
O HubSpot suporta webhooks via Workflows e Private Apps, permitindo criar tickets no DeskPrime quando eventos ocorrem no CRM.
| Campo | Valor |
|---|---|
| Method | POST |
| Webhook URL | /api/v1/tickets/ |
| Authentication type | API key in header |
| Header name | Authorization |
| API key | Bearer SEU_TOKEN_AQUI |
{
"titulo": "HubSpot: {{contact.firstname}} {{contact.lastname}} — {{contact.subject}}",
"descricao": "Contato: {{contact.firstname}} {{contact.lastname}}\nE-mail: {{contact.email}}\nEmpresa: {{contact.company}}\nMensagem: {{contact.message}}",
"prioridade": "media",
"categoria": "Suporte"
}
Para integrações mais avançadas, use uma Private App do HubSpot para escutar eventos e criar tickets via API do DeskPrime:
import requests
def criar_ticket_deskprime(hubspot_contact):
response = requests.post(
'/api/v1/tickets/',
json={
'titulo': f"HubSpot: {hubspot_contact['firstname']} {hubspot_contact['lastname']}",
'descricao': f"E-mail: {hubspot_contact['email']}\nEmpresa: {hubspot_contact.get('company', 'N/A')}",
'prioridade': 'media',
'categoria': 'Suporte'
},
headers={
'Authorization': 'Bearer SEU_TOKEN_AQUI',
'Content-Type': 'application/json'
}
)
return response.json()
O Zoho CRM permite criar tickets no DeskPrime via Workflow Rules com ações de webhook.
| Campo | Valor |
|---|---|
| URL | /api/v1/tickets/ |
| Method | POST |
| User Authentication | Custom Headers |
| Header: Authorization | Bearer SEU_TOKEN_AQUI |
| Header: Content-Type | application/json |
{
"titulo": "Zoho CRM: ${leads.First Name} ${leads.Last Name}",
"descricao": "Lead: ${leads.First Name} ${leads.Last Name}\nE-mail: ${leads.Email}\nEmpresa: ${leads.Company}\nTelefone: ${leads.Phone}\nFonte: ${leads.Lead Source}",
"prioridade": "media",
"categoria": "Comercial"
}
O Jira suporta webhooks nativos que podem ser configurados para criar tickets no DeskPrime quando issues são criadas ou atualizadas.
| Campo | Valor |
|---|---|
| Name | DeskPrime |
| URL | /api/v1/tickets/ |
| Events | Issue Created |
Para Jira Cloud, use Automation para mais controle:
| Campo | Valor |
|---|---|
| Web request URL | /api/v1/tickets/ |
| HTTP method | POST |
| Web request body | Custom data |
{
"titulo": "Jira: [{{issue.key}}] {{issue.summary}}",
"descricao": "Projeto: {{issue.project.name}}\nTipo: {{issue.type.name}}\nPrioridade: {{issue.priority.name}}\nReporter: {{issue.reporter.displayName}}\nDescrição: {{issue.description.plainText}}\nLink: {{issue.url}}",
"prioridade": "media",
"categoria": "Desenvolvimento"
}
O GitHub suporta webhooks de repositório que podem criar tickets no DeskPrime quando issues são abertas ou quando workflows de CI/CD falham.
| Campo | Valor |
|---|---|
| Payload URL | /api/v1/tickets/ |
| Content type | application/json |
| Events | Issues, Workflow runs |
Configure o Pipedream para receber o webhook do GitHub e transformar o payload:
// Pipedream Step — Transformar payload do GitHub para DeskPrime
import axios from 'axios';
export default defineComponent({
async run({ steps, $ }) {
const github = steps.trigger.event.body;
// Verificar se é uma issue criada
if (github.action !== 'opened') return;
const issue = github.issue;
const repo = github.repository;
await axios.post('/api/v1/tickets/', {
titulo: `GitHub: [${repo.name}] ${issue.title}`,
descricao: [
`Repositório: ${repo.full_name}`,
`Issue #${issue.number}`,
`Autor: ${issue.user.login}`,
`Labels: ${issue.labels.map(l => l.name).join(', ') || 'Nenhuma'}`,
`Link: ${issue.html_url}`,
'',
issue.body || 'Sem descrição'
].join('\n'),
prioridade: 'media',
categoria: 'Desenvolvimento'
}, {
headers: {
'Authorization': `Bearer ${process.env.DESKPRIME_TOKEN}`,
'Content-Type': 'application/json'
}
});
}
});
O GitLab suporta webhooks de projeto e de grupo, com payload customizável e suporte a múltiplos eventos.
| Campo | Valor |
|---|---|
| URL | /api/v1/tickets/ |
| Secret token | Opcional — para validação |
| Trigger | Issues events, Pipeline events |
from flask import Flask, request
import requests
app = Flask(__name__)
DESKPRIME_TOKEN = 'SEU_TOKEN_AQUI'
@app.route('/gitlab-webhook', methods=['POST'])
def gitlab_webhook():
data = request.json
event = request.headers.get('X-Gitlab-Event')
if event == 'Issue Hook' and data.get('object_attributes', {}).get('action') == 'open':
issue = data['object_attributes']
project = data['project']
requests.post(
'/api/v1/tickets/',
json={
'titulo': f"GitLab: [{project['name']}] {issue['title']}",
'descricao': f"Projeto: {project['name']}\nIssue #{issue['iid']}\nAutor: {data['user']['name']}\nLink: {issue['url']}\n\n{issue.get('description', '')}",
'prioridade': 'media',
'categoria': 'Desenvolvimento'
},
headers={'Authorization': f'Bearer {DESKPRIME_TOKEN}', 'Content-Type': 'application/json'}
)
return '', 200
A integração com o Slack permite criar tickets no DeskPrime a partir de mensagens em canais específicos, usando um Slash Command ou Workflow Builder.
Permite que usuários criem tickets digitando /ticket Descrição do problema no Slack.
| Campo | Valor |
|---|---|
| Command | /ticket |
| Request URL | URL de um intermediário (Pipedream, Make, etc.) |
| Short Description | Criar ticket no DeskPrime |
// Pipedream — Processar Slack Slash Command
import axios from 'axios';
export default defineComponent({
async run({ steps, $ }) {
const body = steps.trigger.event.body;
// Responder imediatamente ao Slack (evitar timeout)
await $.respond({ status: 200, body: { text: '⏳ Criando ticket...' } });
// Criar ticket no DeskPrime
const response = await axios.post('/api/v1/tickets/', {
titulo: `Slack: ${body.text}`,
descricao: `Criado por: ${body.user_name}\nCanal: #${body.channel_name}\nDescrição: ${body.text}`,
prioridade: 'media',
categoria: 'Suporte'
}, {
headers: {
'Authorization': `Bearer ${process.env.DESKPRIME_TOKEN}`,
'Content-Type': 'application/json'
}
});
// Notificar no Slack via response_url
await axios.post(body.response_url, {
text: `✅ Ticket #${response.data.id} criado com sucesso!`,
response_type: 'in_channel'
});
}
});
/api/v1/tickets/A integração com o Microsoft Teams permite criar tickets no DeskPrime via Power Automate ou Incoming Webhook.
Message contains "@suporte"| Campo | Valor |
|---|---|
| Method | POST |
| URI | /api/v1/tickets/ |
| Headers: Authorization | Bearer SEU_TOKEN_AQUI |
| Headers: Content-Type | application/json |
{
"titulo": "Teams: @{triggerOutputs()?['body/subject']}",
"descricao": "Canal: @{triggerOutputs()?['body/channelIdentity/channelId']}\nAutor: @{triggerOutputs()?['body/from/user/displayName']}\nMensagem: @{triggerOutputs()?['body/body/content']}",
"prioridade": "media",
"categoria": "Suporte"
}
A integração com o Shopify permite criar tickets no DeskPrime automaticamente quando pedidos são criados, cancelados ou quando clientes entram em contato.
| Campo | Valor |
|---|---|
| Event | Order creation ou Order cancellation |
| Format | JSON |
| URL | URL de um intermediário (Pipedream, Make, etc.) |
import axios from 'axios';
export default defineComponent({
async run({ steps, $ }) {
const pedido = steps.trigger.event.body;
await axios.post('/api/v1/tickets/', {
titulo: `Shopify: Pedido #${pedido.order_number} — ${pedido.email}`,
descricao: [
`Pedido: #${pedido.order_number}`,
`Cliente: ${pedido.billing_address?.first_name} ${pedido.billing_address?.last_name}`,
`E-mail: ${pedido.email}`,
`Total: ${pedido.currency} ${pedido.total_price}`,
`Status: ${pedido.financial_status}`,
`Itens: ${pedido.line_items?.map(i => i.name).join(', ')}`
].join('\n'),
prioridade: 'media',
categoria: 'E-commerce'
}, {
headers: {
'Authorization': `Bearer ${process.env.DESKPRIME_TOKEN}`,
'Content-Type': 'application/json'
}
});
}
});
O WooCommerce suporta webhooks nativos com suporte a headers customizados, permitindo integração direta com o DeskPrime.
| Campo | Valor |
|---|---|
| Name | DeskPrime Tickets |
| Status | Active |
| Topic | Order created |
| Delivery URL | URL de um intermediário (Pipedream, Make, etc.) |
| Secret | Chave para validar a origem do webhook |
Adicione o seguinte código ao functions.php do seu tema ou a um plugin customizado:
add_action('woocommerce_order_status_changed', 'criar_ticket_deskprime', 10, 3);
function criar_ticket_deskprime($order_id, $old_status, $new_status) {
if ($new_status !== 'on-hold') return; // Apenas pedidos em espera
$order = wc_get_order($order_id);
$payload = json_encode([
'titulo' => 'WooCommerce: Pedido #' . $order->get_order_number() . ' — ' . $order->get_billing_email(),
'descricao' => implode("
", [
'Pedido: #' . $order->get_order_number(),
'Cliente: ' . $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(),
'E-mail: ' . $order->get_billing_email(),
'Total: ' . $order->get_currency() . ' ' . $order->get_total(),
'Status: ' . $new_status
]),
'prioridade' => 'media',
'categoria' => 'E-commerce'
]);
wp_remote_post('/api/v1/tickets/', [
'method' => 'POST',
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN_AQUI',
'Content-Type' => 'application/json'
],
'body' => $payload
]);
}
O Zapier conecta mais de 7.000 aplicativos ao DeskPrime sem necessidade de código, usando Webhooks by Zapier como ação.
| Campo | Valor |
|---|---|
| URL | /api/v1/tickets/ |
| Payload Type | JSON |
| Header: Authorization | Bearer SEU_TOKEN_AQUI |
| Header: Content-Type | application/json |
| Chave | Valor (mapeado do trigger) |
|---|---|
titulo | Ex: E-mail: |
descricao | Ex: De: - |
prioridade | media (ou mapeado) |
categoria | Suporte (ou mapeado) |
[email protected]O Make é uma plataforma de automação visual avançada que permite criar fluxos complexos com lógica condicional, transformações de dados e roteamento.
| Campo | Valor |
|---|---|
| URL | /api/v1/tickets/ |
| Method | POST |
| Body type | Raw |
| Content type | JSON (application/json) |
| Header: Authorization | Bearer SEU_TOKEN_AQUI |
{
"titulo": "{{1.subject}}",
"descricao": "{{1.body}}",
"prioridade": "media",
"categoria": "Suporte"
}
Substitua {{1.subject}} e {{1.body}} pelos campos do módulo anterior.
Use o módulo Router para criar rotas diferentes baseadas em condições, como prioridade do alerta:
severity = DISASTER → prioridade criticaseverity = HIGH → prioridade altamediaO Pipedream é uma plataforma de integração para desenvolvedores que combina automação visual com código Node.js/Python, ideal para transformações complexas de payload.
import axios from 'axios';
export default defineComponent({
async run({ steps, $ }) {
const evento = steps.trigger.event.body;
const response = await axios.post(
'/api/v1/tickets/',
{
titulo: evento.titulo || 'Ticket via Pipedream',
descricao: evento.descricao || JSON.stringify(evento, null, 2),
prioridade: evento.prioridade || 'media',
categoria: evento.categoria || 'Suporte'
},
{
headers: {
'Authorization': `Bearer ${process.env.DESKPRIME_TOKEN}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
}
});
Armazene o token com segurança em Settings > Environment Variables:
| Nome | Valor |
|---|---|
DESKPRIME_TOKEN | Seu token de API do DeskPrime |
A integração com o Google BigQuery permite exportar dados de tickets para análise avançada ou criar tickets automaticamente a partir de alertas detectados em queries.
import requests
from google.cloud import bigquery
DESKPRIME_URL = '/api/v1/tickets/'
DESKPRIME_TOKEN = 'SEU_TOKEN_AQUI'
def exportar_tickets():
headers = {'Authorization': f'Bearer {DESKPRIME_TOKEN}'}
tickets = requests.get(DESKPRIME_URL, headers=headers).json()
rows = [{
'id': t['id'],
'titulo': t['titulo'],
'status': t['status'],
'prioridade': t['prioridade'],
'categoria': t.get('categoria', ''),
'data_criacao': t['data_criacao']
} for t in tickets]
client = bigquery.Client()
errors = client.insert_rows_json('projeto.dataset.tickets', rows)
print(f'{len(rows)} tickets exportados' if not errors else f'Erros: {errors}')
import functions_framework, requests, json, base64
@functions_framework.cloud_event
def criar_ticket(cloud_event):
data = json.loads(base64.b64decode(cloud_event.data['message']['data']))
requests.post('/api/v1/tickets/', json={
'titulo': data.get('titulo', 'Alerta BigQuery'),
'descricao': data.get('descricao', ''),
'prioridade': data.get('prioridade', 'media'),
'categoria': 'Monitoramento'
}, headers={'Authorization': 'Bearer SEU_TOKEN_AQUI'})
-- Tickets por status e prioridade (últimos 30 dias)
SELECT status, prioridade, COUNT(*) AS total,
AVG(tempo_resolucao_horas) AS tempo_medio_horas
FROM `projeto.deskprime.tickets`
WHERE DATE(data_criacao) >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY status, prioridade ORDER BY total DESC;
-- CSAT por equipe
SELECT equipe, COUNT(*) AS total, AVG(csat_nota) AS nota_media
FROM `projeto.deskprime.tickets`
WHERE csat_nota IS NOT NULL
GROUP BY equipe ORDER BY nota_media DESC;
A integração com o Snowflake permite criar tickets via alertas nativos ou exportar dados de tickets para análise avançada.
O Snowflake suporta Webhook Notifications nativamente. Configure assim:
CREATE OR REPLACE NOTIFICATION INTEGRATION deskprime_integration
TYPE = WEBHOOK
ENABLED = TRUE
WEBHOOK_URL = '/api/v1/tickets/'
WEBHOOK_HEADERS = (
'Content-Type'='application/json',
'Authorization'='Bearer SEU_TOKEN_AQUI'
);
CREATE OR REPLACE ALERT alerta_erros
WAREHOUSE = COMPUTE_WH
SCHEDULE = '5 MINUTES'
IF (EXISTS (
SELECT 1 FROM logs.erros
WHERE timestamp > DATEADD('minute', -5, CURRENT_TIMESTAMP())
HAVING COUNT(*) > 10
))
THEN
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
SNOWFLAKE.NOTIFICATION.INTEGRATION('deskprime_integration'),
SNOWFLAKE.NOTIFICATION.WEBHOOK_PAYLOAD('Erros críticos detectados')
);
ALTER ALERT alerta_erros RESUME;
import requests, snowflake.connector
def exportar_para_snowflake():
tickets = requests.get(
'/api/v1/tickets/',
headers={'Authorization': 'Bearer SEU_TOKEN_AQUI'}
).json()
conn = snowflake.connector.connect(
account='seu_account', user='usuario', password='senha',
warehouse='COMPUTE_WH', database='DESKPRIME', schema='TICKETS'
)
cursor = conn.cursor()
for t in tickets:
cursor.execute("""
MERGE INTO TICKETS tgt USING (SELECT %s AS ID) src ON tgt.ID = src.ID
WHEN NOT MATCHED THEN INSERT (ID, TITULO, STATUS, PRIORIDADE, DATA_CRIACAO)
VALUES (%s, %s, %s, %s, %s)
""", (t['id'], t['id'], t['titulo'], t['status'], t['prioridade'], t['data_criacao']))
conn.commit()
cursor.close()
conn.close()
A API de Ativos permite consultar o inventário de TI e enviar dados de heartbeat a partir de agentes instalados nos endpoints.
Retorna a lista de ativos cadastrados no tenant. Suporta filtros via query string:
| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
tipo | string | Tipo do ativo | servidor, workstation, switch |
status | string | Status do ativo | ativo, inativo, manutencao |
q | string | Busca por nome ou hostname | srv-prod |
{
"ativos": [
{
"id": 15,
"nome": "SRV-PROD-01",
"tipo": "servidor",
"sistema_operacional": "Windows Server 2022",
"hostname": "srv-prod-01.empresa.local",
"ip_principal": "192.168.1.10",
"status": "ativo",
"ultimo_heartbeat": "2026-05-14T10:00:00Z",
"criado_em": "2025-01-10T08:00:00Z"
}
],
"total": 1
}
Endpoint utilizado pelo agente de inventário instalado nos endpoints para reportar status e dados de hardware. Requer permissão de Escrita.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
hostname | string | ✅ | Nome do host |
ip | string | ✅ | Endereço IP principal |
so | string | ❌ | Sistema operacional |
cpu | string | ❌ | Modelo do processador |
ram_gb | number | ❌ | RAM total em GB |
disco_gb | number | ❌ | Espaço total em disco (GB) |
disco_livre_gb | number | ❌ | Espaço livre em disco (GB) |
softwares | array | ❌ | Lista de softwares instalados [{"nome":"...", "versao":"..."}] |
curl -X POST https://suaempresa.deskprime.app/api/v1/ativos/heartbeat/ \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{
"hostname": "srv-prod-01",
"ip": "192.168.1.10",
"so": "Windows Server 2022",
"ram_gb": 32,
"disco_gb": 500,
"disco_livre_gb": 120
}'import requests, platform, psutil
payload = {
"hostname": platform.node(),
"ip": "192.168.1.10",
"so": platform.system() + " " + platform.release(),
"ram_gb": round(psutil.virtual_memory().total / 1e9, 1),
"disco_gb": round(psutil.disk_usage('/').total / 1e9, 1),
"disco_livre_gb": round(psutil.disk_usage('/').free / 1e9, 1)
}
requests.post(
"https://suaempresa.deskprime.app/api/v1/ativos/heartbeat/",
headers={"Authorization": "Bearer SEU_TOKEN_AQUI"},
json=payload
)A integração de telefonia permite que PABXs (Yeastar, 3CX e outros compatíveis com SIP) notifiquem o DeskPrime sobre chamadas recebidas e realizadas, criando tickets automaticamente e registrando o histórico de chamadas.
Nas configurações do ramal no PBX Yeastar, acesse Extensão > Ramal e aumente o valor do campo Linkus Web Client Concurrent Registrations para os ramais que serão usados no DeskPrime. Por padrão, o ramal pode aceitar apenas um registro Web; como o Linkus SDK também usa o canal Web, o softphone do DeskPrime pode derrubar ou ser derrubado quando o mesmo ramal estiver conectado no Linkus Web Client em outro navegador.
| Configuração no Yeastar | Motivo |
|---|---|
| Extensão > Ramal > Linkus Web Client Concurrent Registrations | Permitir mais de uma sessão Web simultânea para o mesmo ramal, evitando conflito entre o DeskPrime via SDK e o Linkus Web Client aberto no navegador. |
Retorna o histórico de chamadas registradas no sistema.
{
"chamadas": [
{
"id": 101,
"numero_origem": "+5511999990000",
"numero_destino": "+5511988880000",
"direcao": "entrada",
"duracao_segundos": 185,
"status": "atendida",
"agente": { "id": 3, "nome": "Carlos Mendes" },
"ticket_gerado": { "id": 88, "numero": "SD-0088" },
"iniciada_em": "2026-05-14T09:15:00Z"
}
],
"total": 1
}
Identifica o solicitante pelo número de telefone. Usado pelo PABX para exibir o nome do cliente antes de atender.
Endpoints para receber eventos de chamadas dos PABXs. Configure a URL de webhook no painel do seu PABX apontando para o endpoint correspondente. O config_id é o ID da configuração de telefonia no DeskPrime (visível em Configurações → Telefonia).
secret ou api_key no payload.
A API do Omnichannel permite integrar sistemas externos ao painel de atendimento do DeskPrime, consultar conversas ativas e executar ações como enviar mensagens, transferir e finalizar atendimentos.
/chat/api/ e não /api/v1/. O token Bearer padrão é utilizado normalmente.
Retorna todas as conversas em andamento no tenant, separadas por fila e atribuídas ao agente.
{
"fila": [
{
"id": 42,
"contato_nome": "Eder Souza",
"contato_numero": "+5511999990000",
"fila": "Suporte Geral",
"canal": "whatsapp",
"ultima_mensagem": "Olá, preciso de ajuda",
"ultima_mensagem_em": "2026-05-14T10:05:00Z",
"status": "aguardando"
}
],
"meus": []
}
Envia uma mensagem de texto para o contato da conversa. Requer permissão de Escrita.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
mensagem | string | ✅ | Texto da mensagem a enviar |
Finaliza o atendimento, gera o ticket no sistema e envia a mensagem de encerramento com o link do ticket ao cliente. Requer permissão de Escrita.
Transfere a conversa para outro agente ou fila. Requer permissão de Escrita.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
agente_id | integer | ❌ | ID do agente destino |
fila_id | integer | ❌ | ID da fila destino |
# Enviar mensagem
curl -X POST https://suaempresa.deskprime.app/chat/api/conversa/42/enviar/ \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "Content-Type: application/json" \
-d '{"mensagem": "Olá! Estou verificando seu caso agora."}'
# Finalizar conversa
curl -X POST https://suaempresa.deskprime.app/chat/api/conversa/42/finalizar/ \
-H "Authorization: Bearer SEU_TOKEN_AQUI"import requests
BASE = "https://suaempresa.deskprime.app"
HEADERS = {"Authorization": "Bearer SEU_TOKEN_AQUI"}
# Enviar mensagem
requests.post(f"{BASE}/chat/api/conversa/42/enviar/",
headers=HEADERS, json={"mensagem": "Olá! Estou verificando seu caso agora."})
# Finalizar conversa
requests.post(f"{BASE}/chat/api/conversa/42/finalizar/", headers=HEADERS)Retorna as mensagens de uma conversa, do mais antigo para o mais recente, com URLs absolutas de mídia já resolvidas. Ideal para um app de terceiros montar seu próprio histórico de chat. Requer permissão de Leitura (ou superior) e que o token pertença a um agente com acesso à conversa (mesma regra de fila/grupo usada no painel).
{
"conversa_id": 1238,
"contato_nome": "Daiana",
"contato_telefone": "5516999961204",
"mensagens": [
{
"id": 20909,
"origem": "cliente",
"tipo": "audio",
"conteudo": "",
"url_midia": "https://suaempresa.deskprime.app/media/omnichannel/midia/2026/08/arquivo.ogg",
"arquivo_local_url": "https://suaempresa.deskprime.app/media/omnichannel/midia/2026/08/arquivo.ogg",
"nome_arquivo": "arquivo.ogg",
"tipo_mime": "audio/ogg",
"agente_nome": "",
"transcricao": "Bom dia, preciso de ajuda com o Chat Vibe...",
"enviado_em": "2026-08-07T12:34:43Z"
}
]
}
Em vez de fazer polling em /chat/api/lista-conversas/, um app de terceiros pode cadastrar um webhook e receber um POST assim que uma nova mensagem chegar em qualquer conversa do tenant.
Requer permissão de Admin.
Requer permissão de Admin. A URL de callback é validada e não pode apontar para endereços privados/internos (proteção contra SSRF).
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nome | string | ✅ | Nome descritivo do webhook |
url_callback | string | ✅ | URL pública (https) que receberá o POST |
eventos | string | ❌ | Lista separada por vírgula. Hoje só existe nova_mensagem (valor padrão) |
A resposta traz um campo secret — guarde-o, ele não é retornado novamente. É usado para validar a assinatura de cada entrega (veja abaixo).
Requer permissão de Admin.
url_callback)A cada nova mensagem, o DeskPrime envia (com até 3 tentativas em caso de falha):
{
"evento": "nova_mensagem",
"mensagem": {
"id": 20909,
"conversa_id": 1238,
"origem": "cliente",
"tipo": "texto",
"conteudo": "Olá, preciso de ajuda",
"tem_midia": false,
"contato_nome": "Daiana",
"contato_telefone": "5516999961204",
"enviado_em": "2026-08-07T12:34:43Z"
}
}
Headers enviados: X-DeskPrime-Event (nome do evento) e X-DeskPrime-Signature — um HMAC-SHA256 do corpo (bytes crus do JSON) usando o secret do webhook. Valide a assinatura antes de confiar no payload:
import hashlib, hmac
def validar_assinatura(secret, corpo_bytes, assinatura_recebida):
esperada = hmac.new(secret.encode(), corpo_bytes, hashlib.sha256).hexdigest()
return hmac.compare_digest(esperada, assinatura_recebida)
tem_midia só indica se há anexo — a mídia não é enviada no payload. Chame GET /chat/api/conversa/{id}/mensagens-externas/ para obter a URL absoluta do arquivo. Um webhook é desativado automaticamente após 20 falhas de entrega consecutivas.
O Dashboard TV exibe métricas em tempo real em monitores e TVs da sala de suporte. A API pública permite que sistemas externos consumam os mesmos dados exibidos no painel, sem necessidade de autenticação Bearer — apenas o token público do dashboard é necessário.
O token é gerado ao criar um Dashboard TV em Relatórios → Dashboard TV → Novo Dashboard. Não requer header de autenticação.
{
"titulo": "Suporte N1 — Sala Operações",
"atualizado_em": "2026-05-14T10:10:00Z",
"metricas": {
"tickets_abertos": 14,
"tickets_em_andamento": 8,
"tickets_resolvidos_hoje": 23,
"sla_dentro_prazo_pct": 94.2,
"tempo_medio_resposta_min": 12,
"agentes_online": 5
},
"top_agentes": [
{ "nome": "Carlos Mendes", "resolvidos_hoje": 7 },
{ "nome": "Ana Lima", "resolvidos_hoje": 5 }
]
}
# Sem necessidade de token Bearer curl https://suaempresa.deskprime.app/dashboard/api/publico/abc123xyz/
// Atualização automática a cada 30 segundos
async function atualizarDashboard() {
const res = await fetch('/dashboard/api/publico/abc123xyz/');
const data = await res.json();
document.getElementById('tickets-abertos').textContent = data.metricas.tickets_abertos;
}
setInterval(atualizarDashboard, 30000);
atualizarDashboard();O módulo de importação do DeskPrime permite migrar toda a sua base de dados do Zendesk sem perder histórico. A importação é feita de forma segura, incremental e retomável — se for interrompida, você pode continuar de onde parou.
Antes de iniciar a importação, você precisa gerar um Token de API na sua conta Zendesk. Veja o passo a passo na seção abaixo.
empresa.zendesk.com, informe empresa), o e-mail da conta administradora e o Token de API gerado.O Token de API é a forma segura de autorizar o DeskPrime a acessar os dados da sua conta Zendesk. Ao contrário de usar sua senha diretamente, o token pode ser revogado a qualquer momento sem afetar o seu login.
Acesse o Zendesk com suas credenciais de administrador
Certifique-se de estar logado com uma conta que tenha permissões de Administrador. Apenas administradores podem criar tokens de API.
Acesse a Central de Administração
No menu lateral esquerdo do Zendesk, clique no ícone de engrenagem (⚙) ou acesse diretamente pelo menu do seu perfil → Central de Administração.
Vá em Aplicativos e Integrações → Configuração da API
No menu da Central de Administração, localize a seção "Aplicativos e Integrações" e clique em "APIs" → "Configuração da API".
Certifique-se de que as duas opções abaixo estão marcadas:
Clique em "Salvar" após marcar as opções.
Acesse "Tokens da API" e crie um novo token
Ainda em "APIs", clique em "Tokens da API" no submenu. Em seguida, clique no botão "Adicionar token da API" (ou no ícone +).
Na tela que abrir, preencha uma descrição para identificar o token — sugerimos usar DeskPrime para facilitar a identificação futura. Clique em "Salvar".
Copie o token gerado
O Zendesk exibirá o token apenas uma vez. Copie-o imediatamente e cole no campo "Token da API" na tela de importação do DeskPrime. Após fechar a janela, não será possível visualizar o token novamente — será necessário criar um novo.
Resumo do caminho no Zendesk:
O módulo de importação do DeskPrime permite migrar toda a sua base de dados do Freshdesk sem perder histórico. A importação é feita de forma segura, incremental e retomável — se for interrompida, você pode continuar de onde parou.
Antes de iniciar a importação, você precisa obter a sua API Key na sua conta Freshdesk. Veja o passo a passo na seção abaixo.
empresa.freshdesk.com, informe empresa) e a API Key obtida.A API Key é a forma segura de autorizar o DeskPrime a acessar os dados da sua conta Freshdesk. Ao contrário de usar sua senha diretamente, a chave garante um acesso controlado e seguro.
Acesse o Freshdesk com suas credenciais
Faça login na sua conta do Freshdesk. Recomendamos usar uma conta com permissões de Administrador para garantir acesso a todos os dados necessários para a importação.
Acesse as Configurações de Perfil
No canto superior direito da tela, clique no ícone do seu perfil (sua foto ou iniciais) e selecione "Configurações de Perfil" (Profile Settings) no menu suspenso.
Localize e copie sua API Key
Na página de configurações do perfil, role a tela para baixo até encontrar a seção "Sua Chave de API" (Your API Key).
A chave já estará gerada. Basta copiá-la e colar no campo "API Key" na tela de importação do DeskPrime.
Resumo do caminho no Freshdesk:
O módulo de importação do DeskPrime permite migrar toda a sua base de dados do Jira Service Management Cloud sem perder histórico. A importação é feita de forma segura, incremental e retomável — se for interrompida, você pode continuar de onde parou.
*.atlassian.net). O Jira Server/Data Center utiliza uma API diferente e não é suportado nesta versão.
Antes de iniciar a importação, você precisa gerar um API Token na sua conta Atlassian. Veja o passo a passo na seção abaixo.
minhaempresa.atlassian.net), o e-mail da conta Atlassian e o API Token gerado.O API Token é a forma segura de autorizar o DeskPrime a acessar os dados da sua instância Jira Cloud. Ao contrário de usar sua senha diretamente, o token pode ser revogado a qualquer momento sem afetar o seu login.
Acesse o gerenciador de tokens da Atlassian
Abra o link abaixo no seu navegador (você precisará estar logado com a conta Atlassian que será usada na importação):
id.atlassian.com/manage-profile/security/api-tokensClique em "Create API token"
Na página de gerenciamento de tokens, clique no botão azul "Create API token". Uma janela de diálogo será exibida.
Dê um nome ao token
No campo de nome, informe uma descrição para identificar o token — sugerimos usar DeskPrime ou import-service-desk. Clique em "Create".
Copie o token gerado
O token será exibido apenas uma vez. Clique em "Copy" para copiá-lo e cole no campo "API Token" na tela de importação do DeskPrime. Após fechar a janela, não será possível visualizar o token novamente — será necessário criar um novo.
Como funciona a autenticação no Jira Cloud:
[email protected])Resumo do caminho:
O módulo de importação do DeskPrime permite migrar toda a sua base de dados do GLPI sem perder histórico. A importação é feita de forma segura, incremental e retomável — se for interrompida, você pode continuar de onde parou.
| Status no GLPI | Status no DeskPrime |
|---|---|
| 1 — Novo | Aberto |
| 2 — Em atendimento (atribuído) | Em Andamento |
| 3 — Em atendimento (planejado) | Em Andamento |
| 4 — Pendente | Aguardando |
| 5 — Solucionado | Resolvido |
| 6 — Fechado | Fechado |
O App-Token é uma camada adicional de segurança. Para criá-lo:
deskprime-import) e salve| Campo no DeskPrime | O que preencher | Exemplo |
|---|---|---|
| URL do GLPI | URL completa da sua instância GLPI | http://glpi.minhaempresa.com |
| App-Token (opcional) | Token da aplicação criado em Configuração → API | AbCdEf123456... |
| User Token | Token gerado nas Preferências do usuário | XyZ789abc... |
Resumo do caminho para o User Token:
O módulo de importação do DeskPrime permite migrar toda a sua base de dados do Milvus sem perder histórico. A importação é feita de forma segura, paginada e retomável — se for interrompida, você pode continuar de onde parou.
| Status no Milvus | Status no DeskPrime |
|---|---|
| A fazer | Aberto |
| Em andamento | Em Andamento |
| Pausado / Aguardando / Agendado | Aguardando |
| Finalizado / Concluído / Cancelado | Fechado |
| Prioridade no Milvus | Prioridade no DeskPrime |
|---|---|
| Baixa / Baixo | Baixa |
| Média / Normal | Média |
| Alta | Alta |
| Crítica / Crítico / Urgente | Crítica |
O DeskPrime autentica na API do Milvus exclusivamente via Token de API de Integração. Nenhuma senha é armazenada. Siga os passos abaixo para gerar o token na sua conta Milvus.
O módulo de importação do DeskPrime permite migrar toda a sua base de dados do TomTicket sem perder histórico. A importação é feita de forma segura, paginada e retomável — se for interrompida, você pode continuar de onde parou.
| Prioridade no TomTicket | Prioridade no DeskPrime |
|---|---|
| 1 | Baixa |
| 2 | Média |
| 3 | Alta |
| 4 | Crítica |
O DeskPrime autentica na API do TomTicket exclusivamente via Bearer Token. Nenhuma senha é armazenada. Siga os passos abaixo para gerar o token no console do TomTicket.
O MSPDesk não tem uma API genérica de tickets — a importação é feita através do Link de Integração de um Relatório Personalizado, o mesmo mecanismo usado para conectar o MSPDesk ao Power BI. Por isso, antes de importar, é preciso criar (ou usar) um relatório configurado com as colunas certas — veja o passo a passo abaixo.
| Prioridade no MSPDesk | Prioridade no DeskPrime |
|---|---|
| Baixa / Planejado | Baixa |
| Média | Média |
| Alta | Alta |
| Crítica / Urgente | Urgente |
O DeskPrime autentica na API do MSPDesk exclusivamente via API Key no cabeçalho X-API-Key. Nenhuma senha é armazenada. Siga os passos abaixo — eles criam um Relatório Personalizado configurado especificamente para a importação.
0123456789 — como nenhum ticket real tem esse ID, o filtro nunca exclui nada e todos
os tickets são importados.
https://api.mspdesk.com.br/v1/custom-reports/integrations/{'{uuid}'}/execute?page={'{page}'}&size={'{size}'}) — copie a URL inteira, ela pode ser colada como está na tela de importação do DeskPrime.Quando um ticket do MSPDesk veio de uma conversa de WhatsApp (Canal de Origem "MSP Talks"), o relatório personalizado não traz o conteúdo da conversa — só metadados (contato, cliente, datas). O DeskPrime pode tentar recuperar essa conversa direto do MSPTalks e anexar como comentário no ticket importado.