LumireCRM

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()

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()