Orders & Filing Lifecycle
How POST /orders works, and what each filing status means.
Anatomy of an order request
POST /orders takes the user, the filing state, and one object per product you want — not a generic items array:
{
"userId": "user_...", // required
"companyId": "comp_...", // required unless formation is included
"filingState": "TX", // required, 2-letter code
"formation": { ... }, // any combination of these five,
"ein": { ... }, // at least one required
"annualReport": { ... },
"foreignQualification": { ... },
"registeredAgent": { ... }
}Rules that apply across products:
- At least one product object is required.
companyIdorformation— a formation creates the company; everything else needs an existing one. The user must be an admin of that company.formationandforeignQualificationare mutually exclusive in one request — an entity is either formed in the filing state or qualified there as a foreign entity.- One
filingStateper request. Filing in multiple states means multiple requests. - Product combinations in one request become separate order items sharing the company — formation + EIN + registered agent is the common bundle.
foreignQualificationalso accepts the shorthandtruewhen you have nothing to configure on it — see Foreign qualifications.
The response returns companyId plus one item per order created:
{
"companyId": "comp_...",
"items": [
{
"orderId": "order_...",
"orderType": "formation",
"filingStatus": "submitted",
"filingDate": null,
"subscriptionStatus": null,
"createdAt": "2026-07-29T12:00:00.000Z"
}
]
}subscriptionStatus (active | canceled | past_due) is populated for subscription products — annual report and registered agent — and null for one-time filings.
The filing lifecycle
Every order carries a filingStatus:
| Status | Meaning |
|---|---|
submitted | FileForms accepted the order and it's in the filing pipeline. Every order starts here. |
pending | The filing is with the state, awaiting processing. |
filed | Accepted by the state. filingDate is set, and documents typically follow via document.uploaded. |
exception | Something needs attention before the filing can proceed — see below. |
cancelled | The order was cancelled. For balance-billed orders, the debit is reversed automatically. |
Status changes reach you as filing.status_changed webhooks. filed and cancelled are terminal; exception is not.
Exceptions
When a state or the filing team needs something — a name conflict, a bad address, a rejected SSN — the filing enters exception and the webhook carries three fields:
{
"filingStatus": "exception",
"exceptionCode": "465",
"exceptionReason": "Entity name not available",
"exceptionMessage": "The requested name conflicts with an existing Texas entity."
}exceptionCode is a stable numeric code, exceptionReason is its standard description, and exceptionMessage adds free-text detail when available. Once resolved, the filing resumes and you'll receive further status events.
Surface exceptions to your customer or your ops team promptly — most require information only the customer can provide.
Exception codes
| Code | Reason |
|---|---|
| 460 | Payment required. Client hasn't submitted payment |
| 461 | Payment exception. Expired or invalid credit card |
| 462 | Missing required data |
| 463 | Entity naming exception |
| 464 | Entity name rejected |
| 465 | Entity name not available |
| 466 | Bad or missing entity address |
| 467 | Bad or missing mailing address |
| 468 | Bad or missing primary contact information |
| 469 | Bad or missing RA information |
| 470 | Bad or missing filing detail data. Ancillary filing data (principal business activity, etc.) |
| 471 | Bad or missing governance |
| 472 | Bad or missing ownership or stock data |
| 473 | Bad or missing jurisdiction specific data |
| 474 | Bad or missing entity type data required for filing |
| 481 | Filing rejected by jurisdiction. The jurisdiction has rejected the filing for an unknown reason |
| 482 | Annual report prerequisite exception. A previous year AR error exists that is preventing filing the current year's AR |
| 483 | EIN SSN rejected |
| 484 | EIN SSN does not match person's name |
| 486 | Bad or Missing NAICS Code |
| 487 | Out of State RA |
| 489 | Invalid Principle Address (PMB, etc.) |
| 492 | COA - Compliance Needed |
| 493 | Entity administratively dissolved |
| 494 | Missing environment variable needed for filing |
| 495 | Entity not found: No matching record for name and type |
| 496 | Missing or invalid State Document Number |
| 497 | Authentication failure with jurisdiction |
| 498 | Annual report is not required this year |
| 499 | Failed to submit order through API |
Idempotency and duplicates
The API prevents the common double-purchases with 409 responses: an EIN order for a company that already has (or has requested) an EIN, or a foreign qualification already purchased for that state. Ordering registered agent service where an active one exists is silently skipped rather than duplicated. There is no general idempotency-key mechanism — treat a network-level retry of POST /orders with care.