REST API-referens

REST API-referens

Kopiera sidan

REST API för e-postmallar, avsändare, historik och statistik i Shopify Flow-appen Workflow Transactional Email, med slutpunkter och åtkomstnivåer.

Alla sökvägar är relativa till https://shopify.workflow-transactional-email.app. Varje slutpunkt utom index kräver Authorization: Bearer fak_... - se Autentisering och API-nycklar.

Svaren är i JSON-format. Felmeddelandena har samma struktur genomgående:

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

Index och identitet

Metod Sökväg Nivå Syfte
HÄMTA /api/v1 ingen API-index. Bekräftar att API:et är i drift och visar aktuell version
HÄMTA /api/v1/me läs Kontrollera om en nyckel fungerar och se vilken åtkomstnivå den har

Indexet kräver ingen nyckel, så det är en säker hälsokontroll att rikta en monitor mot.

E-postmallar

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/email-templates läs Visa e-postmallar. q söker efter namn, ämne och beskrivning; category=transactional eller category=marketing visar en viss typ av e-post
INLÄGG /api/v1/email-templates skriva Skapa en layout
HÄMTA /api/v1/email-templates/:id läs En layout med sin design och sina bilagor, sina sidfotstexter och listan över språk
PUT / PATCH /api/v1/email-templates/:id skriva Ändra en layout. Endast de fält du skickar ändras
RADERA /api/v1/email-templates/:id skriva Ta bort en layout tillsammans med dess översättningar och versioner
HÄMTA /api/v1/layout-schema läs Så här skriver du en layout: designformatet, standardinställningarna för varje block, vilka Liquid-koder du kan använda, begränsningar och ett exempel

Listan accepterar page (standardvärde 1), limit (standardvärde 25, max 100) och q, som söker efter namn, ämne och beskrivning. Det finns inget filter efter typ via API:et; läs istället category i respektive layout.

En layout innehåller följande fält:

Fält Anmärkningar
name, description Namn krävs, högst 200 tecken; beskrivning högst 2000
bodyType visual (standard) eller text. Kan inte ändras efter att den har skapats
defaultLocale Språket för layoutens eget innehåll, en om inget annat anges
category transactional (standard) eller marketing. Se nedan
subject, previewText Flytande vätska tillåten. Ämne krävs
bodyDesign Visuella layouter: { blocks, global?, header?, footer?, testVariables? }. Skicka den fullständiga designen när du ändrar den; HTML-elementet body-renderas utifrån den
body Textlayouter: HTML-kroppen
attachments Textformat: [{ filename, fileKey, sendAsLink? }] för uppladdade filer (se filerna nedan) eller [{ filename, url }] för en fil som hämtas via https när e-postmeddelandet skickas
marketingTexts Fottexterna i en marknadsföringslayout, eller null. Se nedan

Liquid-kod i ämnesraden, förhandsgranskningstexten, brödtexten och varje textblock måste analyseras, och varje fileKey måste tillhöra din butik, annars avvisas skrivningen med ett 400-fel där fältet anges. Läs GET /api/v1/layout-schema innan du skapar en visuell design: den genereras av själva byggverktyget, så den kan inte avvika.

Varje skrivning via detta API sparas i layoutens versionshistorik, precis som när man sparar i appen.

Layouter för transaktioner och marknadsföring

category anger vad en layout är avsedd för. En transaktionslayout skickas till alla mottagare utan ändringar. En marknadsföringslayout hoppar över mottagare som har avslutat prenumerationen (ett steg där meddelandet ”Alla mottagare i fältet Till har avslutat prenumerationen” inte skickas och visas som SKIPPED i historiken), skickas ut som ett meddelande per mottagare i fältet Till med en egen länk för att avsluta prenumerationen (högst 20 per steg) och avslutas med meningen om att avsluta prenumerationen samt dina företagsuppgifter. {{ unsubscribe_url }} och {{ unsubscribe_link }} - placera länken själv; i transaktionslayouter är båda tomma. Handlarsidan av detta finns i Marknadsföringsmejl och avregistreringar.

marketingTexts är den text i sidfoten som en marknadsföringslayout använder istället för de butiksövergripande texterna från Inställningar:

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

