Articles on: Partners

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/json


The 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

POST

/v1/partner/formation/quotes

Calculate estimated formation pricing

POST

/v1/partner/formation/orders

Submit a formation order

GET

/v1/partner/formation/orders/{externalOrderId}

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/quotes


Request 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/orders


Important Behavior


  • external_order_id must be unique per partner.
  • If the same external_order_id is 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:



Company:


  • company.name
  • company.email
  • company.company_structure_id
  • company.company_designator_id
  • company.company_state_id
  • company.company_plan_id


Optional but recommended:


  • external_customer_id
  • customer.phone
  • customer.calling_code
  • company.phone
  • company.address
  • company.description
  • company.industry_id
  • officer_detail
  • payment_detail.payment_id
  • payment_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-10001


Successful 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_id in 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.id from 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

Was this article helpful?

Share your feedback

Cancel

Thank you!