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.
How they differ from EVM
Section titled “How they differ from EVM”| 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.
Set the recipient
Section titled “Set the recipient”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.
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. |
Paying into the Invoise wallet
Section titled “Paying into the Invoise wallet”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.