Skip to main content
The doola Partner API lets you create customers, submit company formations (LLC or C-Corp), retrieve formation documents, and look up reference data. This guide gets you from zero to your first formation in minutes.

What you need

Before your first request

  • An API key for the environment you are targeting, provided by the doola team (looks like dk_test_... for sandbox or dk_live_... for production).
  • A webhook signing secret, used to verify incoming webhook events.
  • Any REST client (curl, Postman, your backend HTTP library).
Need credentials? Email engineering@doola.com to get onboarded.

Environments

EnvironmentBase URL
Sandboxhttps://api.test.doola.com
Productionhttps://api.doola.com
Always build and test against sandbox first. Sandbox keys never trigger real state filings or charges.

Your first call

Authenticate every request with your API key in the Authorization header.
curl https://api.test.doola.com/v1/partner/customers \
  -X POST \
  -H "Authorization: dk_test_your_api_key_here" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: my-unique-key-001" \
  -d '{
    "email": "jane@example.com",
    "firstName": "Jane",
    "lastName": "Doe",
    "phoneNumber": "+12125550100",
    "countryOfResidence": "USA"
  }'
A successful response returns a doolaCustomerId. Save it: you will need it to submit a company formation.

How formation works

Formation is a two step flow, then asynchronous progress delivered over webhooks.
1

Create a customer

Call Create customer with the person’s details. You get back a doolaCustomerId. One customer can own many companies.
2

Submit a company formation

Call Create company with that doolaCustomerId and the company details. Set entityType to LLC (the default) or CCorp — see Company formation for what each one needs. This starts the formation.
3

Track progress with webhooks

Formation is asynchronous. Do not poll. Subscribe to webhook events to learn when formation completes and documents are ready.

Key concepts

  • Idempotency. The create endpoints require an Idempotency-Key header. Use a unique key per logical operation. Retrying with the same key and body is safe. Reusing a key with a different body returns 409 E_IDEMPOTENCY_KEY_REUSED.
  • Consistent errors. Every error carries a machine readable code, so you can branch on it without parsing strings. See Errors.
  • Reference data. Country, state, NAICS, and fee lookups live in the API reference so your forms always submit valid values.