EasyFiling Partner Formation API
EasyFiling Partner Formation API
This guide explains how partner platforms can submit company formation requests to EasyFiling.
The partner platform collects the customer and company details, sends the request to EasyFiling, and then checks order progress through the API. EasyFiling handles the internal review, filing work, and final formation documents.
Base URL
Use the base API URL provided by EasyFiling.
Production: https://api.example.com/api
Sandbox: https://sandbox-api.example.com/api
Replace the example domains with the URL shared by EasyFiling.
Authentication
Every request must include the partner credentials provided by EasyFiling.
X-Partner-Client-Id: pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X-Partner-Secret: your_partner_secret
Content-Type: application/json
Accept: application/jsonThe client secret is shown only once when credentials are created. Store it securely. If it is lost or exposed, ask EasyFiling to regenerate it.
Endpoints
Method | Endpoint | Purpose |
|---|---|---|
|
| Calculate estimated formation pricing |
|
| Submit a formation order |
|
| Check order status and progress |
1. Get Formation Quote
Use this endpoint before creating an order to show or verify formation pricing.
POST /api/v1/partner/formation/quotesRequest Body
{
"company_state_id": "uuid-of-company-state",
"company_plan_id": "uuid-of-company-plan",
"company_structure_id": "uuid-of-company-structure"
}Successful Response
{
"status": true,
"message": "Formation quote generated successfully.",
"data": {
"currency": "USD",
"state_fee": 100,
"plan_fee": 199,
"total": 299,
"line_items": [
{
"code": "state_fee",
"name": "Wyoming State Fee",
"amount": 100
},
{
"code": "company_plan",
"name": "Basic Plan",
"amount": 199
}
]
}
}2. Submit Formation Order
Use this endpoint to create the EasyFiling company formation request.
POST /api/v1/partner/formation/ordersImportant Behavior
external_order_idmust be unique per partner.- If the same
external_order_idis sent again, EasyFiling returns the existing order instead of creating a duplicate. - Formation documents are not uploaded by the partner API. EasyFiling prepares and uploads final documents internally.
Request Body
{
"external_order_id": "partner-order-10001",
"external_customer_id": "partner-customer-501",
"customer": {
"name": "Jane Founder",
"email": "jane@example.com",
"calling_code": "+1",
"phone": "5551234567"
},
"personal_info": {
"calling_code": "+1",
"phone": "5551234567",
"city": "Austin",
"region": "Texas",
"postal_code": "78701"
},
"company": {
"name": "Example Ventures LLC",
"calling_code": "+1",
"phone": "5551234567",
"email": "company@example.com",
"website": "https://example.com",
"address": "100 Main Street, Austin, TX 78701",
"description": "Software consulting company",
"industry_id": "uuid-of-industry",
"company_structure_id": "uuid-of-company-structure",
"company_designator_id": "uuid-of-company-designator",
"company_state_id": "uuid-of-company-state",
"company_plan_id": "uuid-of-company-plan",
"registration_type": "new_register",
"protect_privacy": true,
"operating_address": "100 Main Street, Austin, TX 78701"
},
"officer_detail": [
{
"name": "Jane Founder",
"officer_level_id": "uuid-of-officer-level",
"ownership": "100",
"address": "100 Main Street, Austin, TX 78701",
"responsible": true
}
],
"payment_detail": {
"payment_id": "partner-payment-90001",
"payment_mode": "partner_platform",
"paid_amount": 299
}
}Required Fields
Top level:
external_order_idcustomer.namecustomer.email
Company:
company.namecompany.emailcompany.company_structure_idcompany.company_designator_idcompany.company_state_idcompany.company_plan_id
Optional but recommended:
external_customer_idcustomer.phonecustomer.calling_codecompany.phonecompany.addresscompany.descriptioncompany.industry_idofficer_detailpayment_detail.payment_idpayment_detail.paid_amount
Successful Response
{
"status": true,
"message": "Partner formation order submitted successfully.",
"data": {
"id": "easyfiling-partner-order-uuid",
"external_order_id": "partner-order-10001",
"external_customer_id": "partner-customer-501",
"status": "submitted",
"idempotent": false,
"submitted_at": "2026-07-18T06:30:00.000000Z",
"quote": {
"currency": "USD",
"state_fee": 100,
"plan_fee": 199,
"total": 299
},
"company": {
"id": "easyfiling-company-uuid",
"name": "Example Ventures LLC",
"email": "company@example.com",
"status": "active",
"formation_date": null,
"source": "partner_api",
"progress": [],
"documents": []
}
}
}Duplicate Submission Response
If the same external_order_id is submitted again, the existing order is returned.
{
"status": true,
"message": "Partner formation order already exists.",
"data": {
"external_order_id": "partner-order-10001",
"status": "submitted",
"idempotent": true,
"company": {
"id": "easyfiling-company-uuid",
"name": "Example Ventures LLC"
}
}
}3. Check Formation Order Status
Use this endpoint to fetch the current EasyFiling order state.
GET /api/v1/partner/formation/orders/{externalOrderId}Example:
GET /api/v1/partner/formation/orders/partner-order-10001Successful Response
{
"status": true,
"message": "Partner formation order fetched successfully.",
"data": {
"id": "easyfiling-partner-order-uuid",
"external_order_id": "partner-order-10001",
"external_customer_id": "partner-customer-501",
"status": "submitted",
"submitted_at": "2026-07-18T06:30:00.000000Z",
"quote": {
"currency": "USD",
"state_fee": 100,
"plan_fee": 199,
"total": 299
},
"company": {
"id": "easyfiling-company-uuid",
"name": "Example Ventures LLC",
"email": "company@example.com",
"status": "active",
"formation_date": "2026-07-20",
"source": "partner_api",
"progress": [
{
"id": "progress-status-uuid",
"status": "completed",
"step": "Company Formation"
}
],
"documents": [
{
"id": "document-uuid",
"type": "Article Of Organization",
"status": "completed",
"file_name": "uploaded-file-name.pdf",
"url": "https://secure-file-url.example.com/document.pdf"
}
]
}
}
}Error Responses
Missing or Invalid Credentials
{
"success": false,
"message": "Partner credentials are required."
}or:
{
"success": false,
"message": "Invalid partner credentials."
}HTTP status: 401
Validation Error
{
"message": "The company.company state id field is required.",
"errors": {
"company.company_state_id": [
"The company.company state id field is required."
]
}
}HTTP status: 422
Order Not Found
{
"status": false,
"message": "Partner formation order not found."
}HTTP status: 404
cURL Examples
Quote
curl -X POST "https://api.example.com/api/v1/partner/formation/quotes" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Partner-Client-Id: pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "X-Partner-Secret: your_partner_secret" \
-d '{
"company_state_id": "uuid-of-company-state",
"company_plan_id": "uuid-of-company-plan",
"company_structure_id": "uuid-of-company-structure"
}'Create Order
curl -X POST "https://api.example.com/api/v1/partner/formation/orders" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Partner-Client-Id: pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "X-Partner-Secret: your_partner_secret" \
-d '{
"external_order_id": "partner-order-10001",
"external_customer_id": "partner-customer-501",
"customer": {
"name": "Jane Founder",
"email": "jane@example.com",
"calling_code": "+1",
"phone": "5551234567"
},
"company": {
"name": "Example Ventures LLC",
"calling_code": "+1",
"phone": "5551234567",
"email": "company@example.com",
"description": "Software consulting company",
"company_structure_id": "uuid-of-company-structure",
"company_designator_id": "uuid-of-company-designator",
"company_state_id": "uuid-of-company-state",
"company_plan_id": "uuid-of-company-plan",
"registration_type": "new_register",
"protect_privacy": true
},
"officer_detail": [
{
"name": "Jane Founder",
"ownership": "100",
"responsible": true
}
],
"payment_detail": {
"payment_id": "partner-payment-90001",
"payment_mode": "partner_platform",
"paid_amount": 299
}
}'Check Status
curl -X GET "https://api.example.com/api/v1/partner/formation/orders/partner-order-10001" \
-H "Accept: application/json" \
-H "X-Partner-Client-Id: pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "X-Partner-Secret: your_partner_secret"JavaScript Example
const baseUrl = "https://api.example.com/api";
const headers = {
"Accept": "application/json",
"Content-Type": "application/json",
"X-Partner-Client-Id": process.env.EASYFILING_CLIENT_ID,
"X-Partner-Secret": process.env.EASYFILING_CLIENT_SECRET
};
async function createFormationOrder(orderPayload) {
const response = await fetch(`${baseUrl}/v1/partner/formation/orders`, {
method: "POST",
headers,
body: JSON.stringify(orderPayload)
});
const body = await response.json();
if (!response.ok || body.status === false) {
throw new Error(body.message || "EasyFiling formation request failed");
}
return body.data;
}
Integration Notes
- Store
external_order_idin your system. It is used for idempotency and status checks. - Do not expose partner credentials in frontend code. API calls should be made from your backend.
- Treat
company.idfrom EasyFiling as the EasyFiling company reference. - Poll the status endpoint when you need updates.
- Final formation documents are prepared and uploaded by EasyFiling. Partners should not upload formation documents through this API.
- If you need a new secret, ask EasyFiling to regenerate it. The old secret stops working after regeneration.
Updated on: 18/07/2026
Thank you!
