Skip to main content
POST
/
partner
/
incorporation
/
{incorporationId}
/
submit
Submit an incorporation
curl --request POST \
  --url https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}/submit \
  --header 'x-api-key: <api-key>'
{
  "incorporation": {
    "id": "0f9a8f5e-7f7c-4c1b-a60a-b1022f9d8c91",
    "incorporationId": "0f9a8f5e-7f7c-4c1b-a60a-b1022f9d8c91",
    "companyId": 77,
    "country": "SG",
    "countryOptions": {
      "corporationType": "PRIVATE_LIMITED_COMPANY"
    },
    "incorporationStatus": "awaiting_customer_input",
    "createdAt": "2026-04-21T17:10:00.000Z",
    "updatedAt": "2026-04-21T17:10:00.000Z",
    "corporationId": 44
  },
  "requirements": {
    "schemaVersion": "2026-04-22",
    "dslVersion": "mvp-2026-04-22",
    "key": "sg.private_limited_company",
    "country": "SG",
    "countryOptions": {
      "corporationType": "PRIVATE_LIMITED_COMPANY"
    },
    "name": "Singapore Private Limited Company Incorporation Requirements",
    "blocks": [
      {
        "key": "companyNames",
        "name": "Company name options"
      }
    ],
    "participantRequirements": [
      {
        "key": "directors",
        "name": "Directors",
        "role": "director",
        "allowedParticipantTypes": [
          "individual"
        ],
        "allowedResourceTypes": [
          "keyPerson"
        ],
        "documentRequirements": [
          {
            "documentKind": "passport_scan",
            "name": "Passport scan"
          },
          {
            "documentKind": "utility_bill",
            "name": "Utility bill"
          }
        ]
      }
    ]
  },
  "intakeState": {
    "id": "state_123",
    "incorporationId": "0f9a8f5e-7f7c-4c1b-a60a-b1022f9d8c91",
    "currentState": {
      "companyNameOptions": [
        {
          "name": "Acme SG Pte Ltd"
        },
        {
          "name": "Acme Asia Pte Ltd"
        },
        {
          "name": "Acme Global Pte Ltd"
        }
      ],
      "registeredAddressMode": "standardAddress"
    },
    "validation": {
      "isComplete": false,
      "missingRequirements": [
        {
          "path": "participants.participant_123.documents.passport_scan",
          "message": "Participant participant_123 requires a passport_scan document"
        }
      ],
      "invalidRequirements": [
        {
          "path": "participants.participant_123.documents.passport_scan",
          "message": "Participant participant_123 requires a passport_scan document"
        }
      ]
    },
    "createdAt": "2023-11-07T05:31:56Z",
    "updatedAt": "2023-11-07T05:31:56Z"
  },
  "participants": [
    {
      "participantId": "participant_123",
      "participantType": "individual",
      "resource": {
        "resourceType": "keyPerson",
        "resourceId": "12"
      },
      "roles": [
        {
          "role": "director"
        },
        {
          "role": "shareholder",
          "ownershipPercentage": 100
        }
      ],
      "documents": [
        {
          "documentId": "document_123",
          "participantId": "participant_123",
          "documentKind": "passport_scan",
          "fileId": 456,
          "status": "submitted"
        },
        {
          "documentId": "document_124",
          "participantId": "participant_123",
          "documentKind": "utility_bill",
          "fileId": 789,
          "status": "submitted"
        }
      ]
    }
  ]
}
Submits a complete incorporation for Commenda review and starts the dedicated partner incorporation workflow. Use this endpoint after the current incorporation state satisfies the requirements DSL. intakeState.validation.isComplete means the incorporation is eligible to submit; it does not move to submitted or in_progress until you call this endpoint. This endpoint refreshes validation before accepting the submit request. If required intake fields, participants, ownership totals, or participant documents are still missing or invalid, the request returns 400 and the response includes validation details. Submit is idempotent for an already-submitted, still-complete incorporation. The workflow execution is created or reused with the same id as the incorporation’s incorporationId. The response returns the current incorporation resource.

Incomplete submit response

{
  "statusCode": 400,
  "message": "Incorporation intake is incomplete and cannot be submitted for review",
  "error": "Bad Request",
  "validation": {
    "isComplete": false,
    "missingRequirements": [
      {
        "path": "participants.directors",
        "message": "At least one director is required"
      }
    ],
    "invalidRequirements": []
  }
}

Lifecycle effect

awaiting_customer_input
  -> submitted    after POST /submit succeeds and before workflow work starts
  -> in_progress  when the dedicated workflow starts processing
  -> blocked      when there are active partner-visible issues or workflow start/runtime failures
  -> completed    when the incorporation is complete
If the incorporation becomes incomplete before workflow work starts, reads can return awaiting_customer_input again until the current state is fixed.

Authorizations

x-api-key
string
header
required

Path Parameters

incorporationId
string
required

Incorporation identifier returned by create or list endpoints.

Response

Incorporation submitted for review

incorporation
object
required
requirements
object

Requirements DSL for the selected incorporation. Clients can use this to render their own intake UI, but intake updates are always validated against the current server-side DSL.

Example:
{
"schemaVersion": "2026-04-22",
"dslVersion": "mvp-2026-04-22",
"key": "sg.private_limited_company",
"country": "SG",
"countryOptions": {
"corporationType": "PRIVATE_LIMITED_COMPANY"
},
"name": "Singapore Private Limited Company Incorporation Requirements",
"blocks": [
{
"key": "companyNames",
"name": "Company name options"
}
],
"participantRequirements": [
{
"key": "directors",
"name": "Directors",
"role": "director",
"allowedParticipantTypes": ["individual"],
"allowedResourceTypes": ["keyPerson"],
"documentRequirements": [
{
"documentKind": "passport_scan",
"name": "Passport scan"
},
{
"documentKind": "utility_bill",
"name": "Utility bill"
}
]
}
]
}
intakeState
object
participants
object[]

Participants registered to this incorporation, when requested or available.