API Reference

Vollständige REST API Dokumentation für Entwickler.

REST API v1JSONRate Limited
Base URL:
https://www.mailaura.io/api/v1

Interaktive API-Dokumentation

Teste alle Endpunkte direkt im Browser mit Swagger UI

Authentifizierung

Alle API-Anfragen erfordern einen API-Schlüssel. Du kannst API-Schlüssel im Dashboard unter Einstellungen → API-Schlüssel erstellen.

curl -X GET "https://www.mailaura.io/api/v1/campaigns" \
  -H "X-API-Key: ml_live_abc123xyz789"

API-Schlüssel Berechtigungen

  • readNur-Lese-Zugriff auf Ressourcen
  • writeErstellen, Aktualisieren und Löschen von Ressourcen
  • sendKampagnen versenden

Beispiele

Abonnenten hinzufügen
Füge einen neuen Abonnenten mit Tags und benutzerdefinierten Feldern hinzu.
curl -X POST "https://www.mailaura.io/api/v1/subscribers" \
  -H "X-API-Key: ml_live_abc123xyz789" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "listId": "clx456def",
    "firstName": "Jane",
    "lastName": "Smith",
    "tags": ["vip", "newsletter"]
  }'
Transaktionale E-Mail senden
Sende eine E-Mail über die Transactional API (Passwort-Reset, Bestellbestätigung, etc.)
curl -X POST "https://www.mailaura.io/api/v1/send" \
  -H "X-Mailaura-Key: ml_trans_live_abc123xyz789" \
  -H "X-Mailaura-Secret: your-secret-here" \
  -H "Idempotency-Key: order-confirmation-12345" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "from": "noreply@yourapp.com",
    "subject": "Your Order Confirmation",
    "html": "<h1>Thank you!</h1><p>Order confirmed.</p>",
    "priority": "high"
  }'

Hinweis: Transactional API-Keys verwenden das Präfix ml_trans_live_ oder ml_trans_test_ (Sandbox). Erstelle sie unter Dashboard → Einstellungen → Transactional E-Mails.

Rate Limiting

Standard-API-Zugriff ist tarifabhängig (normalerweise ab Pro). Die angegebenen Limits gelten pro Minute und Organisation. Bei 429 beachte Retry-After; nicht jede erfolgreiche Antwort enthält Rate-Limit-Header.

Pro

1,000 / min

Business

3,000 / min

X-RateLimit-Limit: 1000

X-RateLimit-Remaining: 999

X-RateLimit-Reset: 1699999999

Endpunkte

Die vollständige Endpoint-Dokumentation mit Parametern, Request/Response-Beispielen und Try-It-Out findest du in der interaktiven Swagger UI.

Campaigns

GET, POST, PUT, DELETE

REST

Lists

GET, POST, PUT, DELETE

REST

Subscribers

GET, POST, PUT, DELETE

REST

Templates

GET, POST, PUT, DELETE

REST

Webhooks

GET, POST

REST

Transactional Emails

POST

REST

Alle dokumentierten API-Operationen

Durchsuchbare Übersicht aus der OpenAPI-Datei. Details, Authentifizierung und Beispiele stehen auch in der Textreferenz.

Textreferenz (Markdown)

GET /subscribers

Abonnenten auflisten

Gibt eine paginierte Liste aller Abonnenten zurück

POST /subscribers

Abonnenten erstellen

Erstellt einen neuen Abonnenten in einer Liste Requires write scope. consentText and privacyPolicyUrl are saved as a consent snapshot. Do not use skipDoubleOptIn without a valid pre-existing consent basis.

GET /subscribers/{id}

Abonnent abrufen

Gibt einen einzelnen Abonnenten zurück

PUT /subscribers/{id}

Abonnent aktualisieren

Aktualisiert einen bestehenden Abonnenten

DELETE /subscribers/{id}

Abonnent löschen

Löscht einen Abonnenten permanent

GET /lists

Listen auflisten

Gibt eine paginierte Liste aller Abonnenten-Listen zurück

POST /lists

Liste erstellen

