REST-API-Referenz

REST-API-Referenz

Seite kopieren

REST-API-Referenz für Workflow Transactional Email: Endpunkte für Layouts, Absender, Verlauf und Zugriffsebenen in Shopify Flow.

Alle Pfade beziehen sich auf https://shopify.workflow-transactional-email.app. Für jeden Endpunkt mit Ausnahme des Index ist Authorization: Bearer fak_... erforderlich - siehe Authentifizierung und API-Schlüssel.

Die Antworten liegen im JSON-Format vor. Fehlermeldungen weisen durchgehend dieselbe Struktur auf:

json
{ "error": "Invalid or missing API key" }

Index und Identität

Verfahren Pfad Stufe Zweck
GET /api/v1 keine API-Index. Bestätigt, dass die API verfügbar ist, und gibt die aktuelle Version an
GET /api/v1/me lesen Überprüfen Sie, ob ein Schlüssel funktioniert, und ermitteln Sie dessen Zugriffsebene

Da der Index keinen Schlüssel benötigt, eignet er sich gut als Ziel für einen Sicherheitscheck.

E-Mail-Layouts

Verfahren Pfad Stufe Zweck
GET /api/v1/email-templates lesen E-Mail-Layouts auflisten. Unter q können Sie nach Name, Betreff und Beschreibung suchen; unter category=transactional oder category=marketing wird jeweils ein E-Mail-Typ aufgelistet.
BEITRAG /api/v1/email-templates schreiben Ein Layout erstellen
GET /api/v1/email-templates/:id lesen Ein Layout mit seinem Design bzw. seinen Anhängen, seinen Fußzeilentexten und der Liste seiner Sprachen
PUT / PATCH /api/v1/email-templates/:id schreiben Ein Layout ändern. Es ändern sich nur die Felder, die Sie übermitteln.
LÖSCHEN /api/v1/email-templates/:id schreiben Ein Layout mit seinen Übersetzungen und Versionen löschen
GET /api/v1/layout-schema lesen So erstellen Sie ein Layout: das Designformat, die Standardeinstellungen der einzelnen Blöcke, die verfügbaren Liquid-Elemente, Einschränkungen und ein Beispiel

Die Liste akzeptiert page (Standardwert 1), limit (Standardwert 25, maximal 100) sowie q, wodurch nach Name, Betreff und Beschreibung gesucht wird. Über die API ist keine Filterung nach Typ möglich; lesen Sie stattdessen zu jedem Layout den Abschnitt category.

Ein Layout enthält folgende Felder:

Feld Anmerkungen
name, description Name erforderlich, maximal 200 Zeichen; Beschreibung maximal 2000
bodyType visual (Standard) oder text. Nach der Erstellung unveränderlich
defaultLocale Die Sprache des Layouts selbst: en, sofern nicht anders festgelegt
category transactional (Standard) oder marketing. Siehe unten
subject, previewText Getränke sind erlaubt. Das Fach ist Pflichtfach.
bodyDesign Visuelle Layouts: { blocks, global?, header?, footer?, testVariables? }. Bitte senden Sie bei Änderungen das vollständige Design; der HTML-body wird daraus generiert.
body Textlayouts: Der HTML-Body
attachments Textlayouts: [{ filename, fileKey, sendAsLink? }] für hochgeladene Dateien (siehe Dateien unten) oder [{ filename, url }] für eine Datei, die beim Versenden der E-Mail über HTTPS abgerufen wird
marketingTexts Die Fußzeilentexte eines Marketing-Layouts, auch null genannt. Siehe unten

„Liquid“ im Betreff, im Vorschautext, im Haupttext und in jedem Blocktext muss parst werden, und jede fileKey-Angabe muss zu Ihrem Shop gehören; andernfalls wird der Schreibvorgang mit einem 400-Fehler abgelehnt, der das betreffende Feld nennt. Lesen Sie GET /api/v1/layout-schema, bevor Sie ein visuelles Design erstellen: Es wird vom Builder selbst generiert und kann daher nicht abweichen.

Jeder Schreibvorgang über diese API wird im Versionsverlauf des Layouts gespeichert, genau wie beim Speichern in der App.

Layouts für Transaktionen und Marketing

