---
title: "Add services to a company"
method: POST
path: "/v1/partner/companies/{companyId}/services"
tags: ["Companies"]
---

# Add services to a company

`POST /v1/partner/companies/{companyId}/services`

## Request

- Base URL: `https://api.test.doola.com`
- URL: `https://api.test.doola.com/v1/partner/companies/{companyId}/services`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/doola/apis/doola-partner-api/docs/v1/partner/companies/:companyId/services/post.ts> (a function with typed inputs; its response is checked against the schema)

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.

## Path parameters

- `companyId` string, required

## Headers

- `Idempotency-Key` string, required

## Request body

- AddCompanyServicesRequest: Request body to add services to an existing company.
  - `services` ServiceOrderDto[], required: 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`.
    - `service` 'Formation' | 'RegisteredAgent' | 'EinCreation', required: 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.
    - `variant` 'Standard' | 'Expedite': 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.

## Response `201`

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.

- PartnerCompanyServicesResponse: The company's services after the addition.
  - `doolaCompanyId` string: doola company ID (KSUID).
  - `services` PartnerCompanyServiceDto[]: Every service attached to the company, in the same shape as `services` on GET /v1/partner/companies/{companyId}.
    - `name` string: Service name.
    - `variant` string: Service variant.
    - `status` string: Service status.
    - `subStatus` string: Service sub-status.

## Other responses

- `400`: 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`: E_NOT_FOUND: no company with this ID for the authenticated partner.
- `409`: 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.

## Changes

- **2026-11-06** `c485eb0c1571`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/doola/apis/doola-partner-api/changes/v1/partner/companies/:companyId/services/post.md)

---

[API](https://skmtc.dev/doola/apis/doola-partner-api.md) - [All operations](https://skmtc.dev/doola/apis/doola-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/doola/apis/doola-partner-api/revisions/c485eb0c1571?raw)
