Documentação pública da Pulei API
Base URL:
https://www.pulei.com.br/api/v11. Começando com a Pulei API
O que você pode fazer hoje:
- Criar e gerenciar links curtos e usar domínios próprios.
- Aplicar regras de retargeting (Smart Links) por país, dispositivo, tempo, cliques e fallback de erro.
- Proteção opcional por senha.
- Coletar logs de cliques e métricas agregadas.
- Exportar cliques em CSV.
- Usar campanhas para UTMs padrão.
2. Autenticação
Criar API Key
https://www.pulei.com.br/dashboard/api-keys
Envie a API Key no header:
Authorization: Bearer <API-KEY>- A API Key é gerada no painel Pulei e está vinculada a um time.
- Todas as operações são validadas pelo time da API Key.
- Sem token ou token inválido:
401. Token de outro time:403. - Não exponha a API Key em front-end público; rotacione se necessário.
3. Recursos disponíveis na API
3.1 Links
- Criar:
POST /links(campos:longUrlobrigatório; opcionaisdomainIdverificado,slugcustomizado com domínio,expiresAt,campaignId, UTMs padrão, deep links mobile). - Listar:
GET /linkscom paginação (page,perPage) e busca (search,source). - Detalhar:
GET /links/{slug}. - Atualizar:
PATCH /links/{slug}(URL de destino, título, domínio, expiração, desabilitar, deep links, campanha). - Arquivar:
DELETE /links/{slug}(desabilita o link).
3.2 Retargeting (Smart Links)
- Regras por país, dispositivo/OS/browser, janela de tempo, quantidade de cliques, fallback de erro e senha.
- Endpoints:
GETePUT /links/{slug}/retargeting. - As regras são avaliadas em ordem de prioridade; o
PUTsubstitui toda a configuração. - Body aceita campos singulares (legado) e listas (
timeRules,geoRules,deviceRules,clicksRules,errorRules).
3.3 Logs de cliques
GET /links/{slug}/logsretorna eventos com data/hora, localização aproximada, dispositivo, referer.- Filtros:
range(7d, 30d, mtd, prev_month, ytd),country,city, paginação (page,perPage).
3.4 Analytics agregados
GET /analyticsconsolida métricas do time.- Filtros:
range,slug,q(slug ou URL),domain,country,city. - Retorna resumo, ranking de links, hora do dia, dia da semana, referrers, país, região, dispositivo, browser, OS.
3.5 Exportação de dados (CSV)
GET /analytics/exportgera CSV de cliques com os mesmos filtros de analytics.- Colunas: slug, long_url, click_at, ip, country, region, city, device, referer.
3.6 Domínios personalizados
GET /domainslista domínios verificados do time.- Somente domínios verificados podem receber slugs customizados.
3.7 Campanhas
POST /campaignscria campanhas com UTMs padrão.GET /campaignslista as últimas campanhas.PATCH /campaigns/{id}atualiza nome/descrição.- Use
campaignIdao criar ou atualizar links para aplicar UTMs automaticamente.
4. TypeScript — Exemplos completos
Todos os exemplos usam fetch com Bearer Token e a base https://www.pulei.com.br/api/v1.
Autenticação base
const API_KEY = process.env.PULEI_API_KEY!;
const BASE_URL = "https://www.pulei.com.br/api/v1";
const authHeaders = {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
};Links
// Criar um link
await fetch(`${BASE_URL}/links`, {
method: "POST",
headers: authHeaders,
body: JSON.stringify({
longUrl: "https://meusite.com/oferta",
domainId: "dominio-verificado-id",
expiresAt: "2025-12-31T23:59:59Z",
deepLinkMode: "GENERIC",
deepLinkTargetScope: "MOBILE_ONLY",
deepLinkIosUrl: "minhaapp://oferta",
deepLinkAndroidUrl: "minhaapp://oferta",
campaignId: "camp-123",
utm_source: "afiliado",
utm_medium: "social",
utm_campaign: "lancamento",
}),
});
// Listar links do time
const list = await fetch(`${BASE_URL}/links?page=1&perPage=20&search=oferta`, { headers: authHeaders });
// Atualizar um link
await fetch(`${BASE_URL}/links/meu-slug`, {
method: "PATCH",
headers: authHeaders,
body: JSON.stringify({
longUrl: "https://meusite.com/oferta-atualizada",
title: "Oferta Black Friday",
disabled: false,
disabledUntil: null,
deepLinkMode: "PER_PLATFORM",
deepLinkTargetScope: "ALWAYS",
deepLinkIosUrl: "minhaapp://oferta-ios",
deepLinkAndroidUrl: "minhaapp://oferta-android",
}),
});Retargeting
await fetch(`${BASE_URL}/links/meu-slug/retargeting`, {
method: "PUT",
headers: authHeaders,
body: JSON.stringify({
timeRules: [
{ startsAt: "2025-11-25T00:00:00Z", targetUrl: "https://meusite.com/pre-black" },
{ startsAt: "2025-11-29T00:00:00Z", targetUrl: "https://meusite.com/black-friday" },
],
geoRules: [
{ country: "BR", targetUrl: "https://meusite.com/br" },
{ country: "US", targetUrl: "https://meusite.com/en" },
],
deviceRules: [
{ device: "MOBILE", targetUrl: "https://m.meusite.com" },
{ device: "DESKTOP", targetUrl: "https://meusite.com/desktop" },
],
clicksRules: [{ threshold: 1000, targetUrl: "https://meusite.com/backup" }],
errorRules: [{ targetUrl: "https://meusite.com/offline" }],
passwordRule: { enabled: false },
}),
});O PUT sobrescreve toda a configuração de retargeting do link.
Logs e Analytics
// Logs de cliques
await fetch(`${BASE_URL}/links/meu-slug/logs?range=30d&country=BR&page=1&perPage=50`, {
headers: authHeaders,
});
// Analytics agregados
await fetch(`${BASE_URL}/analytics?range=7d&domain=pulei.com.br&country=BR`, {
headers: authHeaders,
});
// Exportar CSV
const csv = await fetch(`${BASE_URL}/analytics/export?range=30d&slug=meu-slug`, {
headers: authHeaders,
});Domínios e campanhas
// Domínios verificados
await fetch(`${BASE_URL}/domains`, { headers: authHeaders });
// Criar campanha
await fetch(`${BASE_URL}/campaigns`, {
method: "POST",
headers: authHeaders,
body: JSON.stringify({
name: "Campanha SaaS",
description: "UTMs padrão para lançamentos",
defaultUtmSource: "afiliado",
defaultUtmMedium: "email",
defaultUtmCampaign: "sprint-1",
}),
});
// Atualizar campanha
await fetch(`${BASE_URL}/campaigns/camp-123`, {
method: "PATCH",
headers: authHeaders,
body: JSON.stringify({ name: "Campanha SaaS (Q4)" }),
});5. Swagger / OpenAPI
Use o Swagger para importar em Postman/Insomnia ou gerar SDKs.
- Swagger UI: /docs/api-docs
- Arquivo OpenAPI:
https://www.pulei.com.br/openapi.yaml
Aqui você vê o “como”; esta página explica o “o quê” e “por quê”.
6. Como testar a API (sem código)
- Gerar uma API Key no painel. https://www.pulei.com.br/dashboard/api-keys
- Testar autenticação com
GET /domains(deve retornar 200). - Criar um link com
POST /links. - Consultar detalhes com
GET /links/{slug}. - Criar regras em
PUT /links/{slug}/retargeting. - Clicar no link curto (mobile e desktop) para gerar eventos.
- Ver logs em
GET /links/{slug}/logs. - Ver métricas em
GET /analytics. - Exportar CSV em
GET /analytics/export.
7. Erros comuns e comportamentos esperados
- 401: autenticação ausente ou inválida.
- 403: tentativa de usar recurso de outro time.
- 404: slug inexistente ou recurso não encontrado.
- 409: conflito de slug ou domínio não verificado.
- Boas práticas: valide URLs, use domínios verificados para slugs customizados, aplique campanhas para UTMs consistentes e use
PUTde retargeting com atenção (é substitutivo).