currency_debit / currency_credit, in the journal's currency. The base-currency debit / credit fields are derived by the server (currency_* x currency_rate) and anything sent in them is overwritten - a payload that carries only debit / credit has every line discarded and is rejected with 400.JournalTransaction array is the complete set: a line with id updates that line, a line without id is inserted, and any existing line missing from the array is deleted. A line id that belongs to a different journal is rejected with 400.currency_debit must equal the sum of currency_credit; total_debit and total_credit on the journal are recomputed from the lines and cannot be set directly.{id} in the URL identifies the journal. Journal.id in the body is optional, but when present it must match the URL id.curl --location --request PUT '/journals/251.json' \
--header 'Accept: application/json' \
--header 'apikey: ' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"Journal": {
"date": "2026-08-10",
"description": "edited via API",
"currency_code": "EGP",
"draft": "0",
"number": "MO1235"
},
"JournalTransaction": [
{
"id": 535,
"journal_account_id": 424,
"currency_debit": 200,
"currency_credit": 0,
"description": "desc 1 - edited again agaaaaaaaaain"
},
{
"id": 536,
"journal_account_id": 390,
"currency_debit": 0,
"currency_credit": 200,
"description": "desc 2 - edited"
}
]
}'{
"code": 200,
"result": "successful"
}