RebrickableSharp is a strongly-typed, easy-to-use C# client for the Rebrickable API that gets you started with just a few lines of code. It handles authentication, error handling and parsing of JSON into typed instances. It supports all .NET platforms compatible with .NET standard 2.0.
- BricklinkSharp - Easy-to-use C# client for the bricklink (LEGO) marketplace API.
- See CHANGELOG.md
Check out the demo project for full-featured examples.
You need to have an account on Rebrickable. Then, go to Account > Settings > API and create a new Key or use an existing one.
Note that the CSV helper classes do not require an API Key to be used.
Install-Package RebrickableSharp
nuget install RebrickableSharp
RebrickableClientConfiguration.Instance.ApiKey = "<Your API Key>";
var client = RebrickableClientFactory.Build();
// Do stuff
// Client must be disposed properly
client.Dispose();
Alternatively, an externally managed HttpClient can be used:
var httpClient = new HttpClient();
var client = RebrickableClientFactory.Build(httpClient);
// Do stuff
// Client *and* HttpClient must be disposed properly
client.Dispose();
httpClient.Dispose();
It's recommended to create and use one IRebrickableClient client throughout the lifetime of your application.
In applications using an IoC container you may register the IRebrickableClient as a service and inject it into consuming instances (e.g. controllers). See the below examples to register the IRebrickableClient as single instance (Singleton).
Autofac example
containerBuilder.Register(c => RebrickableClientFactory.Build())
.As<IRebrickableClient>()
.SingleInstance();
services.AddSingleton(typeof(IRebrickableClient), provider =>
{
return RebrickableClientFactory.Build();
});
// API
Task<PagedResponse<Part>> GetPartsAsync(int page = 1, int pageSize = 100,
bool includeDetails = false, string? bricklinkId = null,
string? partNumber = null, IEnumerable<string>? partNumbers = null,
int? categoryId = null, string? brickOwlId = null,
string? legoId = null, string? lDrawId = null,
string? searchTerm = null,
CancellationToken cancellationToken = default);
// Example
var response = await client.GetPartsAsync(page: 1, pageSize: 50, includeDetails: true, searchTerm: "M-Tron");
var parts = response.Results;
// API
Task<Part?> FindPartByBricklinkIdAsync(string bricklinkId,
bool includeDetails = false,
CancellationToken cancellationToken = default);
// Example
var part = await client.FindPartByBricklinkIdAsync("3005", true);
// API
Task<PagedResponse<PartColor>> GetPartColorsAsync(string partNumber,
RebrickableCredentials? credentials = null,
CancellationToken cancellationToken = default);
// Example
var pagedResult = await client.GetPartColorDetailsAsync("3003");
var partColors = pagedResult.Results;
// API
Task<PartColorDetails> GetPartColorDetailsAsync(string partNumber, int colorId,
CancellationToken cancellationToken = default);
// Example
var colorId = 1; //Blue
var partColorDetails = await client.GetPartColorDetailsAsync("3005", colorId)
// API
Task<PagedResponse<Color>> GetColorsAsync(int page = 1, int pageSize = 100,
bool includeDetails = false,
CancellationToken cancellationToken = default);
// Example
var response = await client.GetColorsAsync(includeDetails: true,
page: 1, pageSize: 50);
var colors = response.Results;
// API
Task<Color> GetColorAsync(int colorId, bool includeDetails = false,
CancellationToken cancellationToken = default);
// Example
var colorId = 0; //black
var black = await client.GetColorAsync(colorId, includeDetails: true);
// API
Task<Element> GetElementAsync(string elementId,
CancellationToken cancellationToken = default);
// Example
var elementId = "300521"; //1x1 Brick in Red
var element = await client.GetElementAsync(elementId);
// API
Task<Minifig> GetMinifigByIdAsync(
string minifigId,
RebrickableCredentials? credentials = null,
CancellationToken cancellationToken = default);
// Example
var minifigId = "fig-000001"; //Toy Store Employee, note that minifigId is named 'set_num' in the API docs.
var minifig = await client.GetMinifigByIdAsync(minifigId);