---
title: "Create Bulk Transactions Upload URL"
method: POST
path: "/v2/issuers/{organizationId}/transactions/uploads"
tags: ["transactions"]
---

# Create Bulk Transactions Upload URL

`POST /v2/issuers/{organizationId}/transactions/uploads`

## Request

- Base URL: `https://rewards-api.getkard.com`
- URL: `https://rewards-api.getkard.com/v2/issuers/{organizationId}/transactions/uploads`
- Auth: HTTP bearer

Generates up to 10 presigned PUT URLs for uploading JSONL transaction files (up to 5GB each) directly
to storage. Each URL is valid for 15 minutes. Use the returned URL to upload the file via an HTTP PUT request with the
binary file content as the body. If a URL expires before the upload completes, you must request a new one.
Files can be uploaded as plain JSONL or as a gzip-compressed file.
Supports both `incomingTransactionsFile` for daily transaction ingestion and `historicalTransactionsFile` for historical transaction ingestion. See the [Historical Transaction Uploads](/2024-10-01/api/integration-guides/historical-transaction-uploads) integration guide for details on the historical flow.
<b>Required scopes:</b> `files:write`

## Path parameters

- `organizationId` string, required: Your issuer organization ID, provided by Kard

## Request body

- TransactionsCreateFileUploadRequestBody
  - `data` TransactionsCreateFileUploadData[], required: List of file upload requests (1–10 items per request).
    - `type` 'incomingTransactionsFile' | 'historicalTransactionsFile', required: Specifies the category of transaction file being uploaded. Use `incomingTransactionsFile` for new, real-time transactions that need to be processed and matched as they arrive. Use `historicalTransactionsFile` for historical transaction ingestion.
    - `attributes` TransactionsCreateFileUploadAttributes, required
      - `filename` string, required: Name of the file to upload, including extension (e.g. "transaction_12345.jsonl")

## Response `201`

Response with status 201

- TransactionsCreateFileUploadUrlResponse
  - `data` TransactionsFileUploadUrlData[], required: List of created file upload sessions.
    - `type` 'incomingTransactionsFile' | 'historicalTransactionsFile', required: Specifies the category of transaction file being uploaded. Use `incomingTransactionsFile` for new, real-time transactions that need to be processed and matched as they arrive. Use `historicalTransactionsFile` for historical transaction ingestion.
    - `id` string, required: Upload session ID for traceability
    - `attributes` TransactionsFileUploadUrlAttributes, required
      - `url` string, required: Presigned PUT URL for uploading the file directly to storage. Use HTTP PUT with binary body. Expires after 15 minutes.
      - `expiresIn` integer, required: Time in seconds until the presigned URL expires (900)

## Other responses

- `400`: Error response with status 400
- `401`: Error response with status 401
- `403`: Error response with status 403
- `429`: The issuer's traffic grew faster than its allowed rate, or the endpoint's own limit was reached. If the response includes a `Retry-After` header, wait that many seconds before retrying. See [Rate Limits](/2024-10-01/api/integration-guides/rate-limits).
- `500`: Error response with status 500

## Changes

- **2026-10-22** `4e87fc8b018b`: 1 info
  - added the non-success response with the status `429`

[Operation history](https://skmtc.dev/getkard/apis/getkard-2/changes/v2/issuers/:organizationId/transactions/uploads/post.md)

---

[API](https://skmtc.dev/getkard/apis/getkard-2.md) - [All operations](https://skmtc.dev/getkard/apis/getkard-2/llms.txt) - [OpenAPI document](https://skmtc.dev/getkard/apis/getkard-2/revisions/bd47764afa21?raw)
