Skip to main content
Every entry below is a change a paying integration could notice. Internal refactors, admin tooling and marketing-site work are not listed. Dates are merge dates on the development branch, which is also the production deploy.

How deprecations work

  • The contract is the base URL plus your key. https://nexus.gerowallet.io/api/... with an X-Api-Key, and https://nexus.gerowallet.io/api/v0 with a project_id, do not change.
  • Additive changes ship without notice: new endpoints, new optional query parameters, new fields in a response.
  • Breaking changes are announced here first, with a minimum of 30 days between the notice and the change, and the old behaviour kept for that window. A breaking change is a removed endpoint, a removed or renamed response field, a changed default, or a tightened validation rule.
  • If a change reaches you without a notice here, it is a bug on our side. Email nexus@gerowallet.io.

2026-10

  • GET /api/assets/detailedInfo carries metadata when yaci-store answers first (2026-10-05). onchainMetadata, cip68Metadata, metadata, mintCnt, burnCnt, mintOrBurnCount, creationTime and initialMintTxHash were null on mainnet, preprod and preview whenever yaci-store answered the request, because yaci-store indexes no asset metadata. They are now filled from Koios in that case, on a best-effort basis. Fields can remain null when metadata is absent, Koios is unavailable, or the fill fails. Supply (quantity) still comes from the first provider that answers. Fix.
  • Metadata for many assets in one call: POST /api/assets/metadata (2026-10-05). Send up to 100 units as {"units": ["<policy id><asset name hex>", ...]}. Every requested unit is a key of data, in request order and in your spelling; a unit that is unknown or has no metadata maps to null instead of being dropped. Each entry carries onchainMetadata, the asset’s own CIP-25 entry from label 721 of its minting transaction (only that asset’s object, not the whole label-721 body; the lookup follows the label’s version, so a v1 name is matched as text and a v2 name as 0x bytes); cip68Metadata, the CIP-68 reference datum’s metadata map decoded to JSON (byte strings as UTF-8 text where valid, otherwise hex, and chunked lists kept as arrays), with the datum’s version in cip68Version; and metadata, the token-registry entry, the same object GET /api/assets/detailedInfo returns. Works on mainnet, preprod and preview. Unchanged, now documented: onchainMetadata and cip68Metadata on GET /api/assets/detailedInfo are JSON text, not objects. The nulls they had whenever yaci-store answered are fixed by the entry above. New.

