Mobula.Net
1.0.0
dotnet add package Mobula.Net --version 1.0.0
NuGet\Install-Package Mobula.Net -Version 1.0.0
<PackageReference Include="Mobula.Net" Version="1.0.0" />
<PackageVersion Include="Mobula.Net" Version="1.0.0" />
<PackageReference Include="Mobula.Net" />
paket add Mobula.Net --version 1.0.0
#r "nuget: Mobula.Net, 1.0.0"
#:package Mobula.Net@1.0.0
#addin nuget:?package=Mobula.Net&version=1.0.0
#tool nuget:?package=Mobula.Net&version=1.0.0
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
- Discord: https://discord.gg/tVuy5N2aGk
- Issues and feature requests: https://github.com/MCollector/Mobula.Net/issues
- Source, full documentation and the endpoint inventory: https://github.com/MCollector/Mobula.Net
- Changelog: https://github.com/MCollector/Mobula.Net/blob/main/CHANGELOG.md
License
MIT
| Product | Versions 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. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- System.Text.Json (>= 8.0.5)
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
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 |
See CHANGELOG.md at https://github.com/MCollector/Mobula.Net/blob/main/CHANGELOG.md