FileForms
Core Concepts

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.
  • companyId or formation — a formation creates the company; everything else needs an existing one. The user must be an admin of that company.
  • formation and foreignQualification are mutually exclusive in one request — an entity is either formed in the filing state or qualified there as a foreign entity.
  • One filingState per 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.
  • foreignQualification also accepts the shorthand true when 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:

StatusMeaning
submittedFileForms accepted the order and it's in the filing pipeline. Every order starts here.
pendingThe filing is with the state, awaiting processing.
filedAccepted by the state. filingDate is set, and documents typically follow via document.uploaded.
exceptionSomething needs attention before the filing can proceed — see below.
cancelledThe 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

CodeReason
460Payment required. Client hasn't submitted payment
461Payment exception. Expired or invalid credit card
462Missing required data
463Entity naming exception
464Entity name rejected
465Entity name not available
466Bad or missing entity address
467Bad or missing mailing address
468Bad or missing primary contact information
469Bad or missing RA information
470Bad or missing filing detail data. Ancillary filing data (principal business activity, etc.)
471Bad or missing governance
472Bad or missing ownership or stock data
473Bad or missing jurisdiction specific data
474Bad or missing entity type data required for filing
481Filing rejected by jurisdiction. The jurisdiction has rejected the filing for an unknown reason
482Annual report prerequisite exception. A previous year AR error exists that is preventing filing the current year's AR
483EIN SSN rejected
484EIN SSN does not match person's name
486Bad or Missing NAICS Code
487Out of State RA
489Invalid Principle Address (PMB, etc.)
492COA - Compliance Needed
493Entity administratively dissolved
494Missing environment variable needed for filing
495Entity not found: No matching record for name and type
496Missing or invalid State Document Number
497Authentication failure with jurisdiction
498Annual report is not required this year
499Failed 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.

On this page