REST API-reference

Alle stier er relative i forhold til https://shopify.workflow-transactional-email.app. Alle endpunkter undtagen indekset kræver Authorization: Bearer fak_... - se Godkendelse og API-nøgler.

Svarene er i JSON-format. Fejlmeddelelserne har samme struktur i alle tilfælde:

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

Indeks og identitet

Metode Sti Niveau Formål
HENT /api/v1 ingen API-indeks. Bekræfter, at API’et er oppe, og angiver den aktuelle version
HENT /api/v1/me læs Kontroller, om en nøgle fungerer, og se, hvilket adgangsniveau den har

Indekset kræver ingen nøgle, så det er en sikker måde at foretage en sundhedstjek på.

E-mail-layouter

Metode Sti Niveau Formål
HENT /api/v1/email-templates læs Oversigt over e-mail-layouts. q søger på navn, emne og beskrivelse; category=transactional eller category=marketing viser en bestemt e-mail-type
INDLÆG /api/v1/email-templates skrive Opret et layout
HENT /api/v1/email-templates/:id læs Et layout med dets design eller vedhæftede filer, dets fodtekster og listen over de sprog, det findes på
PUT / PATCH /api/v1/email-templates/:id skrive Rediger et layout. Det er kun de felter, du sender, der ændres
SLET /api/v1/email-templates/:id skrive Slet et layout sammen med dets oversættelser og versioner
HENT /api/v1/layout-schema læs Sådan skriver du et layout: designformatet, standardindstillingerne for hver blok, den Liquid-kode, du kan bruge, begrænsninger og et eksempel

Listen accepterer page (standard 1), limit (standard 25, maks. 100) og q, som søger på navn, emne og beskrivelse. Der er ingen filtrering efter type via API’et; læs i stedet category for hvert layout.

Et layout indeholder følgende felter:

Felt Noter
name, description Navn er obligatorisk, højst 200 tegn; beskrivelse højst 2000
bodyType visual (standard) eller text. Kan ikke ændres, når den først er oprettet
defaultLocale Sproget i layoutets eget indhold, en, medmindre andet er angivet
category transactional (standard) eller marketing. Se nedenfor
subject, previewText Væske er tilladt. Faget er obligatorisk
bodyDesign Visuelle layout: { blocks, global?, header?, footer?, testVariables? }. Send det færdige design, når du ændrer det; HTML-filen body genereres ud fra det
body Tekstlayout: HTML-body-elementet
attachments Tekstformater: [{ filename, fileKey, sendAsLink? }] for uploadede filer (se filerne nedenfor) eller [{ filename, url }] for en fil, der hentes via https, når e-mailen sendes
marketingTexts Fodteksterne i et markedsføringslayout, eller null. Se nedenfor

Liquid-kode i emnefeltet, forhåndsvisningsteksten, brødteksten og alle tekstblokke skal være gyldig, og alle fileKey skal henvise til din butik, ellers afvises indlægget med en 400-fejl, der angiver det pågældende felt. Læs GET /api/v1/layout-schema, inden du udarbejder et visuelt design: Det genereres af selve builderen, så det kan ikke afvige.

Hver eneste skrivning via denne API gemmes i layoutets versionshistorik, præcis som når man gemmer i appen.

Layout til transaktioner og markedsføring

category beskriver, hvad et layout bruges til. Et transaktionslayout sendes uændret til alle modtagere. Et marketinglayout springer modtagere over, der har afmeldt sig (et trin, hvor »To recipients all unsubscribed« ikke sendes og vises som »SKIPPED« i historikken), sendes ud som én besked pr. »To«-modtager med sit eget afmeldingslink (højst 20 pr. trin) og afsluttes med afmeldingssætningen og dine virksomhedsoplysninger. {{ unsubscribe_url }} og {{ unsubscribe_link }} - indsæt linket selv; i transaktionslayouter er begge felter tomme. Oplysningerne for forhandlere findes på Markedsførings-e-mails og afmeldinger.

marketingTexts Er teksten i sidefoden den, som et marketinglayout bruger i stedet for de butiksdækkende tekster fra Indstillinger:

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

Alle felter er valgfrie. Et udfyldt felt erstatter »Indstillinger«-teksten for det pågældende felt; de øvrige forbliver uændrede. »null« (standardindstillingen) betyder, at »Indstillinger«-teksterne vises på e-mailens sprog. Begrænsninger: »unsubscribeText« og »companyDetails« er begrænset til 2000 tegn, mens »unsubscribeLinkLabel« er begrænset til 100 tegn. En unsubscribeText skal indeholde {{ unsubscribe_link }} eller {{ unsubscribe_url }}, ellers afvises indtastningen. Feltet gemmes for alle layouttyper, men sendes kun med marketinglayout.

