curl --request GET \
--url https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "reconciliation_bank_balance_as_of",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"as_of": "2023-12-25",
"basis": "anchored",
"balance_state": "verified",
"anchor_date": "2023-12-25",
"verified_through": "2023-12-25",
"period_gap_count": 123,
"account_kind": "asset",
"balance_label": "<string>",
"balance_if_pending_excluded": 123,
"balance_if_pending_included": 123,
"pending_after_count": 123,
"pending_after_amount": 123,
"bases_agree": true,
"bank_stated_balance": 123,
"bank_stated_as_of": "2023-11-07T05:31:56Z",
"bank_stated_reason": "<string>",
"bank_stated_pending_treatment": "<string>"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}The bank's balance on a date, with its basis named
What the BANK said this account’s balance was on a given day, which is the counterpart of
cash-balance (what the BOOKS say for the same day). Read this one against that one to
reconcile the two without computing either yourself.
THE FIGURE NAMES THE ASSUMPTION IT CARRIES, and you must read that before using it. On an
account with no reconciliation baseline and no completed period the balance is derived by
subtracting the POSTED feed rows dated after the day from the balance the institution last
reported. That is correct only if the institution’s reported balance is itself posted-only.
Whether a bank counts its own pending items in the balance it reports is a property of that
bank, so BOTH readings are returned: balance_if_pending_excluded (the figure this API has
always published) and balance_if_pending_included, with pending_after_count and
pending_after_amount between them. bases_agree is true when no pending item is dated
after the day, in which case the two figures are the same number. The institution’s
statement for that date settles which reading it holds to.
balance_state is verified (inside a completed period that ties), computed (walked from
an anchor), bank_current (no anchor, walked back from the reported balance) or none
(no figure can be derived; bank_stated_reason says why, e.g. never_synced). A none
state returns nulls, never zeros: “I cannot say” and “zero dollars” are different answers.
READ-ONLY, and it calls no third party: bank_stated_balance is the persisted reading as of
bank_stated_as_of, never a live fetch, so this endpoint answers even when the institution
does not.
Requires accounting:read or migration:read scope.
curl --request GET \
--url https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/bank-balance-as-of")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "reconciliation_bank_balance_as_of",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"as_of": "2023-12-25",
"basis": "anchored",
"balance_state": "verified",
"anchor_date": "2023-12-25",
"verified_through": "2023-12-25",
"period_gap_count": 123,
"account_kind": "asset",
"balance_label": "<string>",
"balance_if_pending_excluded": 123,
"balance_if_pending_included": 123,
"pending_after_count": 123,
"pending_after_amount": 123,
"bases_agree": true,
"bank_stated_balance": 123,
"bank_stated_as_of": "2023-11-07T05:31:56Z",
"bank_stated_reason": "<string>",
"bank_stated_pending_treatment": "<string>"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}{
"error": "not_found",
"code": "not_found",
"type": "not_found",
"hint": "The requested order does not exist or does not belong to this entity.",
"param": "expand[0]",
"required": "accounts:read",
"request_id": "req_abc123"
}Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Path Parameters
Query Parameters
YYYY-MM-DD. Defaults to today.
Response
The bank's balance on that date, under both readings
reconciliation_bank_balance_as_of anchored, bank_current, none verified, computed, bank_current, none asset, liability Was this page helpful?

