Before ingesting operations, make sure the related clients have already been ingested. See the Ingesting Clients guide.
Step 1: Ingest Deposits
Deposits represent incoming funds (crypto or fiat) into client accounts. Endpoint:POST /v1/operations/deposits
initiatedBy field should reference the Corsa client id of the client who initiated the deposit.
Step 2: Ingest Withdrawals
Withdrawals represent outgoing funds (crypto or fiat) from client accounts. Endpoint:POST /v1/operations/withdrawals
Fiat Withdrawal
Crypto Withdrawal
Step 3: Ingest Trades
Trades represent exchange operations between two assets. They can be ingested in two ways:- Atomic Ingestion - Send the entire trade with all its transactions in a single request.
- Incremental Ingestion (Fills) - Send parts of the trade as separate requests that get grouped into the same trade entity.
POST /v1/operations/trades
Atomic Ingestion
Send the full trade with all transactions at once:Incremental Ingestion (Fills)
UseshouldAppendToExistingTrade=true and the same referenceId to append transactions to an existing trade.
Request 1 (First Fill):
Step 4: Ingest Transfers
Transfers represent internal peer-to-peer movements of funds between two clients in your platform — for example, a user sending crypto or fiat to another user. Bothfrom.client and to.client are required on the transaction so Corsa can link the movement to both parties.
Endpoint: POST /v1/operations/transfers
Unlike deposits and withdrawals, both
from.client and to.client are required on the transferTransaction. Both must reference Corsa client IDs that have already been ingested.To evaluate bank-account rules for a transfer, ingest the bank accounts first and send
from.bankAccount.id and to.bankAccount.id. Account or routing numbers alone do not load bank-account facts for rule evaluation.If a transfer creation request times out at your network or gateway, retrieve the transfer by its operation reference ID before retrying. A timeout response alone does not prove that Corsa did not create or evaluate the transfer.
Step 5: Update Operation & Transaction Statuses
As operations progress through their lifecycle, you can update their statuses.Available Statuses
Operation Statuses (Deposits, Withdrawals, Trades)
Transaction Statuses
Updating a Trade Status
Endpoint:PUT /v1/operations/trades/{id}/updateStatus
Updating a Transaction Status
Endpoint:PUT /v1/transactions/{id}/updateStatus
Retrieve Operations
Use these endpoints to fetch an existing operation by its Corsa ID orreferenceId.
Get a Deposit
Endpoint:GET /v1/operations/deposits/{id}
Get a Withdrawal
Endpoint:GET /v1/operations/withdrawals/{id}
Get a Transfer
Endpoint:GET /v1/operations/transfers/{id}
Get a Trade
Endpoint:GET /v1/operations/trades/{id}
Add a Transaction to a Trade
Endpoint:PUT /v1/operations/trades/{id}/transactions
Use this endpoint to attach a transaction fill to an existing trade. This is useful when fills arrive asynchronously after the trade is created — for example, partial fills that complete over time.
What’s Next?
With clients and operations ingested, you can now set up alerting and case management.Ingest Alerts & Cases
Push external alerts and escalate them to investigation cases.
Ingesting Clients
Review the client ingestion guide.