curl --request GET \
--url https://api.arcuserp.com/v1/vendor-bills/{id}/void-preview \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/vendor-bills/{id}/void-preview"
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/vendor-bills/{id}/void-preview', 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/vendor-bills/{id}/void-preview",
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/vendor-bills/{id}/void-preview"
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/vendor-bills/{id}/void-preview")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/vendor-bills/{id}/void-preview")
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{
"data": {
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bill_number": "<string>",
"status": "<string>",
"has_landed_allocation": true,
"refusal": {
"code": "landed_reversal_units_in_transit",
"hint": "<string>",
"meta": {}
},
"landed_reversal": {
"split": {
"landed_total_cents": 123,
"inventory_cents": 123,
"cogs_cents": 123,
"other_accounts": [
{
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cents": 123
}
],
"at_allocation": {
"inventory_cents": 123,
"cogs_cents": 123
},
"negative_attribution_cents": 123
},
"accounts": [
{
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_number": "<string>",
"account_name": "<string>",
"role": "inventory",
"at_allocation_cents": 123,
"reversal_cents": 123
}
],
"layers": [
{
"kind": "bumped",
"layer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"remaining_qty": 123,
"unit_cost_delta": 123,
"inventory_cents": 123,
"product_title": "<string>",
"sku": "<string>",
"location_name": "<string>",
"receipt_reference": "<string>",
"receipt_kind": "<string>",
"po_number": "<string>"
}
],
"negative_attribution": [
{
"order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cents": 123
}
],
"compensations_followed": [
{}
]
}
}
}{
"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"
}Preview what voiding a vendor bill would move
What voiding this bill would move for its landed cost, from the same plan the void posts: per FIFO layer (the bumped layers and every layer the charge followed a transfer, a work order or a customer return into) and per GL account (inventory, cost of goods sold, landed clearing and any account units were adjusted or written off into), the share at the moment of the preview, the negative attribution the order lines will receive, and the refusal the void would answer (units in transit, sent to another company, held in quarantine, or left stock with no record of where their cost went). Reads only. It reveals inventory cost and cost of goods sold, so it requires the margin permission; no API scope grants it today, so an API key is refused 403 margin_permission_required (the same answer as a user without the permission).
curl --request GET \
--url https://api.arcuserp.com/v1/vendor-bills/{id}/void-preview \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.arcuserp.com/v1/vendor-bills/{id}/void-preview"
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/vendor-bills/{id}/void-preview', 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/vendor-bills/{id}/void-preview",
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/vendor-bills/{id}/void-preview"
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/vendor-bills/{id}/void-preview")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcuserp.com/v1/vendor-bills/{id}/void-preview")
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{
"data": {
"bill_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"bill_number": "<string>",
"status": "<string>",
"has_landed_allocation": true,
"refusal": {
"code": "landed_reversal_units_in_transit",
"hint": "<string>",
"meta": {}
},
"landed_reversal": {
"split": {
"landed_total_cents": 123,
"inventory_cents": 123,
"cogs_cents": 123,
"other_accounts": [
{
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cents": 123
}
],
"at_allocation": {
"inventory_cents": 123,
"cogs_cents": 123
},
"negative_attribution_cents": 123
},
"accounts": [
{
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_number": "<string>",
"account_name": "<string>",
"role": "inventory",
"at_allocation_cents": 123,
"reversal_cents": 123
}
],
"layers": [
{
"kind": "bumped",
"layer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"remaining_qty": 123,
"unit_cost_delta": 123,
"inventory_cents": 123,
"product_title": "<string>",
"sku": "<string>",
"location_name": "<string>",
"receipt_reference": "<string>",
"receipt_kind": "<string>",
"po_number": "<string>"
}
],
"negative_attribution": [
{
"order_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cents": 123
}
],
"compensations_followed": [
{}
]
}
}
}{
"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
Response
The void preview.
Show child attributes
Show child attributes
Was this page helpful?

