Como chamar uma API externa a partir do agilityflow Este exemplo mostra como fazer uma requisição HTTP POST para uma API externa no contexto do AgilityFlow. Importante sobre CancellationToken O método PostAsync deve sempre utilizar um CancellationToken para garantir que a requisição seja cancelável, evitando problemas em fluxos interrompidos ou expirados. Para recuperar o CancellationToken , utilize o método adequado ao contexto em que o código está sendo executado . Alguns exemplos: Em regras de negócio do formulário: FormContext.GetCurrentCancellationToken() Em chamadas feitas dentro de uma API customizada : ApiContext.GetCurrentCancellationToken() Em componentes Razor (.cshtml) do formulário: PageContext.GetCurrentCancellationToken() E assim por diante, conforme o contexto ( GlobalContext , CustomPageContext , CardContext , etc.) Basta utilizar o método GetCurrentCancellationToken() do contexto atual. Observação Troque <> pela URL real da API que deseja acionar. Como chamar a api em cada contexto? No FormContext Crie uma regra de negócio e dentro da regra de Programação em C#, utilize o código abaixo public async Task ExecuteAsync() { var formId = FormContext.FormId.Value.ToString(); await CallExternalApiAsync(formId); } public async Task CallExternalApiAsync(string qualquerParametro) { if (string.IsNullOrWhiteSpace(qualquerParametro)) return; var payload = new { parametroParaApi = qualquerParametro }; using (var httpClient = new HttpClient()) { var content = new StringContent( JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json" ); await httpClient.PostAsync("<>", content, FormContext.GetCurrentCancellationToken()); } } Na ApiContext Na programação em C# public async Task RunAsync() { await CallExternalApiAsync("exemplo de parametro"); } public async Task CallExternalApiAsync(string qualquerParametro) { if (string.IsNullOrWhiteSpace(qualquerParametro)) return; var payload = new { parametroParaApi = qualquerParametro }; using (var httpClient = new HttpClient()) { var content = new StringContent( JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json" ); await httpClient.PostAsync("<>", content, ApiContext.GetCurrentCancellationToken()); } } No PageContext dos componentes Cshtml do formulário Na programação em C# razor dos componente @{ string qualquerParametro = ""; if (!string.IsNullOrWhiteSpace(qualquerParametro)){ var payload = new { parametroParaApi = qualquerParametro }; using (var httpClient = new HttpClient()) { var content = new StringContent( JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json" ); await httpClient.PostAsync("<>", content, PageContext.GetCurrentCancellationToken()); } } } No GlobalContext Na programação em C# public async Task CallExternalApiAsync(string qualquerParametro) { if (string.IsNullOrWhiteSpace(requestId)) return; var payload = new { parametroParaApi = qualquerParametro }; using (var httpClient = new HttpClient()) { var content = new StringContent( JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json" ); await httpClient.PostAsync("<>", content, GlobalContext.GetCurrentCancellationToken()); } } No CustomPageContext Na programação em C# do custom page context public async Task CallExternalApiAsync(string qualquerParametro) { if (string.IsNullOrWhiteSpace(requestId)) return; var payload = new { parametroParaApi = qualquerParametro }; using (var httpClient = new HttpClient()) { var content = new StringContent( JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json" ); await httpClient.PostAsync("<>", content, CustomPageContext.GetCurrentCancellationToken()); } }