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 Configurações → API Tokens. 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 |
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()