Erstellt eine neue Abonnenten-Liste

GET /lists/{id}

Liste abrufen

Gibt eine einzelne Liste mit Statistiken zurück

PUT /lists/{id}

Liste aktualisieren

DELETE /lists/{id}

Liste löschen

Deletes the list and its subscribers. Campaign content and history are retained; recipient assignments are removed and sends are paused.

GET /campaigns

Kampagnen auflisten

POST /campaigns

Kampagne erstellen

Draft listId may be omitted or null; an owned recipient list is required before scheduling/sending. html is required by the REST create contract even when empty. editorTemplateId and templateValues retain editable template state; rendered html alone does not. text omitted/null follows generated HTML; custom text must be nonblank and no more than 100 KB UTF-8.

GET /campaigns/{id}

Kampagne abrufen

PUT /campaigns/{id}

Kampagne aktualisieren

Nur Entwürfe und geplante Kampagnen können aktualisiert werden Only allowed campaign states may be edited. listId may be cleared for a draft, but sending requires an owned recipient list. text:null resets automatic plain text; custom text must be nonblank and no more than 100 KB UTF-8.

DELETE /campaigns/{id}

Kampagne löschen

Nur Entwürfe und geplante Kampagnen können gelöscht werden

POST /campaigns/{id}/validate-links

Validate saved campaign links

Requires send scope. Empty body runs an advisory, bounded link check. An override body records manual review and additionally requires write scope. Blocking findings cannot be overridden. No delivery is triggered. A tenant-wide 30-second cooldown applies. Results expire after 24 hours or content changes.

POST /campaigns/{id}/send

Kampagne senden

Requires send scope. Validates the saved audience, DOI eligibility, sender trust and billing, then queues asynchronous delivery. HTTP 202 confirms queue acceptance, not recipient delivery. Reuse Idempotency-Key for the same retry; the default logical key is derived from the organization-scoped campaign ID. Inspect the existing jobId before any retry.

GET /campaigns/{id}/stats

Kampagnen-Statistiken abrufen

Gibt detaillierte Statistiken für eine Kampagne zurück

GET /templates

Vorlagen auflisten

POST /templates

Vorlage erstellen

GET /templates/{id}

Vorlage abrufen

PUT /templates/{id}

Vorlage aktualisieren

DELETE /templates/{id}

Vorlage löschen

POST /send

Transaktionale E-Mail senden

Sendet eine einzelne transaktionale E-Mail (Passwort-Reset, Bestellbestätigung, etc.). **Authentifizierung:** Verwendet separate API-Keys mit dem Präfix `ml_trans_live_` oder `ml_trans_test_`. **Sandbox Mode:** API-Keys mit `ml_trans_test_` Präfix senden keine echten E-Mails, sondern speichern sie nur in der Datenbank für Tests. **Priority:** - `critical`: Umgeht Rate Limits (z.B. Passwort-Reset) - `high`: Bevorzugte Verarbeitung - `normal`: Standard-Verarbeitung - `low`: Verzögerte Verarbeitung At least one of html, text or template_slug is required. An attachment must have content or s3Key. Tracking defaults to the organization setting; no_tracking can suppress it per message. SMTP relay is disabled. At least one of html, text or template_slug is required. An attachment must have content or s3Key. Tracking defaults to the organization setting; no_tracking can suppress it per message. SMTP relay is disabled.

GET /webhooks

Read supported incoming webhook actions

Standard API read scope. Returns incoming action documentation. These are contact-management webhook actions, separate from outgoing transactional lifecycle subscriptions.

POST /webhooks

Webhook-Aktion ausführen

Führt eine Webhook-Aktion aus. Unterstützte Aktionen: - `add_subscriber`: Abonnent hinzufügen/aktualisieren - `remove_subscriber`: Abonnent entfernen - `tag_subscriber`: Tags zu Abonnent hinzufügen

GET /gallery/templates

List gallery templates

List all available email gallery templates with optional category filter

GET /gallery/templates/{id}

Get gallery template details

GET /gallery/templates/{id}/schema

