curl --request POST \
--url https://api.app.lastaccountingcompany.com/portal/payroll/payment-date \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"period": "<string>",
"run_id": "<string>",
"payment_date": "2023-12-25",
"idempotency_key": "<string>",
"customer_id": "<string>"
}
'import requests
url = "https://api.app.lastaccountingcompany.com/portal/payroll/payment-date"
payload = {
"period": "<string>",
"run_id": "<string>",
"payment_date": "2023-12-25",
"idempotency_key": "<string>",
"customer_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
period: '<string>',
run_id: '<string>',
payment_date: '2023-12-25',
idempotency_key: '<string>',
customer_id: '<string>'
})
};
fetch('https://api.app.lastaccountingcompany.com/portal/payroll/payment-date', 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/payroll/payment-date",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'period' => '<string>',
'run_id' => '<string>',
'payment_date' => '2023-12-25',
'idempotency_key' => '<string>',
'customer_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.app.lastaccountingcompany.com/portal/payroll/payment-date"
payload := strings.NewReader("{\n \"period\": \"<string>\",\n \"run_id\": \"<string>\",\n \"payment_date\": \"2023-12-25\",\n \"idempotency_key\": \"<string>\",\n \"customer_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.app.lastaccountingcompany.com/portal/payroll/payment-date")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"period\": \"<string>\",\n \"run_id\": \"<string>\",\n \"payment_date\": \"2023-12-25\",\n \"idempotency_key\": \"<string>\",\n \"customer_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/payroll/payment-date")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"period\": \"<string>\",\n \"run_id\": \"<string>\",\n \"payment_date\": \"2023-12-25\",\n \"idempotency_key\": \"<string>\",\n \"customer_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"known_people": [
{
"party_id": "<string>",
"resource": {
"uri": "<string>",
"revision": "<string>"
},
"name": "<string>",
"email": "<string>",
"saved_account_last4": "<string>",
"linked_employee_id": "<string>"
}
],
"run": {
"payment_blocked_reason": "superseded_run",
"bank_paid_date": "2023-12-25",
"payment_date_reported": true,
"payment_instructions": {
"salary_total_cents": 1,
"salary_lines": [
{
"employee_id": "<string>",
"payee_name": "<string>",
"amount_cents": 2,
"status": "ready",
"iban": "<string>"
}
]
},
"payment_reconciliation": {
"lines": [
{
"review_revision": "<string>",
"bank_transaction_id": "<string>",
"bank_booking_date": "2023-12-25",
"bank_description": "<string>",
"bank_counterparty_name": "<string>",
"bank_reference": "<string>",
"state": "confirmed"
}
]
}
}
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Correct an approved payroll run's payday before payment
Interactive admin or approver only. Rebuilds the approved run and its unapproved Incomes Register draft at the true payday, preserving the figures and append-only ledger evidence. Fails closed after payment, reporting, or other downstream authorisation, and when the new payday changes the payment month.
curl --request POST \
--url https://api.app.lastaccountingcompany.com/portal/payroll/payment-date \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"period": "<string>",
"run_id": "<string>",
"payment_date": "2023-12-25",
"idempotency_key": "<string>",
"customer_id": "<string>"
}
'import requests
url = "https://api.app.lastaccountingcompany.com/portal/payroll/payment-date"
payload = {
"period": "<string>",
"run_id": "<string>",
"payment_date": "2023-12-25",
"idempotency_key": "<string>",
"customer_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
period: '<string>',
run_id: '<string>',
payment_date: '2023-12-25',
idempotency_key: '<string>',
customer_id: '<string>'
})
};
fetch('https://api.app.lastaccountingcompany.com/portal/payroll/payment-date', 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/payroll/payment-date",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'period' => '<string>',
'run_id' => '<string>',
'payment_date' => '2023-12-25',
'idempotency_key' => '<string>',
'customer_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.app.lastaccountingcompany.com/portal/payroll/payment-date"
payload := strings.NewReader("{\n \"period\": \"<string>\",\n \"run_id\": \"<string>\",\n \"payment_date\": \"2023-12-25\",\n \"idempotency_key\": \"<string>\",\n \"customer_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.app.lastaccountingcompany.com/portal/payroll/payment-date")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"period\": \"<string>\",\n \"run_id\": \"<string>\",\n \"payment_date\": \"2023-12-25\",\n \"idempotency_key\": \"<string>\",\n \"customer_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.app.lastaccountingcompany.com/portal/payroll/payment-date")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"period\": \"<string>\",\n \"run_id\": \"<string>\",\n \"payment_date\": \"2023-12-25\",\n \"idempotency_key\": \"<string>\",\n \"customer_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"known_people": [
{
"party_id": "<string>",
"resource": {
"uri": "<string>",
"revision": "<string>"
},
"name": "<string>",
"email": "<string>",
"saved_account_last4": "<string>",
"linked_employee_id": "<string>"
}
],
"run": {
"payment_blocked_reason": "superseded_run",
"bank_paid_date": "2023-12-25",
"payment_date_reported": true,
"payment_instructions": {
"salary_total_cents": 1,
"salary_lines": [
{
"employee_id": "<string>",
"payee_name": "<string>",
"amount_cents": 2,
"status": "ready",
"iban": "<string>"
}
]
},
"payment_reconciliation": {
"lines": [
{
"review_revision": "<string>",
"bank_transaction_id": "<string>",
"bank_booking_date": "2023-12-25",
"bank_description": "<string>",
"bank_counterparty_name": "<string>",
"bank_reference": "<string>",
"state": "confirmed"
}
]
}
}
}{
"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.
Body
Response
Updated payroll workspace with the corrected approved run.
The payroll workspace for a period: employees, employer settings, and runs. Amounts are integer cents; rates are basis points. Interior shapes beyond the documented payment evidence fields vary and are returned as-is.
The employee parties this company already reimburses, offered to the employee form so a new or existing payroll employee can be bound to the person they already are. Each entry carries the exact business.party reference — revision included — to send back as expected_party; a picker that showed one person cannot commit a link to whoever that id names by the time it is saved. Only the last four digits of a saved reimbursement account travel with this read, and only under the admin/approver payroll role this whole workspace already requires.
Show child attributes
Show child attributes
Show child attributes
Show child attributes