Create bookkeeping status report export
curl --request POST \
--url https://sandbox.layerfi.com/v1/reports/bookkeeping/exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"use_derived_status": false,
"require_onboarding_call": true
}
'import requests
url = "https://sandbox.layerfi.com/v1/reports/bookkeeping/exports"
payload = {
"use_derived_status": False,
"require_onboarding_call": True
}
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({use_derived_status: false, require_onboarding_call: true})
};
fetch('https://sandbox.layerfi.com/v1/reports/bookkeeping/exports', 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://sandbox.layerfi.com/v1/reports/bookkeeping/exports",
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([
'use_derived_status' => false,
'require_onboarding_call' => true
]),
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://sandbox.layerfi.com/v1/reports/bookkeeping/exports"
payload := strings.NewReader("{\n \"use_derived_status\": false,\n \"require_onboarding_call\": true\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://sandbox.layerfi.com/v1/reports/bookkeeping/exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"use_derived_status\": false,\n \"require_onboarding_call\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.layerfi.com/v1/reports/bookkeeping/exports")
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 \"use_derived_status\": false,\n \"require_onboarding_call\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"type": "Export",
"id": "00000000-0000-0000-0000-000000000006",
"business_id": null,
"export_type": "bookkeeping_status_report",
"status": "pending",
"params": {
"use_derived_status": false,
"require_onboarding_call": true
},
"download_url": null,
"file_name": null,
"error": null,
"created_at": "2026-08-04T14:00:00-04:00",
"started_at": null,
"completed_at": null,
"failed_at": null
}
}Async Exports
Create bookkeeping status report export
Starts an async XLSX export of bookkeeping status for the authenticated client’s enrolled businesses. The workbook contains Businesses and Periods sheets. Returns an export resource; poll GET /v1/exports/ or subscribe to export.completed / export.failed webhooks for completion.
POST
/
v1
/
reports
/
bookkeeping
/
exports
Create bookkeeping status report export
curl --request POST \
--url https://sandbox.layerfi.com/v1/reports/bookkeeping/exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"use_derived_status": false,
"require_onboarding_call": true
}
'import requests
url = "https://sandbox.layerfi.com/v1/reports/bookkeeping/exports"
payload = {
"use_derived_status": False,
"require_onboarding_call": True
}
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({use_derived_status: false, require_onboarding_call: true})
};
fetch('https://sandbox.layerfi.com/v1/reports/bookkeeping/exports', 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://sandbox.layerfi.com/v1/reports/bookkeeping/exports",
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([
'use_derived_status' => false,
'require_onboarding_call' => true
]),
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://sandbox.layerfi.com/v1/reports/bookkeeping/exports"
payload := strings.NewReader("{\n \"use_derived_status\": false,\n \"require_onboarding_call\": true\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://sandbox.layerfi.com/v1/reports/bookkeeping/exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"use_derived_status\": false,\n \"require_onboarding_call\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.layerfi.com/v1/reports/bookkeeping/exports")
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 \"use_derived_status\": false,\n \"require_onboarding_call\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"type": "Export",
"id": "00000000-0000-0000-0000-000000000006",
"business_id": null,
"export_type": "bookkeeping_status_report",
"status": "pending",
"params": {
"use_derived_status": false,
"require_onboarding_call": true
},
"download_url": null,
"file_name": null,
"error": null,
"created_at": "2026-08-04T14:00:00-04:00",
"started_at": null,
"completed_at": null,
"failed_at": null
}
}Starts a client-wide async XLSX export of bookkeeping status for businesses enrolled in bookkeeping. The workbook has a
Businesses sheet with enrollment, onboarding, pending task, and latest closed period information, and a Periods sheet with period statuses, billing statuses, task metrics, and closing milestones.
Poll Fetch export or subscribe to export.completed / export.failed webhooks to retrieve the completed file. See Generating async reports.Authorizations
Body
application/json
Options for the client-wide bookkeeping status XLSX export. Send an empty object to use both defaults.