PATCH
/api/public/v1/transactions/{transactionId}

Update a transaction

Edits a ledger entry and re-posts its journal. `amount` stays positive — the stored type decides the sign, so re-signing an expense by sending a negative number is not possible. A voided transaction is closed to further edits: void is the end of a record’s life, not a status you back out of.

Required scope

The access token must carry this scope. A token missing it gets 403 Forbidden. Grant them to an API client under Settings → Company → API, and to a teammate under Employee → Permissions.

transactions:write

Path Parameters

NameTypeRequiredDescription
transactionIdstringRequiredTransaction ID.

Request Body

PropertyTypeDescription
amountnumberCents, positive.
descriptionstring
datestringISO 8601.
notesstringSend null to clear.
irsCategorystringSend null to clear.
locationIdstringSend null to clear.
legalEntityIdstringSend null to clear.
taxYearnumber
taxQuarternumber
PATCHExample request
curl
curl -X PATCH "https://www.pxb.app/api/public/v1/transactions/{transactionId}" \
  -H "Authorization: Bearer your_access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "irsCategory": "Software",
    "amount": 52000
  }'
200Example response
json
{
  "message": "Transaction updated!",
  "content": {
    "transaction": {
      "id": "txn_4410",
      "type": "EXPENSE",
      "status": "PENDING",
      "amount": -48000,
      "description": "Q3 hosting",
      "counterpartyName": "Cloud Co",
      "irsCategory": "Utilities",
      "date": "2026-08-01T00:00:00.000Z",
      "dueDate": "2026-09-01T00:00:00.000Z",
      "legalEntityId": "le_7788",
      "createdAt": "2026-08-01T09:00:00.000Z",
      "updatedAt": "2026-08-01T09:00:00.000Z"
    }
  }
}

In the console

The same thing done by hand, for anyone comparing the API against the screen they already use.

Finances → Ledger
/finances/ledger
  1. Open a transaction from the ledger and edit it.