curl --request GET \
--url https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-report/requirements \
--header 'Authorization: <api-key>'import requests
url = "https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-report/requirements"
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-report/requirements', 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-report/requirements",
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-report/requirements"
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-report/requirements")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-report/requirements")
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{
"doolaCompanyId": "2Ns8vJqZ1lQwErTyUiOpAsDfGhJ",
"state": "WY",
"entityType": "LLC",
"fiscalYear": 2026,
"filingRequired": true,
"dueDate": "2026-11-30",
"fields": [
{
"id": "Q16",
"label": "Do you hold assets?",
"type": "RADIO",
"group": "QUESTION",
"required": true,
"options": [
"yes",
"no"
],
"dependsOn": null
}
]
}Get the annual report requirements for a company
Returns the fields the partner must collect before submitting the company’s annual report, derived from its state and entity type, together with the due date from the compliance calendar. Read-only. Most states ask no questions at all, so for most companies the response carries only the company details. A state that requires no annual report answers 200 with filingRequired false and an empty field list. Returns 404 when the company does not exist or is not owned by the calling partner.
curl --request GET \
--url https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-report/requirements \
--header 'Authorization: <api-key>'import requests
url = "https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-report/requirements"
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-report/requirements', 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-report/requirements",
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-report/requirements"
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-report/requirements")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.test.doola.com/v1/partner/companies/{companyId}/compliance/annual-report/requirements")
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{
"doolaCompanyId": "2Ns8vJqZ1lQwErTyUiOpAsDfGhJ",
"state": "WY",
"entityType": "LLC",
"fiscalYear": 2026,
"filingRequired": true,
"dueDate": "2026-11-30",
"fields": [
{
"id": "Q16",
"label": "Do you hold assets?",
"type": "RADIO",
"group": "QUESTION",
"required": true,
"options": [
"yes",
"no"
],
"dependsOn": null
}
]
}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).
Query Parameters
Fiscal year the report covers. Defaults to the current year.
2000 <= x <= 2100Response
The fields to collect, with the due date. Only a handful of states add question fields on top of the company details. Read filingRequired first: when false there is no report to file and the field list is empty.
What the company's state asks for on its annual report.
doola company ID (KSUID).
"2Ns8vJqZ1lQwErTyUiOpAsDfGhJ"
US state the report is filed in.
"WY"
Entity type the field list applies to.
LLC, CCorp "LLC"
Fiscal year the requirements apply to.
2026
Whether the state requires an annual report at all. False comes with an empty fields list because there is nothing to file - not because the state asks for nothing.
true
Due date from the compliance calendar (yyyy-MM-dd), or null when there is no concrete date yet.
"2026-11-30"
Fields to collect, in the order to present them. Always carries the company details; question fields appear only for the few states that ask any, which today is a handful. Empty when filingRequired is false.
Show child attributes
Show child attributes