Sletning af et layout blokeres aldrig. Hvis der stadig er trin i Shopify Flow, der henviser til det, indeholder svaret en warning, der angiver antallet; disse trin mislykkes, indtil der anvendes et andet layout.

Oversættelser

Metode Sti Niveau Formål
HENT /api/v1/email-templates/:id/translations læs Hvert sprog i et layout med dets indhold
HENT /api/v1/email-templates/:id/translations/:locale læs Ét sprog
PUT /api/v1/email-templates/:id/translations/:locale skrive Opret eller erstat et sprog
SLET /api/v1/email-templates/:id/translations/:locale skrive Fjern et sprog. Siderne skifter i så fald tilbage til standardlayoutet
INDLÆG /api/v1/email-templates/:id/translations/:locale/promote skrive Gør dette sprog til layoutets hovedsprog

:locale er en sprogkode, f.eks. de, fr eller pt-br; store og små bogstaver samt separator spiller ingen rolle. Op til 30 sprog pr. layout. Feltet »Sprog« i trinnet »Shopify Flow« vælger et sprog ved afsendelse: den nøjagtige lokalitet, derefter basissproget, derefter en regional variant, ellers selve layoutet.

En oversættelsesfil (PUT) indeholder det fulde oversatte indhold: subject (påkrævet), previewText og bodyDesign (visuelt) eller body (tekst). Liquid-tags og URL’er skal forblive uændrede. To felter er specifikke for en oversættelse:

Felt Tekstlayouter Betydning
attachments ja En liste (samme form som layoutets) = dette sprogs egne vedhæftede filer, [] = ingen på dette sprog. null = send layoutets vedhæftede filer. Udeladt = behold det nuværende valg; et nyt sprog bruger layoutets. Visuelle layouts medbringer deres vedhæftede filer som blokke i hvert sprogs bodyDesign og afviser dette felt
marketingTexts enhver Dette sprogs fodtekster vises oven på layoutets, felt for felt. null = layoutets. Udeladt = behold det nuværende valg

Der returneres en oversættelse med de samme to felter: attachments er null, mens den bruger layoutets, og marketingTexts er null, mens den bruger layoutets.

promote bytter om på layoutet og oversættelsen: layoutet overtager oversættelsens indhold og sprogindstilling, og det indhold, det tidligere havde, bliver nu oversættelsen til det sprog, det tidligere var på. Vedhæftede filer og fodtekster bytter også plads, så hvert sprog fortsætter med at sende det, det sendte før. Svaret angiver promoted, previousMainLanguage og layoutet. Det er én version, så det kan fortrydes.

Versioner

Metode Sti Niveau Formål
HENT /api/v1/email-templates/:id/versions læs Gemte versioner, med den nyeste først. Appen gemmer de 25 nyeste
HENT /api/v1/email-templates/:id/versions/:version læs Det komplette øjebliksbillede af en version: layout og alle oversættelser
INDLÆG /api/v1/email-templates/:id/versions/:version/restore skrive Sæt den version tilbage. Indspillet som en ny version
HENT /api/v1/email-templates/:id/versions/github?page= læs Alle versioner, der er gemt i det tilknyttede GitHub-repository, 20 pr. side
HENT /api/v1/email-templates/:id/versions/github/:sha læs Layoutet, som det så ud ved en bestemt commit
INDLÆG /api/v1/email-templates/:id/versions/github/:sha/restore skrive Gendan en GitHub-version - det fungerer ligesom at gemme

GitHub-endpunkterne returnerer fejlkode 409, når der ikke er tilknyttet noget repository på udviklersiden. Se Historik over layoutversioner og Gem ubegrænset layout-historik på GitHub.

E-mail-afsendere

Metode Sti Niveau Formål
HENT /api/v1/smtp-configs læs Vis SMTP-afsendere
HENT /api/v1/senders læs Vis en liste over tilknyttede postkasser (Microsoft 365, Google)

SMTP-afsendere angiver hasUsername og hasPassword i stedet for selve adgangsoplysningerne - begge dele skjules, da et brugernavn er lige så meget en del af adgangsoplysningerne som adgangskoden. En afsender kan stadig identificeres ved sit navn, sin vært og sin afsenderadresse. Tilsluttede postkasser angiver en delvist skjult adresse, f.eks. so***@example.com, og aldrig deres log-in-tokens.

Skrivebeskyttet. Opret forbindelse til og rediger afsendere i appen.

