> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pesapay.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Developer overview

> What you can build on Pesa, and which piece to use.

<CardGroup cols={2}>
  <Card title="Move money in and out" icon="arrows-left-right" href="/guides/deposit">
    Deposit USDC or USDT from any supported chain into a Stellar wallet, withdraw it again, or send it on Stellar. Use the **Pesa SDK** and the transfers API.
  </Card>

  <Card title="Prove a fact from an account" icon="shield-check" href="/zktls-sdk/overview">
    Prove a payment, a balance or an income fact from a user's own HTTPS account, on their phone. Use the **zkTLS SDK**.
  </Card>

  <Card title="Read the market" icon="chart-line" href="/guides/order-book">
    List offers, depth and order status. Use the **order book API**.
  </Card>

  <Card title="Settle against a claim" icon="file-contract" href="/protocol/claims-contract">
    Release funds in your own contract or backend on a verified zkTLS claim.
  </Card>
</CardGroup>

## The pieces

| Piece | Language | Where it runs | Use it for |
| - | - | - | - |
| `@pesa/sdk` | TypeScript | Browser, React Native, Node | Transfers API client, chain registry, verifiers |
| zkTLS SDK | Swift, Kotlin | iOS 14+, Android 7+ | Login, capture, proof, claim |
| `@zktls/claim`, `zktlsclaim`, `zktls-claim` | TypeScript, Go, Rust | Your backend | Verifying claims |
| Transfers API | HTTP + JSON | `api.pesapay.xyz` | Quotes, transfers, actions, submissions |

## Environments

| Network | API base URL | Stellar | EVM |
| - | - | - | - |
| Testnet | `https://api-testnet.pesapay.xyz` | Stellar testnet | Avalanche Fuji, Base Sepolia, Arbitrum Sepolia |
| Mainnet | `https://api.pesapay.xyz` | Stellar public network | Every route in [Supported routes](/chain-abstraction/routes) |

USDT0 has no testnet. Test USDT0 routes on mainnet with small amounts.

## How a transfer works, for a developer

Every transfer follows the same loop, whatever the route:

```
quote → create → [ getActions → verify → sign → submit ]* → poll until completed
```

The server tells your app what to sign next as an **action**. Your app checks the action with a **verifier**, has the user sign it, and **submits** the result. Repeat until there is no action and the status is `completed`. The server never holds a key that can sign for the user.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.