Skip to content

Solana and Tron

Solana and Tron networks are listed in GET /api/v1/networks next to EVM networks, with family set to solana or tron. Read their tokens, decimals and minimum_payment from the API; do not keep your own list. Addresses on these networks use their own base58 format in requests, responses and webhooks.

EVM Solana Tron
Payment address A contract address. The recipient is fixed on chain when the address is created. A key per payment, held by the Invoise signer. A key per payment, held by the Invoise signer.
Custody Funds can go only to the recipient fixed on chain, minus the fee. Invoise holds a payment only until it forwards it to your recipient. Invoise holds a payment until it forwards it. There is no payment contract.
Recipient The shop’s recipient PUT /shops/{shop_id}/solana-recipient PUT /shops/{shop_id}/tron-recipient
Delegate Optional None None
Sandbox shop Yes No: 400 solana_sandbox_unavailable Yes

Invoise switches Tron on for a merchant on request; ask support. Its minimum_payment is higher than on other networks.

A shop needs a Solana or Tron recipient before it can issue on that network. Without one, creating an invoice or deposit returns 400 solana_setup_required or 400 tron_setup_required.

Terminal window
curl -X PUT 'https://platform.invoise.me/api/v1/shops/{shop_id}/solana-recipient' \
-H 'Authorization: Bearer <session-token>' \
-H 'Idempotency-Key: <saved-unique-key>' \
-H 'Content-Type: application/json' \
-d '{"address":"<your-solana-wallet>"}'

Use /tron-recipient for Tron. Setting it needs an owner session; a shop API key can only read it. GET on the same path returns {"address":"..."}, with an empty address until one is set.

The recipient is set once. Sending the same address again succeeds; another address returns 400 shop_addresses_immutable. Check the address before you save it.

Network Rules
Solana Use an ordinary wallet, not a program-derived address and not an Invoise address: invalid_solana_address. The wallet must already hold an account for the token; otherwise creating an invoice or deposit returns solana_recipient_token_account_required. Receive that token there once first.
Tron A malformed address returns invalid_tron_address or invalid_tron_checksum; an Invoise address returns invalid_tron_recipient. The merchant needs Tron switched on, otherwise merchant_network_disabled.

The Invoise wallet lives on EVM networks. A shop created with payout target wallet also sends its Solana payments there: Invoise bridges them into the wallet on an EVM network. When bridging is not possible, issuing on Solana returns 400 solana_bridge_unavailable. GET /merchants/{merchant_id}/networks shows wallet_bridge: true on a Solana network that can bridge.

Tron payments do not reach the wallet. Choosing the wallet for Tron is refused while no Tron bridge is ready, and issuing on Tron for a shop whose Tron payouts go to the wallet returns 400 tron_bridge_unavailable. Keep Tron on its own address.

Choose per network family with PATCH /shops/{shop_id}: solana_payout_target and tron_payout_target take address or wallet. See the API reference.