Jobs
Every job is POST /v1/jobs/* and requires X-Ledger-Admin-Token. Some run
synchronously; some are background (return {"job_id": "...", "status": "running"} and progress polled via GET /v1/jobs/status/{job_id}).
Both books
POST /v1/jobs/recost
Runs the recost batch. Body: {"limit": 100} (optional).
UAE
POST /v1/jobs/sync-zag
Pull from the ZAG API for all (or selected) users, import, recost. Sync.
POST /v1/jobs/sync-holdings
Background. GTN holdings snapshots per user.
POST /v1/jobs/sync-cash-statements
Background. GTN monthly cash statements per user.
POST /v1/jobs/sync-zag-statements
Background. Raw ZAG statement snapshots (no posting).
POST /v1/jobs/refresh-snapshots
Background. Warms the portfolio-snapshot outage-fallback cache.
POST /v1/import/zag
Manual import of a hand-collected ZAG batch.
India
POST /v1/jobs/sync-viewtrade
{
"customer_ids": ["cust-a", "cust-b"], // optional; null = all India customers
"recost": true,
"dry_run": false,
"brokerage_bps": 22.0 // optional override
}
Funding wires + orders → recost.
POST /v1/jobs/sync-viewtrade-trades
Same shape. Ingests executed trades from /portfolio/full costOrders.
POST /v1/jobs/sync-viewtrade-ledger
{
"start": "2026-06-01",
"end": "2026-06-30", // optional; defaults to start
"code": null, // optional firm code override
"dry_run": false
}
Daily Ledger CSV. Posts dividend + wht_tax; upserts dividend_events. Counts
TRD + WIREI for observability, doesn't post them.
POST /v1/jobs/sync-glomopay
{
"customer_ids": null,
"dry_run": false,
"fx_spread_bps": 0
}
Pulls LRS orders (+ quotes + payments + settlements), upserts
lrs_remittances, posts fx_spread (if bps > 0) + fx_spread_settle (if
settlement lands).
POST /v1/jobs/provision-india
{
"customer_ids": null,
"dry_run": false,
"api_global_base_url": null
}
Upsert viewtrade_account_refs, glomopay_customer_id, pan, partner_id on
ledger customers from api-global.
POST /v1/jobs/refund-reversal-india
{ "dry_run": false }
Sweep cancelled/failed/expired GlomoPay orders with outstanding fx_spread accrual. Idempotent.
Status polling
For background jobs:
GET /v1/jobs/status/{job_id} →
{
"job_id": "...", "kind": "sync-holdings",
"status": "running" | "done" | "error",
"started_at": "...", "finished_at": "...",
"duration_ms": 12345.6,
"result": { ... },
"error": "..."
}