Hemmeligheder

Metode Sti Niveau Formål
HENT /api/v1/secrets læs Oplist hemmelige navne og beskrivelser

Returnerer hasValue, aldrig selve værdien. Der findes ingen endpoint, der henter en hemmelighed tilbage. Opret og opdater hemmeligheder i appen.

Uploaded filer

Metode Sti Niveau Formål
HENT /api/v1/files læs Liste over uploadede logoer, billeder og vedhæftede filer
SLET /api/v1/files skrive Slet én, af key i brødteksten

Listen accepterer page, limit (maks. 100) og q til søgning efter filnavn.

Tilføj ?usage=true, og hver fil viser desuden inUse samt en usedBy-tabel med navnene på de layouts og forudindstillinger, der henviser til den. På den måde kan du med en enkelt forespørgsel finde alt, hvad der sikkert kan slettes. Funktionen scanner dine layouts og forudindstillinger, så den er kun aktiveret, hvis du vælger det - det er ikke standardindstillingen.

Der er ikke mulighed for at uploade her - tilføj filer via medievalg i appen.

HTTP-anmodninger

Metode Sti Niveau Formål
HENT /api/v1/http-requests læs Vis HTTP-anmodninger
INDLÆG /api/v1/http-requests skrive Opret en
HENT /api/v1/http-requests/:id læs Køb en
PUT / PATCH /api/v1/http-requests/:id skrive Opdatering 1
SLET /api/v1/http-requests/:id skrive Slet én
INDLÆG /api/v1/http-requests/:id/test udføre Kør det mod det egentlige mål

Listen accepterer de samme parametre - page, limit og q - som e-mail-layouts.

Mål-urlen skal være http:// eller https://. Andre domæneformater afvises, når du gemmer.

Bogstavelige legitimationsoplysninger, der er indskrevet i en header eller i brødteksten, maskeres i hvert svar. Værdier, der henvises til som »{{ secrets.KEY }}«, returneres som angivet, da selve henvisningen ikke er følsom.

Historie og statistik

Omfatter både e-mail-udsendelser og HTTP-anmodninger.

Metode Sti Niveau Formål
HENT /api/v1/history læs Vis udførelser
HENT /api/v1/history/:id læs Hent én udførelse med anmodnings- og svardata
HENT /api/v1/stats læs Samlede tal og succesrate

I »History« accepteres page, limit (maks. 100), actionType, status (PENDING, SUCCESS, FAILED, SKIPPED) samt actionConfigId til at filtrere efter et enkelt layout eller en enkelt anmodning.

SKIPPED er en markedsførings-e-mail, hvor alle modtagerne havde afmeldt sig: der blev ikke sendt noget, der blev ikke brugt nogen kvote, og den tæller ikke med i succesraten.

actionType skal være præcis EMAIL eller HTTP_REQUEST. En ukendt værdi ignoreres i stedet for at blive afvist, så en stavefejl returnerer alle resultater i stedet for at give en fejlmeddelelse.

Stats accepterer days (standard 30, maks. 365).

Statuskoder

Kode Betydning
200 Succes
201 Oprettet
400 Fejl i anmodningen eller mislykket validering. I error angives feltnavnet, f.eks. subject: required
401 Manglende, fejlformateret eller tilbagekaldt API-nøgle
403 Nøglen er gyldig, men dens sikkerhedsniveau er for lavt til dette endpoint
404 Ikke fundet, eller tilhører en anden butik
405 Forkert metode til denne sti
409 Afvist, fordi posten stadig er i brug (sletning af fil), eller fordi GitHub ikke er forbundet (GitHub-versioner)
429 Hastighedsbegrænset - se nedenfor
502 Anmodningen blev udført, men tredjepartsmålet mislykkedes

En post, der tilhører en anden butik, returnerer en 404-fejl i stedet for en 403, så API’et bekræfter aldrig, at et id findes et andet sted.

Hastighedsbegrænsninger

To uafhængige budgetter, begge pr. nøgle:

  • 300 anmodninger pr. 60 sekunder på tværs af alle endpoints.
  • Derudover foretages der 60 opkald i timen, der dækker området POST /api/v1/http-requests/:id/test.

Hvis en af disse grænser overskrides, returneres fejlkode 429 med en forklarende besked: »error«. Budgettet for udførelse er bevidst stramt: En løbsk løkke, der sender live-anmodninger til en betalingsudbyder, er en langt alvorligere fejl end et langsomt script.

Budgetterne er pr. nøgle, ikke pr. butik, så én integration kan ikke opbruge en anden integrations budget.