Docs · Reference
API reference
Auto-generated from the live OpenAPI document. Snippets shown for curl, fetch (browser), httpx (Python), curl_setopt (PHP), and net/http (Go).
For interactive exploration, use the Swagger UI at http://143.110.171.125:4000/docs.
229 operations across 28 tags.
accounts
GET/v1/accountsList trading accounts (cursor-paginated).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/accounts'
JavaScript
await fetch('http://localhost:4000/v1/accounts', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/accounts')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/accounts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/accounts", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/accountsCreate / link a trading account for a trader.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "platform": "mt5", "externalId": "string", "accountNumber": "string", "currency": "string", "balance": "string", "equity": "string", "leverage": 0, "isDemo": false, "metadata": {} }' 'http://localhost:4000/v1/accounts'JavaScript
await fetch('http://localhost:4000/v1/accounts', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/accounts', json={
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/accounts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/accounts", bytes.NewReader([]byte(`{
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/accounts/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/accounts/{id}'JavaScript
await fetch('http://localhost:4000/v1/accounts/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/accounts/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/accounts/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/accounts/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/accounts/{id}
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/accounts/{id}'JavaScript
await fetch('http://localhost:4000/v1/accounts/{id}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/accounts/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/accounts/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/accounts/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/accounts/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "platform": "mt5", "externalId": "string", "accountNumber": "string", "currency": "string", "balance": "string", "equity": "string", "leverage": 0, "isDemo": false, "metadata": {}, "status": "active" }' 'http://localhost:4000/v1/accounts/{id}'JavaScript
await fetch('http://localhost:4000/v1/accounts/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {},
"status": "active"
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/accounts/{id}', json={
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {},
"status": "active"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/accounts/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {},
"status": "active"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/accounts/{id}", bytes.NewReader([]byte(`{
"traderId": "string",
"platform": "mt5",
"externalId": "string",
"accountNumber": "string",
"currency": "string",
"balance": "string",
"equity": "string",
"leverage": 0,
"isDemo": false,
"metadata": {},
"status": "active"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()admin
GET/v1/admin/activityAdmin activity dashboard (A7): per-user action counts last 7 days.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/activity'
JavaScript
await fetch('http://localhost:4000/v1/admin/activity', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/activity')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/activity');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/activity", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/deposits/{id}/partial-settleM3: settle a deposit for a smaller amount (bank wire came in short). Writes a partial-settlement note into provider_payload.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/deposits/{id}/partial-settle'JavaScript
await fetch('http://localhost:4000/v1/admin/deposits/{id}/partial-settle', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/deposits/{id}/partial-settle')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/deposits/{id}/partial-settle');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/deposits/{id}/partial-settle", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/fx-ratesM1: current FX rates cached in fx_rates table.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/fx-rates'
JavaScript
await fetch('http://localhost:4000/v1/admin/fx-rates', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/fx-rates')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/fx-rates');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/fx-rates", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/fx-ratesM1: set/overwrite an FX rate (admin manual input).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/fx-rates'
JavaScript
await fetch('http://localhost:4000/v1/admin/fx-rates', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/fx-rates')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/fx-rates');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/fx-rates", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/impersonate/{id}/end
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/impersonate/{id}/end'JavaScript
await fetch('http://localhost:4000/v1/admin/impersonate/{id}/end', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/impersonate/{id}/end')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/impersonate/{id}/end');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/impersonate/{id}/end", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/impersonate/startA4: owner starts a "view as trader" session. Returns a short-lived token scoped to the target trader.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/impersonate/start'
JavaScript
await fetch('http://localhost:4000/v1/admin/impersonate/start', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/impersonate/start')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/impersonate/start');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/impersonate/start", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/notifications/summaryAction queues summary for the topbar bell + sidebar badges (pending KYC, open sanctions, deposits/withdrawals awaiting approval, open tickets).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/notifications/summary'
JavaScript
await fetch('http://localhost:4000/v1/admin/notifications/summary', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/notifications/summary')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/notifications/summary');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/notifications/summary", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/position-heatmapPosition heatmap (A12) — aggregated open volume per symbol across all traders.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/position-heatmap'
JavaScript
await fetch('http://localhost:4000/v1/admin/position-heatmap', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/position-heatmap')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/position-heatmap');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/position-heatmap", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/reporting/cohortsRegistration-month cohort analysis (R2): retention via first-deposit.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/reporting/cohorts'
JavaScript
await fetch('http://localhost:4000/v1/admin/reporting/cohorts', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/reporting/cohorts')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/reporting/cohorts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/reporting/cohorts", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/reporting/revenue-breakdownCommission revenue split by source type (R6).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/reporting/revenue-breakdown'
JavaScript
await fetch('http://localhost:4000/v1/admin/reporting/revenue-breakdown', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/reporting/revenue-breakdown')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/reporting/revenue-breakdown');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/reporting/revenue-breakdown", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/reports/sqlR4: read-only SQL sandbox (owner-only). Wrapped in a Postgres READ ONLY transaction with 30s statement_timeout so even comment-smuggled writes are rejected at the DB layer. Results capped at 10k rows; query also passes a coarse keyword guard for clearer errors before the DB sees it.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/reports/sql'
JavaScript
await fetch('http://localhost:4000/v1/admin/reports/sql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/reports/sql')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/reports/sql');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/reports/sql", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/sla/overdueSupport tickets past their SLA deadline (A11).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/sla/overdue'
JavaScript
await fetch('http://localhost:4000/v1/admin/sla/overdue', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/sla/overdue')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/sla/overdue');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/sla/overdue", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/tax-reportM6: tax report stub — aggregate deposits/withdrawals per trader over a window for 1099/DAC7-style exports.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/tax-report'
JavaScript
await fetch('http://localhost:4000/v1/admin/tax-report', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/tax-report')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/tax-report');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/tax-report", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/traders/{id}/pii-exportG2: owner-initiated PII bundle export for a trader (GDPR Article 15).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/traders/{id}/pii-export'JavaScript
await fetch('http://localhost:4000/v1/admin/traders/{id}/pii-export', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/traders/{id}/pii-export')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/traders/{id}/pii-export');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/traders/{id}/pii-export", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/traders/bulk-editBulk-edit traders (A3). Apply segment/assignment/risk changes to up to 500 ids.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/traders/bulk-edit'
JavaScript
await fetch('http://localhost:4000/v1/admin/traders/bulk-edit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/traders/bulk-edit')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/traders/bulk-edit');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/traders/bulk-edit", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/traders/mergeA2: merge duplicate traders. Moves accounts/deposits/withdrawals/tickets from secondary into primary, soft-deletes secondary.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/traders/merge'
JavaScript
await fetch('http://localhost:4000/v1/admin/traders/merge', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/traders/merge')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/traders/merge');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/traders/merge", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/audit
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/audit'
JavaScript
await fetch('http://localhost:4000/v1/audit', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/audit')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/audit');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/audit", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/audit/export.csv
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/audit/export.csv'
JavaScript
await fetch('http://localhost:4000/v1/audit/export.csv', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/audit/export.csv')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/audit/export.csv');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/audit/export.csv", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/audit/facets
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/audit/facets'
JavaScript
await fetch('http://localhost:4000/v1/audit/facets', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/audit/facets')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/audit/facets');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/audit/facets", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/tenants/current
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/tenants/current'
JavaScript
await fetch('http://localhost:4000/v1/tenants/current', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/tenants/current')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/tenants/current');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/tenants/current", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/tenants/current
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "name": "string", "branding": {}, "featureFlags": {} }' 'http://localhost:4000/v1/tenants/current'JavaScript
await fetch('http://localhost:4000/v1/tenants/current', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"branding": {},
"featureFlags": {}
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/tenants/current', json={
"name": "string",
"branding": {},
"featureFlags": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/tenants/current');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"name": "string",
"branding": {},
"featureFlags": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/tenants/current", bytes.NewReader([]byte(`{
"name": "string",
"branding": {},
"featureFlags": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/tenants/current/logo-confirm
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/tenants/current/logo-confirm'
JavaScript
await fetch('http://localhost:4000/v1/tenants/current/logo-confirm', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/tenants/current/logo-confirm')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/tenants/current/logo-confirm');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/tenants/current/logo-confirm", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/tenants/current/logo-upload
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "contentType": "string", "fileSize": 0 }' 'http://localhost:4000/v1/tenants/current/logo-upload'JavaScript
await fetch('http://localhost:4000/v1/tenants/current/logo-upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"contentType": "string",
"fileSize": 0
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/tenants/current/logo-upload', json={
"contentType": "string",
"fileSize": 0
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/tenants/current/logo-upload');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"contentType": "string",
"fileSize": 0
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/tenants/current/logo-upload", bytes.NewReader([]byte(`{
"contentType": "string",
"fileSize": 0
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/users
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/users'
JavaScript
await fetch('http://localhost:4000/v1/users', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/users')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/users');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/users", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/users/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/users/{id}'JavaScript
await fetch('http://localhost:4000/v1/users/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/users/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/users/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/users/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/users/{id}/impersonate
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/users/{id}/impersonate'JavaScript
await fetch('http://localhost:4000/v1/users/{id}/impersonate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/users/{id}/impersonate')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/users/{id}/impersonate');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/users/{id}/impersonate", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/users/{id}/roles
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "roles": [ "string" ] }' 'http://localhost:4000/v1/users/{id}/roles'JavaScript
await fetch('http://localhost:4000/v1/users/{id}/roles', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"roles": [
"string"
]
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/users/{id}/roles', json={
"roles": [
"string"
]
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/users/{id}/roles');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"roles": [
"string"
]
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/users/{id}/roles", bytes.NewReader([]byte(`{
"roles": [
"string"
]
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/users/invite
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "email": "user@example.com", "displayName": "string", "roles": [], "password": "string", "sendInviteLink": true }' 'http://localhost:4000/v1/users/invite'JavaScript
await fetch('http://localhost:4000/v1/users/invite', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com",
"displayName": "string",
"roles": [],
"password": "string",
"sendInviteLink": true
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/users/invite', json={
"email": "user@example.com",
"displayName": "string",
"roles": [],
"password": "string",
"sendInviteLink": true
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/users/invite');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com",
"displayName": "string",
"roles": [],
"password": "string",
"sendInviteLink": true
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/users/invite", bytes.NewReader([]byte(`{
"email": "user@example.com",
"displayName": "string",
"roles": [],
"password": "string",
"sendInviteLink": true
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()affiliates
GET/v1/affiliates
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates'
JavaScript
await fetch('http://localhost:4000/v1/affiliates', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/affiliates
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "code": "string", "parentId": "string" }' 'http://localhost:4000/v1/affiliates'JavaScript
await fetch('http://localhost:4000/v1/affiliates', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"code": "string",
"parentId": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/affiliates', json={
"traderId": "string",
"code": "string",
"parentId": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"code": "string",
"parentId": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/affiliates", bytes.NewReader([]byte(`{
"traderId": "string",
"code": "string",
"parentId": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/affiliates/clicks/trackAffiliate click-tracking pixel (I7). Public endpoint, no auth.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/clicks/track'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/clicks/track', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/affiliates/clicks/track')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/clicks/track');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/affiliates/clicks/track", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/affiliates/commissions
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/commissions'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/commissions', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates/commissions')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/commissions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates/commissions", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/affiliates/commissions/by-symbolCommission breakdown by symbol (I5) — derived from source trades metadata.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/commissions/by-symbol'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/commissions/by-symbol', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates/commissions/by-symbol')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/commissions/by-symbol');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates/commissions/by-symbol", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/affiliates/funnelRegistration → KYC → first-deposit funnel over last 90 days (I6/R1).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/funnel'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/funnel', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates/funnel')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/funnel');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates/funnel", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/affiliates/payoutsList payout requests for this tenant (I3).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/payouts'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/payouts', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates/payouts')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/payouts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates/payouts", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/affiliates/payoutsIB requests a commission payout (I3).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/payouts'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/payouts', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/affiliates/payouts')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/payouts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/affiliates/payouts", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/affiliates/payouts/{id}/approve
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/payouts/{id}/approve'JavaScript
await fetch('http://localhost:4000/v1/affiliates/payouts/{id}/approve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/affiliates/payouts/{id}/approve')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/payouts/{id}/approve');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/affiliates/payouts/{id}/approve", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/affiliates/payouts/{id}/paid
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/payouts/{id}/paid'JavaScript
await fetch('http://localhost:4000/v1/affiliates/payouts/{id}/paid', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/affiliates/payouts/{id}/paid')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/payouts/{id}/paid');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/affiliates/payouts/{id}/paid", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/affiliates/rules
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/rules'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/rules', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates/rules')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/rules');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates/rules", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/affiliates/rules
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "affiliateId": "string", "kind": "per_deposit", "depth": 0, "amount": "string", "percent": false, "currency": "string", "isActive": false }' 'http://localhost:4000/v1/affiliates/rules'JavaScript
await fetch('http://localhost:4000/v1/affiliates/rules', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"affiliateId": "string",
"kind": "per_deposit",
"depth": 0,
"amount": "string",
"percent": false,
"currency": "string",
"isActive": false
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/affiliates/rules', json={
"affiliateId": "string",
"kind": "per_deposit",
"depth": 0,
"amount": "string",
"percent": false,
"currency": "string",
"isActive": false
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/rules');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"affiliateId": "string",
"kind": "per_deposit",
"depth": 0,
"amount": "string",
"percent": false,
"currency": "string",
"isActive": false
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/affiliates/rules", bytes.NewReader([]byte(`{
"affiliateId": "string",
"kind": "per_deposit",
"depth": 0,
"amount": "string",
"percent": false,
"currency": "string",
"isActive": false
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/affiliates/treeSub-affiliate tree from the current session user's primary affiliate (I2).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/tree'
JavaScript
await fetch('http://localhost:4000/v1/affiliates/tree', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates/tree')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/tree');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates/tree", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/affiliates/tree/{rootId}Return the subtree rooted at rootId (ULID).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/affiliates/tree/{rootId}'JavaScript
await fetch('http://localhost:4000/v1/affiliates/tree/{rootId}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/affiliates/tree/{rootId}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/affiliates/tree/{rootId}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/affiliates/tree/{rootId}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()ai
POST/v1/ai/classify-intentClassify a support-ticket message into one of the 11 intent buckets.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/ai/classify-intent'
JavaScript
await fetch('http://localhost:4000/v1/ai/classify-intent', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/ai/classify-intent')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/ai/classify-intent');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/ai/classify-intent", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/ai/draft-replyDraft a polite operator reply to a support ticket.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/ai/draft-reply'
JavaScript
await fetch('http://localhost:4000/v1/ai/draft-reply', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/ai/draft-reply')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/ai/draft-reply');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/ai/draft-reply", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/ai/fraud-explainExplain why a deposit was flagged + recommend an action.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/ai/fraud-explain'
JavaScript
await fetch('http://localhost:4000/v1/ai/fraud-explain', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/ai/fraud-explain')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/ai/fraud-explain');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/ai/fraud-explain", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/ai/healthLiveness check for the local AI runtime.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/ai/health'
JavaScript
await fetch('http://localhost:4000/v1/ai/health', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/ai/health')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/ai/health');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/ai/health", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/ai/kyc-summaryAI-generated 2-sentence KYC reviewer summary from a doc analysis result.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/ai/kyc-summary'
JavaScript
await fetch('http://localhost:4000/v1/ai/kyc-summary', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/ai/kyc-summary')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/ai/kyc-summary');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/ai/kyc-summary", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/ai/sales-coachRecommend the best next sales action for a trader.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/ai/sales-coach'
JavaScript
await fetch('http://localhost:4000/v1/ai/sales-coach', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/ai/sales-coach')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/ai/sales-coach');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/ai/sales-coach", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()api-keys
GET/v1/api-keys
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/api-keys'
JavaScript
await fetch('http://localhost:4000/v1/api-keys', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/api-keys')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/api-keys');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/api-keys", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/api-keys
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "name": "string", "scopes": [], "expiresAt": "2026-04-19T01:51:33.116Z" }' 'http://localhost:4000/v1/api-keys'JavaScript
await fetch('http://localhost:4000/v1/api-keys', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"scopes": [],
"expiresAt": "2026-04-19T01:51:33.116Z"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/api-keys', json={
"name": "string",
"scopes": [],
"expiresAt": "2026-04-19T01:51:33.116Z"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/api-keys');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"name": "string",
"scopes": [],
"expiresAt": "2026-04-19T01:51:33.116Z"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/api-keys", bytes.NewReader([]byte(`{
"name": "string",
"scopes": [],
"expiresAt": "2026-04-19T01:51:33.116Z"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/api-keys/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/api-keys/{id}'JavaScript
await fetch('http://localhost:4000/v1/api-keys/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/api-keys/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/api-keys/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/api-keys/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/api-keys/{id}/revoke
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/api-keys/{id}/revoke'JavaScript
await fetch('http://localhost:4000/v1/api-keys/{id}/revoke', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/api-keys/{id}/revoke')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/api-keys/{id}/revoke');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/api-keys/{id}/revoke", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/api-keys/{id}/rotate
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/api-keys/{id}/rotate'JavaScript
await fetch('http://localhost:4000/v1/api-keys/{id}/rotate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/api-keys/{id}/rotate')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/api-keys/{id}/rotate');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/api-keys/{id}/rotate", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()billing
POST/v1/billing/checkoutCreate a Stripe Checkout session for the chosen plan.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "plan": "string", "return_url": "https://example.com" }' 'http://localhost:4000/v1/billing/checkout'JavaScript
await fetch('http://localhost:4000/v1/billing/checkout', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"plan": "string",
"return_url": "https://example.com"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/billing/checkout', json={
"plan": "string",
"return_url": "https://example.com"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/billing/checkout');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"plan": "string",
"return_url": "https://example.com"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/billing/checkout", bytes.NewReader([]byte(`{
"plan": "string",
"return_url": "https://example.com"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/billing/current
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/billing/current'
JavaScript
await fetch('http://localhost:4000/v1/billing/current', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/billing/current')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/billing/current');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/billing/current", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/billing/plansPublic list of self-serve subscription plans.
curl
curl -X GET 'http://localhost:4000/v1/billing/plans'
JavaScript
await fetch('http://localhost:4000/v1/billing/plans', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/billing/plans')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/billing/plans');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/billing/plans", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/billing/portalOpen the Stripe billing portal for self-serve plan + invoice management.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "return_url": "https://example.com" }' 'http://localhost:4000/v1/billing/portal'JavaScript
await fetch('http://localhost:4000/v1/billing/portal', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"return_url": "https://example.com"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/billing/portal', json={
"return_url": "https://example.com"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/billing/portal');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"return_url": "https://example.com"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/billing/portal", bytes.NewReader([]byte(`{
"return_url": "https://example.com"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/billing/webhookStripe Billing webhook receiver (signature-verified). Handles subscription + invoice events.
curl
curl -X POST 'http://localhost:4000/v1/billing/webhook'
JavaScript
await fetch('http://localhost:4000/v1/billing/webhook', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/billing/webhook')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/billing/webhook');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/billing/webhook", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()campaigns
GET/v1/campaigns
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/campaigns'
JavaScript
await fetch('http://localhost:4000/v1/campaigns', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/campaigns')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/campaigns", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/campaigns
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "slug": "string", "name": "string", "enrollmentRule": {}, "steps": [] }' 'http://localhost:4000/v1/campaigns'JavaScript
await fetch('http://localhost:4000/v1/campaigns', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"slug": "string",
"name": "string",
"enrollmentRule": {},
"steps": []
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/campaigns', json={
"slug": "string",
"name": "string",
"enrollmentRule": {},
"steps": []
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"slug": "string",
"name": "string",
"enrollmentRule": {},
"steps": []
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/campaigns", bytes.NewReader([]byte(`{
"slug": "string",
"name": "string",
"enrollmentRule": {},
"steps": []
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/campaigns/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/campaigns/{id}'JavaScript
await fetch('http://localhost:4000/v1/campaigns/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/campaigns/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/campaigns/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/campaigns/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "name": "string", "status": "draft", "enrollmentRule": {} }' 'http://localhost:4000/v1/campaigns/{id}'JavaScript
await fetch('http://localhost:4000/v1/campaigns/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"status": "draft",
"enrollmentRule": {}
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/campaigns/{id}', json={
"name": "string",
"status": "draft",
"enrollmentRule": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"name": "string",
"status": "draft",
"enrollmentRule": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/campaigns/{id}", bytes.NewReader([]byte(`{
"name": "string",
"status": "draft",
"enrollmentRule": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/campaigns/{id}/enrollments
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/campaigns/{id}/enrollments'JavaScript
await fetch('http://localhost:4000/v1/campaigns/{id}/enrollments', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/campaigns/{id}/enrollments')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns/{id}/enrollments');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/campaigns/{id}/enrollments", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/campaigns/{id}/steps
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/campaigns/{id}/steps'JavaScript
await fetch('http://localhost:4000/v1/campaigns/{id}/steps', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/campaigns/{id}/steps')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns/{id}/steps');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/campaigns/{id}/steps", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/campaigns/{id}/steps
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "position": 0, "kind": "email", "delayHours": 0, "payload": {} }' 'http://localhost:4000/v1/campaigns/{id}/steps'JavaScript
await fetch('http://localhost:4000/v1/campaigns/{id}/steps', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"position": 0,
"kind": "email",
"delayHours": 0,
"payload": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/campaigns/{id}/steps', json={
"position": 0,
"kind": "email",
"delayHours": 0,
"payload": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns/{id}/steps');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"position": 0,
"kind": "email",
"delayHours": 0,
"payload": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/campaigns/{id}/steps", bytes.NewReader([]byte(`{
"position": 0,
"kind": "email",
"delayHours": 0,
"payload": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PUT/v1/campaigns/{id}/steps
curl
curl -X PUT --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/campaigns/{id}/steps'JavaScript
await fetch('http://localhost:4000/v1/campaigns/{id}/steps', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.put('http://localhost:4000/v1/campaigns/{id}/steps')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns/{id}/steps');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("PUT", "http://localhost:4000/v1/campaigns/{id}/steps", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/campaigns/{id}/steps/{stepId}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/campaigns/{id}/steps/{stepId}'JavaScript
await fetch('http://localhost:4000/v1/campaigns/{id}/steps/{stepId}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/campaigns/{id}/steps/{stepId}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/campaigns/{id}/steps/{stepId}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/campaigns/{id}/steps/{stepId}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()communications
POST/v1/communications/dispatch-queuedAdmin-only: force-dispatch every queued CommunicationSend for the current tenant. Useful after swapping MAIL_HOST / RESEND_API_KEY / TWILIO_* credentials.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/communications/dispatch-queued'
JavaScript
await fetch('http://localhost:4000/v1/communications/dispatch-queued', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/communications/dispatch-queued')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/communications/dispatch-queued');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/communications/dispatch-queued", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/communications/sendQueue a message to send (template or ad-hoc).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "templateSlug": "string", "channel": "email", "to": "string", "subject": "string", "body": "string", "variables": {} }' 'http://localhost:4000/v1/communications/send'JavaScript
await fetch('http://localhost:4000/v1/communications/send', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"templateSlug": "string",
"channel": "email",
"to": "string",
"subject": "string",
"body": "string",
"variables": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/communications/send', json={
"traderId": "string",
"templateSlug": "string",
"channel": "email",
"to": "string",
"subject": "string",
"body": "string",
"variables": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/communications/send');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"templateSlug": "string",
"channel": "email",
"to": "string",
"subject": "string",
"body": "string",
"variables": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/communications/send", bytes.NewReader([]byte(`{
"traderId": "string",
"templateSlug": "string",
"channel": "email",
"to": "string",
"subject": "string",
"body": "string",
"variables": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/communications/sends
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/communications/sends'
JavaScript
await fetch('http://localhost:4000/v1/communications/sends', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/communications/sends')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/communications/sends');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/communications/sends", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/communications/templatesList communication templates.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/communications/templates'
JavaScript
await fetch('http://localhost:4000/v1/communications/templates', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/communications/templates')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/communications/templates');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/communications/templates", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/communications/templates
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "slug": "string", "channel": "email", "subject": "string", "body": "string", "variables": [ "string" ], "isActive": false }' 'http://localhost:4000/v1/communications/templates'JavaScript
await fetch('http://localhost:4000/v1/communications/templates', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/communications/templates', json={
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/communications/templates');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/communications/templates", bytes.NewReader([]byte(`{
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/communications/templates/{id}
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/communications/templates/{id}'JavaScript
await fetch('http://localhost:4000/v1/communications/templates/{id}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/communications/templates/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/communications/templates/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/communications/templates/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/communications/templates/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "slug": "string", "channel": "email", "subject": "string", "body": "string", "variables": [ "string" ], "isActive": false }' 'http://localhost:4000/v1/communications/templates/{id}'JavaScript
await fetch('http://localhost:4000/v1/communications/templates/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/communications/templates/{id}', json={
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/communications/templates/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/communications/templates/{id}", bytes.NewReader([]byte(`{
"slug": "string",
"channel": "email",
"subject": "string",
"body": "string",
"variables": [
"string"
],
"isActive": false
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()dashboards
GET/v1/dashboards
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/dashboards'
JavaScript
await fetch('http://localhost:4000/v1/dashboards', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/dashboards')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/dashboards');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/dashboards", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/dashboards
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "slug": "string", "name": "string", "widgets": [], "userId": "string" }' 'http://localhost:4000/v1/dashboards'JavaScript
await fetch('http://localhost:4000/v1/dashboards', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"slug": "string",
"name": "string",
"widgets": [],
"userId": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/dashboards', json={
"slug": "string",
"name": "string",
"widgets": [],
"userId": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/dashboards');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"slug": "string",
"name": "string",
"widgets": [],
"userId": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/dashboards", bytes.NewReader([]byte(`{
"slug": "string",
"name": "string",
"widgets": [],
"userId": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/dashboards/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/dashboards/{id}'JavaScript
await fetch('http://localhost:4000/v1/dashboards/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/dashboards/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/dashboards/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/dashboards/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/dashboards/{id}
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/dashboards/{id}'JavaScript
await fetch('http://localhost:4000/v1/dashboards/{id}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/dashboards/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/dashboards/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/dashboards/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/dashboards/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "name": "string", "widgets": [ { "type": "kpi", "title": "string", "colSpan": 4, "savedReportId": "string", "kpiKind": "traders" } ] }' 'http://localhost:4000/v1/dashboards/{id}'JavaScript
await fetch('http://localhost:4000/v1/dashboards/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"widgets": [
{
"type": "kpi",
"title": "string",
"colSpan": 4,
"savedReportId": "string",
"kpiKind": "traders"
}
]
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/dashboards/{id}', json={
"name": "string",
"widgets": [
{
"type": "kpi",
"title": "string",
"colSpan": 4,
"savedReportId": "string",
"kpiKind": "traders"
}
]
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/dashboards/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"name": "string",
"widgets": [
{
"type": "kpi",
"title": "string",
"colSpan": 4,
"savedReportId": "string",
"kpiKind": "traders"
}
]
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/dashboards/{id}", bytes.NewReader([]byte(`{
"name": "string",
"widgets": [
{
"type": "kpi",
"title": "string",
"colSpan": 4,
"savedReportId": "string",
"kpiKind": "traders"
}
]
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()docs
GET/v1/docs/examplesAuto-generated curl/JS/Python/PHP/Go snippets per /v1 endpoint.
curl
curl -X GET 'http://localhost:4000/v1/docs/examples'
JavaScript
await fetch('http://localhost:4000/v1/docs/examples', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/docs/examples')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/docs/examples');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/docs/examples", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/docs/examples/{operationId}
curl
curl -X GET 'http://localhost:4000/v1/docs/examples/{operationId}'JavaScript
await fetch('http://localhost:4000/v1/docs/examples/{operationId}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/docs/examples/{operationId}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/docs/examples/{operationId}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/docs/examples/{operationId}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()enterprise
GET/v1/admin/saved-views
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/saved-views'
JavaScript
await fetch('http://localhost:4000/v1/admin/saved-views', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/saved-views')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/saved-views');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/saved-views", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/saved-views
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/saved-views'
JavaScript
await fetch('http://localhost:4000/v1/admin/saved-views', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/saved-views')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/saved-views');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/saved-views", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/admin/saved-views/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/saved-views/{id}'JavaScript
await fetch('http://localhost:4000/v1/admin/saved-views/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/admin/saved-views/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/saved-views/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/admin/saved-views/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/admin/saved-views/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/saved-views/{id}'JavaScript
await fetch('http://localhost:4000/v1/admin/saved-views/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/admin/saved-views/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/saved-views/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/admin/saved-views/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/searchCmd-K global search across traders, deposits, withdrawals, tickets, leads, accounts.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/search'
JavaScript
await fetch('http://localhost:4000/v1/admin/search', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/search')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/search');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/search", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/siem/export-nowTrigger SIEM export immediately (normally runs every 5 min from worker).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/siem/export-now'
JavaScript
await fetch('http://localhost:4000/v1/admin/siem/export-now', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/siem/export-now')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/siem/export-now');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/siem/export-now", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/admin/siem/forwarders
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/siem/forwarders'
JavaScript
await fetch('http://localhost:4000/v1/admin/siem/forwarders', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/admin/siem/forwarders')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/siem/forwarders');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/admin/siem/forwarders", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/siem/forwarders
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/siem/forwarders'
JavaScript
await fetch('http://localhost:4000/v1/admin/siem/forwarders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/siem/forwarders')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/siem/forwarders');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/siem/forwarders", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/admin/siem/forwarders/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/siem/forwarders/{id}'JavaScript
await fetch('http://localhost:4000/v1/admin/siem/forwarders/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/admin/siem/forwarders/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/siem/forwarders/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/admin/siem/forwarders/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/admin/status-incidents
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/status-incidents'
JavaScript
await fetch('http://localhost:4000/v1/admin/status-incidents', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/admin/status-incidents')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/status-incidents');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/admin/status-incidents", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/admin/status-incidents/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/admin/status-incidents/{id}'JavaScript
await fetch('http://localhost:4000/v1/admin/status-incidents/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/admin/status-incidents/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/admin/status-incidents/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/admin/status-incidents/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/public/changelogPublic changelog — auto-generated from MetaModule + git tags.
curl
curl -X GET 'http://localhost:4000/v1/public/changelog'
JavaScript
await fetch('http://localhost:4000/v1/public/changelog', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/public/changelog')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/public/changelog');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/public/changelog", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/public/statusPublic status page data — latest incidents + component state.
curl
curl -X GET 'http://localhost:4000/v1/public/status'
JavaScript
await fetch('http://localhost:4000/v1/public/status', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/public/status')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/public/status');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/public/status", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/users/me/theme
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/users/me/theme'
JavaScript
await fetch('http://localhost:4000/v1/users/me/theme', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/users/me/theme')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/users/me/theme');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/users/me/theme", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/users/me/theme
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/users/me/theme'
JavaScript
await fetch('http://localhost:4000/v1/users/me/theme', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/users/me/theme')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/users/me/theme');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/users/me/theme", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()health
GET/healthLiveness probe — returns 200 if the API process is alive.
curl
curl -X GET 'http://localhost:4000/health'
JavaScript
await fetch('http://localhost:4000/health', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/health')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/health');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/health", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()identity
POST/v1/auth/email/resendResend the email-verification link to the current user.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/email/resend'
JavaScript
await fetch('http://localhost:4000/v1/auth/email/resend', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/email/resend')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/email/resend');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/email/resend", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/email/verifyConsume an email-verification token.
curl
curl -X POST 'http://localhost:4000/v1/auth/email/verify'
JavaScript
await fetch('http://localhost:4000/v1/auth/email/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/email/verify')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/email/verify');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/email/verify", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/loginLog in with email + password (+ TOTP if enrolled).
curl
curl -X POST -H 'Content-Type: application/json' -d '{ "email": "user@example.com", "password": "string", "totpCode": "string", "tenantSlug": "string" }' 'http://localhost:4000/v1/auth/login'JavaScript
await fetch('http://localhost:4000/v1/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com",
"password": "string",
"totpCode": "string",
"tenantSlug": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/login', json={
"email": "user@example.com",
"password": "string",
"totpCode": "string",
"tenantSlug": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/login');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com",
"password": "string",
"totpCode": "string",
"tenantSlug": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/login", bytes.NewReader([]byte(`{
"email": "user@example.com",
"password": "string",
"totpCode": "string",
"tenantSlug": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/logoutLog out and revoke the current session.
curl
curl -X POST 'http://localhost:4000/v1/auth/logout'
JavaScript
await fetch('http://localhost:4000/v1/auth/logout', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/logout')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/logout');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/logout", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/auth/meReturn the currently authenticated user + tenant.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/me'
JavaScript
await fetch('http://localhost:4000/v1/auth/me', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/auth/me')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/me');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/auth/me", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/password/forgotRequest a password-reset email. Always returns 200 to prevent enumeration.
curl
curl -X POST 'http://localhost:4000/v1/auth/password/forgot'
JavaScript
await fetch('http://localhost:4000/v1/auth/password/forgot', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/password/forgot')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/password/forgot');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/password/forgot", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/password/resetConsume a password-reset token and set a new password.
curl
curl -X POST 'http://localhost:4000/v1/auth/password/reset'
JavaScript
await fetch('http://localhost:4000/v1/auth/password/reset', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/password/reset')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/password/reset');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/password/reset", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/registerRegister a new user within a tenant.
curl
curl -X POST -H 'Content-Type: application/json' -d '{ "email": "user@example.com", "password": "string", "displayName": "string", "tenantSlug": "string", "tenantName": "string" }' 'http://localhost:4000/v1/auth/register'JavaScript
await fetch('http://localhost:4000/v1/auth/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com",
"password": "string",
"displayName": "string",
"tenantSlug": "string",
"tenantName": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/register', json={
"email": "user@example.com",
"password": "string",
"displayName": "string",
"tenantSlug": "string",
"tenantName": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/register');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com",
"password": "string",
"displayName": "string",
"tenantSlug": "string",
"tenantName": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/register", bytes.NewReader([]byte(`{
"email": "user@example.com",
"password": "string",
"displayName": "string",
"tenantSlug": "string",
"tenantName": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/auth/sessionsList active sessions (devices) for the current user.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/sessions'
JavaScript
await fetch('http://localhost:4000/v1/auth/sessions', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/auth/sessions')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/sessions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/auth/sessions", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/auth/sessions/{id}Revoke a specific session by id.
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/sessions/{id}'JavaScript
await fetch('http://localhost:4000/v1/auth/sessions/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/auth/sessions/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/sessions/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/auth/sessions/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/sessions/revoke-allRevoke all sessions except the current one (log out everywhere).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/sessions/revoke-all'
JavaScript
await fetch('http://localhost:4000/v1/auth/sessions/revoke-all', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/sessions/revoke-all')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/sessions/revoke-all');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/sessions/revoke-all", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/totp/enrollBegin TOTP enrollment. Returns a provisioning URI for authenticator apps.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/totp/enroll'
JavaScript
await fetch('http://localhost:4000/v1/auth/totp/enroll', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/totp/enroll')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/totp/enroll');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/totp/enroll", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/totp/verifyConfirm TOTP enrollment by submitting a valid code.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "code": "string" }' 'http://localhost:4000/v1/auth/totp/verify'JavaScript
await fetch('http://localhost:4000/v1/auth/totp/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"code": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/totp/verify', json={
"code": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/totp/verify');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"code": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/totp/verify", bytes.NewReader([]byte(`{
"code": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()integrations
GET/v1/integrations/configs
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/integrations/configs'
JavaScript
await fetch('http://localhost:4000/v1/integrations/configs', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/integrations/configs')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/integrations/configs');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/integrations/configs", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/integrations/configsCreate or update the (tenant, platform) connector config.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "platform": "mt5", "label": "string", "endpoint": "string", "credentials": {}, "isActive": false }' 'http://localhost:4000/v1/integrations/configs'JavaScript
await fetch('http://localhost:4000/v1/integrations/configs', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"platform": "mt5",
"label": "string",
"endpoint": "string",
"credentials": {},
"isActive": false
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/integrations/configs', json={
"platform": "mt5",
"label": "string",
"endpoint": "string",
"credentials": {},
"isActive": false
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/integrations/configs');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"platform": "mt5",
"label": "string",
"endpoint": "string",
"credentials": {},
"isActive": false
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/integrations/configs", bytes.NewReader([]byte(`{
"platform": "mt5",
"label": "string",
"endpoint": "string",
"credentials": {},
"isActive": false
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/integrations/configs/{platform}/test
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/integrations/configs/{platform}/test'JavaScript
await fetch('http://localhost:4000/v1/integrations/configs/{platform}/test', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/integrations/configs/{platform}/test')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/integrations/configs/{platform}/test');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/integrations/configs/{platform}/test", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/integrations/positions
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/integrations/positions'
JavaScript
await fetch('http://localhost:4000/v1/integrations/positions', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/integrations/positions')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/integrations/positions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/integrations/positions", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/integrations/syncPull positions from every active connector for this tenant.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/integrations/sync'
JavaScript
await fetch('http://localhost:4000/v1/integrations/sync', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/integrations/sync')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/integrations/sync');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/integrations/sync", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()intelligence
GET/v1/intelligence/churn/at-riskTraders predicted likely to churn (weighted signal model).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/intelligence/churn/at-risk'
JavaScript
await fetch('http://localhost:4000/v1/intelligence/churn/at-risk', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/intelligence/churn/at-risk')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/intelligence/churn/at-risk');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/intelligence/churn/at-risk", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/intelligence/deposits/{id}/fraud-scoreDetailed fraud breakdown for one deposit.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/intelligence/deposits/{id}/fraud-score'JavaScript
await fetch('http://localhost:4000/v1/intelligence/deposits/{id}/fraud-score', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/intelligence/deposits/{id}/fraud-score')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/intelligence/deposits/{id}/fraud-score');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/intelligence/deposits/{id}/fraud-score", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/intelligence/fraud/depositsHigh-fraud-score deposits for admin review.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/intelligence/fraud/deposits'
JavaScript
await fetch('http://localhost:4000/v1/intelligence/fraud/deposits', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/intelligence/fraud/deposits')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/intelligence/fraud/deposits');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/intelligence/fraud/deposits", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/intelligence/fraud/rescanRe-scan recent deposits for fraud anomalies (normally runs per-deposit).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/intelligence/fraud/rescan'
JavaScript
await fetch('http://localhost:4000/v1/intelligence/fraud/rescan', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/intelligence/fraud/rescan')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/intelligence/fraud/rescan');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/intelligence/fraud/rescan", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/intelligence/leads/rescoreForce re-score all traders for this tenant (normally runs nightly).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/intelligence/leads/rescore'
JavaScript
await fetch('http://localhost:4000/v1/intelligence/leads/rescore', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/intelligence/leads/rescore')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/intelligence/leads/rescore');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/intelligence/leads/rescore", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/intelligence/leads/scoredTop-N scored leads + traders ready to convert. Score 0-100.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/intelligence/leads/scored'
JavaScript
await fetch('http://localhost:4000/v1/intelligence/leads/scored', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/intelligence/leads/scored')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/intelligence/leads/scored');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/intelligence/leads/scored", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/intelligence/next-actions/{userId}Best-next-action recommendations for a specific sales operator.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/intelligence/next-actions/{userId}'JavaScript
await fetch('http://localhost:4000/v1/intelligence/next-actions/{userId}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/intelligence/next-actions/{userId}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/intelligence/next-actions/{userId}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/intelligence/next-actions/{userId}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()kyc
POST/v1/kyc/approveApprove a trader KYC.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "notes": "string" }' 'http://localhost:4000/v1/kyc/approve'JavaScript
await fetch('http://localhost:4000/v1/kyc/approve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/approve', json={
"traderId": "string",
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/approve');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/approve", bytes.NewReader([]byte(`{
"traderId": "string",
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/documents/{id}/livenessK5: Submit liveness-check score (client-side blink/head-turn detection result).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/kyc/documents/{id}/liveness'JavaScript
await fetch('http://localhost:4000/v1/kyc/documents/{id}/liveness', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/documents/{id}/liveness')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/documents/{id}/liveness');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/documents/{id}/liveness", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/kyc/pendingList traders waiting for KYC review.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/kyc/pending'
JavaScript
await fetch('http://localhost:4000/v1/kyc/pending', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/kyc/pending')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/pending');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/kyc/pending", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/rejectReject a trader KYC with a reason.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "reason": "string" }' 'http://localhost:4000/v1/kyc/reject'JavaScript
await fetch('http://localhost:4000/v1/kyc/reject', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"reason": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/reject', json={
"traderId": "string",
"reason": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/reject');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"reason": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/reject", bytes.NewReader([]byte(`{
"traderId": "string",
"reason": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/request-more-infoAsk the trader for extra documents; moves KYC back to in_progress.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "notes": "string" }' 'http://localhost:4000/v1/kyc/request-more-info'JavaScript
await fetch('http://localhost:4000/v1/kyc/request-more-info', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/request-more-info', json={
"traderId": "string",
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/request-more-info');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/request-more-info", bytes.NewReader([]byte(`{
"traderId": "string",
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/sanctions/{hitId}/reviewMark a sanctions hit as cleared (false positive) or confirmed (true match).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/kyc/sanctions/{hitId}/review'JavaScript
await fetch('http://localhost:4000/v1/kyc/sanctions/{hitId}/review', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/sanctions/{hitId}/review')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/sanctions/{hitId}/review');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/sanctions/{hitId}/review", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/submitSubmit a trader for KYC review. Also triggers sanctions screening.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string" }' 'http://localhost:4000/v1/kyc/submit'JavaScript
await fetch('http://localhost:4000/v1/kyc/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/submit', json={
"traderId": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/submit');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/submit", bytes.NewReader([]byte(`{
"traderId": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/kyc/traders/{traderId}KYC summary: status + documents (with presigned preview URLs + analysis) + sanctions hits.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/kyc/traders/{traderId}'JavaScript
await fetch('http://localhost:4000/v1/kyc/traders/{traderId}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/kyc/traders/{traderId}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/traders/{traderId}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/kyc/traders/{traderId}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/uploadsRequest a presigned upload URL for a KYC document.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "kind": "passport", "contentType": "string", "fileSize": 0 }' 'http://localhost:4000/v1/kyc/uploads'JavaScript
await fetch('http://localhost:4000/v1/kyc/uploads', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"kind": "passport",
"contentType": "string",
"fileSize": 0
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/uploads', json={
"traderId": "string",
"kind": "passport",
"contentType": "string",
"fileSize": 0
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/uploads');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"kind": "passport",
"contentType": "string",
"fileSize": 0
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/uploads", bytes.NewReader([]byte(`{
"traderId": "string",
"kind": "passport",
"contentType": "string",
"fileSize": 0
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/uploads/confirmMark a KYC document as uploaded and enqueue it for analysis.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "documentId": "string" }' 'http://localhost:4000/v1/kyc/uploads/confirm'JavaScript
await fetch('http://localhost:4000/v1/kyc/uploads/confirm', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"documentId": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/uploads/confirm', json={
"documentId": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/uploads/confirm');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"documentId": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/uploads/confirm", bytes.NewReader([]byte(`{
"documentId": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/kyc/webhooks/sumsubSumsub event webhook (HMAC-verified when SUMSUB_WEBHOOK_SECRET set).
curl
curl -X POST 'http://localhost:4000/v1/kyc/webhooks/sumsub'
JavaScript
await fetch('http://localhost:4000/v1/kyc/webhooks/sumsub', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/kyc/webhooks/sumsub')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/kyc/webhooks/sumsub');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/kyc/webhooks/sumsub", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()meta
GET/v1/_meta/changelogFull /v1 contract changelog (newest first).
curl
curl -X GET 'http://localhost:4000/v1/_meta/changelog'
JavaScript
await fetch('http://localhost:4000/v1/_meta/changelog', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/_meta/changelog')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/_meta/changelog');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/_meta/changelog", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/_meta/versionReturn the frozen public-API contract version + last changelog entry.
curl
curl -X GET 'http://localhost:4000/v1/_meta/version'
JavaScript
await fetch('http://localhost:4000/v1/_meta/version', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/_meta/version')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/_meta/version');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/_meta/version", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()payments
GET/v1/payments/deposits
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/deposits'
JavaScript
await fetch('http://localhost:4000/v1/payments/deposits', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/deposits')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/deposits", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/deposits
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "accountId": "string", "paymentMethodId": "string", "kind": "card", "amount": "string", "currency": "string", "externalId": "string", "metadata": {} }' 'http://localhost:4000/v1/payments/deposits'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"externalId": "string",
"metadata": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/deposits', json={
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"externalId": "string",
"metadata": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"externalId": "string",
"metadata": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/deposits", bytes.NewReader([]byte(`{
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"externalId": "string",
"metadata": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/payments/deposits/{id}/invoice.pdfM5: Invoice PDF for a settled deposit. Uses pdfkit for tables + branding.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/deposits/{id}/invoice.pdf'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/{id}/invoice.pdf', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/deposits/{id}/invoice.pdf')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/{id}/invoice.pdf');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/deposits/{id}/invoice.pdf", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/deposits/approveApprove a deposit awaiting review.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "notes": "string" }' 'http://localhost:4000/v1/payments/deposits/approve'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/approve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/deposits/approve', json={
"id": "string",
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/approve');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/deposits/approve", bytes.NewReader([]byte(`{
"id": "string",
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/deposits/bulk-approveApprove up to 50 deposits in one call.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "ids": [ "string" ], "notes": "string" }' 'http://localhost:4000/v1/payments/deposits/bulk-approve'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/bulk-approve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"ids": [
"string"
],
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/deposits/bulk-approve', json={
"ids": [
"string"
],
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/bulk-approve');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"ids": [
"string"
],
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/deposits/bulk-approve", bytes.NewReader([]byte(`{
"ids": [
"string"
],
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/payments/deposits/export.csvExport deposits to CSV (filters match GET /deposits). Max 10,000 rows.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/deposits/export.csv'
JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/export.csv', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/deposits/export.csv')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/export.csv');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/deposits/export.csv", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/deposits/reconcileFlag a deposit as reconciled / un-reconciled against external statements.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "reconciled": false, "notes": "string" }' 'http://localhost:4000/v1/payments/deposits/reconcile'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/reconcile', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"reconciled": false,
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/deposits/reconcile', json={
"id": "string",
"reconciled": false,
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/reconcile');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"reconciled": false,
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/deposits/reconcile", bytes.NewReader([]byte(`{
"id": "string",
"reconciled": false,
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/deposits/reject
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "reason": "string" }' 'http://localhost:4000/v1/payments/deposits/reject'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/reject', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"reason": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/deposits/reject', json={
"id": "string",
"reason": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/reject');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"reason": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/deposits/reject", bytes.NewReader([]byte(`{
"id": "string",
"reason": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/deposits/reverseReverse a settled deposit (chargeback, NSF wire, fraud). Flips commissions to reversed.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "reason": "string" }' 'http://localhost:4000/v1/payments/deposits/reverse'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/reverse', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"reason": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/deposits/reverse', json={
"id": "string",
"reason": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/reverse');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"reason": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/deposits/reverse", bytes.NewReader([]byte(`{
"id": "string",
"reason": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/deposits/settleManually settle an approved deposit with optional fee/net/settle-date/proof.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "feeAmount": "string", "netAmount": "string", "settledAt": "2026-04-19T01:51:33.115Z", "externalId": "string", "proofUrl": "https://example.com", "notes": "string" }' 'http://localhost:4000/v1/payments/deposits/settle'JavaScript
await fetch('http://localhost:4000/v1/payments/deposits/settle', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/deposits/settle', json={
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/deposits/settle');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/deposits/settle", bytes.NewReader([]byte(`{
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/payments/methods
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/methods'
JavaScript
await fetch('http://localhost:4000/v1/payments/methods', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/methods')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/methods');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/methods", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/methods
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "kind": "card", "label": "string", "externalRef": "string", "currency": "string", "network": "string", "metadata": {}, "isDefault": false }' 'http://localhost:4000/v1/payments/methods'JavaScript
await fetch('http://localhost:4000/v1/payments/methods', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"kind": "card",
"label": "string",
"externalRef": "string",
"currency": "string",
"network": "string",
"metadata": {},
"isDefault": false
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/methods', json={
"traderId": "string",
"kind": "card",
"label": "string",
"externalRef": "string",
"currency": "string",
"network": "string",
"metadata": {},
"isDefault": false
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/methods');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"kind": "card",
"label": "string",
"externalRef": "string",
"currency": "string",
"network": "string",
"metadata": {},
"isDefault": false
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/methods", bytes.NewReader([]byte(`{
"traderId": "string",
"kind": "card",
"label": "string",
"externalRef": "string",
"currency": "string",
"network": "string",
"metadata": {},
"isDefault": false
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/payments/reconciliation
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/reconciliation'
JavaScript
await fetch('http://localhost:4000/v1/payments/reconciliation', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/reconciliation')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/reconciliation');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/reconciliation", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/payments/traders/{traderId}/statement.pdfP4: Monthly statement PDF for a trader. Multi-table pdfkit layout.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/traders/{traderId}/statement.pdf'JavaScript
await fetch('http://localhost:4000/v1/payments/traders/{traderId}/statement.pdf', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/traders/{traderId}/statement.pdf')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/traders/{traderId}/statement.pdf');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/traders/{traderId}/statement.pdf", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/webhooks/stripeStripe webhook receiver (signature-verified).
curl
curl -X POST 'http://localhost:4000/v1/payments/webhooks/stripe'
JavaScript
await fetch('http://localhost:4000/v1/payments/webhooks/stripe', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/webhooks/stripe')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/webhooks/stripe');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/webhooks/stripe", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/payments/withdrawals
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/withdrawals'
JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/withdrawals')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/withdrawals", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/withdrawals
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "accountId": "string", "paymentMethodId": "string", "kind": "card", "amount": "string", "currency": "string", "destinationRef": "string", "metadata": {} }' 'http://localhost:4000/v1/payments/withdrawals'JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"destinationRef": "string",
"metadata": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/withdrawals', json={
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"destinationRef": "string",
"metadata": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"destinationRef": "string",
"metadata": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/withdrawals", bytes.NewReader([]byte(`{
"traderId": "string",
"accountId": "string",
"paymentMethodId": "string",
"kind": "card",
"amount": "string",
"currency": "string",
"destinationRef": "string",
"metadata": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/withdrawals/approve
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "notes": "string" }' 'http://localhost:4000/v1/payments/withdrawals/approve'JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals/approve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/withdrawals/approve', json={
"id": "string",
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals/approve');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/withdrawals/approve", bytes.NewReader([]byte(`{
"id": "string",
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/withdrawals/bulk-approveApprove up to 50 withdrawals in one call.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "ids": [ "string" ], "notes": "string" }' 'http://localhost:4000/v1/payments/withdrawals/bulk-approve'JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals/bulk-approve', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"ids": [
"string"
],
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/withdrawals/bulk-approve', json={
"ids": [
"string"
],
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals/bulk-approve');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"ids": [
"string"
],
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/withdrawals/bulk-approve", bytes.NewReader([]byte(`{
"ids": [
"string"
],
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/payments/withdrawals/export.csvExport withdrawals to CSV (filters match GET /withdrawals). Max 10,000 rows.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/payments/withdrawals/export.csv'
JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals/export.csv', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/payments/withdrawals/export.csv')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals/export.csv');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/payments/withdrawals/export.csv", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/withdrawals/reconcileFlag a withdrawal as reconciled / un-reconciled against external statements.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "reconciled": false, "notes": "string" }' 'http://localhost:4000/v1/payments/withdrawals/reconcile'JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals/reconcile', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"reconciled": false,
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/withdrawals/reconcile', json={
"id": "string",
"reconciled": false,
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals/reconcile');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"reconciled": false,
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/withdrawals/reconcile", bytes.NewReader([]byte(`{
"id": "string",
"reconciled": false,
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/withdrawals/reject
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "reason": "string" }' 'http://localhost:4000/v1/payments/withdrawals/reject'JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals/reject', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"reason": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/withdrawals/reject', json={
"id": "string",
"reason": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals/reject');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"reason": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/withdrawals/reject", bytes.NewReader([]byte(`{
"id": "string",
"reason": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/payments/withdrawals/settleMark an approved withdrawal as settled with optional settle-date / proof.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "id": "string", "feeAmount": "string", "netAmount": "string", "settledAt": "2026-04-19T01:51:33.115Z", "externalId": "string", "proofUrl": "https://example.com", "notes": "string" }' 'http://localhost:4000/v1/payments/withdrawals/settle'JavaScript
await fetch('http://localhost:4000/v1/payments/withdrawals/settle', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/payments/withdrawals/settle', json={
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/payments/withdrawals/settle');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/payments/withdrawals/settle", bytes.NewReader([]byte(`{
"id": "string",
"feeAmount": "string",
"netAmount": "string",
"settledAt": "2026-04-19T01:51:33.115Z",
"externalId": "string",
"proofUrl": "https://example.com",
"notes": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()reporting
GET/v1/reporting/activity-by-day
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/reporting/activity-by-day'
JavaScript
await fetch('http://localhost:4000/v1/reporting/activity-by-day', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/reporting/activity-by-day')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/reporting/activity-by-day');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/reporting/activity-by-day", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/reporting/overviewKPI overview for the admin dashboard.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/reporting/overview'
JavaScript
await fetch('http://localhost:4000/v1/reporting/overview', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/reporting/overview')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/reporting/overview');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/reporting/overview", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/reporting/saved
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/reporting/saved'
JavaScript
await fetch('http://localhost:4000/v1/reporting/saved', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/reporting/saved')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/reporting/saved');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/reporting/saved", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/reporting/saved
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "slug": "string", "name": "string", "kind": "deposits", "query": {}, "schedule": "string" }' 'http://localhost:4000/v1/reporting/saved'JavaScript
await fetch('http://localhost:4000/v1/reporting/saved', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"slug": "string",
"name": "string",
"kind": "deposits",
"query": {},
"schedule": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/reporting/saved', json={
"slug": "string",
"name": "string",
"kind": "deposits",
"query": {},
"schedule": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/reporting/saved');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"slug": "string",
"name": "string",
"kind": "deposits",
"query": {},
"schedule": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/reporting/saved", bytes.NewReader([]byte(`{
"slug": "string",
"name": "string",
"kind": "deposits",
"query": {},
"schedule": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/reporting/saved/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/reporting/saved/{id}'JavaScript
await fetch('http://localhost:4000/v1/reporting/saved/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/reporting/saved/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/reporting/saved/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/reporting/saved/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/reporting/saved/{id}/run
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/reporting/saved/{id}/run'JavaScript
await fetch('http://localhost:4000/v1/reporting/saved/{id}/run', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/reporting/saved/{id}/run')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/reporting/saved/{id}/run');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/reporting/saved/{id}/run", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()risk-rules
GET/v1/risk-rules
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/risk-rules'
JavaScript
await fetch('http://localhost:4000/v1/risk-rules', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/risk-rules')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/risk-rules');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/risk-rules", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/risk-rules
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "name": "string", "match": {}, "routing": "string", "priority": 0, "isActive": true }' 'http://localhost:4000/v1/risk-rules'JavaScript
await fetch('http://localhost:4000/v1/risk-rules', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/risk-rules', json={
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/risk-rules');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/risk-rules", bytes.NewReader([]byte(`{
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/risk-rules/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/risk-rules/{id}'JavaScript
await fetch('http://localhost:4000/v1/risk-rules/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/risk-rules/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/risk-rules/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/risk-rules/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/risk-rules/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "name": "string", "match": {}, "routing": "string", "priority": 0, "isActive": true }' 'http://localhost:4000/v1/risk-rules/{id}'JavaScript
await fetch('http://localhost:4000/v1/risk-rules/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/risk-rules/{id}', json={
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/risk-rules/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/risk-rules/{id}", bytes.NewReader([]byte(`{
"name": "string",
"match": {},
"routing": "string",
"priority": 0,
"isActive": true
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/risk-rules/{id}/dry-runDry-run a rule against a hypothetical context — returns whether it would fire and which routing it would emit.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "trader_country": "string", "account_balance": 0, "account_leverage": 0, "deposit_total_lifetime": 0, "position_volume": 0, "position_symbol": "string", "position_profit": 0, "is_demo": false }' 'http://localhost:4000/v1/risk-rules/{id}/dry-run'JavaScript
await fetch('http://localhost:4000/v1/risk-rules/{id}/dry-run', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"trader_country": "string",
"account_balance": 0,
"account_leverage": 0,
"deposit_total_lifetime": 0,
"position_volume": 0,
"position_symbol": "string",
"position_profit": 0,
"is_demo": false
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/risk-rules/{id}/dry-run', json={
"trader_country": "string",
"account_balance": 0,
"account_leverage": 0,
"deposit_total_lifetime": 0,
"position_volume": 0,
"position_symbol": "string",
"position_profit": 0,
"is_demo": false
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/risk-rules/{id}/dry-run');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"trader_country": "string",
"account_balance": 0,
"account_leverage": 0,
"deposit_total_lifetime": 0,
"position_volume": 0,
"position_symbol": "string",
"position_profit": 0,
"is_demo": false
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/risk-rules/{id}/dry-run", bytes.NewReader([]byte(`{
"trader_country": "string",
"account_balance": 0,
"account_leverage": 0,
"deposit_total_lifetime": 0,
"position_volume": 0,
"position_symbol": "string",
"position_profit": 0,
"is_demo": false
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/risk-rules/classify-accountsRe-evaluate every active trading account and persist the routing decision.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/risk-rules/classify-accounts'
JavaScript
await fetch('http://localhost:4000/v1/risk-rules/classify-accounts', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/risk-rules/classify-accounts')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/risk-rules/classify-accounts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/risk-rules/classify-accounts", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/risk-rules/statsRouting breakdown across the tenants trading accounts (after the most recent classify run).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/risk-rules/stats'
JavaScript
await fetch('http://localhost:4000/v1/risk-rules/stats', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/risk-rules/stats')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/risk-rules/stats');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/risk-rules/stats", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()sales
GET/v1/sales/activities
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/sales/activities'
JavaScript
await fetch('http://localhost:4000/v1/sales/activities', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/sales/activities')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/activities');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/sales/activities", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/sales/activities
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "leadId": "string", "traderId": "string", "kind": "note", "subject": "string", "body": "string", "occurredAt": "2026-04-19T01:51:33.115Z" }' 'http://localhost:4000/v1/sales/activities'JavaScript
await fetch('http://localhost:4000/v1/sales/activities', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"leadId": "string",
"traderId": "string",
"kind": "note",
"subject": "string",
"body": "string",
"occurredAt": "2026-04-19T01:51:33.115Z"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/sales/activities', json={
"leadId": "string",
"traderId": "string",
"kind": "note",
"subject": "string",
"body": "string",
"occurredAt": "2026-04-19T01:51:33.115Z"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/activities');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"leadId": "string",
"traderId": "string",
"kind": "note",
"subject": "string",
"body": "string",
"occurredAt": "2026-04-19T01:51:33.115Z"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/sales/activities", bytes.NewReader([]byte(`{
"leadId": "string",
"traderId": "string",
"kind": "note",
"subject": "string",
"body": "string",
"occurredAt": "2026-04-19T01:51:33.115Z"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/sales/leads
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/sales/leads'
JavaScript
await fetch('http://localhost:4000/v1/sales/leads', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/sales/leads')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/leads');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/sales/leads", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/sales/leads
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "email": "user@example.com", "phone": "string", "firstName": "string", "lastName": "string", "country": "string", "source": "string", "assignedToId": "string", "score": 0, "metadata": {} }' 'http://localhost:4000/v1/sales/leads'JavaScript
await fetch('http://localhost:4000/v1/sales/leads', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/sales/leads', json={
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/leads');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/sales/leads", bytes.NewReader([]byte(`{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/sales/leads/{id}
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/sales/leads/{id}'JavaScript
await fetch('http://localhost:4000/v1/sales/leads/{id}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/sales/leads/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/leads/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/sales/leads/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/sales/leads/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "email": "user@example.com", "phone": "string", "firstName": "string", "lastName": "string", "country": "string", "source": "string", "assignedToId": "string", "score": 0, "metadata": {}, "status": "new", "pipelineStageId": "string" }' 'http://localhost:4000/v1/sales/leads/{id}'JavaScript
await fetch('http://localhost:4000/v1/sales/leads/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {},
"status": "new",
"pipelineStageId": "string"
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/sales/leads/{id}', json={
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {},
"status": "new",
"pipelineStageId": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/leads/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {},
"status": "new",
"pipelineStageId": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/sales/leads/{id}", bytes.NewReader([]byte(`{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"source": "string",
"assignedToId": "string",
"score": 0,
"metadata": {},
"status": "new",
"pipelineStageId": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/sales/leads/{id}/convertConvert a lead to a trader.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/sales/leads/{id}/convert'JavaScript
await fetch('http://localhost:4000/v1/sales/leads/{id}/convert', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/sales/leads/{id}/convert')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/leads/{id}/convert');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/sales/leads/{id}/convert", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/sales/pipelines
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/sales/pipelines'
JavaScript
await fetch('http://localhost:4000/v1/sales/pipelines', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/sales/pipelines')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/pipelines');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/sales/pipelines", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/sales/pipelines
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "slug": "string", "name": "string", "isDefault": false, "stages": [ { "name": "string", "position": 0, "probability": 0 } ] }' 'http://localhost:4000/v1/sales/pipelines'JavaScript
await fetch('http://localhost:4000/v1/sales/pipelines', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"slug": "string",
"name": "string",
"isDefault": false,
"stages": [
{
"name": "string",
"position": 0,
"probability": 0
}
]
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/sales/pipelines', json={
"slug": "string",
"name": "string",
"isDefault": false,
"stages": [
{
"name": "string",
"position": 0,
"probability": 0
}
]
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/sales/pipelines');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"slug": "string",
"name": "string",
"isDefault": false,
"stages": [
{
"name": "string",
"position": 0,
"probability": 0
}
]
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/sales/pipelines", bytes.NewReader([]byte(`{
"slug": "string",
"name": "string",
"isDefault": false,
"stages": [
{
"name": "string",
"position": 0,
"probability": 0
}
]
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()search
GET/v1/search
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/search'
JavaScript
await fetch('http://localhost:4000/v1/search', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/search')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/search');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/search", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()support
GET/v1/support/tickets
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/support/tickets'
JavaScript
await fetch('http://localhost:4000/v1/support/tickets', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/support/tickets')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/support/tickets');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/support/tickets", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/support/tickets
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "subject": "string", "body": "string", "priority": "normal", "traderId": "string" }' 'http://localhost:4000/v1/support/tickets'JavaScript
await fetch('http://localhost:4000/v1/support/tickets', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"subject": "string",
"body": "string",
"priority": "normal",
"traderId": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/support/tickets', json={
"subject": "string",
"body": "string",
"priority": "normal",
"traderId": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/support/tickets');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"subject": "string",
"body": "string",
"priority": "normal",
"traderId": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/support/tickets", bytes.NewReader([]byte(`{
"subject": "string",
"body": "string",
"priority": "normal",
"traderId": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/support/tickets/{id}
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/support/tickets/{id}'JavaScript
await fetch('http://localhost:4000/v1/support/tickets/{id}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/support/tickets/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/support/tickets/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/support/tickets/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/support/tickets/{id}
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "status": "open", "priority": "low", "assignedToId": "string" }' 'http://localhost:4000/v1/support/tickets/{id}'JavaScript
await fetch('http://localhost:4000/v1/support/tickets/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"status": "open",
"priority": "low",
"assignedToId": "string"
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/support/tickets/{id}', json={
"status": "open",
"priority": "low",
"assignedToId": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/support/tickets/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"status": "open",
"priority": "low",
"assignedToId": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/support/tickets/{id}", bytes.NewReader([]byte(`{
"status": "open",
"priority": "low",
"assignedToId": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/support/tickets/{id}/reply
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "body": "string" }' 'http://localhost:4000/v1/support/tickets/{id}/reply'JavaScript
await fetch('http://localhost:4000/v1/support/tickets/{id}/reply', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"body": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/support/tickets/{id}/reply', json={
"body": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/support/tickets/{id}/reply');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"body": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/support/tickets/{id}/reply", bytes.NewReader([]byte(`{
"body": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()traders
GET/v1/tradersList traders for the current tenant (cursor-paginated).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders'
JavaScript
await fetch('http://localhost:4000/v1/traders', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/tradersCreate a new trader in the current tenant.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "email": "user@example.com", "phone": "string", "firstName": "string", "lastName": "string", "country": "string", "dateOfBirth": "string", "segments": [ "string" ], "source": "string", "assignedToId": "string", "metadata": {} }' 'http://localhost:4000/v1/traders'JavaScript
await fetch('http://localhost:4000/v1/traders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/traders', json={
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/traders", bytes.NewReader([]byte(`{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/traders/{id}Soft-delete a trader.
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/{id}'JavaScript
await fetch('http://localhost:4000/v1/traders/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/traders/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/traders/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/{id}Get a trader by id.
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/{id}'JavaScript
await fetch('http://localhost:4000/v1/traders/{id}', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/traders/{id}Update trader fields (partial).
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "email": "user@example.com", "phone": "string", "firstName": "string", "lastName": "string", "country": "string", "dateOfBirth": "string", "segments": [ "string" ], "source": "string", "assignedToId": "string", "metadata": {}, "kycStatus": "not_started" }' 'http://localhost:4000/v1/traders/{id}'JavaScript
await fetch('http://localhost:4000/v1/traders/{id}', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {},
"kycStatus": "not_started"
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/traders/{id}', json={
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {},
"kycStatus": "not_started"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {},
"kycStatus": "not_started"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/traders/{id}", bytes.NewReader([]byte(`{
"email": "user@example.com",
"phone": "string",
"firstName": "string",
"lastName": "string",
"country": "string",
"dateOfBirth": "string",
"segments": [
"string"
],
"source": "string",
"assignedToId": "string",
"metadata": {},
"kycStatus": "not_started"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/traders/{id}/segmentsAdd / remove segment tags on a trader.
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "add": [ "string" ], "remove": [ "string" ] }' 'http://localhost:4000/v1/traders/{id}/segments'JavaScript
await fetch('http://localhost:4000/v1/traders/{id}/segments', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"add": [
"string"
],
"remove": [
"string"
]
}),
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/traders/{id}/segments', json={
"add": [
"string"
],
"remove": [
"string"
]
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/{id}/segments');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"add": [
"string"
],
"remove": [
"string"
]
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/traders/{id}/segments", bytes.NewReader([]byte(`{
"add": [
"string"
],
"remove": [
"string"
]
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/meReturn the trader row linked to the current session user (portal).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me'
JavaScript
await fetch('http://localhost:4000/v1/traders/me', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/traders/me/accept-termsTrader confirms they have read the current terms/privacy policy (portal).
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/accept-terms'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/accept-terms', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/traders/me/accept-terms')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/accept-terms');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/traders/me/accept-terms", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/accounts
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/accounts'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/accounts', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/accounts')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/accounts');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/accounts", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/traders/me/accounts/{id}/auto-login
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/accounts/{id}/auto-login'JavaScript
await fetch('http://localhost:4000/v1/traders/me/accounts/{id}/auto-login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/traders/me/accounts/{id}/auto-login')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/accounts/{id}/auto-login');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/traders/me/accounts/{id}/auto-login", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/export
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/export'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/export', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/export')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/export');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/export", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/notifications
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/notifications'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/notifications', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/notifications')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/notifications');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/notifications", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/positions
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/positions'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/positions', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/positions')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/positions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/positions", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()PATCH/v1/traders/me/profileTrader self-service profile edit (P3). Limited fields + re-trigger KYC on sensitive change.
curl
curl -X PATCH --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/profile'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/profile', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.patch('http://localhost:4000/v1/traders/me/profile')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/profile');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("PATCH", "http://localhost:4000/v1/traders/me/profile", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/referrals
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/referrals'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/referrals', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/referrals')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/referrals');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/referrals", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/timelineTrader activity timeline: deposits + kyc + tickets + logins merged (P2).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/timeline'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/timeline', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/timeline')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/timeline');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/timeline", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/transactions
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/transactions'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/transactions', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/transactions')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/transactions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/transactions", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/traders/me/withdrawal-allowlistTrader crypto withdrawal address allowlist (P6).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/withdrawal-allowlist'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/withdrawal-allowlist', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/traders/me/withdrawal-allowlist')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/withdrawal-allowlist');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/traders/me/withdrawal-allowlist", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/traders/me/withdrawal-allowlistAppend an address to the allowlist (P6). Locks for 24h then becomes active.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/traders/me/withdrawal-allowlist'
JavaScript
await fetch('http://localhost:4000/v1/traders/me/withdrawal-allowlist', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/traders/me/withdrawal-allowlist')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/traders/me/withdrawal-allowlist');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/traders/me/withdrawal-allowlist", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()transactions
GET/v1/transactionsList transactions with filters (cursor-paginated).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/transactions'
JavaScript
await fetch('http://localhost:4000/v1/transactions', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/transactions')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/transactions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/transactions", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/transactionsRecord a transaction.
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "traderId": "string", "accountId": "string", "kind": "deposit", "status": "pending", "amount": "string", "currency": "string", "reference": "string", "description": "string", "externalId": "string", "occurredAt": "2026-04-19T01:51:33.114Z", "metadata": {} }' 'http://localhost:4000/v1/transactions'JavaScript
await fetch('http://localhost:4000/v1/transactions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"traderId": "string",
"accountId": "string",
"kind": "deposit",
"status": "pending",
"amount": "string",
"currency": "string",
"reference": "string",
"description": "string",
"externalId": "string",
"occurredAt": "2026-04-19T01:51:33.114Z",
"metadata": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/transactions', json={
"traderId": "string",
"accountId": "string",
"kind": "deposit",
"status": "pending",
"amount": "string",
"currency": "string",
"reference": "string",
"description": "string",
"externalId": "string",
"occurredAt": "2026-04-19T01:51:33.114Z",
"metadata": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/transactions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"traderId": "string",
"accountId": "string",
"kind": "deposit",
"status": "pending",
"amount": "string",
"currency": "string",
"reference": "string",
"description": "string",
"externalId": "string",
"occurredAt": "2026-04-19T01:51:33.114Z",
"metadata": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/transactions", bytes.NewReader([]byte(`{
"traderId": "string",
"accountId": "string",
"kind": "deposit",
"status": "pending",
"amount": "string",
"currency": "string",
"reference": "string",
"description": "string",
"externalId": "string",
"occurredAt": "2026-04-19T01:51:33.114Z",
"metadata": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/transactions/export.csvExport filtered transactions as CSV (max 10k rows).
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/transactions/export.csv'
JavaScript
await fetch('http://localhost:4000/v1/transactions/export.csv', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/transactions/export.csv')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/transactions/export.csv');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/transactions/export.csv", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()webauthn
GET/v1/auth/passkeys
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/passkeys'
JavaScript
await fetch('http://localhost:4000/v1/auth/passkeys', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/auth/passkeys')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/passkeys');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/auth/passkeys", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/auth/passkeys/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/auth/passkeys/{id}'JavaScript
await fetch('http://localhost:4000/v1/auth/passkeys/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/auth/passkeys/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/passkeys/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/auth/passkeys/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/passkeys/authenticate/finishComplete passkey login — verifies the assertion + mints a session cookie identical to /auth/login.
curl
curl -X POST -H 'Content-Type: application/json' -d '{ "response": {} }' 'http://localhost:4000/v1/auth/passkeys/authenticate/finish'JavaScript
await fetch('http://localhost:4000/v1/auth/passkeys/authenticate/finish', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"response": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/passkeys/authenticate/finish', json={
"response": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/passkeys/authenticate/finish');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"response": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/passkeys/authenticate/finish", bytes.NewReader([]byte(`{
"response": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/passkeys/authenticate/startBegin passkey login — returns the challenge options the browser passes to navigator.credentials.get().
curl
curl -X POST -H 'Content-Type: application/json' -d '{ "email": "user@example.com" }' 'http://localhost:4000/v1/auth/passkeys/authenticate/start'JavaScript
await fetch('http://localhost:4000/v1/auth/passkeys/authenticate/start', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"email": "user@example.com"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/passkeys/authenticate/start', json={
"email": "user@example.com"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/passkeys/authenticate/start');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"email": "user@example.com"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/passkeys/authenticate/start", bytes.NewReader([]byte(`{
"email": "user@example.com"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/passkeys/register/finish
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "label": "string", "response": {} }' 'http://localhost:4000/v1/auth/passkeys/register/finish'JavaScript
await fetch('http://localhost:4000/v1/auth/passkeys/register/finish', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"label": "string",
"response": {}
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/passkeys/register/finish', json={
"label": "string",
"response": {}
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/passkeys/register/finish');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"label": "string",
"response": {}
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/passkeys/register/finish", bytes.NewReader([]byte(`{
"label": "string",
"response": {}
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/auth/passkeys/register/start
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "label": "string" }' 'http://localhost:4000/v1/auth/passkeys/register/start'JavaScript
await fetch('http://localhost:4000/v1/auth/passkeys/register/start', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"label": "string"
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/auth/passkeys/register/start', json={
"label": "string"
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/auth/passkeys/register/start');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"label": "string"
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/auth/passkeys/register/start", bytes.NewReader([]byte(`{
"label": "string"
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()webhooks
GET/v1/webhooks/deliveries
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/webhooks/deliveries'
JavaScript
await fetch('http://localhost:4000/v1/webhooks/deliveries', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/webhooks/deliveries')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/webhooks/deliveries');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/webhooks/deliveries", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/webhooks/deliveries/{id}/retry
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/webhooks/deliveries/{id}/retry'JavaScript
await fetch('http://localhost:4000/v1/webhooks/deliveries/{id}/retry', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/webhooks/deliveries/{id}/retry')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/webhooks/deliveries/{id}/retry');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/webhooks/deliveries/{id}/retry", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/webhooks/subscriptions
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/webhooks/subscriptions'
JavaScript
await fetch('http://localhost:4000/v1/webhooks/subscriptions', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/webhooks/subscriptions')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/webhooks/subscriptions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/webhooks/subscriptions", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/webhooks/subscriptions
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "url": "https://example.com", "events": [ "string" ] }' 'http://localhost:4000/v1/webhooks/subscriptions'JavaScript
await fetch('http://localhost:4000/v1/webhooks/subscriptions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"url": "https://example.com",
"events": [
"string"
]
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/webhooks/subscriptions', json={
"url": "https://example.com",
"events": [
"string"
]
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/webhooks/subscriptions');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"url": "https://example.com",
"events": [
"string"
]
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/webhooks/subscriptions", bytes.NewReader([]byte(`{
"url": "https://example.com",
"events": [
"string"
]
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/webhooks/subscriptions/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/webhooks/subscriptions/{id}'JavaScript
await fetch('http://localhost:4000/v1/webhooks/subscriptions/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/webhooks/subscriptions/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/webhooks/subscriptions/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/webhooks/subscriptions/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/webhooks/subscriptions/{id}/test
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/webhooks/subscriptions/{id}/test'JavaScript
await fetch('http://localhost:4000/v1/webhooks/subscriptions/{id}/test', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/webhooks/subscriptions/{id}/test')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/webhooks/subscriptions/{id}/test');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/webhooks/subscriptions/{id}/test", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()workflows
GET/v1/workflows
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/workflows'
JavaScript
await fetch('http://localhost:4000/v1/workflows', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/workflows')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/workflows');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/workflows", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()POST/v1/workflows
curl
curl -X POST --cookie 'lumirecrm_session=REPLACE_ME' -H 'Content-Type: application/json' -d '{ "name": "string", "triggerType": "string", "condition": {}, "actions": [ {} ], "isActive": false }' 'http://localhost:4000/v1/workflows'JavaScript
await fetch('http://localhost:4000/v1/workflows', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"triggerType": "string",
"condition": {},
"actions": [
{}
],
"isActive": false
}),
});Python
import httpx
resp = httpx.post('http://localhost:4000/v1/workflows', json={
"name": "string",
"triggerType": "string",
"condition": {},
"actions": [
{}
],
"isActive": false
})
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/workflows');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"name": "string",
"triggerType": "string",
"condition": {},
"actions": [
{}
],
"isActive": false
}');
echo curl_exec($ch);Go
req, _ := http.NewRequest("POST", "http://localhost:4000/v1/workflows", bytes.NewReader([]byte(`{
"name": "string",
"triggerType": "string",
"condition": {},
"actions": [
{}
],
"isActive": false
}`)))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()DELETE/v1/workflows/{id}
curl
curl -X DELETE --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/workflows/{id}'JavaScript
await fetch('http://localhost:4000/v1/workflows/{id}', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.delete('http://localhost:4000/v1/workflows/{id}')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/workflows/{id}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("DELETE", "http://localhost:4000/v1/workflows/{id}", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()GET/v1/workflows/{id}/runs
curl
curl -X GET --cookie 'lumirecrm_session=REPLACE_ME' 'http://localhost:4000/v1/workflows/{id}/runs'JavaScript
await fetch('http://localhost:4000/v1/workflows/{id}/runs', {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
});Python
import httpx
resp = httpx.get('http://localhost:4000/v1/workflows/{id}/runs')
resp.raise_for_status()
print(resp.json())PHP
$ch = curl_init('http://localhost:4000/v1/workflows/{id}/runs');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
echo curl_exec($ch);Go
req, _ := http.NewRequest("GET", "http://localhost:4000/v1/workflows/{id}/runs", nil)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()