curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review', 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.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review",
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.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review"
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.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review")
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{
"customer_id": "<string>",
"bill": {
"id": "<string>",
"resource": {
"uri": "<string>",
"revision": "<string>"
},
"number": "<string>",
"supplier": "<string>",
"issue_date": "<string>",
"due_date": "<string>",
"currency": "<string>",
"status": "<string>",
"total_cents": 123,
"vat_cents": 123,
"open_cents": 123,
"lines": [
{
"description": "<string>",
"expense_account_code": "<string>",
"vat_code": "<string>",
"vat_rate_basis_points": 123,
"net_cents": 123,
"vat_cents": 123,
"gross_cents": 123,
"vat_deduction": {
"basis_points": 123,
"review_status": "<string>",
"reason": "<string>"
}
}
]
},
"original": {
"filename": "<string>",
"id": "<string>",
"resource": {
"uri": "<string>",
"revision": "<string>"
},
"sha256": "<string>",
"adequacy": "<string>",
"status": "<string>"
},
"latest_review": {
"decided_at": "<string>",
"receipt_uri": "<string>",
"id": "<string>",
"bill_id": "<string>",
"document_id": "<string>",
"bill_revision": "<string>",
"document_revision": "<string>",
"document_sha256": "<string>",
"document_adequacy": "<string>",
"verdict": "<string>",
"reason": "<string>",
"prior_review_id": "<string>",
"draft_contract": "<string>",
"draft": {},
"draft_digest": "<string>"
},
"review_state": "<string>",
"review_reason": "<string>",
"calculation": {
"contract": "<string>",
"draft": {
"period": "<string>",
"entry_date": "<string>",
"description": "<string>",
"source": "<string>",
"lines": [
{
"account_code": "<string>",
"debit_cents": 123,
"credit_cents": 123,
"vat_code": "<string>",
"description": "<string>",
"dimensions": {},
"dimension_allocations": {}
}
],
"id": "<string>",
"customer_id": "<string>",
"source_ref": "<string>",
"dimensions_as_stated": true
},
"digest": "<string>",
"period_status": "<string>"
},
"calculation_reason": "<string>",
"journals": [
{
"status": "<string>",
"reversal_of": "<string>",
"live": true,
"id": "<string>",
"entry_number": "<string>",
"review_id": "<string>"
}
],
"posting_state": "<string>",
"posting_ready": true,
"posting_reason": "<string>",
"actor": {
"kind": "<string>",
"realm": "<string>",
"subject": "<string>",
"tenant_id": "<string>"
},
"actions": [
{
"operation": {
"id": "<string>",
"version": 32767
},
"role_eligible": true
}
],
"requires_staff_confirmation": true
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Read the current original review and accounting calculation
Returns the bill, exact selected original, bill-specific review, current journal calculation and posting history from one read-only snapshot. Customer purchase-invoice roles may inspect it; staff may inspect it within the selected customer workspace. Role eligibility describes actions available after explicit staff confirmation. It grants no write authority. Review and journal posting use the canonical operation plane with their own preview, execute and status requests. Neither action constitutes customer payment approval or bank settlement.
curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review', 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.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review",
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.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review"
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.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/purchase-bills/{bill_id}/original-review")
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{
"customer_id": "<string>",
"bill": {
"id": "<string>",
"resource": {
"uri": "<string>",
"revision": "<string>"
},
"number": "<string>",
"supplier": "<string>",
"issue_date": "<string>",
"due_date": "<string>",
"currency": "<string>",
"status": "<string>",
"total_cents": 123,
"vat_cents": 123,
"open_cents": 123,
"lines": [
{
"description": "<string>",
"expense_account_code": "<string>",
"vat_code": "<string>",
"vat_rate_basis_points": 123,
"net_cents": 123,
"vat_cents": 123,
"gross_cents": 123,
"vat_deduction": {
"basis_points": 123,
"review_status": "<string>",
"reason": "<string>"
}
}
]
},
"original": {
"filename": "<string>",
"id": "<string>",
"resource": {
"uri": "<string>",
"revision": "<string>"
},
"sha256": "<string>",
"adequacy": "<string>",
"status": "<string>"
},
"latest_review": {
"decided_at": "<string>",
"receipt_uri": "<string>",
"id": "<string>",
"bill_id": "<string>",
"document_id": "<string>",
"bill_revision": "<string>",
"document_revision": "<string>",
"document_sha256": "<string>",
"document_adequacy": "<string>",
"verdict": "<string>",
"reason": "<string>",
"prior_review_id": "<string>",
"draft_contract": "<string>",
"draft": {},
"draft_digest": "<string>"
},
"review_state": "<string>",
"review_reason": "<string>",
"calculation": {
"contract": "<string>",
"draft": {
"period": "<string>",
"entry_date": "<string>",
"description": "<string>",
"source": "<string>",
"lines": [
{
"account_code": "<string>",
"debit_cents": 123,
"credit_cents": 123,
"vat_code": "<string>",
"description": "<string>",
"dimensions": {},
"dimension_allocations": {}
}
],
"id": "<string>",
"customer_id": "<string>",
"source_ref": "<string>",
"dimensions_as_stated": true
},
"digest": "<string>",
"period_status": "<string>"
},
"calculation_reason": "<string>",
"journals": [
{
"status": "<string>",
"reversal_of": "<string>",
"live": true,
"id": "<string>",
"entry_number": "<string>",
"review_id": "<string>"
}
],
"posting_state": "<string>",
"posting_ready": true,
"posting_reason": "<string>",
"actor": {
"kind": "<string>",
"realm": "<string>",
"subject": "<string>",
"tenant_id": "<string>"
},
"actions": [
{
"operation": {
"id": "<string>",
"version": 32767
},
"role_eligible": true
}
],
"requires_staff_confirmation": true
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Authorizations
Firebase ID token from an interactive portal session. Required for interactive operations (payroll, company settings, API-key management) and invoice decisions allowed by the member's review permissions.
Path Parameters
Exact opaque purchase-bill entity ID, URL-encoded as one path segment. Preserve a literal bill: prefix or whitespace; this parameter is not the family-qualified row ID used by the unified invoice record route.
Query Parameters
Target company. Optional — API keys are pinned to one company, and single-company sessions default to it.
Response
Current source, review, calculation and posting state.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes