Zuletzt aktualisiert: 2026-03-035 Min. Lesezeit

POST /v1/send

Sendet eine transaktionale E-Mail. Gibt einen terminalen Zustellungsstatus zurück.

Request

POST https://truncus.co/api/v1/emails/send
Authorization: Bearer tr_live_...
Content-Type: application/json
Idempotency-Key: ihr-idempotency-key  (optional)

Body

{
  "to": "user@example.com",
  "from": "hallo@ihredomain.de",
  "subject": "Rechnung bereit",
  "html": "<p>Ihre Rechnung ist angehängt.</p>",
  "text": "Ihre Rechnung ist angehängt.",
  "reply_to": "support@ihredomain.de",
  "attachments": [
    {
      "filename": "rechnung.pdf",
      "content": "base64-enkodierter-inhalt"
    }
  ],
  "headers": {
    "X-Entity-Ref-ID": "ihre-interne-id"
  }
}

Felder

FeldTypPflichtBeschreibung
tostring | string[]JaEmpfängeradresse(n)
fromstringJaVerifizierte Absenderadresse
subjectstringJaBetreff
htmlstringEines von html/textHTML-Inhalt
textstringEines von html/textNur-Text-Inhalt
reply_tostringNeinAntwortadresse
attachmentsAttachment[]NeinDateianhänge
headersobjectNeinBenutzerdefinierte E-Mail-Header

Response

200 — delivered

{
  "status": "delivered",
  "message_id": "msg_8f21a3b4"
}

200 — bounced

{
  "status": "bounced",
  "message_id": "msg_9b44c1e2",
  "reason": "mailbox_full"
}

200 — rejected

{
  "status": "rejected",
  "message_id": "msg_a2f7e8d1",
  "reason": "suppression_list"
}

Fehler-Responses

StatusCodeBeschreibung
400invalid_payloadFehlende Pflichtfelder oder ungültiges JSON
400invalid_addressUngültige E-Mail-Adresse
401invalid_api_keyFehlender oder ungültiger Authorization-Header
403domain_not_verifiedAbsender-Domain nicht verifiziert
429rate_limit_exceededTier-Limit erreicht. Enthält retry_after
500transient_failureTransienter Infrastrukturfehler. Sicher wiederholbar.

SDK-Beispiel

import { Truncus } from '@truncus/node'

const truncus = new Truncus({ apiKey: process.env.TRUNCUS_API_KEY })

const response = await truncus.emails.send({
  to: 'user@example.com',
  from: 'abrechnung@ihredomain.de',
  subject: 'Rechnung bereit',
  html: '<p>Ihre Rechnung ist bereit.</p>'
})

if (response.status === 'delivered') {
  // Zustellung protokollieren
} else if (response.status === 'bounced') {
  // Kontaktdatensatz aktualisieren — response.reason enthält Details
} else if (response.status === 'rejected') {
  // Nicht erneut versuchen — unterdrückte oder ungültige Adresse
}
POST /v1/send