Skip to main content
Maestro’s developer API retires on September 18, 2026, per their announcement of August 18, 2026: every endpoint is retired and keys stop working on that date. This page maps the Maestro Cardano surface to its Nexus equivalent, path by path. The base URL becomes 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=desc on /api/v0 reverses 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/v0 pages only as deep as offset 2000, which is page 21 at count=100. Past that it answers 400 naming the native endpoint. Walk /api/pools/{poolId}/delegators with its nextCursor when 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, /accounts and /transactions sub-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/v0 and 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}/delegators is 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.
Nexus does not serve Maestro’s Managed Contracts API (vesting, direct swap, single-asset staking, subscription, multisig). That is application logic rather than chain data, and there is no equivalent surface to migrate it onto.

Auth, base URL and network selection

Three differences to fold into your client, all mechanical. The header. Maestro’s api-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.
Because the network rides on the key, running Maestro and Nexus side by side during the cutover means one extra key per network you read, not a second base-URL scheme. Both APIs work independently until September 18.

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 29.99amonthfor500,000adayandPremiumatabout29.99 a month for 500,000 a day and Premium 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.
  1. A UTxO read on a known address. Confirms the header swap and that your key is scoped to the network you think it is.
  2. An asset lookup. GET /api/assets/detailedInfo takes assetPolicy and assetName as separate query parameters, so anything that concatenated the two into one path segment needs a split. Asset holders and asset UTxOs keep the concatenated unit form, so both shapes exist and it is easy to send the wrong one.
  3. 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.
  4. One bulk call. POST /api/addresses/utxos with 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.
  5. A cursor page followed twice. GET /api/pools/{poolId}/delegators on a large pool, then the same call with the returned nextCursor. Anything that assumed Maestro’s cursors, or that stops when a page comes back shorter than limit, breaks here.
  6. A historical epoch. GET /api/epoch/500 on mainnet returns fees of 67528053731. Fees are the reason to ask about a closed epoch, so they are the field worth asserting on.
  7. 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.
  8. A deliberate network mismatch. Send ?network=CARDANO_PREPROD on a mainnet key and confirm your error handling reads the 400 body rather than retrying.
  9. 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}.
Then check rate limit behaviour under your real burst. Metering is per request rather than per credit, so your call volume translates directly. Check the per-tier numbers on Rate Limits against your peak.

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 parameter

API Reference

The native Nexus surface, endpoint by endpoint