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.
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).
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);