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

# Go-Live Checklist

> Move your integration from staging to production safely

You've built and tested against staging - this is what to verify before, during, and after the switch to production.

## Switch environments

* [ ] **Swap the base URL** to `https://api.letsway.com` - ideally via configuration, not code.
* [ ] **Swap credentials.** Production has its own API keys - staging keys (`way_sk_test_...`) return `401` in production. Create a production key (`way_sk_live_...`) in the production dashboard (**Settings → Developers → API Keys**) and store it as a secret, never in client-side code or the repository. (Still on `Way-Brand-Id`/`Way-Secret-Key` headers? See [Legacy authentication](/legacy-authentication).)
* [ ] **Swap the Stripe publishable key** to the production key for your brand's `paymentPlatform` (confirm with your Way representative).
* [ ] **Confirm API access is enabled** on the production brand/organization - a `403` with valid credentials means it isn't. See [Environments](/environments).

## Payments

* [ ] Test cards don't work in production. Run one **real card checkout** end to end (book something refundable, then [cancel and refund it](/guides/manage-bookings#cancel-and-refund)).
* [ ] Verify your 3D Secure handling with `redirect: "if_required"` and a real `return_url` - EU brands (`stripe-eu`) hit SCA challenges routinely.
* [ ] Confirm your failure path in production conditions: on payment failure you [discard the cart](/api-reference/carts-and-checkout/discard-cart) and retry with a **fresh cart ID**. Abandoned `processing` bookings hold real inventory.

## Error handling and limits

* [ ] Handle `429` with exponential backoff - rate-limited endpoints allow **400 requests per 60 seconds**. Batch and cache where you can (listings and availability data cache well).
* [ ] Handle `422` with the [common-errors matrix](/guides/build-a-booking-integration#common-errors): used cart, `resourceQuantity` mismatch, sold-out session, missing custom-question answers.
* [ ] Log request/response pairs (redacting the `Authorization` header) so support conversations have evidence.

## Webhooks

* [ ] Register your **production endpoint** in the production dashboard - webhook configuration does not carry over from staging.
* [ ] Set a **secret** and [verify signatures](/webhooks/verify-signatures) over the raw body.
* [ ] Return `2xx` within 10 seconds; process asynchronously; dedupe on business keys ([delivery semantics](/webhooks/delivery-and-retries)).
* [ ] Have a reconciliation job ready: [Get bookings](/api-reference/bookings/get-bookings) with `updatedFrom` covers gaps after downtime.

## Final smoke test

* [ ] `GET /v1/brands/{brandId}/settings` returns your production brand with the expected `currency` and `paymentMethods`.
* [ ] `GET /v3/listings` returns the real published listings.
* [ ] One real booking → confirmation email received → visible in dashboard → `booking.completed` webhook delivered → cancelled and refunded cleanly.
