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

> ## Agent Instructions
> Authenticate with the raw API key in the Authorization header. Never add a Bearer prefix.
> Use the sandbox base URL https://api.test.doola.com and a dk_test_ key in examples unless the user asks for production.
> Send an Idempotency-Key header on POST /v1/partner/customers, POST /v1/partner/companies, POST /v1/partner/companies/import, POST /v1/partner/companies/{companyId}/services and POST /v1/partner/companies/{companyId}/documents. No other endpoint takes one.
> Every response is wrapped as {payload, error}. Read fields from payload and branch on error.code, never on the message.
> Drive formation progress from webhooks plus a reconciliation sweep, never a polling loop.
> Embedded SDK (@doola/js): the dk_ key stays on the server and mints customer sessions; the browser gets only a pk_ key and the session. onFormed carries only companyId and can fire more than once. Before charging, read the company with the dk_ key, require formationSubmissionStatus AWAITING_PAYMENT, check the owner's email, and price on the server. Then POST payment-confirmed, which answers 200 with an empty body, and replace the SDK element with a new doola.create() (never append a second one).
> The doola Formation MCP server at https://mcp.doola.com is for founders forming their own company with their own doola account. Partners integrate the Partner API or the Embedded SDK. The /mcp endpoint on this docs site only searches these docs.
> For a full capability summary with the rules above, read https://docs.doola.com/skill.md.

# Add services to a company

> Orders services for a company that already exists. Only `EinCreation` can be added for now. All or nothing: if any service cannot be added, none is. An EIN added before formation completes starts when formation completes; one added after starts right away. Idempotent on the `Idempotency-Key` header: a successful call is replayed for the same key. If the call fails, the key is released; fix the request and retry with the same key.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/partner/companies/{companyId}/services
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 your webhook endpoint 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: 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: Customer sessions
    description: Mint the token the doola SDK uses in your customer's browser.
  - name: Signatures
    description: Request embedded signing sessions for pending company documents.
  - name: Companies
    description: >-
      Create or import companies for your customers, then track formation
      status.
  - name: Documents
    description: List, download and upload a company's formation documents.
  - name: Companies
    description: Create companies for your customers, then track formation status.
  - name: SDK
    description: Keys for the doola Embedded SDK.
  - name: Reference data
    description: >-
      Static lookups for building company-creation requests: NAICS codes,
      states, countries, and state filing fees.
paths:
  /v1/partner/companies/{companyId}/services:
    post:
      tags:
        - Companies
      summary: Add services to a company
      description: >-
        Orders services for a company that already exists. Only `EinCreation`
        can be added for now. All or nothing: if any service cannot be added,
        none is. An EIN added before formation completes starts when formation
        completes; one added after starts right away. Idempotent on the
        `Idempotency-Key` header: a successful call is replayed for the same
        key. If the call fails, the key is released; fix the request and retry
        with the same key.
      operationId: addServices
      parameters:
        - name: companyId
          in: path
          description: doola company ID (KSUID).
          required: true
          schema:
            type: string
        - name: Idempotency-Key
          in: header
          description: >-
            Unique key that makes the call safe to retry. Reuse the same value
            to retry.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCompanyServicesRequest'
            examples:
              Standard EIN:
                description: Standard EIN
                value:
                  services:
                    - service: EinCreation
                      variant: Standard
        required: true
      responses:
        '201':
          description: >-
            Services added. Returns every service on the company. The EIN's
            status is the one it was added with; read the company for its
            current status.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PartnerCompanyServicesResponse'
        '400':
          description: >-
            E_SERVICE_SELECTION_INVALID: the order is empty, lists a service
            that cannot be added to an existing company, lists a service twice,
            or carries an invalid variant. E_EXPEDITED_EIN_NOT_ELIGIBLE:
            `Expedite` was requested but a member, executive member, or
            responsible party supplies a valid SSN. E_IDEMPOTENCY_KEY_REQUIRED:
            the `Idempotency-Key` header is missing.
        '404':
          description: 'E_NOT_FOUND: no company with this ID for the authenticated partner.'
        '409':
          description: >-
            E_COMPANY_NOT_ACTIVE: the company's formation was cancelled or
            failed. E_SERVICE_ALREADY_ADDED: the company already has this
            service. E_EIN_ALREADY_ISSUED: the company already has an EIN
            number. E_IDEMPOTENCY_KEY_REUSED / E_IDEMPOTENCY_IN_PROGRESS: the
            key was used with a different body, or a request with it is still
            running.
components:
  schemas:
    AddCompanyServicesRequest:
      type: object
      description: Request body to add services to an existing company.
      properties:
        services:
          type: array
          description: >-
            Services to add. Only `EinCreation` can be added to an existing
            company; it takes a `variant` (`Standard` by default, or
            `Expedite`). Each service may appear once. An invalid order is
            rejected with `E_SERVICE_SELECTION_INVALID`.
          items:
            $ref: '#/components/schemas/ServiceOrderDto'
      required:
        - services
    PartnerCompanyServicesResponse:
      type: object
      description: The company's services after the addition.
      properties:
        doolaCompanyId:
          type: string
          description: doola company ID (KSUID).
          example: 3D2Cdx5oRRidDXYmTu09O1bHjeC
        services:
          type: array
          description: >-
            Every service attached to the company, in the same shape as
            `services` on GET /v1/partner/companies/{companyId}.
          items:
            $ref: '#/components/schemas/PartnerCompanyServiceDto'
    ServiceOrderDto:
      type: object
      description: A service to order for a company.
      properties:
        service:
          type: string
          description: >-
            Service to order. When creating a company, `Formation` is required
            and `RegisteredAgent` is always included with `Formation`, so
            listing it is optional. `AiCofounder` comes with every company and
            cannot be ordered. Only `EinCreation` can be added to an existing
            company.
          enum:
            - Formation
            - RegisteredAgent
            - EinCreation
          example: EinCreation
        variant:
          type: string
          description: >-
            Only for `EinCreation`. `Standard` is the default; `Expedite`
            requests the expedited EIN, available when no member, executive
            member, or responsible party supplies a valid SSN. Any other service
            rejects a variant.
          enum:
            - Standard
            - Expedite
          example: Expedite
      required:
        - service
    PartnerCompanyServiceDto:
      type: object
      description: A service attached to a company.
      properties:
        name:
          type: string
          description: Service name.
          example: Registered Agent
        variant:
          type: string
          description: Service variant.
        status:
          type: string
          description: Service status.
        subStatus:
          type: string
          description: Service sub-status.
  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

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.