> 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.

# Update transactions in batch

PUT 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/update-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 UpdateTransactionRequest.

- `list of UpdateTransactionRequest`

## 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.

### 404 Not Found Error

Transaction not found in batch

- `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

### UpdateTransactionRequest

Transaction data to update, referenced by 'tx_id'. The 'timestamp' field represents the update time. Only the fields to be updated need to be included.

- `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, optional) — Transaction type. Required when creating new transactions, optional for updates.
  - Allowed values: `DEPOSIT`, `WITHDRAWAL`
- `method` (enum, optional) — 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, optional) — Transaction amount. Required when creating new transactions, optional for updates.
- `currency` (string, optional) — ISO 4217 currency code. Required when creating new transactions, optional for updates.
- `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)
- `sender_id` (string, optional) — 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, optional) — ISO 3166-1 alpha-2 country code
- `receiver_id` (string, optional) — Identifier of the receiver, this could be an account number, customer id, or any other unique identifier.
- `receiver_country` (string, optional) — ISO 3166-1 alpha-2 country code
- `status` (enum, optional) — Transaction status. Required when creating new transactions, optional for updates.
  - Allowed values: `CREATED`, `PENDING`, `SETTLED`, `FAILED`, `REJECTED`, `REFUNDED`

### GeneralErrorErrorsItems

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

## Examples

**Request**

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

**Response**

```json
{
  "success": true,
  "write_count": 1,
  "message": "Batch update completed successfully.",
  "organization_id": "ORG987654321"
}
```

**SDK Code**

```python
import requests

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

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

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

print(response.json())
```

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

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\": \"TX1234567890\"\n  }\n]")

	req, _ := http.NewRequest("PUT", 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::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"timestamp\": \"2024-01-15T09:30:00Z\",\n    \"tx_id\": \"TX1234567890\"\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.put("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\": \"TX1234567890\"\n  }\n]")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://transaction-api.cable.tech/transactions/batch', [
  'body' => '[
  {
    "timestamp": "2024-01-15T09:30:00Z",
    "tx_id": "TX1234567890"
  }
]',
  '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.PUT);
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\": \"TX1234567890\"\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": "TX1234567890"
  ]
] 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 = "PUT"
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()
```