API Reference
Vollständige REST API Dokumentation für Entwickler.
https://www.mailaura.io/api/v1Interaktive 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 RessourcenwriteErstellen, Aktualisieren und Löschen von RessourcensendKampagnen versenden
Beispiele
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"]
}'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
Lists
GET, POST, PUT, DELETE
Subscribers
GET, POST, PUT, DELETE
Templates
GET, POST, PUT, DELETE
Webhooks
GET, POST
Transactional Emails
POST
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.