Riferimento REST

Tutti gli endpoint REST raggruppati per area. Base https://sending.dev/api/v1

Tutte le route sono sotto https://sending.dev/api/v1 e richiedono l'header Authorization: Bearer sk_....

Per lo schema completo di ogni endpoint (parametri, tipi, esempi e "try it") usa la API reference interattiva (OpenAPI). La tabella qui sotto è un indice rapido.

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.

Limiti di frequenza

Ogni API key può fare 10 richieste al secondo. Il conteggio è per chiave, non per workspace: due integrazioni dello stesso workspace hanno budget separati, così una impazzita non spegne le altre.

Ogni risposta porta lo stato corrente:

HeaderSignificato
RateLimit-LimitRichieste consentite nella finestra.
RateLimit-RemainingQuante ne restano.
RateLimit-ResetSecondi al reset della finestra.

Oltre il limite la risposta è 429 con Retry-After in secondi e corpo { "error": "rate_limit_exceeded", "limit": 10, "retryAfter": 1 }. Rispetta Retry-After e aggiungi un backoff esponenziale con jitter sui tentativi successivi.

Una chiamata a POST /api/v1/emails/batch conta una richiesta, quali che siano i suoi 100 elementi: è il modo previsto per mandare molte email senza avvicinarsi al limite.

Cosa non è un limite di frequenza

  • Quota del piano: il numero di messaggi al mese è un'altra cosa e risponde 402 o 403, non 429. Dove l'overage è attivo, oltre l'incluso si fattura a consumo.
  • Velocità di uscita verso SES: gli invii accettati passano da una coda che manda circa 14 messaggi al secondo complessivi. Un batch accettato in un secondo può impiegare più di un secondo a partire davvero: 202 e 207 significano "preso in carico", non "già spedito".