https://nexus.gerowallet.io (Maestro’s Cardano services sit under
https://mainnet.gomaestro-api.org/v1, with preprod and preview hosts alongside it), and the
credential becomes an X-Api-Key: nxs_... header in place of Maestro’s api-key. See
Authentication for how keys are issued and scoped.
If your code already speaks a Blockfrost SDK, you have a shorter path. Maestro’s own retirement
notice points Cardano users at Blockfrost, and Nexus serves a Blockfrost-compatible surface at
/api/v0: point the SDK’s customBackend at it, pass your nxs_ key as the project_id, and
the migration is one line. See Blockfrost Compatibility. The map
below is for teams calling Maestro over plain HTTP, or moving to the native API on purpose.Endpoint map
Maestro paths are shown relative to their/v1 base. Nexus paths are absolute.
Two paging shapes appear below. The older reads page with page and pageSize. The reads added
for this migration page with cursor and limit: the response carries a nextCursor, and you
send it back as cursor for the next page. That token is opaque and endpoint-specific, so do not
build one, parse one, or carry a Maestro cursor into it. An absent nextCursor is the last page.
limit defaults to 50 and caps at 200 unless the row says otherwise.
Accounts
Nexus adds two account reads with no Maestro counterpart:
GET /api/account/{stakeAddress}/utxos
and GET /api/account/{stakeAddress}/txs.
Addresses
Every
cred path takes the payment credential as a 56-character hex key hash, the same value
GET /api/addresses/decode/{address} reports under paymentCredential.hash.
Assets and policies
Blocks, epochs and protocol parameters
Datums and scripts
Ecosystem
Stake pools
Delegators are the one row in this map whose behaviour differs enough to plan around. The native
endpoint returns
{ "epoch": 651, "data": [{ "stakeAddress": "stake1...", "liveStake": "1137959159981411" }], "nextCursor": "..." }.
The same data is served on /api/v0 in Blockfrost’s own
[{ "address": ..., "live_stake": ... }] shape with its count and page parameters, so an
unmodified Blockfrost SDK reaches it too. Three behaviours to fold into a client:
- Snapshot, not live. The figures come from the newest stake snapshot, which trails the chain tip by one epoch. The native envelope names that epoch; the Blockfrost shape has no field for it.
- Ordered by stake address. The underlying table carries no slot or certificate column, so no
chain order is recoverable from it. Page 1 is therefore not the page 1 hosted Blockfrost returns.
order=descon/api/v0reverses that address ordering, which is the opposite of the key that exists rather than the opposite of Blockfrost’s. The set of delegators across all pages is the same either way. - Offset depth on
/api/v0. Blockfrost’s offset pages are emulated over the native cursor, so/api/v0pages only as deep as offset 2000, which is page 21 atcount=100. Past that it answers 400 naming the native endpoint. Walk/api/pools/{poolId}/delegatorswith itsnextCursorwhen you need the whole list; that path has no depth limit.
Transactions
Nexus also serves transaction metadata that has no Maestro equivalent:
GET /api/transactions/{txHash}/metadata and GET /api/transactions/{txHash}/metadata/cbor.
Where there is no native equivalent
Two Maestro reads have no native Nexus route, plus the two product surfaces described after them. Everything else on Maestro’s Cardano API appears in the map above. Before writing client-side aggregation for anything, check the Blockfrost-compatible surface at/api/v0: it serves reads the native API has no route of its own for, among them the per-pool
metadata, relays, updates and blocks sub-resources. See
Blockfrost Compatibility for the full list of what that surface serves
and what it guards.
Not served on either surface:
GET /policy/{policy}, the policy summary root. Its/assets,/utxos,/mints,/addresses,/accountsand/transactionssub-resources are all mapped above, so the underlying facts are reachable; only the one aggregate document is not.GET /pools/{pool_id}/delegators/{epoch_no}. Only the newest stake snapshot is readable. The epoch-scoped variant is not guarded on/api/v0and times out against the upstream aggregation, so treat historical delegator lists as unavailable rather than as a route to point at today. The plain/pools/{pool_id}/delegatorsis served, with the caveats listed under Stake pools.
Maestro’s Transaction Manager has no Nexus counterpart.
POST /txmanager maps cleanly to
POST /api/transactions/submit, but POST /txmanager/turbosubmit,
GET /txmanager/{txhash}/state, GET /txmanager/history and POST /webhooks/project/{project_id}
do not. Nexus submits the transaction and returns; tracking confirmation means polling
GET /api/transactions/{txHash}, or subscribing over
WebSocket streaming where your plan includes it.Auth, base URL and network selection
Three differences to fold into your client, all mechanical. The header. Maestro’sapi-key header becomes X-Api-Key, carrying a key that starts with
nxs_. Keys are created in the dashboard and shown once.
The base URL. Maestro selects a network by hostname (mainnet., preprod., preview.) plus a
/v1 version segment. Nexus has one host for everything, https://nexus.gerowallet.io, and no
version segment on the native API.
The network. Nexus selects the network by key, not by hostname. Each key is bound at creation
time to one chain-and-network pair, CARDANO_MAINNET, CARDANO_PREPROD or CARDANO_PREVIEW, so a
mainnet key cannot read preprod. Most endpoints accept an optional network query parameter; omit
it and the request runs against the key’s own network. Sending one that disagrees with the key
returns 400 Network Mismatch.
Why not the free one
Koios is a community-run, open-source Cardano API, and it costs nothing. A team leaving Maestro can pick it, so here is the straight answer. Its published tiers (koios.rest/tiers.html, checked 2026-09-07): public access with no key at 5,000 requests a day and 100 requests per 10 seconds, a registered no-charge tier at 50,000 a day, then Pro at about 74.99 for 1.2M. Queries time out at 30 seconds on the free tiers, and support is best-effort from the node operators who run it. If your workload is Cardano-only chain reads under 50,000 requests a day and best-effort uptime is acceptable, Koios is a good answer. Where it stops: it is Cardano only, so a Maestro user with Bitcoin reads needs a second provider; it is chain data only, with no market data, streaming, transaction builder or wallet analytics; and there is no one on the hook when it is down. Nexus counts requests monthly with no daily reset (2M on Builder at $29), raises the per-second limit with the plan (25, 50, 100 req/s), covers Bitcoin and Midnight on the same account, and keeps Koios itself in the fallback path behind its Cardano reads, so nothing is lost by choosing it.What to test first
Nine checks that surface the differences that actually break code.- A UTxO read on a known address. Confirms the header swap and that your key is scoped to the network you think it is.
- An asset lookup.
GET /api/assets/detailedInfotakesassetPolicyandassetNameas separate query parameters, so anything that concatenated the two into one path segment needs a split. Asset holders and asset UTxOs keep the concatenatedunitform, so both shapes exist and it is easy to send the wrong one. GET /api/network/era-summaries. One cheap call that pins the era arithmetic every slot-to-time conversion depends on. Mainnet answers with seven entries, Byron through Conway, Conway starting at epoch 507.- One bulk call.
POST /api/addresses/utxoswith two addresses. Batch bodies are the biggest shape change in this map, and they are the calls whose caps bite first: 50 addresses, 100 datum hashes, 25 credentials. - A cursor page followed twice.
GET /api/pools/{poolId}/delegatorson a large pool, then the same call with the returnednextCursor. Anything that assumed Maestro’s cursors, or that stops when a page comes back shorter thanlimit, breaks here. - A historical epoch.
GET /api/epoch/500on mainnet returnsfeesof67528053731. Fees are the reason to ask about a closed epoch, so they are the field worth asserting on. - A handle resolve.
GET /api/handles/charles. Confirms the ADA Handle move off/ecosystem/adahandle/{handle}and, because a handle is a live token, that you are reading a current holder rather than a cached one. - A deliberate network mismatch. Send
?network=CARDANO_PREPRODon a mainnet key and confirm your error handling reads the 400 body rather than retrying. - A transaction submit on preprod. Submission returns immediately with no managed state to
poll, so any code that waited on a Transaction Manager state transition needs its own
confirmation loop against
GET /api/transactions/{txHash}.
Next steps
Migrate from Maestro: Bitcoin
The Bitcoin half of the same migration
Blockfrost Compatibility
The one-line path for code that already speaks a Blockfrost SDK
Authentication
Key creation, scoping, and the
network parameterAPI Reference
The native Nexus surface, endpoint by endpoint