REST reference

Every REST endpoint grouped by area. Base https://sending.dev/api/v1

Every route lives under https://sending.dev/api/v1 and requires the Authorization: Bearer sk_... header.

For the full schema of each endpoint (parameters, types, examples and a "try it" console) use the interactive API reference (OpenAPI). The table below is a quick index.

Email e messaggi

POST/api/v1/emailsInvia un'email transazionale. `idempotencyKey` nel body obbligatoria (min 8 char); `from`/`replyTo` accettano 'Nome <[email protected]>'.(scope: email:send)
GET/api/v1/emails/:idStato di un invio (metadati + timeline eventi).
POST/api/v1/messagesInvio transazionale unificato email/WhatsApp/Telegram.(scope: messages:send)

Allegati

GET/POST/api/v1/attachmentsElenca o carica un allegato riusabile: `content` base64 per l'upload immediato, `size` per ottenere una `uploadUrl` firmata (file grandi).(scope: email:send|inbox:send)
GET/DELETE/api/v1/attachments/:idMetadati + URL di download firmata, oppure eliminazione.(scope: email:send|inbox:send)
POST/api/v1/attachments/:id/confirmConferma un upload firmato (allinea dimensione e Content-Type reali).(scope: email:send|inbox:send)

Domini

GET/POST/api/v1/domainsElenca o aggiungi un dominio (ritorna i record DNS).(scope: domains:write)
GET/PATCH/api/v1/domains/:idDettaglio dominio e nome mittente di default (display name del From).(scope: domains:write)
POST/api/v1/domains/:id/verifyVerifica SPF, DKIM, DMARC.(scope: domains:write)
POST/DELETE/api/v1/domains/:id/inboundAbilita o disabilita la ricezione inbound (MX) per il dominio.(scope: domains:write)

Contatti e CRM

GET/POST/api/v1/contactsElenca o crea contatti (con attributi e campi).(scope: contacts:read|write)
POST/DELETE/api/v1/contacts/:id/tagsAggiungi o rimuovi tag a un contatto.(scope: contacts:write)
GET/POST/api/v1/tagsElenca o crea tag.(scope: contacts:write)
DELETE/api/v1/tags/:idElimina un tag.(scope: contacts:write)
GET/POST/api/v1/listsElenca o crea liste.(scope: contacts:write)
DELETE/api/v1/lists/:idElimina una lista.(scope: contacts:write)
POST/DELETE/api/v1/lists/:id/contactsAggiungi o rimuovi contatti da una lista.(scope: contacts:write)
GET/POST/api/v1/segmentsElenca o crea segmenti (rule tree AudienceRules).(scope: contacts:write)
PATCH/DELETE/api/v1/segments/:idAggiorna o elimina un segmento.(scope: contacts:write)
POST/api/v1/segments/previewStima i contatti che matchano un segmento.(scope: contacts:read)
GET/POST/api/v1/custom-fieldsElenca o crea campi personalizzati.(scope: contacts:write)

Eventi e automazioni

POST/api/v1/eventsInvia un evento (trigger/goal automazioni, con properties).(scope: events:write)
GET/api/v1/automationsElenca le automazioni con stato ed evento che le innesca (guardalo prima di scrivere su liste/tag).(scope: automations:read)
POST/api/v1/automationsCrea un'automazione (Journey DAG) in bozza.(scope: automations:write)
POST/api/v1/automations/:id/activateAttiva un'automazione.(scope: automations:write)

Template

GET/POST/api/v1/templatesElenca o crea un template di contenuto riusabile (e' cosi' che si ottiene un templateId valido).(scope: templates:read|write)
GET/PATCH/api/v1/templates/:idDettaglio col contenuto, oppure modifica parziale (i campi assenti restano).(scope: templates:read|write)
DELETE/api/v1/templates/:idElimina un template: 409 se una campagna lo usa ancora.(scope: templates:write)

Campagne

