Messages CDD Core receives
Base address: POST {core_base_url}/functions/v1/trading-link/{route}. Every request carries the envelope and the x-link-key header.
/ping · PING
Section titled “/ping · PING”Checks the link end to end. The body may be empty.
{ "message_id": "…", "message_type": "PING", "sent_at": "…", "institution": "INST", "body": {} }/command-execution · COMMAND_EXECUTION
Section titled “/command-execution · COMMAND_EXECUTION”The second answer to a restriction command, sent when the leg has actually changed state.
"body": { "command_ref": "RC-000123-3", "result": "EXECUTED", "leg_state_after": "RESTRICTED", "executed_at": "2026-09-20T08:15:31.004Z", "caught_in_flight": [ { "kind": "QUOTE_CANCELLED", "ref": "Q-260920-0437" }, { "kind": "WITHDRAWAL_HELD", "ref": "AW-260920-0044", "asset": "USDT", "amount": "400000.00" } ]}| Field | Values |
|---|---|
command_ref | Required. The command_ref of the command being answered |
result | EXECUTED · SUPERSEDED (a newer command for that leg already stands) |
leg_state_after | RESTRICTED · OPEN |
executed_at | Required. UTC |
caught_in_flight | Optional. What the change stopped mid-way, for example a cancelled quote or a held withdrawal |
If no execution report arrives within 60 seconds of the receipt, CDD Core raises the command to an officer.
/feed · FEED_EVENT
Section titled “/feed · FEED_EVENT”One message per event, sent as it happens.
"body": { "event_ref": "L-260920-0311", "event_type": "THB_IN", "core_customer_id": "5d0c…", "occurred_at": "2026-09-20T08:10:02.000Z", "data": { … }}| Field | Rule |
|---|---|
event_ref | Required, unique and stable: the ledger entry or record reference. The same ref with the same event is a repeat; the same ref with a different event is refused |
event_type | Required. One of the types below |
core_customer_id | Required. A customer of this institution |
occurred_at | Required. UTC, ISO 8601. Its Bangkok date is the business day |
data | Required JSON object with the event’s details |
Event types (DA Dealer) and what data describes:
event_type | data describes |
|---|---|
THB_IN | Amount, payer bank and masked account, whether matched automatically or by an officer, statement line |
THB_IN_SUSPENSE · THB_IN_RETURNED | Amount, payer bank, reason (no owner, leg restricted, name mismatch) |
THB_OUT | Amount, destination account reference, payment file, bank result |
TRADE | Pair, side, asset and THB amounts, price, benchmark price, channel, quote, dealer for RFQ |
TRADE_REVERSAL | The original event_ref, reason, approver |
DA_OUT · DA_IN | Asset, chain, amount, THB value, address, transaction hash, times, the verdict request |
REFUSAL | What was refused, the ground, the amount if any |
HOLD · HOLD_RELEASED | What is held, its reference, the reason |
ADJUSTMENT | Adjustment |
HEDGE_FILL · LP_MOVEMENT | Hedge fill · liquidity provider movement |
WALLET_SWEEP | Wallet sweep |
DEPOSIT_ADDRESS | Deposit address issued |
The fields inside data follow the interface specification agreed for the installation. An event type not on the list is refused with UNKNOWN_CODE.
CDD Core never computes balances from the feed, and the trading system never computes alerts. Transaction monitoring runs on the feed inside CDD Core.
/feed-completeness · FEED_COMPLETENESS_DAILY
Section titled “/feed-completeness · FEED_COMPLETENESS_DAILY”Once a day, after day-end, for each business day.
"body": { "business_day": "2026-09-20", "counts": { "THB_IN": 41, "TRADE": 388, "DA_OUT": 12 }, "first_event_ref": "L-260920-0001", "last_event_ref": "L-260920-0511", "sha256_of_sorted_event_refs": "9f2c…e1a0"}| Field | Rule |
|---|---|
business_day | Required, YYYY-MM-DD (Bangkok date) |
counts | Required. Event type → whole number of events |
first_event_ref · last_event_ref | Optional strings |
sha256_of_sorted_event_refs | Required. 64 hex characters: SHA-256 of that day’s event refs, sorted |
CDD Core compares the counts and the hash with what it received. A difference is a break, raised on both sides the same day.