API

Create transactions

Batch-create manual account transactions.

Records 1–100 manual evidence transactions in one call. Each row has its own idempotencyKey (same namespace as create_transaction). Rows commit independently — a failed row does not undo earlier successes. The batch counts as one write toward the Tools rate limit. Prefer this over looping create_transaction when importing.

POST/v1/create_transactions

Body

FieldTypeRequiredDefaultDescription
budgetIdstringYes—Budget that owns the manual account(s).
transactionsarrayYes—1–100 create rows (see below). Empty or oversized arrays return 400 before any writes.

transactions[] item

FieldTypeRequiredDefaultDescription
idempotencyKeystringYes—Per-row key (1–128 chars: letters, digits, . _ : -). Shared with single create_transaction. Same key + same body → replayed.
accountIdstringYes—Manual account id.
amountnumberYes—Signed amount (negative for outflows; ±1000000).
postedAtstringYes—ISO-8601 timestamp when the transaction posted.
currencystringNo—ISO 4217 currency code; defaults to the account currency.
descriptionstringNo—Payee or memo text (max 100 characters).
applyToBalancebooleanNotrueIf true, adjusts the manual account balance when that row is created.

No top-level idempotencyKey / Idempotency-Key header is required for the batch envelope.

Response data.results[]

FieldTypeDescription
indexnumberZero-based position in the input array.
statusstringcreated, replayed, or failed.
transactionobject | nullCreated/replayed transaction fields; null when failed.
errorobject | null{ code, message, details? } when failed; null on success.