Mobula.Net 1.0.0

dotnet add package Mobula.Net --version 1.0.0
                    
NuGet\Install-Package Mobula.Net -Version 1.0.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="Mobula.Net" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Mobula.Net" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Mobula.Net" />
                    
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 Mobula.Net --version 1.0.0
                    
#r "nuget: Mobula.Net, 1.0.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 Mobula.Net@1.0.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=Mobula.Net&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Mobula.Net&version=1.0.0
                    
Install as a Cake Tool

Mobula.Net

A complete .NET client for the Mobula API — 89 REST endpoints and every WebSocket stream behind one interface.

An unofficial, community-maintained client. Not affiliated with, endorsed by, or supported by Mobula.

Targets net8.0, net10.0 and netstandard2.0, with no dependencies on the two modern targets. .NET 6 and 7 bind the netstandard2.0 asset and work, at the cost of two package references they already have in-box.

Install

dotnet add package Mobula.Net

Quickstart

using Mobula;

using var mobula = MobulaClient.Create("YOUR_API_KEY");

var token = await mobula.Tokens.GetDetailsAsync("solana:solana", mint);
Console.WriteLine($"{token.Data.Symbol}: ${token.Data.PriceUSD}");

No key yet? The demo host answers without one — rate limited, and it does not route every endpoint, so treat it as a sandbox rather than a fallback.

using var mobula = MobulaClient.CreateDemo();

Dependency injection

dotnet add package Mobula.Net.DependencyInjection
builder.Services.AddMobula(options => options.ApiKey = builder.Configuration["Mobula:ApiKey"]);

IMobulaClient is registered as a singleton over IHttpClientFactory. Outside DI, create one MobulaClient and keep it — it owns an HttpClient and its connection pool.

Endpoint groups

Group Covers
Assets Assets aggregated across chains — listing, details, price history
Tokens One contract on one chain — details, price (single & batch), historical price, OHLCV, ATH/ATL, security, markets, holders, top traders, deployer history, trades, enriched trades, first buyers, bulk trade export
Market Pools and pairs — details, lighthouse, OHLCV, blockchain pairs, pair trades, sparkline, CEX funding rates, and the v1 market endpoints
Wallets Holdings, portfolio, net-worth history, activity, trading analysis, DeFi positions, deployed tokens, funding source, labels, positions & PnL, position history, trades, NFTs, transactions
Metadata Blockchains, asset categories, bulk metadata
Search Universal search, GET and POST
Pulse Launchpad feed by lifecycle stage
Swap Quotes, quote instructions, send — EVM, Solana and TON
Perps Markets, OHLCV, chart, quote, execute, process status, open positions, unfilled orders, and all eight order payload builders
Bridge Routes, quote, gasless execute, intents, status
Webhooks Subscription listing and deletion
Auth Short-lived API tokens
System Platform metadata, API and WebSocket usage
Streams All WebSocket streams

Every method returns the endpoint's full response envelope, not just data. Around half of Mobula's envelopes carry a pagination cursor, a total count or a backfill status alongside data, and unwrapping would drop them.

Streaming

var pools = new[]
{
    new MobulaStreamClient.StreamTarget("solana:solana", poolAddress),
};

await foreach (var trade in mobula.Streams.FastTradesTypedAsync(pools, cancellationToken: ct))
{
    Console.WriteLine($"{trade.Type} {trade.TokenAmountUsd:C} @ {trade.TokenPrice}");
}

Connections reconnect on their own with exponential backoff and resend the subscription, so a dropped socket resumes without the loop noticing. Enumeration ends only when the token is cancelled.

Streams are typed on the subscription side. Events arrive as JsonElement because Mobula's payloads change shape with the subscription — fast-trade alone differs between pool mode and asset mode. Bind your own type with SubscribeAsync<T>, or use FastTradesTypedAsync, which is bound to MobulaFastTrade.

Available: FastTradesAsync, MarketDetailsAsync, TokenDetailsAsync, OhlcvAsync, HoldersAsync, BalancesAsync, PositionAsync, PositionsAsync, QuotingAsync, FundingAsync, PulseAsync, TokenFiltersAsync, MarketPairAsync, and EventsAsync for the multi-event indexing streams (swaps, enriched swaps, transfers, perp orders, launchpad).

The multi-event streams are served per chain family — pass the matching MobulaStreamHosts value. A Solana subscription sent to the EVM host connects and then sits silent.

Configuration

using var mobula = new MobulaClient(new MobulaClientOptions
{
    ApiKey      = key,
    AuthScheme  = MobulaAuthScheme.Authorization,  // or XApiKey, or Bearer for short-lived tokens
    BaseAddress = MobulaEndpoints.Production,
    Timeout     = TimeSpan.FromSeconds(30),
    MaxRetries  = 3,
});

MobulaClientOptions.FromEnvironment() reads MOBULA_API_KEY.

429s and 5xx are retried with exponential backoff and jitter, honouring Retry-After (capped by MaxRetryDelay). Request bodies are buffered so a retry replays them intact. Set MaxRetries = 0 to handle it yourself.

Errors

Non-success responses raise MobulaApiException, carrying StatusCode, the parsed Message and Error, the raw ResponseBody, and the RequestUri.

IsRateLimited covers 429 — Mobula returns it both for genuine throttling and for a missing or invalid API key, so check the message before backing off.

Anything not modelled

var raw = await mobula.Http.GetAsync<JsonElement>("2/some/new/endpoint",
    new MobulaQuery().Add("chainId", "solana:solana"));

mobula.Http uses the same authentication, retry and error handling; mobula.Http.Inner is the raw HttpClient.

Support

License

MIT

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 Mobula.Net:

Package Downloads
Mobula.Net.DependencyInjection

Dependency injection support for Mobula.Net — registers IMobulaClient on an IServiceCollection using IHttpClientFactory. Unofficial; not affiliated with Mobula.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 264 8/12/2026