category erläutert, wozu ein Layout dient. Ein Transaktionslayout wird unverändert an jeden Empfänger versendet. Ein Marketing-Layout überspringt Empfänger, die sich abgemeldet haben (ein Schritt, bei dem die E-Mail an die Empfänger im Feld „An“ nicht versendet wird und im Verlauf als SKIPPED angezeigt wird), wird als einzelne Nachricht pro Empfänger im Feld „An“ mit einem eigenen Abmeldelink versendet (maximal 20 pro Schritt) und endet mit dem Abmeldesatz sowie Ihren Unternehmensangaben. {{ unsubscribe_url }} sowie {{ unsubscribe_link }} - fügen Sie den Link selbst ein; in Transaktions-Layouts sind beide Felder leer. Die Händler-Seite hierzu finden Sie unter Marketing-E-Mails und Abmeldungen.

marketingTexts Ist der Text in der Fußzeile ein Marketinglayout, das anstelle der shopweiten Texte aus den Einstellungen verwendet wird:

json
{
  "marketingTexts": {
    "unsubscribeText": "You get this because you shop with us. {{ unsubscribe_link }}",
    "unsubscribeLinkLabel": "Unsubscribe",
    "companyDetails": "Example GmbH, Musterstrasse 1, 10115 Berlin"
  }
}

Jedes Feld ist optional. Ein festgelegtes Feld ersetzt den Einstellungstext für dieses Feld; die anderen bleiben unverändert. null (Standard) bedeutet, dass die Einstellungstexte in der Sprache der E-Mail verwendet werden. Beschränkungen: unsubscribeText und companyDetails sind auf 2000 Zeichen begrenzt, unsubscribeLinkLabel auf 100. Ein unsubscribeText muss {{ unsubscribe_link }} oder {{ unsubscribe_url }} enthalten, andernfalls wird der Schreibvorgang abgelehnt. Das Feld wird für jedes Layout gespeichert, jedoch nur bei Marketing-Layouts versendet.

Das Löschen eines Layouts wird niemals blockiert. Falls Schritte unter Shopify Flow noch auf dieses Layout verweisen, enthält die Antwort einen Parameter warning, der angibt, um wie viele Schritte es sich handelt; diese Schritte schlagen fehl, bis ein anderes Layout verwendet wird.

Übersetzungen

Verfahren Pfad Stufe Zweck
GET /api/v1/email-templates/:id/translations lesen Jede Sprache eines Layouts mit ihrem Inhalt
GET /api/v1/email-templates/:id/translations/:locale lesen Eine Sprache
PUT /api/v1/email-templates/:id/translations/:locale schreiben Eine Sprache anlegen oder ersetzen
LÖSCHEN /api/v1/email-templates/:id/translations/:locale schreiben Eine Sprache entfernen. In diesem Fall wird auf das Standardlayout zurückgegriffen.
BEITRAG /api/v1/email-templates/:id/translations/:locale/promote schreiben Legen Sie diese Sprache als Hauptsprache des Layouts fest

:locale ist ein Sprachcode wie beispielsweise de, fr oder pt-br; Groß- und Kleinschreibung sowie Trennzeichen spielen keine Rolle. Pro Layout sind bis zu 30 Sprachen zulässig. Das Feld „Sprache“ im Schritt Shopify Flow wählt zum Zeitpunkt des Versands eine Sprache aus: zunächst die exakte Ländereinstellung, dann die Basissprache, anschließend eine regionale Variante und andernfalls das Layout selbst.

Eine PUT enthält den vollständigen übersetzten Inhalt: subject (erforderlich), previewText sowie bodyDesign (Bild) oder body (Text). Bitte lassen Sie Liquid-Tags und URLs unverändert. Zwei Felder beziehen sich speziell auf eine Übersetzung:

Feld Textlayouts Bedeutung
attachments ja Eine Liste (mit derselben Struktur wie die des Layouts) = sprachspezifische Anhänge; [] = keine Anhänge in dieser Sprache; null = die Anhänge des Layouts senden. Weggelassen = die aktuelle Auswahl beibehalten; eine neue Sprache verwendet die des Layouts. Visuelle Layouts übertragen ihre Anhänge als Blöcke in der Datei bodyDesign der jeweiligen Sprache und lehnen dieses Feld ab.
marketingTexts irgendein Die Fußzeilentexte dieser Sprache werden Feld für Feld über die des Layouts gelegt. null = die des Layouts. „Omitted“ = die aktuelle Auswahl beibehalten

