FetchCatch.Client 0.1.0

Prefix Reserved
dotnet add package FetchCatch.Client --version 0.1.0
                    
NuGet\Install-Package FetchCatch.Client -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FetchCatch.Client" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FetchCatch.Client" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="FetchCatch.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FetchCatch.Client --version 0.1.0
                    
#r "nuget: FetchCatch.Client, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FetchCatch.Client@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FetchCatch.Client&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=FetchCatch.Client&version=0.1.0
                    
Install as a Cake Tool

FetchCatch.Client

Typed .NET client for FetchCatch — a workflow engine for decision flows you author visually and call as an API.

dotnet add package FetchCatch.Client

For ASP.NET Core hosts, see also FetchCatch.AspNetCore for one-line DI registration.

Quick start

using FetchCatch.Client;

var fc = new FetchCatchClient(new FetchCatchOptions
{
    ApiKey = Environment.GetEnvironmentVariable("FETCHCATCH_API_KEY")!,
});

var result = await fc.EvaluateAsync<CheckoutInput, CheckoutDecision>(
    flowSlug: "checkout",
    input: new CheckoutInput { Amount = 100, UserId = "u-123" });

if (result.IsCompleted)
{
    Console.WriteLine($"Approved: {result.Decision!.Approved}");
}
else if (result.IsWaiting)
{
    // The flow paused at a wait_for_event node; render UI and resume later
    await fc.ResumeAsync(result.RunId, result.WaitingForEvent!, new { confirmed = true });
}

public record CheckoutInput(decimal Amount, string UserId);
public record CheckoutDecision(bool Approved, string? Reason);

Features

  • Strongly-typed EvaluateAsync<TInput, TDecision> plus a JsonElement overload for dynamic schemas
  • Resume waiting runs (ResumeAsync)
  • Inspect runs (ListRunsAsync, GetRunAsync, GetRunStatsAsync) — same data backing the FetchCatch console dashboard
  • Structured exception hierarchy: FetchCatchAuthException, FetchCatchNotFoundException, FetchCatchValidationException, FetchCatchRateLimitedException (with RetryAfter)
  • Built-in exponential backoff for transient 5xx / network errors (toggleable)
  • OpenTelemetry tracing via ActivitySource("FetchCatch.Client") — every call opens a span
  • AOT- and trim-friendly on net8.0+ (<IsAotCompatible>true</IsAotCompatible>)
  • Multi-targets net8.0 · net10.0 · netstandard2.0 (works with .NET Framework 4.7.2+)

Configuration

Option Default Notes
BaseUrl https://api.fetchcatch.com Override for self-hosted / staging
ApiKey (required) Tenant API key from Console → Settings → API keys
Timeout 30s Per-request HTTP timeout
EnableRetries true Retry transient 5xx and network errors
MaxRetryAttempts 3 Including the initial attempt
UserAgentApp null Appended to User-Agent; helps FetchCatch's support team

Streaming run history

var filter = new RunFilter
{
    Status = RunStatus.Failed,
    FromUtc = DateTime.UtcNow.AddHours(-1),
};

await foreach (var run in fc.ListRunsAsync(filter, ct))
{
    logger.LogWarning("{Flow} failed: {Error}", run.FlowSlug, run.Error);
}

ListRunsAsync returns IAsyncEnumerable<FlowRunListItem> and auto-pages via the server's cursor — you never see a cursor token in your code.

Stats dashboard

var stats = await fc.GetRunStatsAsync(
    fromUtc: DateTime.UtcNow.AddDays(-1),
    toUtc:   DateTime.UtcNow);

Console.WriteLine($"{stats.Completed}/{stats.Total} succeeded · p95 {stats.P95Ms}ms");
foreach (var top in stats.TopFlows)
    Console.WriteLine($"  {top.FlowSlug}: {top.Total} runs ({top.Failed} failed)");

ASP.NET Core

Install FetchCatch.AspNetCore and one line of registration gives you IFetchCatchClient via DI with IHttpClientFactory, options validation, and tracing:

builder.Services.AddFetchCatch(builder.Configuration);  // binds "FetchCatch" section

Status

0.x. The HTTP API (/v1/...) is stable; SDK surface may evolve before 1.0. Pin a version in production.

License

MIT. © FetchCatch.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on FetchCatch.Client:

Package Downloads
FetchCatch.AspNetCore

ASP.NET Core DI integration for the FetchCatch SDK. AddFetchCatch() wires up IHttpClientFactory, Polly retries, IOptions binding, and OpenTelemetry tracing in one call.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 135 5/25/2026