2026-09

  • Pool delegators are current on preview and preprod (2026-09-30). On those networks, GET /api/pools/{poolId}/delegators and /api/v0/pools/{pool_id}/delegators now list the pool’s current delegators with each account’s current stake (UTxO plus unwithdrawn rewards), read when you ask, instead of the one-epoch-old stake snapshot. The native envelope says "live": true; /api/v0 answers in Blockfrost’s own order with no paging depth limit. A pool with delegators but no row in the newest snapshot used to answer 404 and now lists them. The snapshot stays the fallback if the read is unavailable. Fix.
  • Account UTxOs: inline-datum hashes and token fingerprints now match the failover provider (2026-09-30). When the primary provider answers GET /api/account/{stakeAddress}/utxos, an inline datum’s datumHash is now blake2b-256 of the datum’s bytes as they are on chain. That is how the ledger and the failover provider already computed it. It used to be the hash of the indexer’s re-encoding of the datum, which differs whenever the original encoding does. Each token in assetList now also carries its CIP-14 fingerprint, as it already did on failover. Fix.
  • Transaction views encode reference scripts the same whichever provider answered (2026-09-30).
    • reference_script on the inputs, outputs, reference inputs and collateral inputs of GET /api/transactions/{txHash} now follows the contract referenceScript has on address UTxOs. bytes is the script exactly as the ledger hashes it: for Plutus the serialised script (59…), for native the native-script CBOR. type is native, plutusV1, plutusV2 or plutusV3, and size is the length of bytes. Most requests used to return the whole CIP-33 [tag, script] CBOR (82 0X…) as bytes, with type and size null. That value did not hash to the script’s hash.
    • script_ref on GET /api/transactions/{txHash}/utxos, POST /api/transactions/utxos and the address transaction history is unchanged on most requests: the CIP-33 [tag, script] CBOR. It now takes that form on every request. When the failover provider answered, it used to be the serialised script with no language tag, or null.
    • POST /api/transactions/utxos no longer drops native assets, inline datums and reference scripts when the failover provider answers.
    • referenceScript on GET /api/account/{stakeAddress}/utxos, when the failover provider answers: timelock is now native, a native script carries its CBOR in bytes, and json is null.
    Correctness fix, so no deprecation window.
  • Connect to MCP with your Nexus login (2026-09-27). MCP clients can now sign in through the Nexus login page instead of sending an API key: add https://nexus.gerowallet.io/mcp without a key and your client opens the browser sign-in the first time (see MCP Server). Signed in this way, the account tools act as you. API keys keep working as before. Additive.
  • MCP applies API-key scope (2026-09-27). A key with an endpoint allowlist can call MCP tools only if the allowlist includes /mcp, and public partner (widget) keys are always refused. Until now the allowlist applied only to /api/**, so an allowlisted or partner key could run the chain, market, transaction-building and Midnight tools on its owner’s quota whenever the owner’s plan carried the MCP add-on (the account tools already refused API keys). Unrestricted keys are unaffected. Security fix, so no deprecation window.
  • MCP server moves to Streamable HTTP (2026-09-26). The MCP endpoint is now POST https://nexus.gerowallet.io/mcp over stateless Streamable HTTP; configure clients with "type": "http" (see MCP Server). The SSE endpoints /mcp/sse and /mcp/messages are removed and answer 404. This skips the usual 30-day notice on purpose: since 2026-07-31 the SSE transport has failed in production (a session’s follow-up messages often reached a server that did not hold the session and were answered with 404), so no working behaviour was left to keep. Tools, auth and the MCP add-on are unchanged.
  • Pool delegators are live on mainnet (2026-09-25). GET /api/pools/{poolId}/delegators now serves each account’s current delegated stake, refreshed about every 2 hours, instead of the one-epoch-old stake snapshot. The native envelope gains a live field (true for live figures, false for the snapshot fallback, which still applies on other networks or when the live data is stale). On /api/v0 the live path answers in Blockfrost’s own order, oldest delegation first, with no paging depth limit; it takes effect there once /api/v0 serves mainnet keys, which it does not yet. Additive; the snapshot fallback behaves as before.
  • API reference: 59 operations that had no page now have one, including all ten Conway governance operations, the six aggregator endpoints, the Policy family, transaction metadata and ADA Handles. The docs sitemap went from 154 to 213 URLs.
  • Every Cardano operation page is retitled as the task it performs: “Get all UTxOs for a Cardano address”, “Submit a signed Cardano transaction”, “Query the votes cast by a Cardano DRep”. Page URLs follow the titles; every previous URL redirects permanently to its new address. No path, parameter or response shape changed.
  • Trial funnel metrics endpoint for the control panel scoreboard, internal only.
  • Midnight: preview network retired, stagenet added. The supported set is now stagenet, preprod and mainnet; the midnight-preview path segment no longer resolves. On stagenet the read path (info, indexer, DUST state) is on, and transaction build and submit are refused with a clear error until the sidecar moves to the ledger version stagenet runs. No customer key was scoped to preview.
  • Epoch parameters: cost models are served as arrays alongside the existing object form on GET /api/epoch/latest/parameters and GET /api/epoch/params. Additive.
  • Cardano: 23 endpoints added to close the Maestro gap, served from Nexus’s own indexers and chain database. Addresses: decode, bulk POST /api/addresses/utxos (50 per call), transactions/count, credential balance plus bulk credential UTxOs and transactions (25 per call). Accounts: delegations, updates, history, cursor-paged. Assets: mints, accounts, transactions; policies: mints, addresses, accounts, transactions. Epochs: GET /api/epoch/{epochNo}. Network: era-summaries, system-start. Scripts: bulk POST /api/scripts/datums (100 per call). Handles: GET /api/handles/{handle}. Pools: GET /api/pools/{poolId}/delegators, and the compatible /api/v0/pools/{pool_id}/delegators is now served natively instead of guarded. Full map on Migrate from Maestro.
  • Transaction script data on mainnet and credential-read timeouts fixed (reported by FluidTokens).

2026-08

  • Bitcoin API expanded to Maestro parity: address inscriptions, runes and ordinals, mempool transactions, fee estimates, bulk transaction reads, and mainnet electrs enabled. Map on Migrate from Maestro: Bitcoin.
  • Koios-backed reads fill UTxO chain facts and block metadata that the upstream tx_info leaves out. Additive; same response shapes.
  • Blog posts prerendered on the marketing site (no API change).
  • Governance: GET /api/dreps widened to the single-source-of-truth contract; committee vote rows carry a join key to the committee endpoint; getProposalVotes gained a Koios fallback. Additive.
  • Blockfrost-compatible surface: a native-reshape router for the guarded pool paths, dark by default. No behaviour change until enabled.
  • Stake pools: GET /api/pools gained search, sort and paging, with CIP-0149 per-mille validation on inputs. Additive.
  • Registration: Cloudflare Turnstile on sign-up, shipped dark.

2026-07

  • Assets: registry-metadata proxy backed by the Nexus token registry. Additive.
  • Batch transaction reads served from direct SQL behind a flag. Same shapes.
  • IPFS add-on: plain GET /api/ipfs relays the gateway Content-Type.
  • Rate limiting: Redis-backed distributed limit, dark and flag-gated; per-tier numbers on Rate Limits unchanged.
  • Stake pools: pool history gained a real provider fallback plus count and page.
  • Observability: nexus_tip_lag_ms gauge; verified txSize and deposit limits documented.
  • Billing: two-phase trial grants, card fingerprinting, per-IP checkout throttle. No API change for data calls.
  • Support chat: non-custodial live-chat identity minting at /api/support/chat for the GeroWallet extension.

Earlier

The API reached its current shape through 2026-05 and 2026-06 with the same-origin SPA, the Blockfrost-compatible surface at /api/v0, the market-data proxy, the transaction builder and WebSocket streaming. Entries start where the public changelog does; ask nexus@gerowallet.io for history before that.