For the complete documentation index, see llms.txt. This page is also available as Markdown.

Stellar Smart Account Payments

Stellar Contract Payments enable payments from Stellar to EVM and Solana chains via Soroban smart contract addresses (C-addresses). Users pay by invoking a contract's pay() function with a unique memo, and the system triggers cross-chain payout once payment is detected.

API Host: https://intentapiv4.rozo.ai/functions/v1

Supported Routes

Source Chain
Source Token
Destination Chain
Destination Token

Stellar (1500)

USDC

Base (8453)

USDC

Stellar (1500)

USDC

BNB Chain (56)

USDT

Stellar (1500)

USDC

BNB Chain (56)

USDC

Stellar (1500)

USDC

Ethereum (1)

USDT

Stellar (1500)

USDC

Ethereum (1)

USDC

Stellar (1500)

USDC

Arbitrum (42161)

USDC

Stellar (1500)

USDC

Polygon (137)

USDC

Stellar (1500)

USDC

Solana (501)

USDC

Overview

When using stellar_payin_contracts intent:

  1. A unique Soroban contract address (receiverAddressContract) and memo (receiverMemoContract) are generated

  2. User invokes the contract's pay() function with the amount and memo

  3. System monitors the contract for the payment

  4. Cross-chain payout is triggered once payment is detected

Payment Intent Types

Intent
Description

stellar_payin_contracts

User pays by invoking a Soroban contract's pay() function with a unique memo.

Create Payment with Contract Intent

Request

Response

Key Response Fields

Field
Description

source.receiverAddressContract

The Soroban contract address to invoke pay() on

source.receiverMemoContract

The unique memo to pass to the pay() function

source.amount

Total amount to pay (includes fee)

source.fee

Fee amount deducted from the source payment

destination.amount

Amount the receiver will get on the destination chain

How to Pay

After creating a payment, the user invokes the Soroban contract's pay() function:

Parameter
Value
Example

Contract

source.receiverAddressContract

CAQPKW5AUPEA4C7OERZRUCBWT5RZDSETO4PR5REVRC5MT4CF3PBSKXQC

sender

The user's Stellar address

CBHK...NE4R

amount

source.amount in stroops (multiply by 10^7)

10100000 for 1.01 USDC

memo

source.receiverMemoContract

memo_1775314581279

On-chain, the invocation looks like:

The system detects this contract invocation and triggers the cross-chain payout to the destination address.

Combining with Any Amount

You can combine Stellar Contract Payments with Any Amount for flexible top-up flows:

When using anyAmount with contract payments, any amount between $0.02 - $10,000 USDC is accepted.

Register Transaction Hash (Optional)

For faster payment tracking and accurate sender information, you can pre-register the transaction hash and sender address after the user submits their payment:

Request

Response

Payment Flow

Supported Tokens

Currently only USDC is supported as the source token on Stellar for contract payments.

Token
Contract Address

USDC

CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75

Error Handling

Error Code
Description

paymentNotFound

Payment ID does not exist

paymentNotUpdatable

Payment is not in a status that allows updates

invalidRequest

Missing or invalid request parameters

Best Practices

  1. Pre-register transactions: Use the /payin endpoint to register txHash and fromAddress immediately after the user submits their payment. This ensures accurate tracking.

  2. Poll for status: After creating a payment, poll GET /payments/{id} to check for status updates. Look for payment_payin_completed and payment_payout_completed.

  3. Handle expiration: Payments expire after 1 hour. Ensure your UI communicates this to users.

Last updated