curl --request PATCH \
--url https://api.arcuserp.com/v1/accounting/reconciliations/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "cancelled",
"opening_balance": 123,
"statement_ending_balance": 123,
"statement_date": "2023-12-25",
"notes": "<string>"
}
'import requests
url = "https://api.arcuserp.com/v1/accounting/reconciliations/{id}"
payload = {
"status": "cancelled",
"opening_balance": 123,
"statement_ending_balance": 123,
"statement_date": "2023-12-25",
"notes": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
status: 'cancelled',
opening_balance: 123,
statement_ending_balance: 123,
statement_date: '2023-12-25',
notes: '<string>'
})
};
fetch('https://api.arcuserp.com/v1/accounting/reconciliations/{id}', 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/accounting/reconciliations/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'cancelled',
'opening_balance' => 123,
'statement_ending_balance' => 123,
'statement_date' => '2023-12-25',
'notes' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/accounting/reconciliations/{id}"
payload := strings.NewReader("{\n \"status\": \"cancelled\",\n \"opening_balance\": 123,\n \"statement_ending_balance\": 123,\n \"statement_date\": \"2023-12-25\",\n \"notes\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.arcuserp.com/v1/accounting/reconciliations/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"cancelled\",\n \"opening_balance\": 123,\n \"statement_ending_balance\": 123,\n \"statement_date\": \"2023-12-25\",\n \"notes\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/accounting/reconciliations/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"cancelled\",\n \"opening_balance\": 123,\n \"statement_ending_balance\": 123,\n \"statement_date\": \"2023-12-25\",\n \"notes\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {}
}{
"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"
}{
"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"
}Update a reconciliation session
Cancels an in-progress reconciliation session when the body sets status to cancelled, unwinding its matches and clearing its links, or edits the session’s opening balance, statement ending balance, statement date, or notes when no status is sent. Requires accounting:write scope; only an in_progress session can be cancelled or edited, and re-cancelling an already-cancelled session is a no-op.
curl --request PATCH \
--url https://api.arcuserp.com/v1/accounting/reconciliations/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "cancelled",
"opening_balance": 123,
"statement_ending_balance": 123,
"statement_date": "2023-12-25",
"notes": "<string>"
}
'import requests
url = "https://api.arcuserp.com/v1/accounting/reconciliations/{id}"
payload = {
"status": "cancelled",
"opening_balance": 123,
"statement_ending_balance": 123,
"statement_date": "2023-12-25",
"notes": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
status: 'cancelled',
opening_balance: 123,
statement_ending_balance: 123,
statement_date: '2023-12-25',
notes: '<string>'
})
};
fetch('https://api.arcuserp.com/v1/accounting/reconciliations/{id}', 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/accounting/reconciliations/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'cancelled',
'opening_balance' => 123,
'statement_ending_balance' => 123,
'statement_date' => '2023-12-25',
'notes' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.arcuserp.com/v1/accounting/reconciliations/{id}"
payload := strings.NewReader("{\n \"status\": \"cancelled\",\n \"opening_balance\": 123,\n \"statement_ending_balance\": 123,\n \"statement_date\": \"2023-12-25\",\n \"notes\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.arcuserp.com/v1/accounting/reconciliations/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"cancelled\",\n \"opening_balance\": 123,\n \"statement_ending_balance\": 123,\n \"statement_date\": \"2023-12-25\",\n \"notes\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/accounting/reconciliations/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"cancelled\",\n \"opening_balance\": 123,\n \"statement_ending_balance\": 123,\n \"statement_date\": \"2023-12-25\",\n \"notes\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {}
}{
"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"
}{
"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
Reconciliation session UUID.
Body
The only settable status; completion goes through POST /accounting/reconciliations/{id}/complete (Cognito surface).
cancelled YYYY-MM-DD; must fall in an open accounting period.
5000Response
The updated (or cancelled) session row; cancel responses add matches_reverted + gl_lines_unreconciled counts
Was this page helpful?

