Mass credit
Get a balance adjustment batch
Progress and outcome of one batch, with every adjustment and the accounts the preview left out. Poll every few seconds while status is running.
An adjustment with status failed was not applied (errorCode says why). One that is still pending with errorCode OUTCOME_UNKNOWN could not be confirmed: retry the batch to settle it. Nothing is ever applied twice.
Requires view permission on traders.
curl "https://api.hyperprop.com/platform/v1/organization/balance-adjustments/5d1c7a2e-3b4f-4c8d-9e0a-1b2c3d4e5f60" \
-H "X-API-Key: hp_live_your_key_here"
GET
/
v1
/
organization
/
balance-adjustments
/
{batchId}
Get a balance adjustment batch
curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"batchId": "5d1c7a2e-3b4f-4c8d-9e0a-1b2c3d4e5f60",
"kind": "credit",
"tag": "incident-2026-10-21",
"reason": "US-open outage, 21 October",
"status": "completed",
"windowStart": "2026-10-21T13:30:00.000Z",
"windowEnd": "2026-10-21T14:15:00.000Z",
"policy": {
"lossBasis": "net_after_fees",
"shiftDailyBaseline": true,
"highWaterMarkMode": "unchanged",
"requireFlat": false,
"skipAlreadyCredited": true,
"maxCreditPerAccount": null
},
"requestedBy": "ops@yourfirm.com",
"total": 840,
"processed": 840,
"applied": 838,
"failed": 2,
"skipped": 410,
"totalAmount": 186420.75,
"appliedAmount": 186010.25,
"reversesBatchId": null,
"createdAt": "2026-10-25T15:02:11.000Z",
"lastProgressAt": "2026-10-25T15:04:52.000Z",
"completedAt": "2026-10-25T15:04:52.000Z",
"adjustments": [
{
"adjustmentId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "ACC-50K-000123",
"kind": "credit",
"amount": 412.5,
"status": "applied",
"errorCode": null,
"errorMessage": null,
"balanceBefore": 48920,
"balanceAfter": 49332.5,
"netPnl": -412.5,
"fills": 6,
"warnings": [],
"reversesAdjustmentId": null,
"appliedAt": "2026-10-25T15:03:01.000Z"
}
],
"skippedAccounts": [
{
"accountId": "9b2e1f4c-3d5a-4b6c-8e7f-0a1b2c3d4e5f",
"accountNumber": "ACC-50K-000456",
"reason": "ACCOUNT_CLOSED",
"netPnl": -120
}
]
}
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Your role does not have write access to \"Traders & accounts\"",
"code": "INSUFFICIENT_PERMISSIONS"
}{
"success": false,
"statusCode": 404,
"error": "Not Found",
"message": "Balance adjustment batch not found",
"code": "BATCH_NOT_FOUND"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"success": false,
"statusCode": 503,
"error": "Error",
"message": "Balance adjustments are not available yet; nothing was changed",
"code": "FEATURE_NOT_READY"
}{
"statusCode": 504,
"error": "Gateway Timeout",
"message": "The request did not complete within 25 seconds. Try again, or narrow it (for example a shorter date range).",
"code": "REQUEST_TIMEOUT"
}⌘I
Get a balance adjustment batch
curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/balance-adjustments/{batchId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"batchId": "5d1c7a2e-3b4f-4c8d-9e0a-1b2c3d4e5f60",
"kind": "credit",
"tag": "incident-2026-10-21",
"reason": "US-open outage, 21 October",
"status": "completed",
"windowStart": "2026-10-21T13:30:00.000Z",
"windowEnd": "2026-10-21T14:15:00.000Z",
"policy": {
"lossBasis": "net_after_fees",
"shiftDailyBaseline": true,
"highWaterMarkMode": "unchanged",
"requireFlat": false,
"skipAlreadyCredited": true,
"maxCreditPerAccount": null
},
"requestedBy": "ops@yourfirm.com",
"total": 840,
"processed": 840,
"applied": 838,
"failed": 2,
"skipped": 410,
"totalAmount": 186420.75,
"appliedAmount": 186010.25,
"reversesBatchId": null,
"createdAt": "2026-10-25T15:02:11.000Z",
"lastProgressAt": "2026-10-25T15:04:52.000Z",
"completedAt": "2026-10-25T15:04:52.000Z",
"adjustments": [
{
"adjustmentId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "ACC-50K-000123",
"kind": "credit",
"amount": 412.5,
"status": "applied",
"errorCode": null,
"errorMessage": null,
"balanceBefore": 48920,
"balanceAfter": 49332.5,
"netPnl": -412.5,
"fills": 6,
"warnings": [],
"reversesAdjustmentId": null,
"appliedAt": "2026-10-25T15:03:01.000Z"
}
],
"skippedAccounts": [
{
"accountId": "9b2e1f4c-3d5a-4b6c-8e7f-0a1b2c3d4e5f",
"accountNumber": "ACC-50K-000456",
"reason": "ACCOUNT_CLOSED",
"netPnl": -120
}
]
}
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Your role does not have write access to \"Traders & accounts\"",
"code": "INSUFFICIENT_PERMISSIONS"
}{
"success": false,
"statusCode": 404,
"error": "Not Found",
"message": "Balance adjustment batch not found",
"code": "BATCH_NOT_FOUND"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"success": false,
"statusCode": 503,
"error": "Error",
"message": "Balance adjustments are not available yet; nothing was changed",
"code": "FEATURE_NOT_READY"
}{
"statusCode": 504,
"error": "Gateway Timeout",
"message": "The request did not complete within 25 seconds. Try again, or narrow it (for example a shorter date range).",
"code": "REQUEST_TIMEOUT"
}