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

# Plans and payment

> Upgrade a key to a paid plan, paid in USDC on Hyperliquid, from the website or from code.

Paid plans are self-serve and paid in USDC on Hyperliquid. There is no card, no account to create and no subscription: one payment gives a plan for 30 days, and paying again extends it. The key you already have gets the new limits; nothing changes in your code.

| Plan | Price | Requests per minute | History |
| - | - | - | - |
| Free key | \$0 | 60 | 30 days |
| Explorer | 49 USDC / 30 days | 100 | 90 days |
| Builder | 149 USDC / 30 days | 1,000 | 1 year |

Pro (execution) is in early access and dedicated nodes are quoted per setup: see [pricing](https://ironflow.sh/#pricing).

## From the website

1. Open [ironflow.sh/upgrade](https://ironflow.sh/upgrade), pick a plan, and enter the email your key was sent to and the Hyperliquid wallet you will pay from.
2. The page shows exactly what to send, from where and to where, and waits for the transfer. In the Hyperliquid app, open Portfolio, press Send, paste the Ironflow address as Destination, keep USDC, enter the amount and send.
3. Within about 10 seconds of the transfer the page turns green, and we email you. The same key now has the plan's limits.

When you hit a limit, the error message and the `X-Ironflow-Upgrade` response header link to this page.

## From code or an AI agent

An agent that holds USDC on Hyperliquid can upgrade its own key in three calls.

**1. See the plans and where to pay** (no key needed):

```bash theme={null}
curl https://api.ironflow.sh/v1/billing/plans
```

**2. Open an upgrade request** for the key's email, the wallet that will pay, and a plan:

```bash theme={null}
curl -X POST https://api.ironflow.sh/v1/billing/upgrade \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "wallet": "0xYourHyperliquidAddress", "plan": "explorer"}'
```

The answer has `amount_usdc`, `to_address`, `request_id` and `status_url`.

**3. Send the USDC on Hyperliquid** from that wallet to `to_address`. With Hyperliquid's Python SDK:

```python theme={null}
exchange.usd_transfer(amount_usdc, to_address)
```

The transfer has to be signed by the wallet itself: an API (agent) wallet cannot send funds.

**4. Poll the request** until `status` is `paid`:

```bash theme={null}
curl "https://api.ironflow.sh/v1/billing/upgrade?request=up_..."
```

| `status` | Meaning |
| - | - |
| `pending` | Waiting for the transfer. `transfers_seen` lists what arrived from the wallet so far. |
| `paid` | The plan is active. `plan_active_until` says until when; `paid.tx_hash` is the transfer. |
| `expired` | No payment within 7 days. Open a new request. |

Payments are checked every 10 seconds.

## If something goes wrong

* Check the address, network and amount before you send. Transfers on Hyperliquid are final: we cannot reverse them, and we are not responsible for, and cannot recover, funds sent to any other address or network.
* If a transfer reaches our address but matches no request (another wallet, or less than the price), write to [hello@ironflow.sh](mailto:hello@ironflow.sh): we apply it to a plan or refund it to the wallet it came from.
* A plan that has started is not refundable, except where the law requires it.
* The request is matched by the wallet it comes from. One wallet pays for one email.
* When a plan ends, the key returns to the free limits and we email you.


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