Es wird eine Übersetzung mit denselben beiden Feldern zurückgegeben: attachments lautet null, während das Layout verwendet wird, und marketingTexts lautet null, während das Layout verwendet wird.

promote Tauscht das Layout und die Übersetzung aus: Das Layout übernimmt den Inhalt und die Ländereinstellung der Übersetzung, und sein ursprünglicher Inhalt wird zur Übersetzung für die Sprache, in der es zuvor verwendet wurde. Auch Anhänge und Fußzeilentexte tauschen ihre Plätze, sodass jede Sprache weiterhin das versendet, was sie zuvor versendet hat. Die Antwort enthält die Angaben promoted, previousMainLanguage sowie das Layout. Da es sich um eine einzige Version handelt, kann der Vorgang rückgängig gemacht werden.

Versionen

Verfahren Pfad Stufe Zweck
GET /api/v1/email-templates/:id/versions lesen Gespeicherte Versionen, die neuesten zuerst. Die App behält die 25 neuesten Versionen bei
GET /api/v1/email-templates/:id/versions/:version lesen Der vollständige Snapshot einer Version: Layout und alle Übersetzungen
BEITRAG /api/v1/email-templates/:id/versions/:version/restore schreiben Bitte setzen Sie diese Version wieder ein. Als neue Version gespeichert
GET /api/v1/email-templates/:id/versions/github?page= lesen Alle im verbundenen GitHub-Repository gespeicherten Versionen, 20 pro Seite
GET /api/v1/email-templates/:id/versions/github/:sha lesen Das Layout, wie es zu einem bestimmten Commit stand
BEITRAG /api/v1/email-templates/:id/versions/github/:sha/restore schreiben Eine GitHub-Version wiederherstellen, wie beim Speichern

Die GitHub-Endpunkte geben den Fehlercode 409 zurück, solange auf der Entwickler-Seite kein Repository verbunden ist. Siehe Versionsverlauf des Layouts und Speichern Sie einen unbegrenzten Layout-Verlauf auf GitHub.

E-Mail-Absender

Verfahren Pfad Stufe Zweck
GET /api/v1/smtp-configs lesen SMTP-Absender auflisten
GET /api/v1/senders lesen Verbundene Postfächer auflisten (Microsoft 365, Google)

SMTP-Absender geben hasUsername und hasPassword anstelle der Anmeldedaten selbst an - beide Teile werden zurückgehalten, da der Benutzername ebenso Teil der Anmeldedaten ist wie das Passwort. Ein Absender bleibt anhand seines Namens, seines Hosts und seiner Absenderadresse identifizierbar. Verbundene Postfächer geben eine teilweise maskierte Adresse wie beispielsweise so***@example.com an und niemals ihre Anmeldetoken.

Nur-Lese-Zugriff. Sie können Absender in der App verbinden und bearbeiten.

Geheimnisse

Verfahren Pfad Stufe Zweck
GET /api/v1/secrets lesen Geheime Namen und Beschreibungen auflisten

Gibt hasValue zurück, niemals den Wert selbst. Es gibt keinen Endpunkt, über den ein Geheimnis wieder abgerufen werden kann. Erstellen und aktualisieren Sie Geheimnisse in der App.

Hochgeladene Dateien

Verfahren Pfad Stufe Zweck
GET /api/v1/files lesen Liste der hochgeladenen Logos, Bilder und Anhänge
LÖSCHEN /api/v1/files schreiben „Delete one“ von key im Hauptteil

Die Liste akzeptiert die Formate page, limit (maximal 100) und q für die Suche nach Dateinamen.

Fügen Sie „?usage=true“ hinzu, und jede Datei meldet zudem inUse sowie ein Array usedBy, in dem die Layouts und Voreinstellungen aufgeführt sind, die darauf verweisen. Auf diese Weise können Sie mit einer einzigen Abfrage alle Elemente ermitteln, die bedenkenlos gelöscht werden können. Da dabei Ihre Layouts und Voreinstellungen durchsucht werden, handelt es sich um eine Option, die aktiviert werden muss und nicht standardmäßig eingestellt ist.

Das Hochladen wird hier nicht unterstützt - fügen Sie Dateien über die Medienauswahl in der App hinzu.

HTTP-Anfragen

