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

# Migration & Troubleshooting

> Migrate from LauncX V2 to V3 and resolve common integration errors.

## Test your integration

Verify everything against **staging** (`https://v3.launcx.com`) before touching production. Use staging credentials for staging and production credentials for production — they are not interchangeable.

## Migration Guide for V2 Users

Migration requires two changes.

### 1. Update the base URL

| Environment | V2 (old)                            | V3 (new)                         |
| ----------- | ----------------------------------- | -------------------------------- |
| Production  | `https://launcx.com/api/v1`         | `https://live.launcx.com/api/v1` |
| Staging     | `https://staging.launcx.com/api/v1` | `https://v3.launcx.com/api/v1`   |

<Note>
  Get Payment moved to `/api/v3/payments/{id}` — see [Get Payment](/payments#get-payment).
</Note>

### 2. Use a new V3 API key

Obtain a V3 key per [Copy your API key](/prerequisites#6-copy-your-api-key). V2 keys do not work on V3.

```bash theme={null}
# Before (V2)
curl -X GET https://launcx.com/api/v1/your-endpoint \
  -H "Content-Type: application/json" \
  -H "x-api-key: your-v2-api-key"

# After (V3)
curl -X POST https://live.launcx.com/api/v1/payments \
  -H "Content-Type: application/json" \
  -H "x-api-key: your-v3-api-key" \
  -H "x-timestamp: {{unix_timestamp_in_milliseconds}}" \
  -d '{"price": 20000, "playerId": "payer_id"}'
```

## Troubleshooting

**`403 Forbidden`** — A source IP is not whitelisted. Send the LauncX team the exhaustive list of IPs you call from. (Holding-client API keys are also rejected with `403`.) Provide the request timestamp and we can confirm the offending IP.

**`401 Unauthorized`** — Wrong API key for the environment. Common cases:

1. Staging key (`v3.launcx.com`) against production (`live.launcx.com`), or vice versa.
2. A LauncX V3 key against the legacy LauncX V2 system (`launcx.com`), or vice versa.

**`400 Bad Request` on `x-timestamp`** — The timestamp is missing, not numeric, or outside the ±5-minute window. Send Unix time in **milliseconds** from a clock synced to UTC.
