Utvecklings-API, MCP, GitHub och simulering av utlösare
Simulera utlösare, hantera nycklar och anslut GitHub för anpassad utlösarkod via REST API eller MCP för Shopify Flow.
Du kan granska dina triggare, aktivera eller inaktivera dem, läsa händelsehistoriken och simulera en trigger från din egen kod eller från en AI-assistent. Workflow Trigger Extensions tillhandahåller ett REST-API och en MCP-server, och kan anslutas till ett GitHub-repository så att din anpassade triggerkod hanteras med versionskontroll. Alla tre hanteras på sidan ”Developer”.
Simulering av en utlösare
Att testa ett Shopify Flow-arbetsflöde innebär vanligtvis att man genomför den verkliga händelsen i sin butik - redigerar en produkt, lägger en beställning, väntar på en omröstning. Med simulering slipper man den väntetiden: välj en utlösare, koppla den till en resurs, så aktiveras den som om den verkliga händelsen just hade inträffat.
Två sätt att köra en:
- I appen. Öppna valfri händelse i händelsehistoriken och välj ”Simulera” igen. Då utlöses just den händelsen på nytt.
- Via API:et eller MCP:et, med ett resurs-ID eller en tidigare händelse.
Simuleringen är medvetet trogen originalet. Den skapar inte någon genvägs-payload - den går igenom samma pipeline som en riktig Shopify-webhook gör, så det som ditt arbetsflöde tar emot är exakt detsamma som det skulle ta emot i produktionsmiljön.
curl -X POST https://shopify.workflow-trigger-extensions.app/api/v1/triggers/product-update-trigger/simulate \
-H "Authorization: Bearer ftk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"resourceId":"gid://shopify/Product/123456789","dryRun":true}'En testkörning validerar utlösaren, hanterar ämnet och visar nyttolasten - utan att utlösa något. Ta bort dryRun för att utlösa händelsen på riktigt. Du kan också skicka {"fromHistoryId":"456"} för att återutlösa en tidigare händelse istället för att skapa en ny.
Triggers som styrs via polling istället för via en webhook kan inte simuleras; de visar simulatable: false i listan över triggers.
API-nycklar
Skapa en nyckel på sidan ”Utvecklare” och välj åtkomstnivå:
- Skrivskyddad - visa listor över utlösare och deras status, läs händelsehistorik, statistik och behörigheter.
- Läsa och skriva - samt aktivera och inaktivera utlösare.
- Läs, skriv och kör - simulera även triggare och testa anpassad triggarkod.
Den fullständiga nyckeln visas en gång, vid skapandet. Nycklarna lagras i hashform och kan återkallas när som helst. Skicka den som ett Bearer-token:
Authorization: Bearer ftk_your_key_here
Simuleringen ligger på en egen nivå av ovanstående skäl: den kör dina automatiseringar på riktigt, så en nyckel som används för vanliga läsningar kan inte utlösa dem.