Verfahren Pfad Stufe Zweck
GET /api/v1/http-requests lesen HTTP-Anfragen auflisten
BEITRAG /api/v1/http-requests schreiben Erstellen Sie eines
GET /api/v1/http-requests/:id lesen Holen Sie sich eines
PUT / PATCH /api/v1/http-requests/:id schreiben Aktualisierung Nr. 1
LÖSCHEN /api/v1/http-requests/:id schreiben Einen löschen
BEITRAG /api/v1/http-requests/:id/test ausführen Führen Sie es am tatsächlichen Ziel aus

„List“ akzeptiert dieselben Parameter page, limit und q wie E-Mail-Layouts.

Die Ziel-url-Adresse muss http:// oder https:// lauten. Andere Schemata werden beim Speichern abgelehnt.

In den Header oder den Hauptteil eingetragene Anmeldedaten werden in jeder Antwort maskiert. Werte, auf die als {{ secrets.KEY }} verwiesen wird, werden unverändert zurückgegeben, da der Verweis selbst nicht sensibel ist.

Geschichte und Statistiken

Dies umfasst sowohl E-Mail-Versendungen als auch HTTP-Anfragen.

Verfahren Pfad Stufe Zweck
GET /api/v1/history lesen Ausführung von Listen
GET /api/v1/history/:id lesen Rufen Sie eine Ausführung mit Anforderungs- und Antwortdaten ab
GET /api/v1/stats lesen Gesamtzahlen und Erfolgsquote

„History“ akzeptiert page, limit (max. 100), actionType, status (PENDING, SUCCESS, FAILED, SKIPPED) sowie actionConfigId, um nach einem einzelnen Layout oder einer einzelnen Anfrage zu filtern.

SKIPPED Es handelt sich um eine Marketing-E-Mail, deren Empfänger sich alle abgemeldet hatten: Es wurde nichts versendet, es wurde kein Kontingent verbraucht, und sie fließt nicht in die Erfolgsquote ein.

actionType Es muss sich genau um EMAIL oder HTTP_REQUEST handeln. Ein nicht erkannter Wert wird ignoriert und nicht abgelehnt, sodass bei einem Tippfehler das gesamte Ergebnis zurückgegeben wird, anstatt eine Fehlermeldung auszugeben.

„Stats“ akzeptiert Werte zwischen days (Standardwert 30, Maximalwert 365).

Statuscodes

Code Bedeutung
200 Erfolg
201 Erstellt
400 Fehlerhafte Anfrage oder fehlgeschlagene Validierung. Das error gibt den Feldnamen an, zum Beispiel subject: required
401 Fehlender, fehlerhafter oder widerrufener API-Schlüssel
403 Der Schlüssel ist gültig, seine Berechtigungsstufe ist jedoch für diesen Endpunkt zu niedrig.
404 Nicht gefunden oder gehört zu einem anderen Geschäft
405 Falsche Methode für diesen Pfad
409 Ablehnung, da der Datensatz noch verwendet wird (Dateilöschung) oder keine Verbindung zu GitHub besteht (GitHub-Versionen)
429 Ratenbegrenzung - siehe unten
502 Die Anfrage wurde ausgeführt, doch das Ziel des Drittanbieters schlug fehl

Ein Datensatz, der zu einem anderen Geschäft gehört, liefert den Status 404 statt 403, sodass die API niemals bestätigt, dass eine ID an anderer Stelle existiert.

Ratenbegrenzungen

Zwei unabhängige Budgets, jeweils pro Schlüssel:

  • 300 Anfragen pro 60 Sekunden über alle Endpunkte hinweg.
  • Darüber hinaus werden 60 Einsätze pro Stunde durchgeführt, die das Gebiet POST /api/v1/http-requests/:id/test abdecken.

Wird einer dieser Werte überschritten, wird der Fehlercode 429 mit der Erläuterung error zurückgegeben. Das Ausführungsbudget ist bewusst knapp bemessen: Eine außer Kontrolle geratene Schleife, die in Echtzeit Anfragen an einen Zahlungsanbieter sendet, stellt einen weitaus schwerwiegenderen Fehler dar als ein langsames Skript.

Die Budgets gelten pro Schlüssel und nicht pro Shop, sodass eine Integration das Kontingent eines anderen Shops nicht aufbrauchen kann.