curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/filings/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/filings/history"
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/filings/history', 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/filings/history",
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/filings/history"
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/filings/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/filings/history")
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>",
"records": [
{
"id": "<string>",
"source_kind": "authority_submission",
"source_id": "<string>",
"record_kind": "filing",
"filing_type": "<string>",
"period": "<string>",
"provenance": "lac_transmission",
"authority_environment": "<string>",
"status": "authority_acknowledged",
"documents": [
{
"key": "<string>",
"kind": "retained_artifact",
"title": "<string>",
"filename": "<string>",
"available": true,
"role": "<string>",
"content_type": "<string>",
"unavailable_reason": "retained_object_missing"
}
],
"documents_state": "available",
"period_start": "<string>",
"period_end": "<string>",
"authority": "<string>",
"submitted_at": "<string>",
"observed_at": "<string>",
"reference": "<string>",
"draft_uuid": "<string>",
"replaces_record_id": "<string>",
"request_kind": "<string>",
"confirmation": {
"state": "accepted_awaiting_processing",
"ack_at": "<string>",
"confirmed_at": "<string>"
}
}
],
"documents_status": "available",
"confirmations_status": "available",
"payroll_scope": "included",
"next_cursor": "<string>",
"service_mode": "<string>",
"books_authority": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Get the filing archive
Every filing the company has on record, newest event first: returns LAC transmitted, returns filed in an authority’s own service and recorded from their receipt, and returns read back from the authority as already filed. Bounded and paged independently of the review period in GET /filings, which only covers the current and previous VAT period.
Read authority is company membership plus the payroll role, not the current filing authority: a company whose books moved to its own accountant keeps the record of what LAC filed for it. Incomes Register filings need the admin or approver role and payroll_scope says whether they are included.
A 200 always means the canonical read succeeded, so an empty records list means the company has no filings; a failed read is 503. Optional enrichments degrade independently through documents_status and confirmations_status.
curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/filings/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/filings/history"
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/filings/history', 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/filings/history",
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/filings/history"
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/filings/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/filings/history")
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>",
"records": [
{
"id": "<string>",
"source_kind": "authority_submission",
"source_id": "<string>",
"record_kind": "filing",
"filing_type": "<string>",
"period": "<string>",
"provenance": "lac_transmission",
"authority_environment": "<string>",
"status": "authority_acknowledged",
"documents": [
{
"key": "<string>",
"kind": "retained_artifact",
"title": "<string>",
"filename": "<string>",
"available": true,
"role": "<string>",
"content_type": "<string>",
"unavailable_reason": "retained_object_missing"
}
],
"documents_state": "available",
"period_start": "<string>",
"period_end": "<string>",
"authority": "<string>",
"submitted_at": "<string>",
"observed_at": "<string>",
"reference": "<string>",
"draft_uuid": "<string>",
"replaces_record_id": "<string>",
"request_kind": "<string>",
"confirmation": {
"state": "accepted_awaiting_processing",
"ack_at": "<string>",
"confirmed_at": "<string>"
}
}
],
"documents_status": "available",
"confirmations_status": "available",
"payroll_scope": "included",
"next_cursor": "<string>",
"service_mode": "<string>",
"books_authority": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Authorizations
Portal API key minted in portal Settings → API access. Scope read or write; pinned to one company. Send as Authorization: Bearer lac_sk_....
Query Parameters
Target company. Optional — API keys are pinned to one company, and single-company sessions default to it.
Records per page.
1 <= x <= 200Opaque next_cursor from the previous page. Bound to the company and the read scope; a cursor from another company or another scope is rejected rather than silently paging a different list.
1Response
One page of the filing archive.
One bounded page of the filing archive plus its honest read state.
Show child attributes
Show child attributes
available, unavailable available, unavailable, not_applicable included, excluded_permission Absent on the last page.