API - Transaction batch
The Transaction Batch Endpoint allows customers to efficiently upload transaction data in large batches for ingestion. Each batch consists of multiple transactions formatted as JSONL (JSON Lines), with each line representing a single valid transaction JSON. Main use cases include migrating millions of historical transactions during on-boarding and allowing customers to send millions of transactions per day.
Prerequisites
This feature is not enabled for tenant by default. Tenants must request feature enablement.
Batch file specification details
- Batches must be uploaded as JSONL files
- Each line in the JSONL file represents one transaction. For detailed transaction schema follow
API - Transactiondocumentation. - Each entity in transaction must be either clm-known entity, defined using
by_external_id(which is clm entity id), or unknown entity, defined usingexternal_entity_typeand corresponding entity details. The usage of the two types of entity specificaiton methods are considered to be mutually exclusive and each Entity needs to fit one, and only one type. Meaning that defining bothby_external_idandexternal_entity_typeis not allowed. - Maximum allowed file size per batch: 2GB. Exceeding this limit will result in a batch rejection
Transaction Example
{"request_uuid": "80f9f281-5e4e-49ed-b866-a6fc84356861", "payment_external_id": "c9cc78e6-2d29-4aa2-b870-a8c4ead7e4e8", "transaction_external_id": "4c24d134-ced9-42aa-8781-d1d3ae357117", "payment_source_country": "TJ", "payment_target_country": "CL", "payment_method": "iDeal", "payment_type": "payout", "additional_fields": {"payment_category": "VisaFF"}, "sender": {"by_external_id": "31482684-88e2-4f13-9ad6-a3b12208f633"}, "sending_partner": {"external_entity_type": "unknown", "unknown": {"external_id": "dc1b5656-2d41-4560-a618-a123227c1262", "full_name": "Jane Doe", "risk_assessment": "High"}}, "receiver": {"by_external_id": "a3d6b832-3597-44dc-97ed-47f957ad9de7"}, "modification": {"external_id": "35f9d6a1-8ada-48ad-b2fd-d00729f125ce", "type": "settlement", "amount": 98266, "monitoring_amount": 72125, "original_amount": 94241, "currency": "EUR", "monitoring_currency": "EUR", "original_currency": "EUR", "created_at": "2025-03-25T17:51:20"}}
{"request_uuid": "0f0dcbd9-66fa-4990-bdb3-b50c0bcecae6", "payment_external_id": "6405ae38-90b2-4c09-ba87-564eef312456", "transaction_external_id": "acc40fa6-b169-4b5e-af55-99cbf8007ec5", "payment_source_country": "MV", "payment_target_country": "VN", "payment_method": "iDeal", "payment_type": "payout", "additional_fields": {"payment_category": "VisaFF"}, "sender": {"external_entity_type": "unknown", "unknown": {"external_id": "b34551ee-d8fb-42ab-8be9-d7c3db732ca6", "risk_assessment": "High"}}, "sending_partner": {"by_external_id": "d000afac-9e70-4248-987e-49a863bbc292"}, "receiver": {"external_entity_type": "unknown", "unknown": {"external_id": "614458e8-1fa6-4a87-999d-5f08a00ee812"}}, "modification": {"external_id": "1744db77-3071-46b1-b6fb-9de9f5645eb3", "type": "settlement", "amount": 54858, "monitoring_amount": 97573, "original_amount": 71704, "currency": "EUR", "monitoring_currency": "EUR", "original_currency": "EUR", "created_at": "2025-03-25T16:39:43"}}
Batch processing workflow
Request a Pre-signed S3 URL
Call the Generate Batch Upload Url endpoint to obtain a pre-signed S3 upload URL and a unique UUID for tracking current status of the batch processing.
Request content allows specifying additional processing parameters.
Upload batch file
Use the provided pre-signed URL to upload your batch file directly to S3. In order to do it, use PUT method,
use multipart/form-data content type, set If-None-Match header with value "*" and provide the batch file under file key.
For more details follow AWS docs.
After the file is fully uploaded to S3, it will be scanned. If the file is clean, processing of the transactions will begin. The timestamp recorded upon completion of uploading the batch file be considered the time at which the system received the batch.
Check status of batch processing
Call the Retrieve Batch Status endpoint to get current status of the batch processing.
Example:
{
"batch_id": "409cc795-d34f-48d4-b757-57220ae05974",
"status": "PROCESSED",
"failed_transaction_modification_ids": [...],
"error_message": "",
"progress_percentage": 100
}
Batch status possible values
VALIDATION_STARTED- batch validation starts after the batch file is scanned and acceptedVALIDATION_FAILEDINITIALIZED- batch initialization complete, batch queued for processingIN_PROGRESS- batch processing startedPROCESSED- batch processing completed successfullyERROR
Batch validation
Initial step of batch processing includes validation of uploaded transactions.
If any duplicate modification IDs are detected, the entire batch is rejected upon the first occurrence, regardless of the reject_on_invalid flag. In such cases, line-by-line validation does not commence, as the batch is rejected prior to that stage.
When validation is completed, results can be checked by calling Get Batch Validation Results endpoint.
If batch is invalid, a new pre-signed URL will be generated in order to download the validation report.
Entity validation
Each entity in the transaction is validated to ensure it is either:
- A known CLM entity which is fully onboarded, or
- An unknown entity with the required details.
Mixing both methods might yield conflicting/contradicting error_messages.