Daily closes

End-of-day close records.

The object#

FieldTypeDescription
idread-onlyintegerNolaPro id.
inventorylocationidintegerInventorylocationid. Id only.
inventorylocationstring(20)The locationcode of the referenced inventorylocations, instead of the id. Send this or inventorylocationid, not both unless they agree.
closedatestringBusiness date the daily close covers.
actualcashmoneystring(4dp)Stored as decimal(19,4).
currencybreakdowntextCurrencybreakdown. Stored as text, no practical length limit.
currencystring(10)Currency the close totals are stated in.
actualchecksmoneystring(4dp)Stored as decimal(19,4).
cashdrawerfloatmoneystring(4dp)Stored as decimal(19,4).
depositeamountmoneystring(4dp)Stored as decimal(19,4).
actualccmoneystring(4dp)Stored as decimal(19,4).
overshortmoneystring(4dp)Stored as decimal(19,4).
entrydatestringWhen the record was created.
cancelbooleanCancelled. NolaPro cancels rather than deletes, so a cancelled row is still readable.
gl_cashmoneystring(4dp)Stored as decimal(19,4).
gl_ccmoneystring(4dp)Stored as decimal(19,4).
gl_checksmoneystring(4dp)Stored as decimal(19,4).
sys_cashmoneystring(4dp)Stored as decimal(19,4).
sys_ccmoneystring(4dp)Stored as decimal(19,4).
sys_checksmoneystring(4dp)Stored as decimal(19,4).
externalidstring(100)Your own key. Scoped to your company.

Endpoints#

POST/ardailycloses/batch 207400409422422a422b422c

Create many.

Requires scope payments:write.

Parameters
NameInTypeNotes
Idempotency-KeyheaderstringMakes the write safely retryable. Any unique string per logical operation; a UUID is fine. The failure this prevents is specific: the request succeeds, the response is lost to a timeout, you retry, and the customer is billed twice. With a key, the retry returns the original response - same status, same body, same id - and creates nothing. The body is part of the key's identity. Reusing a key with a different body is a bug on your side, not a retry, and answers 409 idempotency_replay rather than silently handing back the old response. Keys are remembered for 24 hours.
Body array
FieldTypeDescription
inventorylocationidrequiredintegerThe drawer being closed. You must be allowed to use the location.
closedaterequiredstringBusiness date the close covers. One close per location, date and currency.
currencystring(10)Currency the totals are stated in. Defaults to the company currency.
actualcashmoneystring(4dp)Cash counted in the drawer, float included. What was actually in the drawer, as a decimal string. Not a JSON number.
actualchecksmoneystring(4dp)Cheques counted in the drawer. What was actually in the drawer, as a decimal string. Not a JSON number.
actualccmoneystring(4dp)Card settlements counted for the day. What was actually in the drawer, as a decimal string. Not a JSON number.
cashdrawerfloatmoneystring(4dp)The float left in the drawer, which is not banked. What was actually in the drawer, as a decimal string. Not a JSON number.
depositeamountmoneystring(4dp)What was taken to the bank. What was actually in the drawer, as a decimal string. Not a JSON number.
sys_cashmoneystring(4dp)Cash What NolaPro expected from the day's takings, as a decimal string.
sys_checksmoneystring(4dp)Cheques What NolaPro expected from the day's takings, as a decimal string.
sys_ccmoneystring(4dp)Card settlements What NolaPro expected from the day's takings, as a decimal string.
gl_cashmoneystring(4dp)Cash. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
gl_checksmoneystring(4dp)Cheques. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
gl_ccmoneystring(4dp)Card settlements. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
denominationsobjectThe note and coin count, as currencydenomination id to how many of them. Stored as currencybreakdown, which you cannot send directly.
createdepositsbooleanAlso bank the takings. Cash over the float needs nothing behind it - a till's notes and coins are not receipts. Cheques and card settlements do: name the payments they settle, or leave those amounts out. Card settlements are split into as many deposits as the location is set to keep apart.
checkacctidintegerThe bank account to deposit into. Defaults to the location's daily-close account, then its default account.
cash_invoicepaymentidsarray of integerPayments taken against invoices counted into the cash total (arinvoicepaymentdetail ids).
checks_invoicepaymentidsarray of integerPayments taken against invoices counted into the cheque total (arinvoicepaymentdetail ids).
cc_invoicepaymentidsarray of integerPayments taken against invoices counted into the card total (arinvoicepaymentdetail ids).
cash_orderdepositidsarray of integerDeposits taken against sales orders counted into the cash total (arorder_deposit ids).
checks_orderdepositidsarray of integerDeposits taken against sales orders counted into the cheque total (arorder_deposit ids).
cc_orderdepositidsarray of integerDeposits taken against sales orders counted into the card total (arorder_deposit ids).
When it fails
StatusCodeMeaning
400invalid_requestA row was malformed. Read each row's own status.
409already_closedA row names a location and date already closed.
422close_refusedA row was refused. Read each row's own status.
422aunknown_valueNo such location, bank account, denomination or receipt in this company.
422bread_only_fieldA derived field was sent.
422caccount_not_configuredThe bank account has no GL account assigned.
curl -X POST \
  'https://acme.nolapro.com/!/api/v2/ardailycloses/batch' \
  -H 'Authorization: Bearer $NP_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: your-unique-key' \
  -d '[
    {
        "inventorylocationid": 104,
        "closedate": "2026-08-01"
    }
]'
GET/ardailycloses 200403