REST-API
| Metod | Sökväg | Nivå | Syfte |
|---|---|---|---|
| HÄMTA | /api/v1 |
ingen | API-index - bekräftar att API:et är i drift |
| HÄMTA | /api/v1/me |
läs | Kontrollera autentiseringen och se vilken nivå din nyckel har |
| HÄMTA | /api/v1/triggers |
läs | Varje utlösare, med dess status för din butik |
| HÄMTA | /api/v1/triggers/:handle |
läs | En utlösande faktor i detalj |
| PUT | /api/v1/triggers/:handle |
skriva | Slå på eller stänga av en utlösare |
| PUT | /api/v1/triggers |
skriva | Slå på eller stäng av flera samtidigt i ett enda samtal |
| INLÄGG | /api/v1/triggers/:handle/simulate |
utföra | Simulera en utlösare |
| HÄMTA | /api/v1/triggers/custom |
läs | Dina egna anpassade utlösare, med tillhörande kod |
| HÄMTA | /api/v1/triggers/custom/:handle/test |
läs | Händelsen för det insamlade provet för en anpassad utlösare |
| INLÄGG | /api/v1/triggers/custom/:handle/test |
utföra | Kör anpassad triggarkod utan att spara eller utlösa |
| HÄMTA | /api/v1/history |
läs | Lista över utlösande händelser |
| HÄMTA | /api/v1/history/:id |
läs | Hämta en händelse med dess data |
| HÄMTA | /api/v1/stats |
läs | Totalsiffror, framgångsgrad, fördelning efter status |
| HÄMTA | /api/v1/permissions |
läs | Vilka datatillstånd du har beviljat och vad de ger tillgång till |
GET /api/v1/triggers är användbart vid konfigurationen: för varje utlösare visar det vilken behörighet som krävs, om behörigheten har beviljats, om utlösaren är aktiverad och var i appen man kan hantera den.
Slå på och stänga av utlösare
PUT används istället för PATCH eftersom anropet är idempotent - om det körs igen efter en timeout kan inget tillämpas två gånger, vilket är viktigt när en assistent styr API:et.
curl -X PUT https://shopify.workflow-trigger-extensions.app/api/v1/triggers/order-tags-added-trigger \
-H "Authorization: Bearer ftk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"enabled":true}'Att aktivera ger aldrig någon behörighet. Om utlösaren behöver en behörighet som du inte har beviljat, genomförs anropet ändå och du får veta exakt vad som saknas och var du ska bevilja behörigheten:
{
"enabled": true,
"scopeGranted": false,
"missingScopeLabels": ["Order Data Access"],
"permissionsUrl": "https://admin.shopify.com/store/.../app/permissions?permission=read_orders",
"warning": "Enabled, but this trigger cannot fire until Order Data Access is granted."
}
Den länken öppnar sidan ”Behörigheter” och bläddrar direkt till det kort du behöver.
Lägg till "sync": true för att även starta en datasynkronisering, så att utlösaren fungerar på poster som redan finns istället för endast på de som skapas från och med nu.
För att växla flera samtidigt kan man i PUT /api/v1/triggers ange en specifik lista eller en hel kategori:
{ "enabled": true, "handles": ["order-tags-added-trigger", "order-note-changed-trigger"] }
{ "enabled": true, "category": "orders" }
Anslut till GitHub
På sidan ”Developer” kan du via fliken ”Connections” ansluta ett GitHub-repository för din Anpassade utlösare-kod. Ändringarna blir tillgängliga för granskning i en pull-begäran, du kan se vem som har ändrat vad och du kan återställa en omvandling som slutat fungera.
När du klickar på ”Anslut” installeras vår GitHub-app på det konto du väljer. Du bestämmer själv vilka repositorier appen ska ha åtkomst till, och du kan när som helst återkalla den åtkomsten via GitHub. När du väljer ett repositorium skrivs alla anpassade utlösare som du redan har omedelbart in i det, så att det från början stämmer överens med appen istället för att fyllas på efter hand.
| Vad du gör | Vad händer? |
|---|---|
| Skapa, redigera eller duplicera en utlösare i appen | Filen har lagts in i ditt arkiv |
| Ta bort en utlösare i appen | Filen tas bort från ditt arkiv |
| Skicka en ändring till den anslutna grenen | Triggerns kod uppdateras i appen |
Varje trigger är en fil som har fått sitt namn efter sitt handtag och som innehåller exakt den modul du ser i redigeraren - utan något extra runt omkring. Du kan alltså öppna den i din egen redigerare, köra den och köra lint-kontroll på den precis som vilken annan JavaScript-fil som helst, och sedan använda slutpunkten /test ovan för att köra den mot en verklig händelse som har fångats in innan du gör en commit.
Återgå till en tidigare version
Du behöver inte kunna Git för att ångra en ändring. När ett arkiv är anslutet visar redigeraren en rullgardinsmeny under ”Version” där alla tidigare versioner av filen listas med datum och upphovsman. Välj en version så laddas den in i redigeraren som en osparad ändring, så att du kan läsa igenom den först - det är först när du sparar som den återställs som en ny commit.
Byta eller koppla bort
Med ”Byt repositorium” återgår du till urvalsfönstret utan att ändra installationen. ”Koppla bort” återkallar installationen på GitHub och tar bort den även här, så det betyder precis vad det står. ”Hantera behörigheter” öppnar installationsinställningarna på GitHub, där du kan lägga till eller ta bort repositorier.
Testa anpassad triggerkod
Om du förvarar din anpassade triggarkod i ett arkiv och redigerar den i din egen redigerare kan du köra den mot den insamlade exempelhändelsen utan att först spara den i appen.
curl -X POST https://shopify.workflow-trigger-extensions.app/api/v1/triggers/custom/my-trigger/test \
-H "Authorization: Bearer ftk_your_key_here" \
-H "Content-Type: application/json" \
-d "$(jq -Rn --rawfile c flow-triggers/my-trigger.js '{code:$c}')"Du får tillbaka det som visas på appens ”Test”-knapp: om den skulle utlösas, utdataobjektet, dina ctx.log-rader och körtiden.
Ingenting utlöses och ingenting sparas - inga arbetsflöden körs, inga händelser registreras, inga kvoter används och den lagrade koden förblir oförändrad. Det är säkert att köra vid varje sparning från en filövervakare. Se Anpassade utlösare för hela arbetsflödet.
MCP-server
Fliken ”MCP” på utvecklarsidan visar serverns URL och ett kopieringsklart anslutningskommando för Claude, Cursor, VS Code, Gemini CLI och andra verktyg. Verktygen speglar REST-ändpunkterna, och verktygsuppsättningen avspeglar din nyckels nivå - en skrivskyddad nyckel har inte tillgång till skriv- eller körverktygen alls.
| Verktyg | Nivå | Vad den gör |
|---|---|---|
list_triggers |
läs | Varje utlösare och dess tillstånd |
list_custom_triggers |
läs | Dina egna anpassade utlösare, med tillhörande kod |
get_custom_trigger_sample |
läs | Den händelse som en anpassad utlösare testar mot |
list_history |
läs | Senaste utlösande händelser |
get_event |
läs | En enhet inklusive dess nyttolast |
get_stats |
läs | Sammanställd statistik |
get_permissions |
läs | Beviljade behörigheter och vad de ger tillgång till |
get_trigger |
skriva | En utlösande faktor i detalj |
set_trigger |
skriva | Slå på eller stänga av en utlösare |
set_triggers_bulk |
skriva | Slå på eller stäng av flera samtidigt |
simulate_trigger |
utföra | Avfyra en utlösare när så önskas |
test_custom_trigger |
utföra | Kör anpassad triggarkod utan att spara eller utlösa |
Det är just detta som gör en assistent verkligen användbar: den kan lista vad som finns, förklara vad en utlösare behöver, aktivera den, utlösa en testhändelse, läsa upp resultatet - och när det gäller anpassade utlösare, skriva om koden och testa den - utan att du behöver lämna konversationen.
Hur dina uppgifter skyddas
Händelsedata returneras med personuppgifter maskerade: e-postadresser, telefonnummer, kortnummer och fält med personnamn ersätts med ***. Shopify-resurs-ID:n och företagsfält lämnas oförändrade så att data förblir användbara.
Maskeringen gäller fältnamn och värdemönster, så den är noggrann men utgör ingen garanti - personuppgifter i ett fritextfält kan fortfarande komma fram. Felmeddelanden rensas dessutom från interna diagnostiska uppgifter innan de lämnar servern.
GitHub-anslutningen lagrar inga inloggningsuppgifter som kan läcka ut: endast installations-ID:t sparas, och åtkomsten till repositoriet sker via ett token som genereras vid behov och som upphör att gälla inom en timme.
Nästa steg
- Anpassade utlösare - skapa en egen trigger med några rader JavaScript.
- Planer och användning - vad som räknas som en händelse och hur kvoten fungerar.
- Introduktion till Workflow Trigger Extensions - hur triggare fungerar och hur man aktiverar dem.
Begränsningar av antalet förfrågningar
REST-API:et och MCP-servern delar på en budget per API-nyckel.
- 300 förfrågningar per 60 sekunder per nyckel, som ett fast tidsfönster.
- Anrop på exekveringsnivå tilldelas en andra, stramare kvot på 60 per timme. De förbrukar båda kvoterna, så en intensiv exekveringsvåg tär även på den gemensamma kvoten. För den här appen innebär det att man simulerar en utlösare och kör anpassad utlösarkod, vilket i båda fallen verkligen sätter fart på dina arbetsflöden.
- Det är samma sak för alla abonnemang. Det är mätarna i ditt abonnemang som utlöser händelser, inte API-anrop, så en uppgradering påverkar inte dessa siffror.
- Vid bearbetning av svar returneras HTTP-kod 429. Vänta en stund och försök igen, helst med exponentiell väntetid.
- Om vår cache tillfälligt inte är tillgänglig öppnas begränsaren istället för att blockera din integration.
Inkommande webhooks i Shopify har ingen begränsning av antalet förfrågningar
Vi begränsar inte de webhooks som Shopify skickar till oss - de tas emot i den ordning de anländer och placeras i kö. Taket är den 30-dagars kvoten för händelser som ingår i ditt abonnemang.
En sak som är bra att veta om du skriver anpassade triggare: din kod körs för varje händelse inom det ämne som den lyssnar på, och varje körning räknas som en händelse - även de som du filtrerar bort genom att returnera null. Det kostar lika mycket som den inbyggda triggaren skulle göra för samma händelse.
Shopify
Detta är Shopifys begränsningar för Shopifys API:er, inte våra. De avgör vad den här appen (och dina arbetsflöden) kan göra på Shopifys sida, och du kan stöta på dem i en stor butik även om du ligger långt inom våra begränsningar.
- Antalet poster i inmatningsmatriser är begränsat till 250 för alla Shopify-API:er. En begäran med en matris som innehåller fler poster avvisas.
- Pagineringen slutar vid 25 000 objekt. Antalet är korrekt upp till 25 000; över det värdet returnerar Shopify
25001, vilket betyder ”mer än 25 000”. Om du behöver gå djupare, filtrera först. - GraphQL Admin API debiteras utifrån den beräknade kostnaden för frågor, uttryckt i poäng per sekund, och taket beror på butikens Shopify-abonnemang:
| Shopify-abonnemang | Poäng per sekund |
|---|---|
| Standard | 100 |
| Avancerat | 200 |
| Plus | 1000 |
| Företag (handelskomponenter) | 2000 |
Storefront API har inga begränsningar vad gäller antalet förfrågningar.
Mer information: Begränsningar för Shopify-API
