API para desenvolvedores, MCP, GitHub e simulação de gatilhos

Você pode verificar seus gatilhos, ativá-los ou desativá-los, consultar o histórico de eventos e simular um gatilho a partir do seu próprio código ou de um assistente de IA. O Workflow Trigger Extensions disponibiliza uma API REST e um servidor MCP, além de poder se conectar a um repositório do GitHub para que seu código de gatilho personalizado fique sob controle de versão. Todos os três são gerenciados na página “Desenvolvedor”.

Simulação de um gatilho

Testar um fluxo de trabalho no Flow normalmente significa reproduzir a situação real em sua loja - editar um produto, fazer um pedido, aguardar o resultado de uma enquete. A simulação elimina essa espera: escolha um gatilho, associe-o a um recurso e ele será acionado como se o evento real tivesse acabado de ocorrer.

Duas maneiras de executar um:

  • No aplicativo. Abra qualquer evento no Histórico de Eventos e selecione “Simular” novamente. Isso aciona novamente exatamente esse evento.
  • Por meio da API ou do MCP, com um ID de recurso ou um evento anterior.

A simulação é deliberadamente fiel. Ela não cria uma carga de dados simplificada - passa pelo mesmo fluxo que um webhook real do Shopify, de modo que o que seu fluxo de trabalho recebe é exatamente o que receberia em produção.

Dry run firstbash
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}'

Um teste de simulação valida o gatilho, resolve o tópico e exibe a carga útil - sem acionar nada. Remova dryRun para acioná-lo de verdade. Você também pode passar {"fromHistoryId":"456"} para reacionar um evento anterior, em vez de criar um novo.

Os gatilhos acionados por polling, em vez de por webhook, não podem ser simulados; eles exibem a mensagem simulatable: false na lista de gatilhos.

Chaves de API

Crie uma chave na página “Desenvolvedor” e escolha seu nível de acesso:

  • Somente leitura - listar os gatilhos e seus estados, consultar o histórico de eventos, estatísticas e permissões.
  • Leitura e gravação - além de ativar e desativar os gatilhos.
  • Ler, gravar e executar - além de simular gatilhos e testar códigos de gatilhos personalizados.

A chave completa é exibida uma única vez, no momento da criação. As chaves são armazenadas na forma de hash e podem ser revogadas a qualquer momento. Envie-a como um token “Bearer”:

Authorization: Bearer ftk_your_key_here

A simulação fica em um nível à parte pelo motivo mencionado acima: ela executa suas automações de verdade, de modo que uma chave usada para leituras diárias não pode acioná-las.

A página do desenvolvedor com a URL base da API REST, uma solicitação de teste e o botão “Criar chave da API”
A página “Desenvolvedor”: a URL base da API REST, uma solicitação para testar uma chave e o local onde as chaves são criadas.

API REST

Método Caminho Nível Objetivo
OBTER /api/v1 nenhum Índice da API - confirma que a API está em funcionamento
OBTER /api/v1/me ler Verifique a autenticação e veja o nível da sua chave
OBTER /api/v1/triggers ler Cada gatilho, com seu estado para a sua loja
OBTER /api/v1/triggers/:handle ler Um gatilho em detalhes
PUT /api/v1/triggers/:handle escrever Ativar ou desativar um gatilho
PUT /api/v1/triggers escrever Ativar ou desativar vários itens em uma única chamada
POST /api/v1/triggers/:handle/simulate executar Simular um gatilho
OBTER /api/v1/triggers/custom ler Seus próprios gatilhos personalizados, com o código correspondente
OBTER /api/v1/triggers/custom/:handle/test ler O evento de amostra capturada para um gatilho personalizado
POST /api/v1/triggers/custom/:handle/test executar Executar código de gatilho personalizado sem salvar ou acionar
OBTER /api/v1/history ler Listar eventos desencadeadores
OBTER /api/v1/history/:id ler Obter um evento, com sua carga útil
OBTER /api/v1/stats ler Totais, taxa de sucesso, distribuição por status
OBTER /api/v1/permissions ler Quais permissões de acesso a dados você concedeu e o que cada uma delas permite

GET /api/v1/triggers É a ferramenta útil para a configuração: para cada gatilho, ela informa qual permissão é necessária, se essa permissão está concedida, se o gatilho está ativado e em que parte do aplicativo ele pode ser gerenciado.

Ativando e desativando os gatilhos

