curl --request POST \
--url https://api.arcuserp.com/v1/accounting/statements/{account_id}/send \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to_email": "jsmith@example.com",
"from": "2023-12-25",
"to": "2023-12-25",
"custom_message": "<string>"
}
'import requests
url = "https://api.arcuserp.com/v1/accounting/statements/{account_id}/send"
payload = {
"to_email": "jsmith@example.com",
"from": "2023-12-25",
"to": "2023-12-25",
"custom_message": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
to_email: 'jsmith@example.com',
from: '2023-12-25',
to: '2023-12-25',
custom_message: '<string>'
})
};
fetch('https://api.arcuserp.com/v1/accounting/statements/{account_id}/send', 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/statements/{account_id}/send",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to_email' => 'jsmith@example.com',
'from' => '2023-12-25',
'to' => '2023-12-25',
'custom_message' => '<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/statements/{account_id}/send"
payload := strings.NewReader("{\n \"to_email\": \"jsmith@example.com\",\n \"from\": \"2023-12-25\",\n \"to\": \"2023-12-25\",\n \"custom_message\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.arcuserp.com/v1/accounting/statements/{account_id}/send")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to_email\": \"jsmith@example.com\",\n \"from\": \"2023-12-25\",\n \"to\": \"2023-12-25\",\n \"custom_message\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/accounting/statements/{account_id}/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to_email\": \"jsmith@example.com\",\n \"from\": \"2023-12-25\",\n \"to\": \"2023-12-25\",\n \"custom_message\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"sent_to": "jsmith@example.com",
"send_result": {},
"skipped": true,
"reason": "<string>",
"preference": "<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"
}Send an AR statement
Sends an AR statement to a single customer account for the requested period. Requires accounting:read scope; when the account’s notification preferences disable statement email, the call still returns 200 with skipped: true and a reason.
curl --request POST \
--url https://api.arcuserp.com/v1/accounting/statements/{account_id}/send \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to_email": "jsmith@example.com",
"from": "2023-12-25",
"to": "2023-12-25",
"custom_message": "<string>"
}
'import requests
url = "https://api.arcuserp.com/v1/accounting/statements/{account_id}/send"
payload = {
"to_email": "jsmith@example.com",
"from": "2023-12-25",
"to": "2023-12-25",
"custom_message": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
to_email: 'jsmith@example.com',
from: '2023-12-25',
to: '2023-12-25',
custom_message: '<string>'
})
};
fetch('https://api.arcuserp.com/v1/accounting/statements/{account_id}/send', 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/statements/{account_id}/send",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to_email' => 'jsmith@example.com',
'from' => '2023-12-25',
'to' => '2023-12-25',
'custom_message' => '<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/statements/{account_id}/send"
payload := strings.NewReader("{\n \"to_email\": \"jsmith@example.com\",\n \"from\": \"2023-12-25\",\n \"to\": \"2023-12-25\",\n \"custom_message\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.arcuserp.com/v1/accounting/statements/{account_id}/send")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to_email\": \"jsmith@example.com\",\n \"from\": \"2023-12-25\",\n \"to\": \"2023-12-25\",\n \"custom_message\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/accounting/statements/{account_id}/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to_email\": \"jsmith@example.com\",\n \"from\": \"2023-12-25\",\n \"to\": \"2023-12-25\",\n \"custom_message\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"sent_to": "jsmith@example.com",
"send_result": {},
"skipped": true,
"reason": "<string>",
"preference": "<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
Customer account UUID. Must belong to the calling entity (Layer 1).
Body
Override recipient. Defaults to accounts.email lookup. Required if account has no email on file.
Statement period start (ISO date).
Statement period end (ISO date).
Optional one-time message rendered into the statement_email template.
Response
Send result
Postmark send response (message_id + accepted_at).
True when gated by notification preference; success=false in that case.
Populated when skipped=true (e.g. 'notification_disabled').
Populated when skipped=true (the notification key that gated).
Was this page helpful?

