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

# Quickstart

> Create an API key and execute your first swap.

This guide takes you from zero to a live swap in four steps.

<Steps>
  <Step title="Create an API key">
    Log in to [Bloom Manager](https://bloombot.app) and open **Manage API Keys**
    from the top navigation. Select **SOL** or **EVM**, give the key a name, and
    click **Create API Key**.

    One EVM key covers every EVM chain — you choose the chain per request, not
    per key. Solana and EVM keys are not interchangeable.

    Copy the key immediately — it is shown **once only** and is not stored in
    plaintext. If you lose it, revoke it and create a new one.
  </Step>

  <Step title="Set the Authorization header">
    Pass the key as a Bearer token on every request:

    ```
    Authorization: Bearer blm_sol_live_…    # Solana
    Authorization: Bearer blm_evm_live_…    # EVM
    ```
  </Step>

  <Step title="Execute a buy">
    Buy a token from one wallet. Each wallet sets its own `amount` — the amount
    of the quote asset to spend on a Buy. Replace the key, `<TOKEN_ADDRESS>`, and
    `<YOUR_WALLET>` with your own values.

    <Tabs>
      <Tab title="Solana">
        Spends 0.1 SOL.

        ```bash theme={null}
        curl -X POST "https://eu.solana.bloombot.app/api/v1/swap" \
          -H "Authorization: Bearer blm_sol_live_YOUR_KEY_HERE" \
          -H "Content-Type: application/json" \
          -d '{
            "address": "<TOKEN_ADDRESS>",
            "side": "Buy",
            "wallets": [
              { "address": "<YOUR_WALLET>", "amount": "0.1" }
            ],
            "slippage": 10,
            "priority_fee": 0.001,
            "processor_tip": 0.0001,
            "anti_mev": true,
            "auto_tip": false
          }'
        ```

        On Solana `priority_fee` and `processor_tip` are both in SOL.

        Swap `eu.` for `us.solana.bloombot.app` if you are closer to the US —
        the two are interchangeable, and share one account and one rate-limit
        budget. See [Regions](/concepts/chains#regions).
      </Tab>

      <Tab title="EVM">
        Spends 0.05 of the chain's native token on BNB Chain. Note the extra
        **`chain`** field, which pins the trade to one chain.

        ```bash theme={null}
        curl -X POST "https://evm.bloombot.app/api/v1/swap" \
          -H "Authorization: Bearer blm_evm_live_YOUR_KEY_HERE" \
          -H "Content-Type: application/json" \
          -d '{
            "address": "<TOKEN_ADDRESS>",
            "chain": "bsc",
            "side": "Buy",
            "wallets": [
              { "address": "<YOUR_WALLET>", "amount": "0.05" }
            ],
            "slippage": 10,
            "priority_fee": 3,
            "processor_tip": 0.0005,
            "anti_mev": false,
            "auto_tip": false
          }'
        ```

        `chain` is one of `eth`, `bsc`, `base`, `rbh`, `arc`, and is optional —
        omit it and the token is resolved across chains automatically. On EVM
        `priority_fee` is in **gwei** (`3` = 3 gwei) and `processor_tip` is in the
        chain's **native asset** — see
        [Chains and quote assets](/concepts/chains).
      </Tab>
    </Tabs>

    `slippage` is a percentage, so `10` means 10%.
  </Step>

  <Step title="Read the response and rate-limit headers">
    A successful swap returns a server-generated `order_id` you can use to
    correlate the trade in logs, plus the submitted transaction `signatures`
    (one per wallet/transaction):

    ```json theme={null}
    {
      "success": true,
      "data": {
        "order_id": "api_1b0f7918c80dd6b6cee38b13",
        "signatures": ["0xbda5b47dbb63b696c4978e6fd550624778186a691a7662c1317937ed28eb1b0d"]
      }
    }
    ```

    Treat `order_id` as an opaque string — its shape differs between hosts. On
    EVM, `signatures` holds transaction hashes; on Solana, transaction
    signatures. Either way they confirm what was **broadcast**, not that it
    confirmed on-chain.

    Every response (including errors) carries your current rate-limit budget in
    `X-RateLimit-*` headers:

    ```
    X-RateLimit-Limit-Minute: 60
    X-RateLimit-Limit-Hour: 1200
    X-RateLimit-Limit-Week: 10000
    X-RateLimit-Remaining-Minute: 59
    X-RateLimit-Remaining-Hour: 1199
    X-RateLimit-Remaining-Week: 9999
    ```

    See [Rate limits](/concepts/rate-limits) for the full semantics.
  </Step>
</Steps>

## Next steps

<CardGroup cols={2}>
  <Card title="Chains and quote assets" icon="link" href="/concepts/chains">
    Trading on EVM: the `chain` field, per-chain quote assets, and fee units.
  </Card>

  <Card title="Authentication" icon="key" href="/authentication">
    Key format, the 5-keys-per-chain limit, and revocation.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/concepts/errors">
    The error envelope and every error code.
  </Card>
</CardGroup>