Get template schema

Get structured schema with sections, fields, and example values

GET /gallery/templates/{id}/preview

Preview template with example data

POST /campaigns/{id}/apply-template

Apply gallery template to campaign

PUT /campaigns/{id}/template-values

Update campaign template values

POST /ai/generate-template-content

Generate AI content for template fields

POST /ai/analyze-subject

Analyze email subject line

GET /rss-campaigns

List RSS campaigns

POST /rss-campaigns

Create RSS campaign

Draft listId may be omitted or null; activation requires a recipient list. checkInterval controls polling; sendTime, sendTimezone and sendDays control send windows. At most one newsletter per send day, including immediate trigger checks. accentColor is optional and can be null to inherit headerColor.

GET /rss-campaigns/{id}

Get RSS campaign

PUT /rss-campaigns/{id}

Update RSS campaign

DELETE /rss-campaigns/{id}

Delete RSS campaign

POST /rss-campaigns/{id}/activate

Activate RSS campaign

POST /rss-campaigns/{id}/pause

Pause RSS campaign

GET /rss-campaigns/{id}/stats

Get RSS campaign statistics

GET /automations

List automations

POST /automations

Create automation

The REST trigger enum differs from the dashboard; do not assume every dashboard trigger is available here. Creating an automation does not activate it.

GET /automations/{id}

Get automation with steps

PUT /automations/{id}

Update automation

DELETE /automations/{id}

Delete automation

POST /automations/{id}/activate

Activate automation

POST /automations/{id}/pause

Pause automation

GET /automations/{id}/stats

Get automation statistics

GET /automations/templates

List automation templates

Browse pre-built automation workflows

GET /automations/{id}/steps

Automations-Schritte auflisten

Gibt alle Schritte einer Automation zurück

POST /automations/{id}/steps

Automations-Schritt hinzufügen

Fügt einen neuen Schritt zur Automation hinzu

PUT /automations/{id}/steps/{stepId}

Automations-Schritt aktualisieren

Aktualisiert einen bestehenden Automations-Schritt

DELETE /automations/{id}/steps/{stepId}

Automations-Schritt löschen

Löscht einen Schritt aus der Automation

POST /automations/{id}/trigger

Automation manuell auslösen

Löst eine Automation manuell aus. Erfordert den Scope `send`.

GET /automations/{id}/runs

Automations-Ausführungen auflisten

Gibt eine paginierte Liste der Ausführungen einer Automation zurück

POST /automations/{id}/duplicate

Automation duplizieren

Dupliziert eine Automation inklusive aller Schritte

GET /tags

Tags auflisten

Gibt eine Liste aller Tags mit Anzahl der zugeordneten Abonnenten zurück

POST /tags

Tag erstellen und zuweisen

Erstellt einen Tag und weist ihn optional Abonnenten zu

PUT /tags/{name}

Tag umbenennen

Benennt einen bestehenden Tag um

DELETE /tags/{name}

Tag löschen

Löscht einen Tag von allen Abonnenten

POST /tags/{name}/assign

Tag Abonnenten zuweisen

Weist einen Tag einer Liste von Abonnenten zu

POST /tags/{name}/remove

Tag von Abonnenten entfernen

Entfernt einen Tag von einer Liste von Abonnenten

GET /media

Medien auflisten

Gibt eine paginierte Liste aller Mediendateien zurück

GET /media/{id}

Medium abrufen

Gibt ein einzelnes Medium mit Nutzungsinformationen zurück

PUT /media/{id}

Medium-Metadaten aktualisieren

Aktualisiert Alt-Text und Titel einer Mediendatei

DELETE /media/{id}

Medium löschen

Löscht eine Mediendatei aus S3 und der Datenbank

GET /media/quota

Speicherkontingent abrufen

Gibt das aktuelle Speicherkontingent und die Nutzung zurück

GET /brand

Read organization branding

Standard API read scope. Returns current organization branding; PUT updates only the fields accepted by its schema.

PUT /brand

Branding aktualisieren

Aktualisiert die Branding-Einstellungen der Organisation

