Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

C# / .NET SDK

dotnet add package Tracktile
using Tracktile;
var client = new TracktileClient(jwt: "your-api-token");
var products = await client.Products.ListAsync();
var client = new TracktileClient(jwt: "your-api-token");
ResourceMethods
client.InventoryReceiveAsync, MoveAsync, UpdateAsync, WasteAsync, AssignAsync, UnassignAsync, BundleAsync, MergeAsync, UnmergeAsync
client.OrdersListAsync, CreateAsync, GetAsync, UpdateAsync, DeleteAsync, GetProductAttributesAsync
client.ProductsListAsync, CreateAsync, GetAsync, UpdateAsync, DeleteAsync, BatchUpdateAsync, FetchByIdsAsync
client.PurchaseOrdersListAsync, CreateAsync, GetAsync, UpdateAsync, DeleteAsync
client.ShipmentsListAsync, CreateAsync, GetAsync, UpdateAsync, PatchAsync, DeleteAsync, GetItemsAsync
client.SuppliersListAsync, CreateAsync, GetAsync, UpdateAsync, DeleteAsync, GetDefaultOrderAsync
client.TransportsListAsync, CreateAsync, GetAsync, UpdateAsync, DeleteAsync

All async methods accept a CancellationToken:

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
try
{
var products = await client.Products.ListAsync(cancellationToken: cts.Token);
}
catch (OperationCanceledException)
{
// Handle timeout or cancellation
}
using Tracktile.Models.Errors;
try
{
var product = await client.Products.GetAsync(id: "invalid");
}
catch (BadRequestException ex)
{
// Handle 400 errors
}
catch (UnauthorizedException ex)
{
// Handle 401 errors
}
catch (ForbiddenException ex)
{
// Handle 403 errors
}
catch (NotFoundException ex)
{
// Handle 404 errors
}
catch (ServerException ex)
{
// Handle 500 errors
}
var client = new TracktileClient(
jwt: "your-api-token",
retryConfig: new RetryConfig
{
Strategy = RetryStrategy.Backoff,
Backoff = new BackoffStrategy
{
InitialInterval = 1,
MaxInterval = 50,
Exponent = 1.1,
MaxElapsedTime = 100
},
RetryConnectionErrors = false
}
);

Register the client with ASP.NET Core’s DI container:

// In Program.cs or Startup.cs
builder.Services.AddSingleton<ITracktileClient>(sp =>
new TracktileClient(jwt: builder.Configuration["Tracktile:ApiKey"])
);
// In your service or controller
public class ProductService
{
private readonly ITracktileClient _client;
public ProductService(ITracktileClient client)
{
_client = client;
}
public async Task<IEnumerable<Product>> GetProductsAsync()
{
return await _client.Products.ListAsync();
}
}
var httpClient = new HttpClient
{
Timeout = TimeSpan.FromSeconds(30)
};
var client = new TracktileClient(
jwt: "your-api-token",
httpClient: httpClient
);
using Microsoft.Extensions.Logging;
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Debug);
});
var client = new TracktileClient(
jwt: "your-api-token",
logger: loggerFactory.CreateLogger<TracktileClient>()
);
RuntimeVersion
.NET6.0+
.NET8.0+ (recommended)

The SDK is fully async and follows .NET conventions for naming, error handling, and cancellation.