# API reference

> The Senddy API endpoints that the SDK calls, for teams integrating over HTTP.

Source: https://www.senddy.com/docs/developers/api
Last modified: 2026-10-07T18:10:55.000Z

---

The SDK calls these endpoints for you. Use them directly only if you're integrating from a language without a Senddy SDK, or debugging.

| Chain | Base URL |
|---|---|
| Base | `https://api.senddy.com` |
| Robinhood Chain | `https://api-rh.senddy.com` |

Every request needs an API key in `X-API-Key`, or a session token in `Authorization: Bearer sst_…`. Event streams take `?session=` instead. See [Authentication](/docs/developers/authentication).

## Service

| Method | Path | What it does |
|---|---|---|
| GET | `/health` | Liveness |
| GET | `/info` | Chain, pool and which features this instance runs |
| GET | `/whoami` | The developer or session the credential belongs to |

## Sessions

| Method | Path | What it does |
|---|---|---|
| POST | `/session` | Mint a short-lived session token for a user. Server only, with your API key |
| POST | `/session/exchange` | Turn a Privy access token into a session, for Privy apps registered with Senddy |

## Transactions

Proofs are made on the user's device. These endpoints verify them in a secure enclave, sign an attestation, and submit the transaction for the user, so they never need gas.

| Method | Path | What it does |
|---|---|---|
| POST | `/sequence/deposit-shield` | Verify and submit a deposit, in order |
| POST | `/sequence/spend` | Verify and submit a transfer or withdrawal |
| POST | `/sequence/spend9` | The same, for payments that combine many notes |
| POST | `/sequence/private-swap` | Verify and submit a private swap |
| GET | `/sequence/ticket/:ticket_id` | Status of a submitted transaction |
| POST | `/attest/deposit-shield`, `/attest/spend`, `/attest/spend9`, `/attest/private-swap` | Attest only, without submitting |
| POST | `/relay` | Submit an attested transaction |

## Swaps

| Method | Path | What it does |
|---|---|---|
| POST | `/swap/quote` | Route, expected output, floor and fees for a private swap |

## Bridging

| Method | Path | What it does |
|---|---|---|
| POST | `/bridge/hyperliquid/in-address` | A deposit address for funds coming from Hyperliquid |
| POST | `/bridge/hyperliquid/out-address` | A deposit address for a withdrawal to Hyperliquid |
| POST | `/bridge/solana/deposit-address` | A deposit address for funds coming from Solana |
| GET | `/bridge/status` | Progress of a bridge request |

## Data

| Method | Path | What it does |
|---|---|---|
| GET | `/merkle/root` | The pool's current Merkle root |
| GET | `/merkle/tree` | Merkle data the client needs to prove |
| GET | `/events/stream` | Server-sent events for new pool activity |
| GET | `/balance/usdc` | Public balance of an address, for deposit screens |

## Errors

Errors return JSON with a machine-readable `code`. The ones to handle:

| Code | Meaning | What to do |
|---|---|---|
| `SESSION_EXPIRED` | The session token has expired | Mint a new one. The SDK does this for you |
| `ROUTE_UNAVAILABLE` | No swap route right now | Ask the user to try again |
| `SWAPS_DISABLED` | Swaps are off on this instance | Hide swaps |
| `429` | Rate limited | Back off and retry |
