Sync open Invoices and Bills from a ledger connection
curl --request POST \
--url https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync"
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync', 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.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$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.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"upserted": 123,
"closed": 123
}Account Connections
Sync open Invoices and Bills from a ledger connection
Pulls the current open set from the bookkeeping system, upserts Open items, and marks missing rows closed (not deleted). Runs in the request. Overlapping sync on the same connection is rejected. Settlement push is out of scope.
POST
/
v2
/
account-connections
/
bookkeeping
/
{connectionId}
/
open-items
/
sync
Sync open Invoices and Bills from a ledger connection
curl --request POST \
--url https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync"
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync', 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.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$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.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/account-connections/bookkeeping/{connectionId}/open-items/sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"upserted": 123,
"closed": 123
}Authorizations
AuthorizationAuthorization
Authorization method required to allow user to access the api endpoints.
Path Parameters
Last modified on September 3, 2026
Was this page helpful?