Approve a manual journal entry
Approves an entry that is waiting for approval. It is not in the ledger yet — that happens when you post it. Requires the manual_journal_entries:write permission.
Authorization
AuthorizationstringrequiredPath parameters
manualJournalEntryIdstringrequiredSnowflake id of the manual journal entry.
Body
application/json
approverIdstringrequiredThe property manager recorded as approving the entry. It is taken from the body, not from the access token.
reasonstringNote about the approval, up to 1000 characters. It is validated but not stored on the entry.
Response
200 · The entry, now `approved`, with `approvedByUserId` and `approvedAt` filled in.
idstringSnowflake id of the entry.
createdstring · date-timeWhen the entry was created, in the company's timezone.
updatedstring · date-timeWhen the entry was last changed, in the company's timezone.
companyBillbooleantrue 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-timeThe date the entry is booked on, in the company's timezone. Reports include it from this date.
descriptionstringWhat 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.
rejectionReasonstringWhy the entry was rejected. Cleared when the entry is resubmitted, and absent otherwise.
creatorobjectWho created the entry. Deprecated mirrors of id — propertyManagerId, tenantId, vendorId, ownerId — are also present, whichever matches type.
submittedByUserIdstringWho was recorded as submitting it for approval. Absent until it is submitted.
submittedAtstring · date-timeWhen it was submitted, in the company's timezone. Absent until it is submitted.
approvedByUserIdstringWho was recorded as approving it. Absent until it is approved.
approvedAtstring · date-timeWhen it was approved, in the company's timezone. Absent until it is approved.
postedByUserIdstringWho was recorded as posting it. Absent until it is posted.
postedAtstring · date-timeWhen it was posted, in the company's timezone. Absent until it is posted.
rejectedByUserIdstringWho was recorded as rejecting it. Absent unless it has been rejected.
rejectedAtstring · date-timeWhen 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 `pendingApproval`. The `detail` names the state it is actually in.
| Action | Legal from | Result |
|---|---|---|
| Submit | draft, rejected | pendingApproval, and rejectionReason is cleared |
| Approve | pendingApproval | approved |
| Reject | pendingApproval, approved | rejected, with the reason you send |
| Post | approved | posted — the entry now counts in the general ledger and the financial reports |