Your entire operation in one view.
From the first registration to the last retention call — every interaction, every trade, every dollar.
Customer lifecycle
Four registration paths: organic, affiliate (with 72-hour autologin), CSV import (50,000 rows), and promo code. Each with its own group assignment and fraud gates.
- Disposable email blocking with configurable domain blocklist
- Duplicate detection: email, phone, and affiliate_lead_id scoring
- Scoring-based dedupe: affiliate_lead_id = 10, email = 4, phone = 3, country = 1
- Automatic retention classification: active → churning → dormant
POST /api/customer/register
{
"email": "[email protected]",
"password": "TestPass1234",
"first_name": "John",
"last_name": "Doe",
"phone": "+447700900000",
"country": "GB",
"source": "organic",
"promo_code": null,
"affiliate_id": "aff_123"
}Agent workspace
Polymorphic status pipelines (sales, finance, KYC), bulk assignment with round-robin, activity feed with keyset pagination, task management with due dates.
- SSE live account feed with 500ms throttle
- Customer online presence via Redis TTL (300s)
- Notes with full edit history — append-only compliance trail
- Task management with overdue tracking and team-level views
GET /api/crm/accounts/{login}/stream (SSE)
event: state
data: {
"balance": 10000.0,
"credit": 0.0,
"equity": 10250.5,
"pnl": 250.5,
"margin_used": 500.0,
"free_margin": 9750.5,
"margin_level": 2050.1,
"currency": "USD"
}Teams & RBAC
Hierarchical teams with materialized path queries. 32 permissions across 7 categories. PII masking — email and phone shown as full, masked, or hidden depending on the viewer's role.
- customer_view_scope: own / team / all
- customer_edit_scope: none / own / team / all
- pii_email and pii_phone: full / masked / hidden
- can_export_pii controls CSV export access
- Privilege escalation guards on role creation and permission grants
Same customer, three views
Financial operations
Deposits, withdrawals, credits, bonuses, corrections, IB payments, chargebacks — all in one ledger. Maker-checker approval flows with withdrawal amount thresholds.
- 15 transaction types with full status lifecycle
- Threshold-based approval rules: agent < $1K, manager < $10K, compliance $10K+
- Per-country payment routing with BridgerPay and Praxis
- Auto-freeze on negative chargeback balance
Withdrawal approval rules
// Three-tier approval
{"min_amount_usd": 0, "max_amount_usd": 1000, "required_role": "agent"}
{"min_amount_usd": 1000, "max_amount_usd": 10000, "required_role": "manager"}
{"min_amount_usd": 10000, "max_amount_usd": null, "required_role": "compliance"}
// Maker-checker: creator ≠ approver
// 403 if same user attempts both actionsCustomer import & promo codes
Upload a CSV with 50,000 leads. Async processing at 10/sec with real-time progress. Download rejection reports. Promo codes assign customers to specific groups at registration.
POST /api/backoffice/customers/import
// Upload CSV (multipart form)
// Required: email, phone, first_name, last_name, country
// Optional: group_name, assigned_to_email, comment
// 202 Accepted
{
"job_id": "uuid",
"status": "pending",
"total_rows": 1500,
"message": "Import job created. Processing 1500 rows."
}
// Poll GET /api/backoffice/customers/import/{job_id}/status
// Download GET /api/backoffice/customers/import/{job_id}/rejectionsCommunications
Email and SMS template builders with {{placeholder}} resolution. Multilingual with per-locale translations. RTL auto-detection for Arabic and Hebrew. GSM-7/UCS-2 character counting with segment analysis.
- Per-locale translations with default fallback
- Live template preview with sample data
- Delivery tracking via customer communication log
- Integrated with workflow send_email and send_sms actions
PUT /api/platform/email-templates/{id}/translations/en
{
"subject": "Welcome, {{customer.first_name}}!",
"body_html": "<p>Hello {{customer.first_name}},</p>
<p>Your account with {{broker.platform_name}}
is ready.</p>",
"body_text": "Hello {{customer.first_name}}..."
}