> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doola.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Compliance Calendar

> Read a company's tracked compliance obligations and their due dates.

<Info>
  The compliance calendar is **read-only**. Reading it never triggers a filing, a recomputation, or any side effect — it reflects what doola already tracks for the company.
</Info>

A company's compliance calendar lists the recurring obligations doola tracks to keep it in good standing. Today it returns a single obligation — the **annual report** — with its next due date and a derived status. The response is a list, so future obligation types slot in as additional entries without a breaking change.

## Retrieving the calendar

```
GET /v1/partner/companies/{companyId}/compliance/calendar
```

The full request and response schema is in the **Compliance** section of the API reference. A successful response:

```json theme={null}
{
  "events": [
    {
      "type": "ANNUAL_REPORT",
      "state": "CA",
      "nextDueDate": "2026-11-30",
      "lastFiledDate": "2025-11-15",
      "status": "UPCOMING"
    }
  ]
}
```

| Field           | Meaning                                                                                                               |
| --------------- | --------------------------------------------------------------------------------------------------------------------- |
| `type`          | Obligation type. Only `ANNUAL_REPORT` is returned today.                                                              |
| `state`         | US state the obligation applies to.                                                                                   |
| `nextDueDate`   | Next due date (`yyyy-MM-dd`), or `null` when there is no concrete date — see the statuses below.                      |
| `lastFiledDate` | When the obligation was last filed (`yyyy-MM-dd`), or `null` if never filed. Explains a rolled-forward `nextDueDate`. |
| `status`        | Derived status — see [Statuses](#statuses).                                                                           |

## Statuses

`status` is derived at read time from the resolved due date and the company's state:

| Status              | Meaning                                                                         | Dates                           |
| ------------------- | ------------------------------------------------------------------------------- | ------------------------------- |
| `UPCOMING`          | A due date is set today or in the future.                                       | `nextDueDate` set               |
| `OVERDUE`           | The due date has passed and the report was not filed.                           | `nextDueDate` set (in the past) |
| `NOT_YET_DUE`       | The company's formation filing is not yet complete, so no due date applies yet. | dates `null`                    |
| `UNSUPPORTED_STATE` | doola does not track an annual report for the company's state.                  | dates `null`                    |

<Note>
  The annual-report event is **always returned** — even for an unsupported state or a company that is too new. The `status` carries the reason and the date fields are `null`, so you never receive an empty list you have to disambiguate.
</Note>

## Roll-forward

The annual report recurs each year. Once a report is filed, `nextDueDate` advances to the next occurrence and `lastFiledDate` records when the previous one was filed — so a future due date is always explainable to the customer.

## Errors

| HTTP                      | When                                                                 |
| ------------------------- | -------------------------------------------------------------------- |
| `404 E_COMPANY_NOT_FOUND` | The company does not exist, or is not owned by your partner account. |

Ownership is enforced the same way across the Partner API: a company that exists but isn't yours returns `404`, never `403`, so existence cannot be probed across partners. See [Errors](/api/errors).