POST /brand/analyze

Website-Branding analysieren

Analysiert eine Website und extrahiert Markenfarben. Nur für Pro-Pläne verfügbar.

POST /campaigns/{id}/test

Test-E-Mail senden

Sendet eine Test-E-Mail der Kampagne an eine angegebene Adresse. Erfordert den Scope `send`.

POST /campaigns/{id}/duplicate

Kampagne duplizieren

Erstellt eine Kopie einer bestehenden Kampagne. Erfordert den Scope `write`.

POST /campaigns/{id}/pause

Kampagne pausieren

Pausiert eine Kampagne, die gerade gesendet wird

POST /campaigns/{id}/resume

Kampagne fortsetzen

Setzt eine pausierte Kampagne fort

GET /analytics/overview

Account-Übersicht abrufen

Gibt eine Übersicht der wichtigsten Kennzahlen des gesamten Accounts zurück

GET /analytics/engagement

Engagement-Trends abrufen

Gibt Engagement-Trends über einen Zeitraum zurück

GET /analytics/devices

Geräte-Statistiken abrufen

Gibt Geräte- und Browser-Statistiken zurück

GET /profile

Organisationsprofil abrufen

Gibt das Profil der aktuellen Organisation zurück

PUT /profile

Organisationsprofil aktualisieren

Aktualisiert das Profil der Organisation

GET /api-keys

API-Schlüssel auflisten

Lists this organization's key metadata, including nullable expiry; never returns full keys or hashes. Requires read scope.

POST /api-keys

API-Schlüssel erstellen

Creates a key in the caller's organization. Requires write scope. Requested scopes must be covered by the caller (exact scope or wildcard). Omitted expiry inherits the caller's finite expiry, otherwise no expiry. Explicit null means no expiry and is forbidden for an expiring caller. An explicit expiry must be a future ISO 8601 timestamp with Z or a numeric timezone offset and cannot exceed the caller's expiry, even for wildcard callers. Returns the full key only once. For replacement, create a new key with no broader scopes, store it securely, update and verify the integration, then delete the old key. Creation still requires a spare plan quota slot.

DELETE /api-keys/{id}

API-Schlüssel löschen

Löscht einen API-Schlüssel permanent

POST /rss-campaigns/{id}/test

RSS-Kampagne testen

Sendet eine Test-E-Mail der RSS-Kampagne an eine angegebene Adresse

GET /rss-campaigns/{id}/preview-feed

Feed-Vorschau abrufen

Gibt eine Vorschau der aktuellen Feed-Einträge zurück

GET /domains/{id}

Get sender domain

Requires domains:read or read for reads; domains:write or write for mutations. Registration returns pending status; DNS and SES checks are still required. Suspended organizations are read-only and held domains may return 403.

DELETE /domains/{id}

Remove sender domain

Requires domains:read or read for reads; domains:write or write for mutations. Registration returns pending status; DNS and SES checks are still required. Suspended organizations are read-only and held domains may return 403.

PUT /letters/templates/{id}

Update a letter template

Requires letters:write or write. Content is a complete replacement when supplied, not a partial merge of nested fields.

DELETE /letters/templates/{id}

Delete a letter template

Requires letters:write or write. Content is a complete replacement when supplied, not a partial merge of nested fields.

GET /transactional/templates/{slug}

Read template languages by slug

Accepts transactional credentials or a standard API key. GET requires read or templates; PUT/DELETE require write or templates. GET without language returns all languages for the slug; mutation language defaults to de.

PUT /transactional/templates/{slug}

Update a transactional template language

Accepts transactional credentials or a standard API key. GET requires read or templates; PUT/DELETE require write or templates. GET without language returns all languages for the slug; mutation language defaults to de.

DELETE /transactional/templates/{slug}

Delete a transactional template language

Accepts transactional credentials or a standard API key. GET requires read or templates; PUT/DELETE require write or templates. GET without language returns all languages for the slug; mutation language defaults to de.

PATCH /transactional/webhooks/{id}

Update a transactional webhook subscription

