# Going live

> A checklist for real payments — receiving account, detection, Service Credit — and how to switch from test to live safely.

Test mode needs nothing financial. **Live mode collects real money into your own bKash or Nagad account**, so a few things must be ready first. You set them up in the Devzity dashboard; the API tells you what's missing. **Test setup does not carry over to live** — each item below is configured separately.

## Checklist

- [ ] **Switch to a Live secret key** (Developers → API keys → Live) and deploy with it. Test and live data never mix.
- [ ] **Configure your payment account(s)** — a bKash or Nagad number you own, set as the active receiving account for that provider.
- [ ] **Verify the payment types you want** — Send Money, Payment, Cash In, Bank / Card Add Money. Each is enabled and confirmed separately; enabling one doesn't verify another.
- [ ] **Confirm payment detection (Bridge) is ready** for that exact account — the Devzity Bridge app installed, signed in and healthy.
- [ ] **Add Service Credit for your business.** It covers the small per-payment fee, and it belongs to the **business** (one balance for all your accounts).
- [ ] **Create a Live webhook endpoint** and **store its signing secret securely** — it is different from your Test endpoint's. See [Webhooks](https://docs.devzity.com/v1/webhooks.md#test-payments-go-to-test-endpoints-live-payments-to-live-endpoints).
- [ ] **Use your production `return_url`** (an https URL, or your app's production link).
- [ ] **Run one controlled live payment** for a small amount and confirm the `payment.paid` webhook on your Live endpoint.

## What live errors mean

A live `POST /v1/payments` returns a `409` with one of these when something on the checklist is missing:

| Code | Fix |
| --- | --- |
| `payment_detection_not_ready` | No enabled, ready receiving method yet — configure an account and confirm detection. |
| `payment_method_unavailable` | None of your `allowed_methods` is usable right now. |
| `payment_channel_unavailable` | No ready receiving number accepts the requested `allowed_channels`. |
| `insufficient_credit` | Your business's Service Credit can't cover the next fee — top it up in the dashboard. |

Live payments use your business's Service Credit; if the balance is too low, live payment creation returns `insufficient_credit`. Test payments never use it.

> **Tip:** Run the whole flow in test mode first. When you switch to live, only the key, the webhook endpoint and its secret change — and your account, detection and Service Credit must be ready.
