Test mode
Test mode lets you build and try your integration before you become a partner. You get the Partners dashboard, test API keys and the real hosted Connect flow, all with simulated members. Nothing is billed, and no real CrossTrade accounts or Tradovate logins are created or touched.
How you get it
- Apply. Send a Partner application. CrossTrade reviews the fit and discusses pricing with you.
- The CrossTrade team unlocks your offer. Once you are approved, we set a Partner Program offer on your CrossTrade account. It appears in My Account, Partner with your pricing.
- Open Partners. The same moment, a Partners row with a TEST marker appears in the dashboard sidebar. Open it and you are in test mode. There is nothing to buy or accept first.
Test mode stays open for as long as you hold the offer and have not become a partner.
What works in test mode
The dashboard has the same four pages as a live partner (Overview, Members, API Keys and Settings), each with a test mode banner, and the same onboarding steps: set a business name, create your API client and create your first member.
| Surface | In test mode |
|---|---|
| Partner API, all 12 endpoints | Works, against your test data |
OAuth at /v1/oauth/token and /v1/oauth/revoke | Works: client_credentials, authorization_code with PKCE, refresh and revoke |
| Hosted Connect | The real portal with your branding. The Tradovate sign-in is simulated (below) |
Trading API GET /v1/api/tv/accounts with a member token | Works: lists the sample accounts the member shared, so you can prove a member key works |
| Management API reads with a member token | Works: discovery, audit records, and listing or reading monitors, copiers and ATM templates |
| Every other Trading API call | 403 test_mode_unsupported |
| Management API writes | 403 test_mode_unsupported |
| Member streams | 403 test_mode_unsupported |
| Webhooks | Not available. Poll GET /v1/api/partner/events instead |
| Billing | Nothing is billed. GET /v1/api/partner/usage returns estimates (total_is_estimate: true), and there is no billing portal |
| Partner Agreement | You accept it when you go live |
Members can grant tv:read, tv:trade and manage:read in test mode. Because Trading commands and Management writes are refused, tv:trade lets you test the consent screen, not order entry.
Test keys
Test keys use the same base URLs as live keys, so your code switches between test and live by changing only the client id and secret.
| Credential | Test prefix | Live prefix |
|---|---|---|
| Client id | xt_test_client_... | xt_client_... |
| Client secret | xt_test_cs_... | xt_cs_... |
| Access token | xt_test_at_... | xt_at_... |
| Refresh token | xt_test_rt_... | xt_rt_... |
Test keys reach only your test data, and live keys never reach it. In test mode, GET /v1/api/partner/me returns a partner id starting with ptest_, stripe_mode: "test", livemode: false and live_enabled: false, and shows test mode's own request budgets under budgets.
The Connect walkthrough
A test member's Connect link opens the real hosted Connect page, with your business name and branding, and walks through every step the member sees live: continue, the terms, linking Tradovate, choosing logins and allowing your app. Pickup and redirect delivery of the authorization code work as they do live, and you exchange the code for a member token the same way.
The Tradovate step is simulated. Instead of a Tradovate sign-in, the page offers a button that links a sample login:
| Environment | Sample login | Sample accounts |
|---|---|---|
| Demo | DEMO12345678 | DemoAccount, PROP1234, PROP1235 |
| Live | LiveAccount1 | LiveAccount1, LiveAccount2 |
Limits
- Up to 25 test members. Revoked members count toward the 25. Each test member is deleted 7 days after you create it, which frees its place; reopening a member does not extend it, and the deletion sends no event.
- The test workspace ends after 7 days without activity, or 30 days after it started, whichever comes first. That removes everything in it: business name, branding, logo, API client, members and events. Your next visit to Partners starts a fresh workspace, and the old test keys stop working.
- The events feed keeps the most recent 100 events.
Going live
When you are ready, choose Become a Partner in My Account, Partner, accept the Partner Agreement and check out. Your Partners dashboard switches to live straight away.
Test data is never moved to your live account. When you go live you set up again from the start:
- your business name, which is permanent once set live (the test one reserved nothing);
- your branding, logo and redirect URIs;
- a new API client, with a live client id and secret;
- your webhook, which test mode does not offer;
- your members, created for real.
Your integration code does not change. The endpoints and response shapes are the same, so you swap the test client id and secret for the live ones.
Errors only test mode returns
Test mode also returns the live error codes in Errors, with the same response shape.
| Status | Code | Meaning |
|---|---|---|
| 403 | test_mode_unsupported | This call is not available in test mode; detail says what to use instead |
| 403 | test_mode_unavailable | Test mode is switched off for now; try again later |
| 404 | test_mode_ended | The test workspace ended while the request ran; open Partners to start a fresh one |
| 409 | test_member_cap | You have 25 test members; each is deleted 7 days after you create it |
| 409 | test_capacity_reached | You reached another test mode limit, such as new idempotency keys for the day; wait for older test data to expire |