diff --git a/Elsa.sln b/Elsa.sln
index 11101db22..159862fa2 100644
--- a/Elsa.sln
+++ b/Elsa.sln
@@ -160,6 +160,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.AzureServiceBu
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ElasticsearchStorage", "src\samples\aspnet\Elsa.Samples.ElasticsearchStorage\Elsa.Samples.ElasticsearchStorage.csproj", "{4A54379F-4775-41B6-9752-FF300288916A}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.OutboundHttpRequests", "src\samples\console\Elsa.Samples.OutboundHttpRequests\Elsa.Samples.OutboundHttpRequests.csproj", "{39AB433B-F7A6-4DD3-873A-9527946B7BD8}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -410,6 +412,10 @@ Global
{4A54379F-4775-41B6-9752-FF300288916A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A54379F-4775-41B6-9752-FF300288916A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A54379F-4775-41B6-9752-FF300288916A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {39AB433B-F7A6-4DD3-873A-9527946B7BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {39AB433B-F7A6-4DD3-873A-9527946B7BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {39AB433B-F7A6-4DD3-873A-9527946B7BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {39AB433B-F7A6-4DD3-873A-9527946B7BD8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{155227F0-A33B-40AA-A4B4-06F813EB921B} = {61017E64-6D00-49CB-9E81-5002DC8F7D5F}
@@ -480,5 +486,6 @@ Global
{9F79BBEC-02CE-4F76-AED4-BC191DA3054B} = {5BA4A8FA-F7F4-45B3-AEC8-8886D35AAC79}
{C25CFDCF-8E06-4DD8-A83E-FF7EF9FDA02E} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5}
{4A54379F-4775-41B6-9752-FF300288916A} = {56C2FFB8-EA54-45B5-A095-4A78142EB4B5}
+ {39AB433B-F7A6-4DD3-873A-9527946B7BD8} = {873BFC3E-63C2-4495-A503-5EC05DCD84E4}
EndGlobalSection
EndGlobal
diff --git a/src/samples/console/Elsa.Samples.OutboundHttpRequests/Elsa.Samples.OutboundHttpRequests.csproj b/src/samples/console/Elsa.Samples.OutboundHttpRequests/Elsa.Samples.OutboundHttpRequests.csproj
new file mode 100644
index 000000000..b7687f616
--- /dev/null
+++ b/src/samples/console/Elsa.Samples.OutboundHttpRequests/Elsa.Samples.OutboundHttpRequests.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net7.0
+ enable
+ enable
+ false
+
+
+
+
+
+
+
+
diff --git a/src/samples/console/Elsa.Samples.OutboundHttpRequests/Program.cs b/src/samples/console/Elsa.Samples.OutboundHttpRequests/Program.cs
new file mode 100644
index 000000000..39af96311
--- /dev/null
+++ b/src/samples/console/Elsa.Samples.OutboundHttpRequests/Program.cs
@@ -0,0 +1,19 @@
+using Elsa.Extensions;
+using Elsa.Samples.OutboundHttpRequests.Workflows;
+using Elsa.Workflows.Core.Services;
+using Microsoft.Extensions.DependencyInjection;
+
+// Setup service container.
+var services = new ServiceCollection();
+
+// Add Elsa services.
+services.AddElsa(elsa => elsa.UseHttp());
+
+// Build service container.
+var serviceProvider = services.BuildServiceProvider();
+
+// Resolve a workflow runner to run the workflow.
+var workflowRunner = serviceProvider.GetRequiredService();
+
+// Run the workflow.
+await workflowRunner.RunAsync();
\ No newline at end of file
diff --git a/src/samples/console/Elsa.Samples.OutboundHttpRequests/Workflows/GetUsersWorkflow.cs b/src/samples/console/Elsa.Samples.OutboundHttpRequests/Workflows/GetUsersWorkflow.cs
new file mode 100644
index 000000000..4cb43ad06
--- /dev/null
+++ b/src/samples/console/Elsa.Samples.OutboundHttpRequests/Workflows/GetUsersWorkflow.cs
@@ -0,0 +1,45 @@
+using System.Dynamic;
+using Elsa.Http;
+using Elsa.Workflows.Core.Activities;
+using Elsa.Workflows.Core.Services;
+using Microsoft.AspNetCore.Http;
+
+namespace Elsa.Samples.OutboundHttpRequests.Workflows;
+
+///
+/// A workflow that retrieves a list of users from an API endpoint and prints out the names to the console output.
+///
+public class GetUsersWorkflow : WorkflowBase
+{
+ protected override void Build(IWorkflowBuilder builder)
+ {
+ var responseVariable = builder.WithVariable();
+ var currentUserVariable = builder.WithVariable();
+
+ builder.Root = new Sequence
+ {
+ Activities =
+ {
+ new SendHttpRequest
+ {
+ Url = new(new Uri("https://reqres.in/api/users")),
+ Method = new(HttpMethods.Get),
+ ParsedContent = new(responseVariable)
+ },
+ new ForEach(context =>
+ {
+ var response = (dynamic)responseVariable.Get(context)!;
+ return (ICollection)response.data;
+ })
+ {
+ CurrentValue = new(currentUserVariable),
+ Body = new WriteLine(context =>
+ {
+ var currentUser = (dynamic)currentUserVariable.Get(context)!;
+ return $"{currentUser.first_name} {currentUser.last_name}";
+ })
+ }
+ }
+ };
+ }
+}
\ No newline at end of file