List daily closes.

Requires scope payments:read.

Parameters
NameInTypeNotes
inventorylocationidquerystringRestrict to one inventorylocationid.
cancelquerystringDefaults to false. Pass true or any.
externalidquerystringExact match on your own key.
includequerystringComma-separated extras to embed. Only custom_fields is available: the extra fields this install has defined on the record. Off by default, and an unrecognised value is refused rather than ignored. See Conventions.
When it fails
StatusCodeMeaning
403insufficient_scopeToken lacks read scope.
curl \
  'https://acme.nolapro.com/!/api/v2/ardailycloses' \
  -H 'Authorization: Bearer $NP_TOKEN'
POST/ardailycloses 201400409422422x0422x1422x2

Record a daily drawer close.

A daily close is not a row. It compares what was counted in the drawer against what NolaPro expected and what the ledger holds, records the difference as overshort, and - when you ask for it - banks the takings and posts the variance to the GL. You do not send overshort or currencybreakdown. The first is derived from actualcash, cashdrawerfloat and gl_cash; the second from denominations. Sending either is refused rather than ignored, because a close whose stated variance is not its own arithmetic cannot be reconciled against anything. With createdeposits, cash and cheques are banked together and card settlements are split by card type according to the inventory location's settings, exactly as the Daily Drawer Close screen does it - the same code runs for both. Cash over the float banks on its own. A till that took nothing but notes and coins needs no receipt ids at all. Cheques and card settlements are different: NolaPro balances a deposit against the payments that make it up, so an amount with nothing named behind it is refused here by naming the field that fixes it, rather than failing later against the general ledger. One close per location, date and currency. A second is a 409 rather than a silent replacement, so a retried request cannot overwrite a close whose takings are already banked.

Requires scope payments:write.

