curl --request GET \
--url https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports \
--header 'Authorization: <api-key>'import requests
url = "https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports', 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.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports",
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: <api-key>"
],
]);
$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.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
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.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"annualReportId": "2Ns8vJqZ1lQwErTyUiOpAsDfGhJ",
"doolaCompanyId": "2Ns8vJqZ1lQwErTyUiOpAsDfGhJ",
"fiscalYear": 2026,
"state": "WY",
"entityType": "LLC",
"status": "FILLED",
"priceInCents": 6225,
"submittedAt": "2026-03-01",
"createdAt": "2026-02-01T09:00:00Z",
"updatedAt": "2026-02-02T09:00:00Z"
}
]List a company's annual reports
The company’s annual reports, one per fiscal year, newest first, each with where it stands and the price fixed on it. Read-only. A report in a state this API does not publish is left out, so the list can be shorter than what doola holds. An empty list means nothing to show; a company that does not exist or is not yours is 404.
curl --request GET \
--url https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports \
--header 'Authorization: <api-key>'import requests
url = "https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports', 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.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports",
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: <api-key>"
],
]);
$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.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
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.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-reports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"annualReportId": "2Ns8vJqZ1lQwErTyUiOpAsDfGhJ",
"doolaCompanyId": "2Ns8vJqZ1lQwErTyUiOpAsDfGhJ",
"fiscalYear": 2026,
"state": "WY",
"entityType": "LLC",
"status": "FILLED",
"priceInCents": 6225,
"submittedAt": "2026-03-01",
"createdAt": "2026-02-01T09:00:00Z",
"updatedAt": "2026-02-02T09:00:00Z"
}
]Authorizations
Partner API key. Send the raw key as the Authorization header value — e.g. dk_test_… in sandbox or dk_live_… in production. Generate and rotate keys in the doola Partner Portal.
Path Parameters
doola company ID (KSUID).
Response
The company's annual reports, newest fiscal year first.
Annual report ID (KSUID), as the submission returned it and as confirm addresses it.
"2Ns8vJqZ1lQwErTyUiOpAsDfGhJ"
doola company ID (KSUID).
"2Ns8vJqZ1lQwErTyUiOpAsDfGhJ"
Fiscal year the report covers.
2026
US state the report is filed in.
"WY"
Entity type the report was filed for.
LLC, CCorp "LLC"
Where the report stands. FILLED is submitted and waiting for you to confirm it; IN_PROGRESS is confirmed and doola's to work; AWAITING_INFORMATION means doola needs something back before it can file; FILING_COMPLETED is filed with the state and final.
FILLED, IN_PROGRESS, AWAITING_INFORMATION, FILING_COMPLETED "FILLED"
The state fee fixed on the report in whole US cents, which doola settles with you outside this API. Null while doola has not priced it, as on a report the customer started in doola's own app.
6225
Date the report was handed to doola's filing pipeline (yyyy-MM-dd). Often null even for a filed report: only some routes stamp it. Read status for where the report stands, never this date.
"2026-03-01"
When the report was first recorded. Null if the row carries no timestamp.
"2026-02-01T09:00:00Z"
When the report last changed. Null if the row carries no timestamp.
"2026-02-02T09:00:00Z"