Skip to main content
POST
Adjust group balance
Credits or debits a group’s balance for a specific asset within a program. Set type to CREDIT or DEBIT and provide a positive amount. A DEBIT fails if the group does not have sufficient balance in the target bucket, unless allow_negative is true (used for clawbacks). The optional bucket field selects AVAILABLE or HELD and defaults to AVAILABLE. You must specify program_id and asset_id to identify which balance to adjust; groups are organization-level entities, but each group maintains separate balances per program-asset pair. The adjustment is atomic and creates a journal entry for auditability. This endpoint mirrors adjust participant balance.
For usage patterns and examples, see the Balance Operations guide.

Authorizations

X-API-Key
string
header
required

API key passed in the X-API-Key header.

Headers

Idempotency-Key
string

Idempotency key (1-255 printable ASCII chars). Equivalent to the idempotency_key body field; if both are provided they must match. Replays with the same key and identical parameters return the original journal_entry_id; the same key with different parameters returns 409 idempotency_conflict.

Maximum string length: 255

Path Parameters

id
string<uuid>
required

Group ID

Body

application/json

Adjustment details

amount
string
required

Adjustment amount (must be positive, decimal string)

Minimum string length: 1
Example:

"100.00"

asset_id
string<uuid>
required

The asset to adjust

Example:

"550e8400-e29b-41d4-a716-446655440001"

description
string
required

Reason for this adjustment (1-500 chars)

Required string length: 1 - 500
Example:

"Team bonus allocation"

program_id
string<uuid>
required

The program this adjustment belongs to

Example:

"550e8400-e29b-41d4-a716-446655440000"

type
enum<string>
required

Whether to CREDIT or DEBIT the balance

Available options:
CREDIT,
DEBIT
Example:

"CREDIT"

allow_negative
boolean

DEBIT only. When true, allows this adjustment to overdraw and set a negative balance.

Example:

false

bucket
enum<string>

Balance bucket to adjust: AVAILABLE or HELD (defaults to AVAILABLE)

Available options:
AVAILABLE,
HELD
Example:

"AVAILABLE"

expires_at
string

CREDIT + LOT only. RFC3339 timestamp or positive duration from request processing time. Not supported with bucket HELD.

Required string length: 1 - 255
Example:

"90d"

idempotency_key
string

Client-provided key to dedupe retries. May also be supplied via the Idempotency-Key HTTP header; when both are present they must match. Identical adjusts with the same key return the original journal_entry_id; a reused key with different payload returns 409 idempotency_conflict.

Required string length: 1 - 255
Example:

"adjust-group-123"

matures_at
string

CREDIT + LOT only. RFC3339 timestamp or positive duration from request processing time. Future values route the credit to DEFERRED. Not supported with bucket HELD.

Required string length: 1 - 255
Example:

"7d"

Response

Adjustment applied

amount
string

Amount adjusted

Example:

"100.00"

asset_id
string<uuid>

Asset that was adjusted

Example:

"550e8400-e29b-41d4-a716-446655440001"

bucket
string

Balance bucket that was adjusted

Example:

"AVAILABLE"

journal_entry_id
string<uuid>

Ledger journal entry created by this adjustment

Example:

"550e8400-e29b-41d4-a716-446655440000"

message
string

Confirmation message

Example:

"Group balance adjusted successfully"

program_id
string<uuid>

Program the balance belongs to

Example:

"550e8400-e29b-41d4-a716-446655440000"

type
string

Whether the adjustment was a credit or debit

Example:

"CREDIT"