movere Docs

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.money remains 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:

  1. Certify end to end with test keys on the canonical host, including webhooks and failure paths, using the go-live checklist.
  2. Switch to live credentials (same base URL).
  3. 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.