Parameters
NameInTypeNotes
Idempotency-KeyheaderstringMakes the write safely retryable. Any unique string per logical operation; a UUID is fine. The failure this prevents is specific: the request succeeds, the response is lost to a timeout, you retry, and the customer is billed twice. With a key, the retry returns the original response - same status, same body, same id - and creates nothing. The body is part of the key's identity. Reusing a key with a different body is a bug on your side, not a retry, and answers 409 idempotency_replay rather than silently handing back the old response. Keys are remembered for 24 hours.
Body
FieldTypeDescription
inventorylocationidrequiredintegerThe drawer being closed. You must be allowed to use the location.
closedaterequiredstringBusiness date the close covers. One close per location, date and currency.
currencystring(10)Currency the totals are stated in. Defaults to the company currency.
actualcashmoneystring(4dp)Cash counted in the drawer, float included. What was actually in the drawer, as a decimal string. Not a JSON number.
actualchecksmoneystring(4dp)Cheques counted in the drawer. What was actually in the drawer, as a decimal string. Not a JSON number.
actualccmoneystring(4dp)Card settlements counted for the day. What was actually in the drawer, as a decimal string. Not a JSON number.
cashdrawerfloatmoneystring(4dp)The float left in the drawer, which is not banked. What was actually in the drawer, as a decimal string. Not a JSON number.
depositeamountmoneystring(4dp)What was taken to the bank. What was actually in the drawer, as a decimal string. Not a JSON number.
sys_cashmoneystring(4dp)Cash What NolaPro expected from the day's takings, as a decimal string.
sys_checksmoneystring(4dp)Cheques What NolaPro expected from the day's takings, as a decimal string.
sys_ccmoneystring(4dp)Card settlements What NolaPro expected from the day's takings, as a decimal string.
gl_cashmoneystring(4dp)Cash. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
gl_checksmoneystring(4dp)Cheques. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
gl_ccmoneystring(4dp)Card settlements. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
denominationsobjectThe note and coin count, as currencydenomination id to how many of them. Stored as currencybreakdown, which you cannot send directly.
createdepositsbooleanAlso bank the takings. Cash over the float needs nothing behind it - a till's notes and coins are not receipts. Cheques and card settlements do: name the payments they settle, or leave those amounts out. Card settlements are split into as many deposits as the location is set to keep apart.
checkacctidintegerThe bank account to deposit into. Defaults to the location's daily-close account, then its default account.
cash_invoicepaymentidsarray of integerPayments taken against invoices counted into the cash total (arinvoicepaymentdetail ids).
checks_invoicepaymentidsarray of integerPayments taken against invoices counted into the cheque total (arinvoicepaymentdetail ids).
cc_invoicepaymentidsarray of integerPayments taken against invoices counted into the card total (arinvoicepaymentdetail ids).
cash_orderdepositidsarray of integerDeposits taken against sales orders counted into the cash total (arorder_deposit ids).
checks_orderdepositidsarray of integerDeposits taken against sales orders counted into the cheque total (arorder_deposit ids).
cc_orderdepositidsarray of integerDeposits taken against sales orders counted into the card total (arorder_deposit ids).
When it fails
StatusCodeMeaning
400invalid_requestMissing or malformed field.
409already_closedThat location is already closed for that date and currency.
422close_refusedA rule was broken. Nothing was written.
422x0unknown_valueNo such location, bank account, denomination or receipt in this company.
422x1read_only_fieldA derived field was sent.
422x2account_not_configuredThe bank account has no GL account assigned.
curl -X POST \
  'https://acme.nolapro.com/!/api/v2/ardailycloses' \
  -H 'Authorization: Bearer $NP_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: your-unique-key' \
  -d '{
    "inventorylocationid": 104,
    "closedate": "2026-08-01"
}'
GET/ardailycloses/{id} 200404

Retrieve one record.

Requires scope payments:read.

Parameters
NameInTypeNotes
idrequiredpathintegerThe record id.
includequerystringComma-separated extras to embed. Only custom_fields is available: the extra fields this install has defined on the record. Off by default, and an unrecognised value is refused rather than ignored. See Conventions.
When it fails
StatusCodeMeaning
404not_foundNo record with that id.
curl \
  'https://acme.nolapro.com/!/api/v2/ardailycloses/104' \
  -H 'Authorization: Bearer $NP_TOKEN'
Response 200
{
    "inventorylocationid": 104,
    "inventorylocation": "Example inventorylocation",
    "closedate": "2026-08-01",
    "actualcash": "125.0000",
    "currencybreakdown": "Example currencybreakdown",
    "currency": "Example currency"
}
PATCH/ardailycloses/{id} 200400404409422

Amend a daily close.

