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
/v1is 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 checkGET/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 ratesGET/v1/chart/{platform}/contract/{address}Market chart for a token by contract address (mint)GET/v1/chart/{coinId}Historical market chart data for a coinGET/v1/coin/{coinId}Coin detailGET/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 historyGET/v1/solana-{env}/ft/verifiedVerified-token listGET/v1/solana-{env}/ft/searchToken searchGET/v1/solana-{env}/ft/swap/buildBuild an UNSIGNED swap transactionGET/v1/solana-{env}/nftList NFTs owned by a public keyPOST/v1/solana-{env}/nft/{mintAddress}Build an unsigned NFT burn transactionPOST/v1/solana-{env}/nft/{mintAddress}/transferBuild an unsigned NFT transfer transactionGET/v1/solana-{env}/powerups/availabilityWhat this caller may use on the networkGET/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 historyGET/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
- API reference in the Salmon docs: parameters, examples, errors and retries.
- API and dApp integration: connecting dApps to the Salmon extension.
- Salmon API on GitHub