Create a manual journal entry
Writes a balanced journal entry straight into the books' pipeline, as a draft by default. Requires the manual_journal_entries:write permission.
Authorization
AuthorizationstringrequiredBody
application/json
companyBillbooleanrequiredtrue books the entry against the management company, false against the properties. Setting it to true needs a company that has the company ledger enabled.
postingDatestring · date-timerequiredThe date the entry is booked on, read in the company's timezone.
linesLine[]requiredAt least two lines that balance.
descriptionstringWhat the entry is for, up to 1000 characters.
statusenum<string>The state to create the entry in. Setting it to posted here puts the entry into the general ledger immediately, without going through submit, approve and post.
rejectionReasonstringStored as-is, up to 1000 characters. Only meaningful alongside status: "rejected".
Response
200 · The entry that was created.
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 · 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 · A `chartOfAccountId` or `bankAccountId` names nothing visible to this company.
422 · `companyBill` is `true` for a company that does not have the company ledger enabled.
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.
Creating an entry with status: "posted" skips submit, approve and post entirely, and the entry lands in the general ledger and every financial report straight away. Leave status out unless you mean exactly that.