Environments
Audience: anyone integrating Mooov. One page answering "which hostname, which key, and where do I test?". What to actually do in test mode (test cards, simulated webhooks, the go-live checklist) lives on the sandbox page.
Mooov has two key environments: test (mk_test_*) and live
(mk_live_*). Both call the same canonical API hostname. The API key
environment is authoritative: hostname, body, query, and forwarded
headers never override it.
1. Canonical API host
| Surface | Hostname |
|---|---|
| API gateway | https://api.mooov.money |
| Connect authorize | https://connect.mooov.money/authorize |
| Merchant portal (Mooov3) | https://mooov3.mooov.money |
| Merchant portal (Mooov6, high-risk route) | https://mooov6.mooov.money |
| Docs | https://docs.mooov.money |
| MCP server | https://mcp.mooov.money/mcp |
Use https://api.mooov.money for both mk_test_* and mk_live_*
keys. Test mode moves no real money; live mode does.
https://sandbox.api.mooov.moneyremains a temporary compatibility alias during cutover. It does not select the request environment. New integrations should use the canonical host only.
2. Credentials
| Credential | Test | Live |
|---|---|---|
| Merchant API key | mk_test_* |
mk_live_* |
| Platform (Connect) key | mk_platform_* (Mooov-Test-Mode key) |
mk_platform_* (live key) |
| Webhook signing secret | whsec_* (test destination's) |
whsec_* (live destination's) |
The environment is baked into the credential at minting time.
Merchant key prefixes make the environment greppable: a mk_test_
key leaked into a live config is spotted at a glance. Pair both
mk_test_* and mk_live_* keys with https://api.mooov.money.
Platform keys share the mk_platform_ prefix in both environments
but are different secrets minted in separate ceremonies.
In the merchant portal, the global Test / Live control selects which environment's objects you see. That portal mode is independent of the public API key lane; API callers still rely on the key prefix.
3. Separation rule
Test and live objects are fully separate within the same merchant
account: separate keys, separate payments, customers, Connect grants,
webhook destinations, and signing secrets. Nothing you create with a
test key exists in live, and no credential works across the boundary.
A mk_test_* key cannot accidentally move real money.
For platforms this means the consent flow has to be run per environment: a tenant who connected with a test-mode platform key is not connected for live charges.
4. There is no dry-run on live keys
Live keys have no test flag, no magic test cards, and no dry-run header. The verification path is:
- Certify end to end with test keys on the canonical host, including webhooks and failure paths, using the go-live checklist.
- Switch to live credentials (same base URL).
- Make one low-value live transaction (and refund it) as the final smoke test.
If you find yourself wanting to "test something quickly" with a live key, the answer is a test key. It is the same API surface.
5. Switching
Going from test to live changes the key pair in your secret manager
and the webhook signing secret. The base URL stays
https://api.mooov.money. The API surface, signing scheme, and event
shapes are identical. Quickstarts:
merchants,
platforms.