Skip to main content
Everything your team does with your organization’s data in the dashboard is also available through the Platform API. This guide shows how to build a CRM or back office on top of it: copy your data once, keep it current from events, and write changes back safely. You need an organization API key. Every request below sends it in the X-API-Key header to https://api.hyperprop.com/platform.

1. Choose your keys

Use two keys with different jobs. An organization can have two active keys at a time, which is also how you rotate without downtime. A read-only key can call every GET endpoint and open the trading stream; anything that changes data returns 403 READ_ONLY_KEY. Each endpoint in the API reference lists which keys can call it under Access. Add an IP allowlist to both keys if your servers have fixed addresses.
API keys act for the whole organization: a full-access key can do everything an admin can, and a read-only key can view everything. Keep role-based access inside your CRM, and use team roles for people who use the dashboard.

2. Map Hyperprop to your data model

Store Hyperprop IDs next to your own. To find records by your IDs instead, set them on Hyperprop’s side:
  • customerId on a trading account, then filter with ?customerId=.
  • The trader’s external ID (traderExternalId when you create an account), then filter traders with ?externalUserId=.
  • Free-form metadata on accounts, traders and purchases, then filter with ?metadata=key:value.

3. Backfill with cursor pagination

Read each collection page by page with cursor. Cursors stay stable while data changes underneath you, so a backfill never skips or repeats a record. See pagination.
Backfill in this order so references resolve: trading plans and rules, traders, trading accounts, purchases, then payouts per account. Invoices and credits are short lists you read in one call.

4. Keep it in sync in real time

After the backfill, apply changes as they happen. Two channels carry the same events with the same payloads; most CRMs use both. Subscribe a webhook endpoint to the events your CRM models, for example trader.created, account.created, account.status_changed, account.passed, account.failed, purchase.created, purchase.status_changed and account.payout_processed. Verify each delivery’s signature, and make applying an event idempotent: deliveries can repeat. See deduplication. For a live view, connect to the event stream with the read-only key:
The API key must be sent in the X-API-Key header. A key in the URL is not accepted, and the connection is refused with 400. After a disconnect, reconnect with ?since=<ISO timestamp of the last event you applied> to receive what you missed, then live events resume. For live positions, balances and fills per account, use the real-time trading stream.

5. Reconcile on a schedule

Events tell you what changed; a periodic check proves nothing was missed.
  • Balances and account state: GET /organization/balances?updatedSince= returns only accounts whose balance or state changed since the asOf of your previous call. Run it every few minutes.
  • New records: list trading accounts, traders and purchases with startDate set to your last check and add anything you do not have.
  • Event history: GET /organization/events lists every event your organization produced, filterable by eventType and accountId, so you can replay a gap.
  • End of day: after the trading day closes, read balances and fills for the day from the reconciliation endpoints for your books.

6. Write changes back safely

Send writes with the action key and an Idempotency-Key header. A retry with the same key and body returns the original response instead of repeating the change, so a timeout never creates two accounts or two payouts. See idempotency.
Use your own record ID in the idempotency key (crm-order-8814), so the same order always maps to the same key.

7. Bring in billing and your team

  • Invoices and credits: show what you owe Hyperprop next to your revenue. See Billing and invoices.
  • Team: add and remove dashboard users and give them roles from your own admin screens. See Team and roles.
  • Support: open and follow up on support tickets with GET /organization/support/tickets and POST /organization/support/tickets.

Handle errors

Every error has the same body, and code is the field to switch on. See errors.

Rate limits

The Platform API has no general request-rate limit, so a backfill needs no throttling. A few endpoints have their own limits (live account reads, invoice PDFs and payment instructions, billing details updates and CSV exports); they answer 429 with Retry-After. See rate limits.