PUT é usado em vez de PATCH porque a chamada é idempotente - repeti-la após um tempo limite não pode aplicar nada duas vezes, o que é importante quando um assistente está controlando a API.

Enable one triggerbash
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}'

A função “Enabling” nunca concede uma permissão. Se o gatilho precisar de uma permissão que você ainda não tenha concedido, a chamada ainda será bem-sucedida e informará exatamente o que está faltando e onde concedê-la:

{
  "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."
}

Esse link abre a página “Permissões” já com o rolagem direto no cartão que você precisa.

Adicione "sync": true para iniciar também uma sincronização de dados, de modo que o gatilho funcione em registros que já existam, e não apenas naqueles criados a partir de agora.

Para alternar entre várias opções de uma só vez, o comando PUT /api/v1/triggers aceita uma lista explícita ou uma categoria inteira:

{ "enabled": true, "handles": ["order-tags-added-trigger", "order-note-changed-trigger"] }
{ "enabled": true, "category": "orders" }

Conectar o GitHub

Na página “Desenvolvedor”, a guia “Conexões” permite que você conecte um repositório do GitHub para o seu código do Gatilhos personalizados. As alterações ficam disponíveis para revisão em uma solicitação de pull; você pode ver quem alterou o quê e reverter uma transformação que deixou de funcionar.

Ao clicar em “Conectar”, o aplicativo do GitHub será instalado na conta que você escolher. Você decide quais repositórios o aplicativo poderá acessar e pode revogar esse acesso no GitHub a qualquer momento. Ao selecionar um repositório, todos os gatilhos personalizados que você já possui serão gravados nele imediatamente, de modo que ele já esteja alinhado com o aplicativo desde o início, em vez de ser preenchido gradualmente ao longo do tempo.

O que você faz O que acontece
Criar, editar ou duplicar um gatilho no aplicativo O arquivo foi enviado para o seu repositório
Excluir um gatilho no aplicativo O arquivo foi removido do seu repositório
Enviar uma alteração para o branch conectado O código do gatilho é atualizado no aplicativo

Cada gatilho é um arquivo cujo nome corresponde ao seu identificador, contendo exatamente o módulo que você vê no editor - sem nada a mais. Assim, você pode abri-lo em seu próprio editor, executá-lo e verificar sua validade como qualquer outro arquivo JavaScript; depois, use o endpoint /test acima para executá-lo em um evento real capturado antes de fazer o commit.

Voltar a uma versão anterior

Você não precisa saber usar o Git para desfazer uma alteração. Assim que um repositório estiver conectado, o editor de gatilhos exibe um menu suspenso “Versão” que lista todas as versões anteriores daquele arquivo, com a data e o autor. Escolha uma delas e ela será carregada no editor como uma alteração não salva, para que você possa lê-la primeiro - é ao salvar que ela é restaurada, como um novo commit.

Alterar ou desconectar

A opção “Alterar repositório” leva você de volta ao seletor sem alterar a instalação. A opção “Desconectar” revoga a instalação no GitHub e também a remove daqui; portanto, faz exatamente o que diz. A opção “Gerenciar permissões” abre as configurações da instalação no GitHub, onde você pode adicionar ou remover repositórios.

Testando código de gatilho personalizado

Se você mantiver seu código de gatilho personalizado em um repositório e editá-lo em seu próprio editor, poderá executá-lo no evento de amostra capturado sem precisar salvá-lo primeiro no aplicativo.

Test the file you are editingbash
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}')"

Você recebe o que o botão “Test” do aplicativo exibe: se o código seria executado, o objeto de saída, suas linhas de ctx.log e o tempo de execução.

Nada é disparado e nada é salvo - nenhum fluxo de trabalho é executado, nenhum evento é registrado, nenhuma cota é utilizada e o código armazenado permanece intacto. É seguro executar a cada salvamento a partir de um observador de arquivos. Consulte Gatilhos personalizados para ver o fluxo de trabalho completo.

Servidor MCP

A aba “MCP” na página “Desenvolvedor” exibe a URL do servidor e um comando de conexão pronto para ser copiado para o Claude, o Cursor, o VS Code, o Gemini CLI e outros. As ferramentas correspondem aos endpoints REST, e o conjunto de ferramentas reflete o nível da sua chave - uma chave somente leitura não tem acesso às ferramentas de gravação ou execução.

