> This page is for version v1.0.
> For other versions, use one of these documentation indexes:
> - v2.0 (default): https://docs.cable.tech/v-2-0/llms.txt
> - v1.0: https://docs.cable.tech/v-1-0/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.cable.tech/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.cable.tech/_mcp/server.

# Add transactions in batch

POST https://transaction-api.cable.tech/transactions/batch
Content-Type: application/json

Reference: https://docs.cable.tech/v-1-0/api-reference/transaction-data-api/transactions/add-transactions-batch

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects a list of NewTransactionRequest.

- `list of NewTransactionRequest`

## Response

### 200

Batch processing result

- `success` (boolean, required) — Indicates if the write operation was successful.
- `write_count` (integer, required) — The number of records written to the database.
- `message` (string, required) — Provides additional information about the operation result.
- `organization_id` (string, required) — The organization ID for which the operation was performed.

## Errors

### 400 Bad Request Error

Invalid transaction data in batch

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

### 401 Unauthorized Error

Unauthorized request

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

### 429 Too Many Requests Error

Rate limit exceeded

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

### 500 Internal Server Error

Server error

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

## Types

### NewTransactionRequest

Transaction data to add. All fields are required except for 'amount_usd', which will be calculated using the latest exchange rate if not provided. The 'timestamp' field represents the creation time.

- `timestamp` (datetime, required) — When the transaction was processed in your system, in ISO 8601 format. For updates, use when the event occurred, not when you're reporting it.
- `tx_id` (string, required) — Unique identifier for the transaction. This is the primary key for the transaction record and should be unique across all transactions. Updates to a transaction should be made using this identifier.
- `type` (enum, required) — Transaction type. Required when creating new transactions, optional for updates.
  - Allowed values: `DEPOSIT`, `WITHDRAWAL`
- `method` (enum, required) — Payment method used for the transaction. Required when creating new transactions, optional for updates. Each method may have different processing times, fees, and regulatory requirements.
  - Allowed values: `WIRE`, `ACH`, `SWIFT`, `SEPA`, `APPLE_PAY`, `CHECK_DEPOSIT`, `INTERNAL_TRANSFER`, `RTP`, `PROV_X_TRANSFER`
- `amount` (double, required) — Transaction amount. Required when creating new transactions, optional for updates.
- `currency` (string, required) — ISO 4217 currency code. Required when creating new transactions, optional for updates.
- `sender_id` (string, required) — Identifier of the sender, this could be an account number, customer id, or any other unique identifier. If you are sending customer data to Cable, this ID should be able to be referenced in that dataset.
- `sender_country` (string, required) — ISO 3166-1 alpha-2 country code
- `receiver_country` (string, required) — ISO 3166-1 alpha-2 country code
- `status` (enum, required) — Transaction status. Required when creating new transactions, optional for updates.
  - Allowed values: `CREATED`, `PENDING`, `SETTLED`, `FAILED`, `REJECTED`, `REFUNDED`
- `amount_usd` (double, optional) — Amount in USD, if not provided will be calculated using the latest exchange rate using data from Open Exchange Rates (https://openexchangerates.org)
- `receiver_id` (string, optional) — Identifier of the receiver, this could be an account number, customer id, or any other unique identifier.

### GeneralErrorErrorsItems

- `field` (string, optional)
- `message` (string, optional)

## Examples

**Request**

```json
[
  {
    "timestamp": "2024-01-15T09:30:00Z",
    "tx_id": "TX1234567890ABCDEF1234XYZ7890"
  }
]
```

**Response**

```json
{
  "success": true,
  "write_count": 1,
  "message": "Batch processed successfully with 1 transaction added.",
  "organization_id": "org_9876543210"
}
```

**SDK Code**

```python
import requests

url = "https://transaction-api.cable.tech/transactions/batch"

payload = [
    {
        "timestamp": "2024-01-15T09:30:00Z",
        "tx_id": "TX1234567890ABCDEF1234XYZ7890"
    }
]
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://transaction-api.cable.tech/transactions/batch';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '[{"timestamp":"2024-01-15T09:30:00Z","tx_id":"TX1234567890ABCDEF1234XYZ7890"}]'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://transaction-api.cable.tech/transactions/batch"

	payload := strings.NewReader("[\n  {\n    \"timestamp\": \"2024-01-15T09:30:00Z\",\n    \"tx_id\": \"TX1234567890ABCDEF1234XYZ7890\"\n  }\n]")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://transaction-api.cable.tech/transactions/batch")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"timestamp\": \"2024-01-15T09:30:00Z\",\n    \"tx_id\": \"TX1234567890ABCDEF1234XYZ7890\"\n  }\n]"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://transaction-api.cable.tech/transactions/batch")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"timestamp\": \"2024-01-15T09:30:00Z\",\n    \"tx_id\": \"TX1234567890ABCDEF1234XYZ7890\"\n  }\n]")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://transaction-api.cable.tech/transactions/batch', [
  'body' => '[
  {
    "timestamp": "2024-01-15T09:30:00Z",
    "tx_id": "TX1234567890ABCDEF1234XYZ7890"
  }
]',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://transaction-api.cable.tech/transactions/batch");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"timestamp\": \"2024-01-15T09:30:00Z\",\n    \"tx_id\": \"TX1234567890ABCDEF1234XYZ7890\"\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "timestamp": "2024-01-15T09:30:00Z",
    "tx_id": "TX1234567890ABCDEF1234XYZ7890"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://transaction-api.cable.tech/transactions/batch")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```