Manual journal entries

Update a manual journal entry

Changes the fields you send. Sending lines replaces the whole set and they must still balance. Requires the manual_journal_entries:write permission.

PATCH
https://services.magicdoor.com/accounting/company-portal/manual-journal-entries/{manualJournalEntryId}

Authorization

Authorizationstringrequired
Bearer token — Send your API token in the Authorization header as Bearer <token>. Requests without a valid token are rejected with 401 Unauthorized.

Path parameters

manualJournalEntryIdstringrequired

Snowflake id of the manual journal entry.

example: 1830472847398406100

Body

application/json

Only the fields present in the body are applied; there is no way to clear description or rejectionReason through this endpoint. An entry can be edited in any state, including posted.

companyBillboolean

Move the entry between the company books and the property books.

postingDatestring · date-time

The date the entry is booked on, read in the company's timezone.

descriptionstring

What the entry is for, up to 1000 characters.

statusenum<string>

Set the state directly. This bypasses the transition rules that submit, approve, reject and post enforce, and it does not record who did it or when.

draftpendingApprovalapprovedpostedrejected
rejectionReasonstring

Free text, up to 1000 characters.

linesLine[]

The complete new set of lines — at least two, balanced.

Response

200 · The entry after the change. Sending a body with no fields returns it unchanged.

idstring

Snowflake id of the entry.

createdstring · date-time

When the entry was created, in the company's timezone.

updatedstring · date-time

When the entry was last changed, in the company's timezone.

companyBillboolean

true puts the entry on the management company's own books, false on the property books. It decides which set of reports the entry shows up in — a company entry never appears in a property report and vice versa.

postingDatestring · date-time

The date the entry is booked on, in the company's timezone. Reports include it from this date.

descriptionstring

What the entry is for. Absent when none was set.

statusenum<string>

Where the entry sits in the approval flow. Only posted entries reach the general ledger and the financial reports.

draftpendingApprovalapprovedpostedrejected
rejectionReasonstring

Why the entry was rejected. Cleared when the entry is resubmitted, and absent otherwise.

creatorobject

Who created the entry. Deprecated mirrors of id — propertyManagerId, tenantId, vendorId, ownerId — are also present, whichever matches type.

submittedByUserIdstring

Who was recorded as submitting it for approval. Absent until it is submitted.

submittedAtstring · date-time

When it was submitted, in the company's timezone. Absent until it is submitted.

approvedByUserIdstring

Who was recorded as approving it. Absent until it is approved.

approvedAtstring · date-time

When it was approved, in the company's timezone. Absent until it is approved.

postedByUserIdstring

Who was recorded as posting it. Absent until it is posted.

postedAtstring · date-time

When it was posted, in the company's timezone. Absent until it is posted.

rejectedByUserIdstring

Who was recorded as rejecting it. Absent unless it has been rejected.

rejectedAtstring · date-time

When it was rejected, in the company's timezone. Absent unless it has been rejected.

linesLine[]

The debit and credit lines. There are always at least two, and the debits equal the credits.

chartOfAccountsChartOfAccount[]

The chart-of-account entries every line refers to, resolved so you do not have to look them up.

400 · A field failed validation: fewer than two lines, a line amount outside 0.01–999999999.99, a negative or duplicated `order`, a description over 1000 characters, debits that do not equal credits, or an entry with only debits or only credits.

401 · The access token is missing, expired, or not for this company.

403 · The caller does not hold the `manual_journal_entries:write` permission.

404 · The entry is not in this company, or a `chartOfAccountId` or `bankAccountId` names nothing visible to it.

The entry must balance before it is accepted

Every amount is positive; isDebit decides the side. The sum of the debit lines and the sum of the credit lines must agree to within one cent, there must be at least one line of each kind, and there must be at least two lines in total. Anything else is rejected with a 400 that names Lines.

Editing a posted entry changes the ledger

There is no state guard on this endpoint. An entry that is already posted can be re-edited here, and the general ledger and reports follow the new lines. Prefer creating a correcting entry if you need an audit trail.