Requires write or webhooks:write using transactional credentials or a standard API key. PATCH requires at least one changed field. Responses omit the secret.

DELETE /transactional/webhooks/{id}

Delete a transactional webhook subscription

Requires write or webhooks:write using transactional credentials or a standard API key. PATCH requires at least one changed field. Responses omit the secret.

GET /account

Read organization plan and limits

Standard API key with read scope. Returns plan, planName, features.emailAttachments, features.automation and limits.emailsPerMonth/contacts.

GET /account/tracking

Read transactional tracking preference

Standard API key: read for GET, write for PUT. Returns data.transactional_tracking. Default organization tracking is off; no_tracking can suppress tracking on an individual transactional send.

PUT /account/tracking

Update transactional tracking preference

Standard API key: read for GET, write for PUT. Returns data.transactional_tracking. Default organization tracking is off; no_tracking can suppress tracking on an individual transactional send.

GET /domains

List sender domains

Requires domains:read or read for reads; domains:write or write for mutations. Registration returns pending status; DNS and SES checks are still required. Suspended organizations are read-only and held domains may return 403.

POST /domains

Register a sender domain

Requires domains:read or read for reads; domains:write or write for mutations. Registration returns pending status; DNS and SES checks are still required. Suspended organizations are read-only and held domains may return 403.

GET /domains/{id}/dns

Get required DNS records

Requires domains:read or read. Returns setup records, not a successful delivery guarantee. Never publish a second SPF record; merge an existing SPF configuration.

GET /emails

List transactional emails with cursor pagination

Requires read scope. Accepts transactional credentials or a standard API key. Returns data.emails and data.next_cursor. Supply the cursor verbatim for the next page; this endpoint does not use page pagination.

GET /emails/{id}

Read transactional email delivery status

Requires read scope. Accepts transactional credentials or a standard API key. Returns a sanitized delivery log; sent does not mean delivered. See the text reference for response fields.

GET /letters

List individual letter logs

Reads require letters:read or read. Sending requires letters:write or write, eligible letter plan and provider readiness, and an additional 30 requests/minute send limit. POST queues one letter and can debit postage. Reuse the same Idempotency-Key for a retry of the same request.

POST /letters

Queue one physical letter

Reads require letters:read or read. Sending requires letters:write or write, eligible letter plan and provider readiness, and an additional 30 requests/minute send limit. POST queues one letter and can debit postage. Reuse the same Idempotency-Key for a retry of the same request.

GET /letters/campaigns

List physical letter campaigns

Requires letters:read/read for GET and letters:write/write for POST. POST creates a draft using an owned list and letter template; it does not dispatch. GET uses page with a fixed page size of 25.

POST /letters/campaigns

Create a physical letter campaign draft

Requires letters:read/read for GET and letters:write/write for POST. POST creates a draft using an owned list and letter template; it does not dispatch. GET uses page with a fixed page size of 25.

GET /letters/campaigns/{id}

Read a physical letter campaign

Requires letters:read/read for GET and letters:write/write for POST, including estimate. action=estimate returns a current provider quote; send/resume can reserve credit and dispatch. Insufficient credit, unavailable provider or invalid addresses prevent dispatch.

POST /letters/campaigns/{id}

Estimate, send or resume a physical letter campaign

Requires letters:read/read for GET and letters:write/write for POST, including estimate. action=estimate returns a current provider quote; send/resume can reserve credit and dispatch. Insufficient credit, unavailable provider or invalid addresses prevent dispatch.

GET /letters/templates

List letter templates

Requires letters:read/read for GET and letters:write/write for POST. Only organization-owned letter templates are returned.

POST /letters/templates

Create a letter template

Requires letters:read/read for GET and letters:write/write for POST. Only organization-owned letter templates are returned.

GET /letters/{id}

Read a letter log

Reads require letters:read or read. Sending requires letters:write or write, eligible letter plan and provider readiness, and an additional 30 requests/minute send limit. POST queues one letter and can debit postage. Reuse the same Idempotency-Key for a retry of the same request.

