Skip to main content
This guide walks you through ingesting transactional data - Deposits, Withdrawals, Trades, and Transfers - into Corsa. In Corsa, transactions are modeled as Operations. Full API endpoint details are available in the API Reference (requires API credentials).
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
The initiatedBy field should reference the Corsa client id of the client who initiated the deposit.
Set evaluateSynchronously: true on the transaction object (depositTransaction, withdrawTransaction, or items in a trade’s transactions array) to evaluate the transaction against your active monitoring rules during ingestion. The response will include an evaluationResult with the decision. See Halting transactions for details and response format.

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.
Endpoint: POST /v1/operations/trades

Atomic Ingestion

Send the full trade with all transactions at once:

Incremental Ingestion (Fills)

Use shouldAppendToExistingTrade=true and the same referenceId to append transactions to an existing trade. Request 1 (First Fill):
Request 2 (Second 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. Both from.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.

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

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.