Alla fält är valfria. Ett ifyllt fält ersätter inställningstexten för det fältet; de övriga fälten förblir oförändrade. null (standardvärdet) innebär att texterna under ”Inställningar” för e-postens språk används. Begränsningar: unsubscribeText och companyDetails 2000 tecken, unsubscribeLinkLabel 100. Ett unsubscribeText måste innehålla {{ unsubscribe_link }} eller {{ unsubscribe_url }}, annars avvisas inmatningen. Fältet sparas för alla layouter men skickas endast med marknadsföringslayouter.

Det går alltid att ta bort en layout. Om det fortfarande finns Shopify Flow-steg som hänvisar till den, innehåller svaret en warning-varning som anger hur många; dessa steg misslyckas tills de använder en annan layout.

Översättningar

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/email-templates/:id/translations läs Varje språk i en layout med sitt innehåll
HÄMTA /api/v1/email-templates/:id/translations/:locale läs Ett språk
PUT /api/v1/email-templates/:id/translations/:locale skriva Skapa eller ersätt ett språk
RADERA /api/v1/email-templates/:id/translations/:locale skriva Ta bort ett språk. Vid detta fall återgår man till standardlayouten
INLÄGG /api/v1/email-templates/:id/translations/:locale/promote skriva Ange det språket som layoutens huvudspråk

:locale är en språkkod, till exempel de, fr eller pt-br; storlekar på bokstäver och avgränsare spelar ingen roll. Upp till 30 språk per layout. Fältet ”Språk” i Shopify Flow-steget väljer ett språk vid sändningstillfället: först den exakta språkinställningen, sedan basspråket, därefter en regional variant och i övriga fall själva layouten.

Ett PUT-anrop tar med hela det översatta innehållet: subject (obligatoriskt), previewText och bodyDesign (visuellt) eller body (text). Lämna Liquid-taggar och URL:er oförändrade. Två fält är specifika för en översättning:

Fält Textlayouter Betydelse
attachments ja En lista (samma form som layoutens) = det här språkets egna bilagor, [] = inga i det här språket. null = skicka layoutens bilagor. Utelämnat = behåll det aktuella valet; ett nytt språk använder layoutens. Visuella layouter har sina bilagor som block i varje språks bodyDesign och avvisar detta fält
marketingTexts någon Texterna i sidfoten för detta språk läggs ovanpå layoutens, fält för fält. null = layoutens. Utelämnat = behåll det aktuella valet

En översättning returneras med samma två fält: attachments är null, medan den skickar layoutens, och marketingTexts är null, medan den använder layoutens.

promote byter plats på layouten och översättningen: layouten tar över översättningens innehåll och språkinställning, medan det innehåll som layouten tidigare hade blir översättningen för det språk som den tidigare tillhörde. Bilagor och sidfotstexter byter också plats, så varje språk fortsätter att skicka det som det skickade tidigare. Svaret rapporterar promoted, previousMainLanguage och layouten. Det är en version, så den kan ångras.

Versioner

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/email-templates/:id/versions läs Spara versioner, med de senaste först. Appen sparar de 25 senaste
HÄMTA /api/v1/email-templates/:id/versions/:version läs En fullständig översikt över en version: layout och alla översättningar
INLÄGG /api/v1/email-templates/:id/versions/:version/restore skriva Sätt tillbaka den versionen. Inspelad som en ny version
HÄMTA /api/v1/email-templates/:id/versions/github?page= läs Alla versioner som finns i det anslutna GitHub-arkivet, 20 per sida
HÄMTA /api/v1/email-templates/:id/versions/github/:sha läs Layouten så som den såg ut vid en viss commit
INLÄGG /api/v1/email-templates/:id/versions/github/:sha/restore skriva Återställ en GitHub-version - det fungerar ungefär som att spara

GitHub-ändpunkterna returnerar felkod 409 när inget arkiv är anslutet på utvecklarsidan. Se Historik över layoutversioner och Spara obegränsad layouthistorik på GitHub.

Avsändare av e-postmeddelanden

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/smtp-configs läs Lista över SMTP-avsändare
HÄMTA /api/v1/senders läs Visa anslutna postlådor (Microsoft 365, Google)

SMTP-avsändare rapporterar hasUsername och hasPassword istället för själva inloggningsuppgifterna - båda delarna döljs, eftersom ett användarnamn är en lika viktig del av inloggningsuppgifterna som lösenordet. En avsändare förblir identifierbar genom sitt namn, sin värd och sin avsändaradress. Anslutna e-postkonton rapporterar en delvis maskerad adress, till exempel so***@example.com, och aldrig sina inloggningstoken.

