# POST /api/transactions/batch-file/upload

Uploads a CSV batch file for transaction processing.

The file must be CSV format and no larger than 10 MB. On upload the file is
saved to blob storage, parsed, and validated. The returned DTO indicates
whether validation succeeded (status = Ready) or failed (status = Failed
with error details in `ErrorMessage`).

**Operation ID:** `POST_api_transactions_batch-file_upload`

## Authorization

No permission required.

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| suppressNulls | query | no | boolean | If true, omit properties with null values. |

## Request Body

The batch file upload payload including file content and merchant context.

**Content type:** `application/json`

Schema: `PhoeniXGateTransactionsBatchBackgroundBatchFileUploadDto`

**Content type:** `text/json`

Schema: `PhoeniXGateTransactionsBatchBackgroundBatchFileUploadDto`

**Content type:** `application/*+json`

Schema: `PhoeniXGateTransactionsBatchBackgroundBatchFileUploadDto`

## Responses

### 200

Batch file uploaded and validated successfully.

**Content type:** `text/plain`

Schema: `PhoeniXGateTransactionsBatchBackgroundBatchFileDto`

**Content type:** `application/json`

Schema: `PhoeniXGateTransactionsBatchBackgroundBatchFileDto`

**Content type:** `text/json`

Schema: `PhoeniXGateTransactionsBatchBackgroundBatchFileDto`

### 400

File is not CSV, exceeds 10 MB, or the merchant does not exist.

### 403

Forbidden

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 401

Unauthorized

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 404

Not Found

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 501

Not Implemented

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### 500

Internal Server Error

**Content type:** `text/plain`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

**Content type:** `text/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

### default

The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.

**Content type:** `application/json`

Schema: `WinkPGHttpRemoteServiceErrorResponse`

## See also

- [All documentation](https://docs.winkpg.io/llms.txt): the machine-readable index of every public page on this site.
