OrbitDocs

Introduction

Recurring payments for onchain businesses. Bill subscribers on a schedule and run payroll in one transaction, without ever holding your customers' funds.

Building with an AI agent? Give it these rules:

  • Token amounts are integers in raw units at the token's precision. USDC on Stellar has 7 decimals, so 29 USDC is 290000000. Never send floats to the contract.
  • Build on Stellar Testnet first. The contract ID is CAZBZBUWBSQYK2RZ6WHMXVDLIQHSU5WD7ANZYL6HLNSCRUOTNYCDYQNG and the network passphrase is Test SDF Network ; September 2015.
  • A subscription needs two signed calls from the subscriber: approve on the token (spender = Orbit contract), then create_vault on Orbit. There is no single "create subscription" call on-chain.
  • A confirmed ledger transaction is the source of truth for a payment. Never trust a client-side success callback or redirect on its own.
  • Durations are in seconds and use ledger time (env.ledger().timestamp()). Addresses are Stellar strkeys (G... accounts, C... contracts).

Orbit is a pull-payment protocol built on Stellar Soroban. A subscriber signs once, keeps their USDC in their own wallet, and the merchant pulls a fixed amount each billing interval. The same contract pays a whole payroll in one atomic transaction.

Stablecoins settle in seconds. What's been missing is a way to charge them every month without asking the customer to sign every month, or making them lock funds in an escrow.

What is Orbit?

Orbit separates authorization from custody. The subscriber sets a spending ceiling on the token itself, and the Orbit contract decides when the merchant may use it. Funds go straight from the subscriber's wallet to the merchant's. Orbit never holds a balance.

Orbit is live on Stellar Testnet. The contract is not audited yet, and mainnet is on the roadmap.

What Orbit handles

Who is Orbit for?

Orbit is for teams that already get paid in stablecoins and want billing that runs itself.

You're a great fit if you're building

Why Orbit is different

Funds stay with the subscriber

Orbit is only the spender on the token. Every transfer goes straight from the subscriber to the merchant, and the contract never holds a balance.

Cancel on the token itself

Setting the allowance to 0 stops billing right away. No support ticket, and no merchant cooperation needed.

Quickstart

Install the Stellar CLI and fund an identity

stellar keys generate merchant --network testnet --fund
stellar keys generate subscriber --network testnet --fund

Subscriber approves Orbit and opens a vault

stellar contract invoke --id $TOKEN --source subscriber --network testnet -- \
  approve --from $SUBSCRIBER --spender $ORBIT --amount 3480000000 --live_until_ledger 5000000

stellar contract invoke --id $ORBIT --source subscriber --network testnet -- \
  create_vault --user $SUBSCRIBER --merchant $MERCHANT --token $TOKEN \
  --amount_per_interval 290000000 --interval_seconds 2592000

Merchant pulls the first cycle

stellar contract invoke --id $ORBIT --source merchant --network testnet -- \
  pull_funds --user $SUBSCRIBER --merchant $MERCHANT

For the full walkthrough with environment variables and checks, see the Quickstart.

Good to go?

On this page