curl --request POST \
--url https://api.arcuserp.com/v1/quick-check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"gl_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"memo": "<string>",
"payment_date": "2023-12-25"
}
'import requests
url = "https://api.arcuserp.com/v1/quick-check"
payload = {
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"gl_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"memo": "<string>",
"payment_date": "2023-12-25"
}
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({
vendor_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: 123,
gl_account_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
memo: '<string>',
payment_date: '2023-12-25'
})
};
fetch('https://api.arcuserp.com/v1/quick-check', 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/quick-check",
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([
'vendor_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => 123,
'gl_account_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'memo' => '<string>',
'payment_date' => '2023-12-25'
]),
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/quick-check"
payload := strings.NewReader("{\n \"vendor_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 123,\n \"gl_account_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"memo\": \"<string>\",\n \"payment_date\": \"2023-12-25\"\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/quick-check")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vendor_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 123,\n \"gl_account_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"memo\": \"<string>\",\n \"payment_date\": \"2023-12-25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/quick-check")
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 \"vendor_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 123,\n \"gl_account_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"memo\": \"<string>\",\n \"payment_date\": \"2023-12-25\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "printed_check",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"check_number": 123,
"bank_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"memo": "<string>",
"status": "printed",
"printed_at": "2023-11-07T05:31:56Z",
"voided_at": "2023-11-07T05:31:56Z",
"cleared_at": "2023-11-07T05:31:56Z",
"cleared_source": "bank_match",
"cleared_bank_transaction_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cleared_bank_txn_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"drawn_on_bank_name": "<string>",
"cleared_link_source": "forward_stamp",
"cleared_link_conflict": true,
"cleared_bank_date": "2023-12-25",
"cleared_bank_amount": 123,
"cleared_bank_description": "<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"
}Create a quick check (one-time payment without bill)
Creates and immediately prints a one-off check outside of a batch, for urgent or ad-hoc
vendor payments. Specify the payee, amount, and the GL expense account to debit. The check
number is drawn from the entity’s check sequence and the GL journal entry is posted immediately.
Requires purchasing:write scope.
curl --request POST \
--url https://api.arcuserp.com/v1/quick-check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"gl_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"memo": "<string>",
"payment_date": "2023-12-25"
}
'import requests
url = "https://api.arcuserp.com/v1/quick-check"
payload = {
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"gl_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"memo": "<string>",
"payment_date": "2023-12-25"
}
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({
vendor_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: 123,
gl_account_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
memo: '<string>',
payment_date: '2023-12-25'
})
};
fetch('https://api.arcuserp.com/v1/quick-check', 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/quick-check",
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([
'vendor_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => 123,
'gl_account_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'memo' => '<string>',
'payment_date' => '2023-12-25'
]),
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/quick-check"
payload := strings.NewReader("{\n \"vendor_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 123,\n \"gl_account_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"memo\": \"<string>\",\n \"payment_date\": \"2023-12-25\"\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/quick-check")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vendor_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 123,\n \"gl_account_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"memo\": \"<string>\",\n \"payment_date\": \"2023-12-25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/quick-check")
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 \"vendor_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 123,\n \"gl_account_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"memo\": \"<string>\",\n \"payment_date\": \"2023-12-25\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"object": "printed_check",
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"check_number": 123,
"bank_account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"memo": "<string>",
"status": "printed",
"printed_at": "2023-11-07T05:31:56Z",
"voided_at": "2023-11-07T05:31:56Z",
"cleared_at": "2023-11-07T05:31:56Z",
"cleared_source": "bank_match",
"cleared_bank_transaction_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cleared_bank_txn_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"drawn_on_bank_name": "<string>",
"cleared_link_source": "forward_stamp",
"cleared_link_conflict": true,
"cleared_bank_date": "2023-12-25",
"cleared_bank_amount": 123,
"cleared_bank_description": "<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"
}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.
Body
Response
Created quick check
A check printed by Arcus (paper AP payment).
printed_check Sequential per bank account.
printed, reprinted, voided, cleared The EVIDENCE CLASS behind status=cleared. register_only means the payment leg already credited a bank account and no journal entry was posted for the clear, so the row is a register truth and NOT a bank fact. Null on a check cleared before migration 20260915a, when nothing recorded the class.
bank_match, manual_clear, register_only, migrated The bank line that paid this check. Written when the clear is driven by a matched bank row; null for a manual clear and for every check cleared before 2026-09-18. When it is null the pairing may still be recorded on the bank side.
RETRIEVE ONLY (GET /v1/printed-checks/{id}); absent from the list response. The RESOLVED bank line: cleared_bank_transaction_id when this check carries the forward stamp, otherwise the bank row whose matched_printed_check_id names this check. A check that is still printed has no forward stamp by definition, so this is the only field that can answer "which line will pay it" before the clear. Pass it as bank_transaction_id on POST /v1/printed-checks/{id}/clear and the relief is dated the day the BANK paid rather than today.
RETRIEVE ONLY (GET /v1/printed-checks/{id}). The LIST response, GET /v1/printed-checks, does NOT carry it and carries no live-drawee field under any name: that door answers from the stored row, so the only bank name on a list item is the issue-time snapshot bank_account_name, and a list item can therefore name a bank this check is no longer drawn on. Retrieve the check to get this field. The name of the bank this check is CURRENTLY drawn on, resolved from printed_checks.bank_account_id (falling back to the linked AP payment's bank) and falling back to the issue-time snapshot bank_account_name only when no drawee resolves. It is a different fact from bank_account_name, which is what the PAPER said at issue time and is what a re-print reproduces: after the drawee is moved with PATCH /v1/printed-checks/{id}/bank the two disagree, and this field is the one that names the bank whose statement the check belongs on and whose GL its clearing relief will credit. Null only when the check has no resolvable drawee AND carries no snapshot.
RETRIEVE ONLY. WHICH pairing answered for cleared_bank_txn_id: forward_stamp is the check's own column (written by the clear that relieved it) and reverse_link is the bank row pointing back at the check. Null when nothing pairs.
forward_stamp, reverse_link RETRIEVE ONLY. True when the check names one bank line AND a DIFFERENT bank row also points at this check. Two lines claiming one check is the shape of a double relief, so it is surfaced rather than silently resolved; cleared_bank_txn_id still answers with the forward stamp.
RETRIEVE ONLY. The resolved bank line's own transaction date: the day the relief is dated when this line drives the clear.
RETRIEVE ONLY. The resolved bank line's signed amount, so a caller can compare it with the check before clearing.
RETRIEVE ONLY. The resolved bank line's description as the bank sent it.
Was this page helpful?

