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

# Quickstart

> Issue an access token and make your first authenticated call against the sandbox.

This walks you from credentials to a working request in three steps. Sandbox and
production share one base URL; your application's registration determines the
environment.

<Info>
  **Base URL:** `https://api.zeam.money/gw/v1`

  Sandbox and production use the same base URL. Your application's registration
  determines which environment a request runs in.
</Info>

<Steps>
  <Step title="Get sandbox credentials">
    [Register an application](/guides/register-your-application) in the business
    portal (or ask an administrator to) to get its `clientId`, client secret,
    and application secret (`apiKey`). See [API keys](/authentication/api-keys).
  </Step>

  <Step title="Issue an access token">
    Exchange your client credentials for a short-lived bearer token. This route
    is public.

    ```bash cURL theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
    curl -sS https://api.zeam.money/gw/v1/auth/token \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "11111111-1111-1111-1111-111111111111",
        "clientSecret": "$ZEAM_CLIENT_SECRET"
      }'
    ```

    The response contains the token and its lifetime in seconds:

    ```json Response theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
    {
      "accessToken": "eyJ0eXAiOiJKV1Qi...",
      "tokenType": "Bearer",
      "expiresIn": 3599,
      "associationId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    }
    ```

    Keep the `associationId`; you send it as `x-association-id` on every
    protected request.
  </Step>

  <Step title="Call a protected endpoint">
    Every protected request carries three headers: the bearer token, your
    application secret as `x-zeam-auth`, and your association id as
    `x-association-id`.

    ```bash cURL theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
    curl -sS https://api.zeam.money/gw/v1/wallets \
      -H "Authorization: Bearer $ZEAM_TOKEN" \
      -H "x-zeam-auth: $ZEAM_APP_SECRET" \
      -H "x-association-id: $ZEAM_ASSOCIATION_ID"
    ```

    A successful response is a paginated collection:

    ```json Response theme={"theme":{"light":"github-light","dark":"one-dark-pro"}}
    {
      "data": [
        { "id": "…", "walletName": "Treasury ZAR", "publicKey": "G…" }
      ],
      "pagination": { "nextCursor": null, "hasMore": false }
    }
    ```
  </Step>
</Steps>

## Next steps

<CardGroup cols={2}>
  <Card title="Authentication" icon="shield-check" href="/authentication/overview">
    Understand tokens, the application secret, and association scoping.
  </Card>

  <Card title="Your first transaction" icon="route" href="/guides/your-first-transaction">
    Go from credentials to a completed P2P transfer with status tracking.
  </Card>

  <Card title="API reference" icon="terminal" href="/api-reference/introduction">
    Browse every endpoint and try requests in the playground.
  </Card>

  <Card title="Errors" icon="triangle-alert" href="/platform/errors">
    Learn the RFC 7807 error format and how to handle failures.
  </Card>
</CardGroup>
