curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/expenses/{claim_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/expenses/{claim_id}"
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/expenses/{claim_id}', 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/expenses/{claim_id}",
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/expenses/{claim_id}"
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/expenses/{claim_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/expenses/{claim_id}")
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>",
"viewer_role": "admin",
"viewer_email": "<string>",
"can_submit": true,
"can_approve": true,
"claim": {
"id": "<string>",
"claimant_email": "<string>",
"claimant_name": "<string>",
"claim_kind": "receipt",
"payment_method": "<string>",
"status": "draft",
"revision": 2,
"purpose": "<string>",
"hash": "<string>",
"total_cents": 1,
"reimbursable_cents": 1,
"taxable_cents": 1,
"reportable_cents": 1,
"income_report_status": "<string>",
"claim": {},
"submitted_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"latest_detail": "<string>",
"payment": {
"state": "ready_to_release",
"released_at": "2023-11-07T05:31:56Z",
"settled_at": "2023-11-07T05:31:56Z",
"batch_id": "<string>",
"source_kind": "reimbursement",
"source_id": "<string>",
"source_revision": "<string>",
"instruction_count": 123,
"total_cents": 123,
"currency": "<string>",
"transport": "<string>"
},
"payment_instruction": {
"status": "ready",
"reporting_status": "ready",
"payee_name": "<string>",
"amount_cents": 1,
"message": "<string>",
"iban": "<string>",
"bic": "<string>"
},
"payment_proposal": {}
}
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Read an exact expense claim and its payment state
Interactive admin, approver or claimant session required. A claimant can read only their own claims and receives payment state and timestamps without the company payment batch or transport fields. Uses the same canonical claim and settlement reader as the expense list, independently of its250-record limit. Missing, wrong-company and other-claimant IDs return404. Approval or release does not imply bank settlement.
curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/expenses/{claim_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/expenses/{claim_id}"
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/expenses/{claim_id}', 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/expenses/{claim_id}",
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/expenses/{claim_id}"
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/expenses/{claim_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/expenses/{claim_id}")
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>",
"viewer_role": "admin",
"viewer_email": "<string>",
"can_submit": true,
"can_approve": true,
"claim": {
"id": "<string>",
"claimant_email": "<string>",
"claimant_name": "<string>",
"claim_kind": "receipt",
"payment_method": "<string>",
"status": "draft",
"revision": 2,
"purpose": "<string>",
"hash": "<string>",
"total_cents": 1,
"reimbursable_cents": 1,
"taxable_cents": 1,
"reportable_cents": 1,
"income_report_status": "<string>",
"claim": {},
"submitted_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"latest_detail": "<string>",
"payment": {
"state": "ready_to_release",
"released_at": "2023-11-07T05:31:56Z",
"settled_at": "2023-11-07T05:31:56Z",
"batch_id": "<string>",
"source_kind": "reimbursement",
"source_id": "<string>",
"source_revision": "<string>",
"instruction_count": 123,
"total_cents": 123,
"currency": "<string>",
"transport": "<string>"
},
"payment_instruction": {
"status": "ready",
"reporting_status": "ready",
"payee_name": "<string>",
"amount_cents": 1,
"message": "<string>",
"iban": "<string>",
"bic": "<string>"
},
"payment_proposal": {}
}
}{
"error": "<string>",
"detail": "<string>"
}{
"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
1 - 300Query Parameters
Target company. Optional — API keys are pinned to one company, and single-company sessions default to it.
Response
Authorized claim and viewer capabilities from a fresh canonical read.