Quickstart
From server credentials to a ready managed account.
1. Obtain approved access
CRISP supplies an API origin, key ID (cpk_…), one-time secret (cps_…) and
scopes through a secure channel. The production origin is
https://partner-api.crisp.trade; paths start with /v1. Use the origin CRISP
approves for testing. There is no implied publicly available sandbox.
Store credentials only on your backend. Example variable names below belong to your integration, not the CRISP dashboard:
CRISP_API_ORIGIN=https://partner-api.crisp.trade
CRISP_PARTNER_KEY_ID=provided-securely
CRISP_PARTNER_SECRET=provided-securely2. Make a read-only request
Save the Node.js client alongside this script. Use Node 24. Do not import the client into a browser bundle.
import { createPartnerClient } from './partner-client.mjs';
const request = createPartnerClient({
origin: process.env.CRISP_API_ORIGIN,
keyId: process.env.CRISP_PARTNER_KEY_ID,
secret: process.env.CRISP_PARTNER_SECRET,
});
const result = await request('/v1/capabilities');
if (!result.ok) throw new Error(`CRISP request failed: ${result.status}`);
console.log(result.payload.data); // Do not log credentials or full user payloads.accounts:read is required. Capabilities describe environment enablement, not
permission to bypass your key's scopes. Request GET /v1/trading-status with
markets:read to show service restrictions in your product.
3. Provision an account
Only run this after CRISP approves your test account. Authenticate your own user first. Persist the external ID and intent key before sending the request.
const externalUserId = 'example:user-123'; // Stable ID chosen by your backend.
const created = await request('/v1/accounts', {
method: 'POST',
idempotencyKey: 'provision-example-user-123',
body: {
externalUserId,
externalIdentity: { label: 'Username', value: '@example' },
},
});
// Inspect created.ok and created.payload; 202 means provisioning was accepted.
const status = await request(`/v1/accounts/${encodeURIComponent(externalUserId)}`);Requires accounts:write; status needs accounts:read. Use bounded exponential
backoff (for example 1, 2, 4, 8, then 15 seconds) while provisioning. Stop on
terminal failure/revocation; do not fund or trade until status is ready.
4. Integrate incrementally
Read wallet/funding instructions, choose a real market/outcome from market data, then test a small user-approved order. An HTTP acceptance is not a confirmed fill. Implement order lifecycle and recovery before enabling the submit button. Complete the launch checklist.