Ferramenta Nível O que ele faz
list_triggers ler Cada gatilho e seu estado
list_custom_triggers ler Seus próprios gatilhos personalizados, com o código correspondente
get_custom_trigger_sample ler O evento capturado que um gatilho personalizado verifica
list_history ler Eventos desencadeadores recentes
get_event ler Um evento, incluindo sua carga útil
get_stats ler Estatísticas agregadas
get_permissions ler Permissões concedidas e o que elas permitem
get_trigger escrever Um gatilho em detalhes
set_trigger escrever Ativar ou desativar um gatilho
set_triggers_bulk escrever Ligar ou desligar vários de uma vez
simulate_trigger executar Disparar um gatilho quando solicitado
test_custom_trigger executar Executar código de gatilho personalizado sem salvar ou acionar

É isso que torna um assistente realmente útil: ele pode listar o que já existe, explicar o que um gatilho precisa, ativá-lo, disparar um evento de teste, exibir o resultado - e, no caso de gatilhos personalizados, reescrever o código e testá-lo - sem que você precise sair da conversa.

Como seus dados são protegidos

As cargas de dados dos eventos são retornadas com os dados pessoais mascarados: endereços de e-mail, números de telefone, números de cartão e campos com nomes de pessoas são substituídos por ***. Shopify. Os IDs de recursos e os campos comerciais permanecem intactos, para que a carga de dados continue sendo útil.

O mascaramento funciona em nomes de campos e padrões de valores; portanto, é uma medida cuidadosa, mas não oferece garantia - dados pessoais contidos em um campo de texto livre ainda podem ser revelados. As mensagens de erro também têm seus detalhes de diagnóstico internos removidos antes de saírem do servidor.

A conexão com o GitHub não armazena nenhuma credencial que possa vazar: apenas o ID da instalação é mantido, e o acesso ao repositório utiliza um token gerado sob demanda que expira em menos de uma hora.

Próximos passos

Limites de taxa

A API REST e o servidor MCP compartilham um único limite por chave de API.

  • 300 solicitações a cada 60 segundos por chave, em uma janela fixa.
  • As chamadas no nível de execução recebem um segundo limite, mais restrito, de 60 por hora. Elas consomem ambos, de modo que uma sequência de execuções também consome a cota compartilhada. Para este aplicativo, isso significa simular um gatilho e executar código de gatilho personalizado, ações que realmente acionam seus fluxos de trabalho.
  • É o mesmo em todos os planos. Os medidores do seu plano acionam eventos, e não chamadas de API; portanto, a atualização não aumenta esses números.
  • A resposta recebida é um código HTTP 429. Aguarde um tempo e tente novamente, de preferência com um intervalo exponencial.
  • Se nosso cache ficar indisponível por um breve período, o limitador entrará em modo de falha aberta, em vez de bloquear sua integração.

Os webhooks de entrada do Shopify não têm limitação de taxa

Não limitamos os webhooks que o Shopify nos envia - eles são aceitos assim que chegam e colocados em fila. O limite máximo é a cota de eventos de 30 dias do seu plano.

Uma coisa que vale a pena saber se você escreve gatilhos personalizados: seu código é executado a cada evento do tópico que ele monitora, e cada execução conta como um evento, inclusive aqueles que você filtra ao retornar null. O custo é o mesmo que o de um gatilho embutido para o mesmo evento.

Shopify

Esses são os limites impostos pelo Shopify às APIs do Shopify, e não os nossos. Eles se aplicam ao que este aplicativo (e seus fluxos de trabalho) podem fazer no lado do Shopify, e você pode atingi-los em uma loja de grande porte, mesmo estando bem dentro dos nossos limites.

  • Os arranjos de entrada estão limitados a 250 itens em todas as APIs do Shopify. Uma solicitação com um arranjo maior é rejeitada.
  • A paginação é interrompida ao atingir 25.000 objetos. As contagens são precisas até 25.000; acima desse número, Shopify retorna 25001, o que significa “mais de 25.000”. Se você precisar ir mais além, faça uma filtragem primeiro.
  • A API de administração do GraphQL é cobrada com base no custo calculado das consultas, em pontos por segundo, e o limite máximo depende do plano Shopify da loja:
Shopify plano Pontos por segundo
Padrão 100
Avançado 200
Além disso 1.000
Enterprise (Componentes de Comércio) 2000

A API do Storefront não tem limitação de taxa.

Detalhes completos: Shopify Limites de taxa da API