Manual journal entries

Submit a manual journal entry

Sends a draft or rejected entry for approval and clears any previous rejection reason. Requires the manual_journal_entries:write permission.

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

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

submittedByIdstringrequired

The property manager recorded as submitting the entry. It is taken from the body, not from the access token.

example: 1830472847398404101
reasonstring

Note about the submission, up to 1000 characters. It is validated but not stored on the entry.

Response

200 · The entry, now `pendingApproval`, with `submittedByUserId` and `submittedAt` filled in.

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 · The reason field is longer than 1000 characters, or the actor id is not a Snowflake.

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 · No manual journal entry with this id belongs to the caller's company, or it has been deleted.

422 · The entry is not in one of `draft` or `rejected` — an entry already in `pendingApproval` is rejected too. The `detail` names the state it is actually in.

ActionLegal fromResult
Submitdraft, rejectedpendingApproval, and rejectionReason is cleared
ApprovependingApprovalapproved
RejectpendingApproval, approvedrejected, with the reason you send
Postapprovedposted — the entry now counts in the general ledger and the financial reports