Endast läsning. Anslut och redigera avsändare i appen.

Hemligheter

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/secrets läs Lista över hemliga namn och beskrivningar

Returnerar hasValue, aldrig själva värdet. Det finns ingen API-ändpunkt som hämtar en hemlighet. Skapa och uppdatera hemligheter i appen.

Uppladdade filer

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/files läs Lista över uppladdade logotyper, bilder och bilagor
RADERA /api/v1/files skriva Ta bort en, efter key-värdet i brödtexten

List tar emot page, limit (max 100) och q för att söka efter filnamn.

Lägg till ?usage=true, så visar varje fil även inUse samt en usedBy-matris med namnen på de layouter och förinställningar som refererar till den. På så sätt kan du med en enda förfrågan se allt som är säkert att rensa bort. Funktionen skannar dina layouter och förinställningar, så den är aktiverad endast om du väljer det - det är inte standardinställningen.

Uppladdning är inte tillgänglig här - lägg till filer via medievalaren i appen.

HTTP-förfrågningar

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/http-requests läs Lista över HTTP-förfrågningar
INLÄGG /api/v1/http-requests skriva Skapa en
HÄMTA /api/v1/http-requests/:id läs Skaffa en
PUT / PATCH /api/v1/http-requests/:id skriva Uppdatering 1
RADERA /api/v1/http-requests/:id skriva Ta bort en
INLÄGG /api/v1/http-requests/:id/test utföra Kör det mot det verkliga målet

List tar emot samma parametrar som e-postmallar: page, limit och q.

Mål-url måste vara http:// eller https://. Andra scheman avvisas när du sparar.

Autentiseringsuppgifter som anges direkt i en rubrik eller i brödtexten döljs i varje svar. Värden som refereras till som {{ secrets.KEY }} returneras oförändrade, eftersom själva referensen inte är känslig.

Historia och statistik

Omfattar både e-postutskick och HTTP-förfrågningar.

Metod Sökväg Nivå Syfte
HÄMTA /api/v1/history läs Lista över körningar
HÄMTA /api/v1/history/:id läs Hämta en körning med begäran- och svarsdata
HÄMTA /api/v1/stats läs Totalsiffror och framgångsgrad

Historiken accepterar page, limit (max 100), actionType, status (PENDING, SUCCESS, FAILED, SKIPPED) och actionConfigId för att filtrera fram en enskild layout eller begäran.

SKIPPED är ett marknadsföringsmejl vars mottagare alla hade avslutat sin prenumeration: inget skickades, ingen kvot förbrukades och det räknas inte in i framgångsgraden.

actionType måste vara exakt EMAIL eller HTTP_REQUEST. Ett okänt värde ignoreras istället för att avvisas, vilket innebär att ett skrivfel resulterar i att allt returneras istället för att ett felmeddelande visas.

Stats accepterar days (standardvärde 30, max 365).

Statuskoder

Kod Betydelse
200 Framgång
201 Skapad
400 Felaktig begäran eller misslyckad validering. I error anges fältets namn, till exempel subject: required
401 Saknad, felaktig eller återkallad API-nyckel
403 Nyckeln är giltig, men dess säkerhetsnivå är för låg för denna slutpunkt
404 Hittades inte, eller tillhör en annan butik
405 Fel metod för den här sökvägen
409 Avvisat eftersom posten fortfarande används (filradering) eller eftersom GitHub inte är anslutet (GitHub-versioner)
429 Hastighetsbegränsat - se nedan
502 Begäran kördes, men målet från tredje part misslyckades

En post som tillhör en annan butik returnerar 404 istället för 403, vilket innebär att API:et aldrig bekräftar att ett id finns någon annanstans.

Begränsningar av antalet förfrågningar

Två separata budgetar, båda per nyckel:

  • 300 förfrågningar per 60 sekunder för alla slutpunkter.
  • Utöver det ska 60 anrop utföras per timme, som omfattar POST /api/v1/http-requests/:id/test.

Om något av dessa gränsvärden överskrids returneras 429 tillsammans med ett förklarande error-meddelande. Utförandebudgeten är avsiktligt snäv: en okontrollerad loop som skickar liveförfrågningar till en betalningsleverantör är ett betydligt allvarligare fel än ett långsamt skript.

Budgetarna gäller per nyckel, inte per butik, så en integration kan inte tömma en annan integrations budget.