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

# API reference

> Read coins, payouts and wallets, or build your own launch flow.

The Veto API is the same one [veto.fun](https://veto.fun) runs on. Everything is public and JSON, with no API key.

```bash theme={null}
curl https://api.veto.fun/api/stats
```

## Conventions

* **Amounts** are decimal numbers (`0.42`), not base units. Every coin has a pair asset (`quote`): SOL, USDC, a tokenized stock or another token. Plain amount fields like `amount`, `pots.jackpot` and `totals.paid` are in that pair asset.
* **Fields ending in `Sol`** are always SOL: the SOL value at the time of the payout, or at current prices for pots. For SOL-paired coins they match the plain fields.
* **Token amounts** are whole tokens (`1500000`), not base units. Every Veto coin has 6 decimals and a supply of 1,000,000,000.
* **Percentages in splits** are basis points: `7000` is 70%. Other percentages, like `weightPct`, are plain percents.
* **Times** are ISO 8601 strings in UTC.
* **Addresses** are base58 Solana public keys. Coins are identified by their mint address.

## Errors

Errors return a non-2xx status and a message you can show to users as-is:

```json theme={null}
{ "error": "Token not found" }
```

| Status | Meaning |
| - | - |
| `400` | The request is invalid. The message names the field. |
| `401` | A signature doesn't match the wallet. |
| `403` | The wallet isn't allowed to do this, for example it holds too little to veto. |
| `404` | The coin or launch doesn't exist. |
| `409` | The request is out of date, for example a veto for a closed window. |
| `410` | A prepared launch expired. Prepare it again. |
| `429` | Rate limited. Wait and retry. |
| `503` | The feature is temporarily unavailable. |

## Rate limits

Read endpoints aren't rate limited. Write endpoints are limited per IP address:

| Endpoint | Limit |
| - | - |
| `POST /api/launch/prepare` | 10 per minute |
| `POST /api/launch/submit` | 20 per minute |
| `POST /api/tokens/{mint}/veto` | 20 per minute |
| `POST /api/trade/quote` | 60 per minute |

## Transactions

Launch and trade endpoints return an unsigned or partly signed transaction as base64. Deserialize it with `VersionedTransaction.deserialize`, sign it with the user's wallet, and either send it yourself (trades) or post it back (launches). The API never asks for a private key.


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