Skip to main content

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": "..."
}