GET/POST/api/v1/campaignsElenca o crea una campagna broadcast.(scope: campaigns:write)
GET/api/v1/campaigns/:idDettaglio campagna, contenuto incluso.(scope: campaigns:read)
PATCH/api/v1/campaigns/:idModifica una bozza: solo i campi presenti, senza ricreare la campagna.(scope: campaigns:write)
POST/api/v1/campaigns/:id/estimateStima i destinatari.(scope: campaigns:write)
POST/api/v1/campaigns/:id/sendInvia o schedula la campagna.(scope: campaigns:write)
POST/api/v1/campaigns/:id/cancelAnnulla una campagna schedulata.(scope: campaigns:write)

Agent Email (inbox per agenti)

GET/POST/api/v1/inboxesElenca o crea una agent inbox.(scope: inbox:read|write)
GET/PATCH/DELETE/api/v1/inboxes/:idDettaglio, aggiorna o elimina una inbox.(scope: inbox:read|write)
POST/api/v1/inboxes/:id/sendInvia un'email dalla inbox.(scope: inbox:send)
POST/api/v1/inboxes/:id/draftsCrea una bozza nella inbox.(scope: inbox:write)
GET/api/v1/inboxes/:id/threadsElenca i thread della inbox.(scope: inbox:read)
GET/api/v1/inboxes/:id/threads/:threadIdDettaglio thread con messaggi.(scope: inbox:read)
POST/api/v1/inboxes/:id/threads/:threadId/replyRispondi a un thread.(scope: inbox:send)
GET/api/v1/inboxes/metricsMetriche agent email (volumi, consegna, bounce).(scope: inbox:read)

Webhooks

GET/POST/api/v1/webhooksElenca o crea un endpoint webhook (secret one-time).(scope: webhooks:read|write)
GET/PATCH/DELETE/api/v1/webhooks/:idDettaglio, aggiorna o elimina un webhook.(scope: webhooks:read|write)
GET/api/v1/webhooks/:id/deliveriesLog delle consegne di un webhook.(scope: webhooks:read)

Allow/Block (regole inbound)

GET/POST/api/v1/email-rulesElenca o crea regole allow/block per le inbox.(scope: inbox:read|write)
DELETE/api/v1/email-rules/:idElimina una regola allow/block.(scope: inbox:write)

UTM e attribuzione

GET/api/v1/utm/touchesTouch UTM (con ?format=csv).(scope: utm:read)
GET/api/v1/utm/conversionsConversioni attribuite (first/last).(scope: utm:read)
GET/api/v1/utm/summaryRiepilogo attribuzione.(scope: utm:read)

Integrazioni e usage

POST/api/v1/integrations/posthog/syncLancia il sync delle conversioni da PostHog.(scope: integrations:write)
GET/api/v1/usageSnapshot uso vs piano del workspace.

Rate limits

Each API key gets 10 requests per second. The count is per key, not per workspace: two integrations in the same workspace have separate budgets, so a runaway one cannot take the others down.

Every response carries the current state:

HeaderMeaning
RateLimit-LimitRequests allowed in the window.
RateLimit-RemainingHow many are left.
RateLimit-ResetSeconds until the window resets.

Past the limit the response is 429 with Retry-After in seconds and a body of { "error": "rate_limit_exceeded", "limit": 10, "retryAfter": 1 }. Honour Retry-After and add exponential backoff with jitter on further attempts.

One call to POST /api/v1/emails/batch counts as one request, whatever its 100 items contain: it is the intended way to send a lot of email without going near the limit.

What is not a rate limit

  • Plan quota: the number of messages per month is a different thing and answers 402 or 403, not 429. Where overage is enabled, anything past the included allowance is billed on usage.
  • Outbound throughput to SES: accepted sends go through a queue that pushes roughly 14 messages per second overall. A batch accepted in one second can take more than a second to actually leave: 202 and 207 mean "accepted", not "already sent".