Go-live checklist
Move an integration from test mode to live without surprises, from keys and endpoints to your clients' real sites and the first real launch.
What you'll build
The live version of an integration that works in test mode. Live data starts empty, keys and webhook endpoints are separate from test ones, and every live launch spends a launch you bought. This page walks through each change, then a first real launch to watch.
Before you start
- An integration that works in test mode, from creating a project to handling webhooks.
- Your first purchase. Live keys come with it, and every launch on the live side uses 1 launch from your balance.
1. Create a live key
In the console, open Developers and create a key on the LIVE tab. Store it in your secret manager, apart from the test key, and point your production config at it.
curl https://api.submitator.com/v1/ping \
-H "Authorization: Bearer $SUBMITATOR_API_KEY"{
"object": "ping",
"ok": true,
"livemode": true,
"account": { "name": "Northlight Studio", "state": "active" },
"key": { "id": "key_3Rw8Kx2Lq9Vt5Nb1Zm7HcW", "permissions": "full" }
}-
livemodeistrueandstateisactive. - Each server or job has its own key, so you can roll one without touching the others.
- Anything that only reads, such as a dashboard, has a
read_onlykey. A portal that shows your client their logins needs a key with full permissions. - No key is in a browser, an app or a repository.
2. Add your live webhook endpoint
Webhook endpoints belong to a mode, so the endpoints you added with the test key receive no live events. Add the live one with the live key: it gets its own secret, and its URL must be public, since live mode rejects hosts on .test such as the one below.
curl https://api.submitator.com/v1/webhook_endpoints \
-H "Authorization: Bearer $SUBMITATOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://hooks.northlight.test/listings", "events": ["listing.*", "project.*", "report.*"]}'- The live endpoint's
secretis stored, and your code checks live deliveries with it. -
POST /webhook_endpoints/{webhook_endpoint_id}/testreaches the live endpoint and gets 2xx. - Your code skips an event whose id it has handled, and checks
livemodebefore it writes.
3. Switch to your clients' real data
Test projects stay in test mode: a live key gets 404 for their ids. Create each client's project again with the live key, from their real site.
- Sites are public: live mode rejects
.test,.example,.invalid,.localhostand IP addresses withnot_public_url. - Each contact email is one your client reads, since some directories register the listing to it, and it cannot change after the launch.
-
external_idholds your CRM's id, so your records link to the live projects. - Tests that use
nobadge.hosts or/fail.pngimages to force a failure run in test mode only.
4. Check the errors your code can get
- Your code branches on
error.code, never onmessage, and logsrequest_id. - Every
POSTyou may send twice carries anIdempotency-Key, and a retry sends the same key. - 429 waits the seconds in
Retry-After; 500 and 503 retry with backoff. - 402
no_launches_leftstops your launches and tells you to buy more, instead of retrying. - A listing or project in
action_requiredreaches a person:client_messagegoes to your client whenwaiting_onisclient.
Error codes says what each code means and how to fix it.
5. Launch one project and watch it
Before the first real launch, preview it: the readiness call is free and shows what the launch would spend and get.
curl https://api.submitator.com/v1/projects/prj_4QzX1m9Lr2Vb7Nc8Tk3HwP/readiness \
-H "Authorization: Bearer $SUBMITATOR_API_KEY"-
readyistrue, andcost.availablecovers the launch. - After the launch,
project.launchedreaches your live endpoint. - Listings move from
pendingover the next days, and most go live within a week.
Check it worked
GET /pingwith the production key showslivemodetrue.GET /webhook_endpointswith the same key lists your live endpoint,enabledand with a recentdelivery_summary.last_http_statusof 2xx.- Your system shows the first live project's listings, and their statuses match
progresson the project.
What can go wrong
| Code | Status | Fix |
|---|---|---|
not_found | 404 | A test id sent with a live key. Create the project again in live mode. |
validation_failed | 422 | A test site, such as one on .test, fails with not_public_url. Use the client's real site. |
no_launches_left | 402 | Your live balance is 0. Buy launches in the console. |
permission_denied | 403 | A read-only key tried to write, or to read logins. Use a key with full permissions there. |
Next steps
- Authentication: keys, permissions, rolling and revoking.
- Rate limits: 3,600 requests per hour in each mode.
- Support: what to send when something looks wrong.