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

# Production access requirements

> What must be in place before you can place a real order, and how to tell whether it is.

<Warning>
  **Availability, as of 2026-10-19: test environment available on request; production trading switched off.**

  | Environment | Status |
  | - | - |
  | Test (`/api/trading/test/v1`) | **Available on request.** Ask the Bullionwale desk to turn on API access for your account and issue a test key. Test orders are simulated and nothing is booked. |
  | Production (`/api/trading/v1`) | **Switched off.** Implemented, but production orders are refused (`403 production_trading_disabled`). Bullionwale will enable it per account once it opens; it is not available today. |

  `https://api.bullionwale.com` serves the API. Without a valid key, every call answers `401`. Your Bullionwale relationship manager will tell you when production trading opens.
</Warning>

Production orders are **real**: they are booked exactly like an order you place in the Bullionwale app. Production trading is switched off by default and is never turned on for an account automatically.

## Requirements

You can place a production order only when **all** of these hold:

1. **Your integration works in test.** Build and run it against the test environment first, including retries after timeouts and the errors you handle (see [Test and production](/environments#moving-from-test-to-production)).
2. **Bullionwale has enabled production trading for your account.** Ask your Bullionwale relationship manager or the Bullionwale desk. API access must be on for your account as well.
3. **Your key is a live key with `orders:write`.** A live key starts with `bwk_live.`. It is issued separately from your test key, and shown once (see [Getting access](/getting-access)).
4. **Bullionwale's platform-wide production switches are on.** Bullionwale controls these; you cannot change them.

Requirements 2 to 4 are checked again on every order, at the moment it is accepted. If any of them changes while your order is on its way, the order is refused with the matching code and nothing is booked. An order that was already accepted keeps going.

Reads (`GET /me`, `GET /orders`, `GET /orders/{order_id}`, `GET /positions`) on the production paths need only a live key with the right scope and API access for your account. They keep working while production trading is switched off.

## Check before you trade

`GET /me` returns `production_trading_available`: `true` when Bullionwale's production switches are on, your account's API access is on and production trading is enabled for your account. The answer is the same on the test and production paths, so you can check it with either key.

<CodeGroup>
  ```bash curl theme={null}
  curl -s https://api.bullionwale.com/api/trading/v1/me \
    -H "X-API-Key: $BULLIONWALE_API_KEY"
  ```

  ```python Python theme={null}
  import os
  import requests

  BASE = "https://api.bullionwale.com/api/trading/v1"
  HEADERS = {"X-API-Key": os.environ["BULLIONWALE_API_KEY"]}

  me = requests.get(f"{BASE}/me", headers=HEADERS, timeout=10).json()
  print("production trading available:", me["production_trading_available"])
  ```
</CodeGroup>

```json 200 OK theme={null}
{
  "login_id": "your-login",
  "firm_name": "Your Firm",
  "environment": "production",
  "key_id": "8d2e4f6a0b1c3d5e7f90",
  "key_name": "order-bot-live",
  "scopes": ["account:read", "orders:read", "orders:write"],
  "production_trading_available": false
}
```

`production_trading_available` is a hint, not a promise. It does not look at your key's scopes, and every order is checked again in full when it is placed. Treat `true` as "you may try", and still handle the refusals below.

## When production orders are refused

### 403 production\_trading\_disabled

Production trading is not available to you right now. Nothing was booked. `detail.reason` says which switch is off:

| `reason` | Meaning |
| - | - |
| `deploy` | Production trading is not switched on for the Bullionwale platform. |
| `global` | Bullionwale has production API trading switched off for all customers. |
| `account` | Production trading is not enabled for your account. |

```json 403 Forbidden theme={null}
{
  "detail": {
    "code": "production_trading_disabled",
    "message": "Trading through the production API is not available.",
    "reason": "account"
  }
}
```

For `account`, contact Bullionwale if you expected to be enabled. For `deploy` and `global`, production trading is off for everyone: wait until Bullionwale tells you it is available.

### 503 production\_prerequisites\_unmet

Production trading is **paused by Bullionwale**. Nothing was booked, and there is nothing to change on your side. Retry later with the same `Idempotency-Key`. The body may carry further fields about Bullionwale's internal readiness; you do not need to act on them.

```json 503 Service Unavailable theme={null}
{
  "detail": {
    "code": "production_prerequisites_unmet",
    "message": "Production API trading is paused: prerequisites unmet."
  }
}
```

### Other refusals

* `403 api_access_disabled`: API access is off for your account.
* `403 insufficient_scope`: your live key does not have `orders:write`.
* `401 wrong_environment`: you sent a test key to a production path.

When production trading is switched off, your **reads** keep working, so you can always find out what happened to the orders you already placed (see [Recovering an order](/idempotency#recovering-an-order-whose-outcome-you-do-not-know)).


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