Supported operations
Asset identifiers
Stellar assets use theCODE:ISSUER format, for example CETES:GC3CW7EDYRTWQ635VDIGY6S4ZUF5L6TQ7AA4MWS7LEQDBLUSZXV7UPS4.
Stablebond addresses
Live asset issuers for every stablebond on Stellar, each linked to Stellar Expert:Wallet and gas requirements
Holding and receiving Stellar assets requires XLM for the account reserve and for each trustline. These are Stellar network requirements, not Etherfuse fees:- ~1 XLM base reserve to create the account on-chain.
- ~0.5 XLM additional reserve per trustline (so ~1.5 XLM for an account holding one asset).
- A few stroops per transaction for the network fee. About 0.01 XLM on a wallet covers thousands of transactions.
Self-custody wallets hold their own XLM. A bring-your-own Stellar wallet pays its own reserves and network fees. The exception is an onramp: when the destination wallet has no account or no trustline, we price the account and trustline setup into the quote fee and deliver a claimable balance (see Onramps: wallets without a trustline below).Embedded wallets work differently: the key holder signs an order
authorization instead of signing XDR, and we build every transaction. See Embedded Wallets.Trustlines
A wallet must hold a trustline for any asset it receives. For onramps, the claim transaction adds the trustline (see below). For offramps and swaps, the wallet must already have the trustline and enough XLM before you create the order.Register a Stellar wallet
Register the wallet as a payment account withaccountDetails of kind address and chain stellar. Set $ORGANIZATION_ID to the organization that owns the wallet: your own organization or a customer organization. See Organizations in the route.
id as the source or destination of a quote. A mis-copied G... address fails its checksum and returns 400 invalid-request.
Onramps: wallets without a trustline
You do not need to set up the wallet before an onramp. The wallet is the quote’s destination, so we check it on-chain when you quote. If it has no account or no trustline for the asset, the quote fee includes a one-time cost for the XLM, and we deliver the asset as a claimable balance. The order then moves toclaimable, and claimInstructions describes the balance:
- A self-held wallet gets
kindstellarTransactionwith anxdr. The transaction adds the trustline and claims the balance in one step. The customer signs and submits it. - An embedded wallet gets
kindauthorizationwith anauthorizationId. The key holder signs the order’sauthorizationand you submit it. See Order authorization.
Offramps and swaps: fund the wallet first
When the source is an embedded wallet,fundingInstructions.destination has no address. It carries an authorizationId instead, and the key holder approves the order’s authorization to fund the order.
For a self-held wallet on a Stellar offramp or swap, fundingInstructions.destination gives the address to pay and a memo when one is needed. Fund the order in one of two ways:
- Sign the prepared transaction. When
preparedTransactionis present, signtransaction(an unsigned base64 transaction envelope XDR) and submit it to Horizon. The customer’s account is the transaction’s source and pays the fee. - Build the payment yourself. Send a payment of the order’s
source.amountofsource.assettoaddress, withmemowhen it is present. Wallets that support SEP-24-style withdrawals can use this path.
Stale transactions and refresh
A prepared Stellar transaction stops being valid at the order’s funding deadline, sorefreshAfter is the same time as fundingDeadline. It also uses the wallet’s sequence number at the time we built it, so it goes stale when the wallet sends another transaction first. Horizon then returns tx_bad_seq. Get a new one instead of retrying the stale one:
- Offramp or swap: call
POST /organization/{organizationId}/order/{id}/funding_instructions/refresh. You can call it at any time while the order iscreated. It returns the order as it is. If the old transaction already landed, nothing changes and no webhook arrives, so the customer can’t fund the order twice. The new funding instructions arrive a moment later in anorderUpdatedwebhook, and onGET .../order/{id}. - Onramp claim: the claim transaction uses the wallet’s current sequence number, so another transaction from the wallet makes it stale. We build a new claim transaction on every call to
POST /organization/{organizationId}/order/{id}/claim, so call it right before the customer signs.