Corrects a miscount. overshort is recomputed from the amended totals, so it always states the close's own arithmetic. Only while nothing has been banked against the close. Once a deposit exists, the counted totals are what the bank was told, and changing them here would leave the two disagreeing with no record of which is right - cancel the deposit first. The location, date and currency identify which drawer and day this is and cannot be moved. Cancel the close and record it against the right one instead.

Requires scope payments:write.

Parameters
NameInTypeNotes
idrequiredpathintegerThe record id.
Idempotency-KeyheaderstringMakes the write safely retryable. Any unique string per logical operation; a UUID is fine. The failure this prevents is specific: the request succeeds, the response is lost to a timeout, you retry, and the customer is billed twice. With a key, the retry returns the original response - same status, same body, same id - and creates nothing. The body is part of the key's identity. Reusing a key with a different body is a bug on your side, not a retry, and answers 409 idempotency_replay rather than silently handing back the old response. Keys are remembered for 24 hours.
Body
FieldTypeDescription
actualcashmoneystring(4dp)Cash counted in the drawer, float included. What was actually in the drawer, as a decimal string. Not a JSON number.
actualchecksmoneystring(4dp)Cheques counted in the drawer. What was actually in the drawer, as a decimal string. Not a JSON number.
actualccmoneystring(4dp)Card settlements counted for the day. What was actually in the drawer, as a decimal string. Not a JSON number.
cashdrawerfloatmoneystring(4dp)The float left in the drawer, which is not banked. What was actually in the drawer, as a decimal string. Not a JSON number.
depositeamountmoneystring(4dp)What was taken to the bank. What was actually in the drawer, as a decimal string. Not a JSON number.
sys_cashmoneystring(4dp)Cash What NolaPro expected from the day's takings, as a decimal string.
sys_checksmoneystring(4dp)Cheques What NolaPro expected from the day's takings, as a decimal string.
sys_ccmoneystring(4dp)Card settlements What NolaPro expected from the day's takings, as a decimal string.
gl_cashmoneystring(4dp)Cash. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
gl_checksmoneystring(4dp)Cheques. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
gl_ccmoneystring(4dp)Card settlements. What the ledger holds for the day, as a decimal string. gl_cash is the figure the over/short variance is measured against.
When it fails
StatusCodeMeaning
400invalid_requestMissing or malformed field.
404not_foundNo such daily close in this company.
409already_depositedThe close has already been banked.
422read_only_fieldA derived or identifying field was sent.
curl -X PATCH \
  'https://acme.nolapro.com/!/api/v2/ardailycloses/104' \
  -H 'Authorization: Bearer $NP_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: your-unique-key' \
  -d '{
    "actualcash": "125.0000",
    "actualchecks": "125.0000",
    "actualcc": "125.0000",
    "cashdrawerfloat": "125.0000",
    "depositeamount": "125.0000",
    "sys_cash": "125.0000"
}'
DELETE/ardailycloses/{id} 200404409

Cancel a daily close.

Cancels the count sheet. Any bank deposit made from it stays, because the money reached the bank and cancelling the count does not unbank it - the response names them in bankdepositids so you know what is still on file.

Requires scope payments:cancel.

Parameters
NameInTypeNotes
idrequiredpathintegerThe record id.
Idempotency-KeyheaderstringMakes the write safely retryable. Any unique string per logical operation; a UUID is fine. The failure this prevents is specific: the request succeeds, the response is lost to a timeout, you retry, and the customer is billed twice. With a key, the retry returns the original response - same status, same body, same id - and creates nothing. The body is part of the key's identity. Reusing a key with a different body is a bug on your side, not a retry, and answers 409 idempotency_replay rather than silently handing back the old response. Keys are remembered for 24 hours.
When it fails
StatusCodeMeaning
404not_foundNo such daily close in this company.
409cannot_cancelAlready cancelled.
curl -X DELETE \
  'https://acme.nolapro.com/!/api/v2/ardailycloses/104' \
  -H 'Authorization: Bearer $NP_TOKEN'