API pública v1

Integre o DestrIA Mailer ao seu stack de vendas sem depender da interface.

SDK TypeScript oficial, contrato OpenAPI 3.1, webhooks assinados e endpoints REST para CRM, campanhas, métricas e automações no-code.

Quickstart
Fluxo mínimo para produção
  1. 1Crie uma API key no app em API & Webhooks.
  2. 2Baixe o SDK ou gere seu cliente a partir do OpenAPI 3.1.
  3. 3Faça upsert do contato, aplique tags e inscreva em uma campanha.
  4. 4Configure webhooks para respostas, bounces, complaints e descadastros.

CRM e contatos

Upsert idempotente por e-mail ou local_id, tags avançadas, metadata validada e proteção contra sobrescrever supressões críticas.

Campanhas e eventos

Crie seeds por local_id, liste campanhas, inscreva leads com segurança e consulte eventos de abertura, clique, resposta, bounce e unsubscribe por cursor.

Webhooks assinados

Provisionamento por API, rotação de secret, histórico filtrável, retry manual e HMAC-SHA256 sobre timestamp.body.

Uso observável

Rate limits por plano com headers X-RateLimit-*, Retry-After e painel autenticado de consumo por chave, endpoint e janela.

Exemplos copiáveis

Do primeiro contato ao webhook validado.

Os exemplos abaixo usam a URL do ambiente atual e mantêm os padrões de produção: API key em variável de ambiente, retry para 429/5xx e assinatura HMAC para eventos recebidos.

Instalar SDK TypeScript

curl -L https://seu-projeto.lovable.app/api/v1/sdk.ts -o destria-mailer-sdk.ts

Upsert + enrollment com retry nativo

import { createDestriaClient } from "./destria-mailer-sdk";

const destria = createDestriaClient({
  apiKey: process.env.DESTRIA_API_KEY!,
  baseUrl: "https://seu-projeto.lovable.app/api/v1",
});

const { data: contact } = await destria.upsertContact({
  email: "[email protected]",
  local_id: "crm_1842",
  first_name: "Ana",
  company: "Empresa",
  add_tags: ["crm-sync", "lead-quente"],
});

await destria.enrollCampaign("cmp_outbound_q3", {
  contacts: [{ email: contact.email }],
  start_at: "immediate",
});

Webhook receiver com HMAC

import { createHmac, timingSafeEqual } from "node:crypto";

export async function POST(req: Request) {
  const timestamp = req.headers.get("x-destria-timestamp") ?? "";
  const signature = req.headers.get("x-destria-signature") ?? "";
  const body = await req.text();
  const expected = createHmac("sha256", process.env.DESTRIA_WEBHOOK_SECRET!)
    .update(timestamp + "." + body)
    .digest("hex");

  const got = Buffer.from(signature);
  const want = Buffer.from(expected);
  if (got.length !== want.length || !timingSafeEqual(got, want)) {
    return new Response("invalid signature", { status: 401 });
  }

  const event = JSON.parse(body);
  return Response.json({ ok: true, type: event.type });
}

Superfície REST v1

Rotas autenticadas por Bearer token, CORS habilitado, respostas JSON padronizadas e rate-limit durável por plano.

Testar endpoints

Contatos

  • GET /contacts
  • POST /contacts
  • GET /contacts/{id}
  • DELETE /contacts/{id}

Campanhas

  • GET /campaigns
  • POST /campaigns
  • POST /campaigns/{id}/enroll
  • GET /campaigns/{id}/metrics

Webhooks

  • GET /webhooks
  • POST /webhooks
  • PATCH /webhooks/{id}
  • POST /webhook-deliveries/{id}/retry