> ## 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.

# Confirm an annual report and hand it to doola to file

> Hands the report to doola to file and starts the work. **Call this for every report, including one whose `priceInCents` is 0**: a state that charges nothing still has a report to file, and confirming is what starts the work. Until you do, the report stays at FILLED and nothing happens to it. Call it on your own timing — an unconfirmed report waits indefinitely. Nothing is charged here and no card is debited: the `priceInCents` fixed at submission is the state fee doola settles with you under your partner agreement, outside this API. Safe to repeat: a report already confirmed is returned unchanged and is never handed over twice.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/partner/companies/{companyId}/compliance/annual-reports/{annualReportId}/confirm
openapi: 3.1.0
info:
  title: doola Partner API
  description: >-
    REST API for doola partners to create and manage customers and companies,
    retrieve formation documents, and look up reference data.


    Authenticate every request with a partner API key in the `Authorization`
    header. Generate keys and manage webhooks and event subscriptions in the
    doola Partner Portal.
  contact:
    name: doola
    url: https://www.doola.com
  version: v1
servers:
  - url: https://api.test.doola.com
    description: Sandbox — use test keys (dk_test_…)
  - url: https://api.doola.com
    description: Production — use live keys (dk_live_…)
security:
  - PartnerApiKey: []
tags:
  - name: Playground (sandbox only)
    description: >-
      Sandbox-only helpers to drive a test company through the Formation and
      EinCreation milestones end to end.
  - name: Required Actions
    description: >-
      Actions doola needs you to take on a company, such as supplying new name
      options after a state rejection.
  - name: Customers
    description: Create and look up customers under your partner tenant.
  - name: Documents
    description: List and download a company's formation documents.
  - name: Compliance
    description: Track a company's compliance obligations and their due dates.
  - name: Annual Report Filing
    description: >-
      File a company's annual report with its state: what to collect, what it
      costs, submission, confirmation and status.
  - name: Signatures
    description: Request embedded signing sessions for pending company documents.
  - name: Companies
    description: Create companies for your customers, then track formation status.
  - name: Reference data
    description: >-
      Static lookups for building company-creation requests: NAICS codes,
      states, countries, and state filing fees.
paths:
  /v1/partner/companies/{companyId}/compliance/annual-reports/{annualReportId}/confirm:
    post:
      tags:
        - Annual Report Filing
      summary: Confirm an annual report and hand it to doola to file
      description: >-
        Hands the report to doola to file and starts the work. **Call this for
        every report, including one whose `priceInCents` is 0**: a state that
        charges nothing still has a report to file, and confirming is what
        starts the work. Until you do, the report stays at FILLED and nothing
        happens to it. Call it on your own timing — an unconfirmed report waits
        indefinitely. Nothing is charged here and no card is debited: the
        `priceInCents` fixed at submission is the state fee doola settles with
        you under your partner agreement, outside this API. Safe to repeat: a
        report already confirmed is returned unchanged and is never handed over
        twice.
      operationId: confirm
      parameters:
        - name: companyId
          in: path
          description: doola company ID (KSUID).
          required: true
          schema:
            type: string
        - name: annualReportId
          in: path
          description: Annual report ID (KSUID).
          required: true
          schema:
            type: string
      responses:
        '200':
          description: >-
            The report is confirmed, or already was. Its status is IN_PROGRESS:
            doola is working it. A company that did not already hold the annual
            state filing service is granted it here.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PartnerAnnualReportFilingResponse'
        '404':
          description: >-
            E_COMPANY_NOT_FOUND when the company does not exist or is not owned
            by the calling partner; E_NOT_FOUND when no such report exists for
            that company.
        '409':
          description: >-
            E_RESOURCE_CONFLICT: the report is in a state that cannot be
            confirmed.
components:
  schemas:
    PartnerAnnualReportFilingResponse:
      type: object
      description: An annual report on record.
      properties:
        annualReportId:
          type: string
          description: >-
            Annual report ID (KSUID). Keep it: confirm and the status reads
            address the report by it.
          example: 2Ns8vJqZ1lQwErTyUiOpAsDfGhJ
        doolaCompanyId:
          type: string
          description: doola company ID (KSUID).
          example: 2Ns8vJqZ1lQwErTyUiOpAsDfGhJ
        fiscalYear:
          type: integer
          format: int32
          description: Fiscal year the report covers.
          example: 2026
        state:
          type: string
          description: US state the report is filed in.
          example: WY
        entityType:
          type: string
          description: Entity type the report was filed for.
          enum:
            - LLC
            - CCorp
          example: LLC
        status:
          type: string
          description: Where the report stands.
          enum:
            - FILLED
            - IN_PROGRESS
            - AWAITING_INFORMATION
            - FILING_COMPLETED
          example: FILLED
        priceInCents:
          type: integer
          format: int64
          description: >-
            The state fee for this report in whole US cents, fixed when it was
            recorded. Nothing is charged through this API. 0 where the state
            charges nothing.
          example: 6225
        submittedAt:
          type:
            - string
            - 'null'
          description: >-
            Date the report was handed to doola's filing pipeline (yyyy-MM-dd).
            Null on a report that has only just been recorded; read status for
            where the report stands.
          example: '2026-03-01'
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            When the report was first recorded. Null if the row carries no
            timestamp.
          example: '2026-02-01T09:00:00Z'
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: When the report last changed. Null if the row carries no timestamp.
          example: '2026-02-02T09:00:00Z'
        answers:
          type: array
          description: >-
            The answers on record, addressed by the field ids the requirements
            published. Empty for a state that asks no questions, which is most
            of them.
          items:
            $ref: '#/components/schemas/PartnerRecordedAnswerDto'
        isReplaced:
          type: boolean
          description: >-
            True when a report was already on file for this year and this one
            took its place, which is allowed only while the report is still
            FILLED.
          example: false
    PartnerRecordedAnswerDto:
      type: object
      description: One answer on record for an annual report.
      properties:
        fieldId:
          type: string
          description: >-
            Field id, as published by the requirements endpoint's
            fields[].fieldId. An answer stays on record under it after doola
            stops asking that question, so it may name a field the requirements
            no longer publish.
          example: Q17
        value:
          type:
            - string
            - 'null'
          description: What was answered, as given.
          example: '1000000'
  securitySchemes:
    PartnerApiKey:
      type: apiKey
      description: >-
        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.
      name: Authorization
      in: header

````