GET /letters/{id}/pdf

Read the private archived letter PDF

Requires letters:read/read API scope or an authenticated session with access to the active organization. Returns raw application/pdf with private, no-store caching. Returns 404 if the archived PDF is unavailable.

GET /transactional/templates

List transactional templates

Accepts transactional credentials or a standard API key. GET requires read or templates; POST requires write or templates. language defaults to de for creation.

POST /transactional/templates

Create a transactional template

Accepts transactional credentials or a standard API key. GET requires read or templates; POST requires write or templates. language defaults to de for creation.

GET /transactional/webhooks

List transactional webhook subscriptions

Accepts transactional credentials or a standard API key. GET requires read; POST requires write or webhooks:write and the organization webhook quota. Creation returns data.webhook plus data.secret; the secret is shown only once. Events use EMAIL_* names.

POST /transactional/webhooks

Create a transactional webhook subscription

Accepts transactional credentials or a standard API key. GET requires read; POST requires write or webhooks:write and the organization webhook quota. Creation returns data.webhook plus data.secret; the secret is shown only once. Events use EMAIL_* names.

GET /woocommerce/webhook

Read WooCommerce webhook configuration information

Integration callback, not a general newsletter-send endpoint. POST uses the configured WooCommerce secret and X-WC-Webhook-Signature (HMAC-SHA256 of the raw body, base64), plus org query or X-Organization-ID. The organization integration must be configured. GET is an unauthenticated setup-information response.

POST /woocommerce/webhook

Receive a signed WooCommerce webhook

Integration callback, not a general newsletter-send endpoint. POST uses the configured WooCommerce secret and X-WC-Webhook-Signature (HMAC-SHA256 of the raw body, base64), plus org query or X-Organization-ID. The organization integration must be configured. GET is an unauthenticated setup-information response.

POST /attachment/presign

Create a temporary attachment upload URL

Requires standard API write scope, API access and emailAttachments entitlement. Return data.uploadUrl, s3Key, expiresIn (900 seconds), maxSize. PUT the file to uploadUrl using the matching Content-Type, then pass s3Key to the supported email attachment input. Temporary attachments expire by storage lifecycle.

POST /domains/{id}/mail-from

Enable custom MAIL FROM

Requires domains:write or write and an already verified domain. Empty body defaults the subdomain to bounce. Add the returned MX and SPF records and check status again.

POST /domains/{id}/verify

Check DNS and SES verification

Requires domains:write or write. Checks DNS and SES state. A DNS match alone does not establish final SES verification.

POST /letters/preview

Render a letter template preview as base64 PDF

Requires letters:read or read; additional 60 requests/minute limit. Returns data.base64 and data.mimeType=application/pdf. This endpoint renders a saved template; it does not send or debit postage.

POST /letters/{id}/cancel

Request cancellation of a physical letter

Requires letters:write or write. Cancellation depends on provider state; requesting cancellation does not establish a confirmed cancellation or refund.

POST /rss-campaigns/trigger

Trigger active RSS campaign checks

Requires standard API write scope. Triggers active RSS campaigns in the organization, optionally by exact feedUrl. At most one newsletter per send day in the campaign timezone; already-sent campaigns appear in skipped. A queued check is not a delivery confirmation.

POST /woocommerce/data

Process a WooCommerce cart, order or product event

Requires standard API write scope. Supply one supported discriminated event payload. The event drives the corresponding configured automations; configuration, consent and sending gates still apply.

POST /woocommerce/sync

Sync WooCommerce customers to an owned list

Requires write or subscribers:write on a standard API key. listId must belong to the authenticated organization. If absent, the configured default list or first owned list is used. Processes the customers array and reports individual results.

POST /wordpress

Send a WordPress system email through HTTP

Requires standard API write scope. Sends WordPress system email through the transactional pipeline; HTTP API only, SMTP relay is disabled. Requires html or text, supports base64 attachments or presigned s3Key, optional wrapping and Idempotency-Key. Attachment entitlement still applies; inspect the response for omitted attachments.

Weiterführende Dokumentation