Salmon

Salmon Wallet API

The HTTP API behind the Salmon wallet apps: network catalog, balances, activity, token search, NFTs, market data and dApp metadata for Solana, plus Bitcoin balances and activity.

Access

  • Base URL: https://api.salmonwallet.io
  • Public, with no API key. Browser requests are limited to Salmon’s own origins (CORS), and /v1 is rate limited per IP.
  • Errors use one envelope: { "error": "snake_case_code", "error_description": "…" }.
  • Endpoints that move assets return unsigned transactions for the wallet to review and sign. The API never receives a recovery phrase or private key.

Rate limits

  • Requests are counted per IP in one-minute windows, with a stricter limit on the routes that build transactions (NFT transfers and burns, Powerups, swaps).
  • Over the limit, the API answers 429 with the error code too_many_requests and a Retry-After header: the number of seconds until the window resets. Wait that long before retrying.
  • Responses do not carry RateLimit headers yet, so Retry-After on a 429 is the signal to slow down.

Versioning and deprecation

  • The API is versioned in the URL path: /v1. The service-info endpoints /health and /status are unversioned.
  • Changes inside a version are backward compatible: fields and endpoints can be added, never removed or renamed.
  • Breaking changes ship under a new version path (/v2), served alongside the previous one.
  • An endpoint or version is retired with at least 180 days of notice: its responses carry a Deprecation header (RFC 9745) and a Sunset header (RFC 8594) with the retirement date, and it is announced on this page.

OpenAPI spec

The full contract (version 0.26.0): openapi.json · openapi.yaml. Every operation has an operationId, typed parameters and response schemas, ready for code generators and LLM function calling.

Endpoints

info

Unversioned service info (mounted before `/v1`)

  • GET /healthLiveness / dependency health check
  • GET /statusService/build identification

networks

Network catalog (`network-catalog` contract)

  • GET /v1/networksList supported networks for the current stage

market data

CoinGecko-backed market data (`coingecko-market-data` contract)

  • GET /v1/exchange-ratesBTC-denominated fiat exchange rates
  • GET /v1/chart/{platform}/contract/{address}Market chart for a token by contract address (mint)
  • GET /v1/chart/{coinId}Historical market chart data for a coin
  • GET /v1/coin/{coinId}Coin detail
  • GET /v1/coin/{platform}/contract/{address}Coin detail by token contract address

dapp

Dapp metadata (`dapp-metadata` contract)

  • GET /v1/dapp/metadataOpenGraph-derived dapp metadata

multichain

Cross-chain account endpoints (`multichain-account-balance` contract)

  • GET /v1/{networkId}/account/{address}/balanceCross-chain account balance

solana

Solana chain slice (`/v1/solana-{env}`)

  • GET /v1/solana-{env}/account/{address}/transactionsSolana transaction history
  • GET /v1/solana-{env}/ft/verifiedVerified-token list
  • GET /v1/solana-{env}/ft/searchToken search
  • GET /v1/solana-{env}/ft/swap/buildBuild an UNSIGNED swap transaction
  • GET /v1/solana-{env}/nftList NFTs owned by a public key
  • POST /v1/solana-{env}/nft/{mintAddress}Build an unsigned NFT burn transaction
  • POST /v1/solana-{env}/nft/{mintAddress}/transferBuild an unsigned NFT transfer transaction
  • GET /v1/solana-{env}/powerups/availabilityWhat this caller may use on the network
  • GET /v1/solana-{env}/powerups/{id}/buildBuild an unsigned Powerup transaction

bitcoin

Bitcoin chain slice (`/v1/bitcoin-{env}`)

  • GET /v1/bitcoin-{env}/account/{address}/transactionsBitcoin transaction history
  • GET /v1/bitcoin-{env}/account/{address}/utxoUTXO set for an address

analytics

Usage-analytics ingest (separate Lambda, not part of the Express app)

  • POST /v1/eventsUsage-analytics event ingest

Guides and source