curl --request GET \
--url https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/account-audit \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/account-audit"
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/account-audit', 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/account-audit",
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/account-audit"
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/account-audit")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/account-audit")
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_account_audit",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bank_account": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"last4": "<string>",
"gl_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"gl_account_number": "<string>",
"gl_account_name": "<string>",
"normal_balance": "<string>",
"plaid_connected": true,
"bank_stated_balance": 123,
"bank_stated_as_of": "2023-11-07T05:31:56Z",
"baseline_date": "2023-12-25",
"baseline_balance": 123
},
"as_of": "2023-12-25",
"month_ends": [
"2023-12-25"
],
"since": "2023-12-25",
"method": {
"document": "<string>",
"steps": [
{
"key": "<string>",
"step": 123,
"answered": true,
"title": "<string>"
}
]
},
"answers": {
"feed_against_bank": {},
"duplicates_and_exclusions": {},
"books_against_bank": {},
"clearing_accounts": {},
"error_classes": {}
},
"findings": [
{
"class": "<string>",
"step": 123,
"door": "match",
"severity": "blocking",
"headline": "<string>",
"detail": "<string>",
"amount": 123,
"count": 123
}
],
"finding_count": 123,
"blocking_count": 123,
"next_step": "<string>",
"writes_nothing": true
}{
"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"
}Retrieve a bank account's reconciliation audit
Returns the full reconciliation audit for one bank account in a single call: findings across the bank feed, duplicate or excluded entries, the books-to-bank comparison, clearing-account balances, and common error classes, each with its own severity and the operation that resolves it. Read-only and calls no third party; requires accounting:read or migration:read scope, and an unmapped or foreign bank account id returns 404.
curl --request GET \
--url https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/account-audit \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/account-audit"
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/account-audit', 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/account-audit",
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/account-audit"
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/account-audit")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/entities/{entity_id}/reconciliation/account-audit")
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_account_audit",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bank_account": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"last4": "<string>",
"gl_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"gl_account_number": "<string>",
"gl_account_name": "<string>",
"normal_balance": "<string>",
"plaid_connected": true,
"bank_stated_balance": 123,
"bank_stated_as_of": "2023-11-07T05:31:56Z",
"baseline_date": "2023-12-25",
"baseline_balance": 123
},
"as_of": "2023-12-25",
"month_ends": [
"2023-12-25"
],
"since": "2023-12-25",
"method": {
"document": "<string>",
"steps": [
{
"key": "<string>",
"step": 123,
"answered": true,
"title": "<string>"
}
]
},
"answers": {
"feed_against_bank": {},
"duplicates_and_exclusions": {},
"books_against_bank": {},
"clearing_accounts": {},
"error_classes": {}
},
"findings": [
{
"class": "<string>",
"step": 123,
"door": "match",
"severity": "blocking",
"headline": "<string>",
"detail": "<string>",
"amount": 123,
"count": 123
}
],
"finding_count": 123,
"blocking_count": 123,
"next_step": "<string>",
"writes_nothing": true
}{
"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.
How many month ends before as_of to test, 1 to 36.
1 <= x <= 36YYYY-MM-DD. Limits the clearing and error-class answers to activity on or after this day.
How many days apart an unpaired bank row and an unpaired book line of the same amount may be and still be offered as a pair.
How many days apart two same-amount vendor payments may be and still be reported as a possible double payment.
The most rows any one list returns. Each list still publishes its unbounded total.
Response
The audit of that bank account
reconciliation_account_audit The account audited, its mapped general ledger account and the bank's last persisted balance.
Show child attributes
Show child attributes
The audit method's steps, and which of them this read answers.
Show child attributes
Show child attributes
The five answers, each with its own figures, rows and findings.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?

