Go live
Goal
Move a working sandbox integration to production without discovering a gap in front of a real payer.
Prerequisites
- A sandbox integration that has taken both a success and a decline (the quickstart covers both on purpose).
- Live keys issued:
sk_live_...andpk_live_.... The environment is carried by the key prefix, not the host, so going live is a key swap, not a URL change.
Steps
- Swap the keys. Replace
sk_test_/pk_test_withsk_live_/pk_live_. The base URL does not change. - Confirm your webhook endpoint is verifying signatures against the raw body, ignoring unknown
schemes, and returning
2xxonly after durably storing the event (payment.succeeded). A handler that parses before verifying, or that does slow work before acknowledging, passes in sandbox and fails under production volume. - Confirm you handle declines as HTTP 200. A live decline is a business outcome, not an
exception; if your code treats a 200
declinedas success, you will fulfil an order nobody paid for (Declines). - Pin your API version (
Blackjack-Version) so a later additive change cannot shift behaviour under you, and read the versioning policy before you rely on a field. - Rotate the webhook secret at least once in sandbox so you have exercised the dual-accept window before you need it in production.
Verify it worked
Take one real, low-value production payment and one deliberate decline, and confirm both the API response and the webhook match what you saw in sandbox. If the decline path behaves differently in production than in sandbox, stop and fix it before opening the funnel.