curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/payments \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/payments"
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/payments', 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/payments",
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/payments"
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/payments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/payments")
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{
"ready": {
"purchase_invoices": [
{
"id": "<string>",
"revision": "<string>",
"payee": "<string>",
"amount_cents": 2,
"due_date": "2023-12-25",
"reference": "<string>",
"bill_number": "<string>"
}
],
"payroll_runs": [
{
"id": "<string>",
"revision": "<string>",
"period": "<string>",
"payment_date": "2023-12-25",
"due_date": "2023-12-25",
"employee_count": 1,
"salary_cents": 1,
"tax_cents": 1,
"total_cents": 2,
"salary_due_date": "2023-12-25",
"tax_due_date": "2023-12-25"
}
],
"reimbursements": [
{
"id": "<string>",
"revision": "<string>",
"payee": "<string>",
"amount_cents": 2,
"purpose": "<string>"
}
]
},
"waiting": [
{
"kind": "purchase_invoice",
"id": "<string>",
"label": "<string>",
"amount_cents": 1,
"reason": "<string>",
"period": "<string>"
}
],
"batches": [
{
"id": "<string>",
"payload_hash": "<string>",
"sources": [
{
"kind": "purchase_invoice",
"id": "<string>",
"revision": "<string>"
}
],
"purpose": "<string>",
"requested_execution_date": "2023-12-25",
"debtor_name": "<string>",
"debtor_iban": "<string>",
"currency": "EUR",
"total_cents": 2,
"instructions": [
{
"id": "<string>",
"creditor_name": "<string>",
"creditor_iban": "<string>",
"amount_cents": 2,
"currency": "EUR",
"requested_execution_date": "2023-12-25",
"remittance": "<string>",
"creditor_reference": "<string>",
"category_purpose": "<string>"
}
],
"state": "ready_to_release",
"status_message": "<string>",
"can_release": true,
"can_cancel": true,
"can_poll": true,
"can_resolve": true,
"can_resolve_submitted": true,
"can_resolve_rejected": true,
"requires_bank_authorization": true,
"created_at": "2023-11-07T05:31:56Z"
}
],
"can_prepare": true,
"can_release": true,
"payment_setup_configured": true,
"payment_setup_ready": true,
"payment_verification_pending": true,
"can_configure_payment_setup": true,
"bank_connection_state": "not_started",
"paying_account_label": "<string>",
"supported_bank_account_available": true,
"bank_route_readiness": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Everything the company can pay, is paying, or has paid
The one Payments view. Ready rows are the same locked readiness contracts prepare resolves, read at their current revision: reviewed purchase invoices with a valid IBAN and reference, approved payroll runs with their net salaries and Vero obligation, and approved reimbursements. Sources held by a live batch appear under that batch, never in the queue. Waiting rows name why an item is not payable yet. Batches are every live batch (not cancelled, not settled) plus the newest 50 batches settled within the last 90 days, newest first. Operators see purchase invoices only.
curl --request GET \
--url https://api.app.lastaccountingcompany.com/portal/payments \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.app.lastaccountingcompany.com/portal/payments"
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/payments', 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/payments",
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/payments"
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/payments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/payments")
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{
"ready": {
"purchase_invoices": [
{
"id": "<string>",
"revision": "<string>",
"payee": "<string>",
"amount_cents": 2,
"due_date": "2023-12-25",
"reference": "<string>",
"bill_number": "<string>"
}
],
"payroll_runs": [
{
"id": "<string>",
"revision": "<string>",
"period": "<string>",
"payment_date": "2023-12-25",
"due_date": "2023-12-25",
"employee_count": 1,
"salary_cents": 1,
"tax_cents": 1,
"total_cents": 2,
"salary_due_date": "2023-12-25",
"tax_due_date": "2023-12-25"
}
],
"reimbursements": [
{
"id": "<string>",
"revision": "<string>",
"payee": "<string>",
"amount_cents": 2,
"purpose": "<string>"
}
]
},
"waiting": [
{
"kind": "purchase_invoice",
"id": "<string>",
"label": "<string>",
"amount_cents": 1,
"reason": "<string>",
"period": "<string>"
}
],
"batches": [
{
"id": "<string>",
"payload_hash": "<string>",
"sources": [
{
"kind": "purchase_invoice",
"id": "<string>",
"revision": "<string>"
}
],
"purpose": "<string>",
"requested_execution_date": "2023-12-25",
"debtor_name": "<string>",
"debtor_iban": "<string>",
"currency": "EUR",
"total_cents": 2,
"instructions": [
{
"id": "<string>",
"creditor_name": "<string>",
"creditor_iban": "<string>",
"amount_cents": 2,
"currency": "EUR",
"requested_execution_date": "2023-12-25",
"remittance": "<string>",
"creditor_reference": "<string>",
"category_purpose": "<string>"
}
],
"state": "ready_to_release",
"status_message": "<string>",
"can_release": true,
"can_cancel": true,
"can_poll": true,
"can_resolve": true,
"can_resolve_submitted": true,
"can_resolve_rejected": true,
"requires_bank_authorization": true,
"created_at": "2023-11-07T05:31:56Z"
}
],
"can_prepare": true,
"can_release": true,
"payment_setup_configured": true,
"payment_setup_ready": true,
"payment_verification_pending": true,
"can_configure_payment_setup": true,
"bank_connection_state": "not_started",
"paying_account_label": "<string>",
"supported_bank_account_available": true,
"bank_route_readiness": "<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.
Query Parameters
Target company. Optional — API keys are pinned to one company, and single-company sessions default to it.
Response
Server-derived queue, waiting list, and live batches.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
not_started, application_submitted, active Bank name and the last four digits of the saved paying account; empty until one is saved.
The company holds an open EUR account, or a saved paying account, at a bank LAC has a payment route policy for; a company without one is told so instead of being asked to add an account.
Whether LAC has proven the saved bank's route: live, provider_listed or not_offered; empty until an account is saved.