Get an incorporation
curl --request GET \
--url https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"incorporation": {
"id": "0f9a8f5e-7f7c-4c1b-a60a-b1022f9d8c91",
"customerId": 77,
"country": "SG",
"countryOptions": {
"corporationType": "PRIVATE_LIMITED_COMPANY"
},
"createdAt": "2026-04-21T17:10:00.000Z",
"updatedAt": "2026-04-21T17:10:00.000Z",
"businessEntityId": 44
},
"incorporationValidation": {
"isComplete": false,
"missingRequirements": [
{
"code": "PARTICIPANT_DOCUMENT_REQUIRED",
"path": "participants.participant_123.documents.PASSPORT_SCAN",
"message": "Participant participant_123 requires a PASSPORT_SCAN document",
"participantId": "participant_123",
"displayName": "Jane Founder"
}
],
"invalidRequirements": [
{
"code": "PARTICIPANT_DOCUMENT_REQUIRED",
"path": "participants.participant_123.documents.PASSPORT_SCAN",
"message": "Participant participant_123 requires a PASSPORT_SCAN document",
"participantId": "participant_123",
"displayName": "Jane Founder"
}
]
},
"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"
}
],
"registeredOfficeAddressSource": "commendaService"
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"participants": [
{
"id": "participant_123",
"participantType": "INDIVIDUAL",
"resource": {
"resourceType": "KEY_PERSON",
"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"
}
]
}
],
"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": [
"KEY_PERSON"
],
"resourceFieldsByParticipantType": {
"INDIVIDUAL": [
{
"kind": "resource",
"key": "residentialAddress",
"name": "Residential address",
"description": "The key person's current residential address. Store this on the Commenda OS person as residentialAddress.",
"required": true,
"resourceKind": "address",
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress"
},
"fields": [
{
"kind": "scalar",
"key": "addressLine1",
"name": "Address line 1",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.addressLine1"
}
},
{
"kind": "scalar",
"key": "city",
"name": "City",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.city"
}
},
{
"kind": "scalar",
"key": "country",
"name": "Country",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.country"
}
}
]
}
]
},
"documentRequirements": [
{
"documentKind": "PASSPORT_SCAN",
"name": "Passport scan"
},
{
"documentKind": "UTILITY_BILL",
"name": "Utility bill"
}
]
}
]
}
}{
"statusCode": 403,
"message": "Company does not belong to this affiliate firm",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "Company does not belong to this affiliate firm",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "Company does not belong to this affiliate firm",
"error": "Forbidden"
}Incorporations
Get an incorporation
Retrieve one incorporation visible to the authenticated partner. Use this direct route for intake state reads.
GET
/
partner
/
incorporation
/
{incorporationId}
Get an incorporation
curl --request GET \
--url https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prod.commenda.io/api/v1/partner/incorporation/{incorporationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"incorporation": {
"id": "0f9a8f5e-7f7c-4c1b-a60a-b1022f9d8c91",
"customerId": 77,
"country": "SG",
"countryOptions": {
"corporationType": "PRIVATE_LIMITED_COMPANY"
},
"createdAt": "2026-04-21T17:10:00.000Z",
"updatedAt": "2026-04-21T17:10:00.000Z",
"businessEntityId": 44
},
"incorporationValidation": {
"isComplete": false,
"missingRequirements": [
{
"code": "PARTICIPANT_DOCUMENT_REQUIRED",
"path": "participants.participant_123.documents.PASSPORT_SCAN",
"message": "Participant participant_123 requires a PASSPORT_SCAN document",
"participantId": "participant_123",
"displayName": "Jane Founder"
}
],
"invalidRequirements": [
{
"code": "PARTICIPANT_DOCUMENT_REQUIRED",
"path": "participants.participant_123.documents.PASSPORT_SCAN",
"message": "Participant participant_123 requires a PASSPORT_SCAN document",
"participantId": "participant_123",
"displayName": "Jane Founder"
}
]
},
"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"
}
],
"registeredOfficeAddressSource": "commendaService"
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"participants": [
{
"id": "participant_123",
"participantType": "INDIVIDUAL",
"resource": {
"resourceType": "KEY_PERSON",
"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"
}
]
}
],
"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": [
"KEY_PERSON"
],
"resourceFieldsByParticipantType": {
"INDIVIDUAL": [
{
"kind": "resource",
"key": "residentialAddress",
"name": "Residential address",
"description": "The key person's current residential address. Store this on the Commenda OS person as residentialAddress.",
"required": true,
"resourceKind": "address",
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress"
},
"fields": [
{
"kind": "scalar",
"key": "addressLine1",
"name": "Address line 1",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.addressLine1"
}
},
{
"kind": "scalar",
"key": "city",
"name": "City",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.city"
}
},
{
"kind": "scalar",
"key": "country",
"name": "Country",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.country"
}
}
]
}
]
},
"documentRequirements": [
{
"documentKind": "PASSPORT_SCAN",
"name": "Passport scan"
},
{
"documentKind": "UTILITY_BILL",
"name": "Utility bill"
}
]
}
]
}
}{
"statusCode": 403,
"message": "Company does not belong to this affiliate firm",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "Company does not belong to this affiliate firm",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "Company does not belong to this affiliate firm",
"error": "Forbidden"
}Retrieves an incorporation for one of your customers.
Use this endpoint to refresh the latest
intakeState, participants, and top-level incorporationStatus for an ongoing incorporation.
incorporationValidation.isComplete tells you whether the current state is eligible to submit. SUBMITTED or IN_PROGRESS is returned only after POST /partner/incorporation/{incorporationId}/submit succeeds for a currently complete incorporation.
Use Get incorporation status for stage-level progress and blocking issue ids. Use List incorporation issues to track active or resolved correction requests.
Incorporation status
incorporationStatus can be one of:
| Status | Meaning |
|---|---|
AWAITING_CUSTOMER_INPUT | Required intake information, participant roles, or documents are still missing or invalid, or the current state is complete but has not been submitted for review. |
SUBMITTED | The incorporation was explicitly submitted and currently validates against the incorporation requirements, but Commenda review has not started yet. |
IN_PROGRESS | Commenda review is in progress. |
BLOCKED | The incorporation has active partner-visible issues or review start/runtime failures. |
COMPLETED | The incorporation has been completed. |
Authorizations
Path Parameters
Incorporation identifier returned by create or list endpoints.
Response
Incorporation retrieved successfully
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Current intake state for the incorporation. Always returned; an empty intake state is initialized automatically when one does not yet exist.
Show child attributes
Show child attributes
Participants registered to this incorporation, when requested or available.
Show child attributes
Show child attributes
Requirements schema 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 incorporation requirements.
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": ["KEY_PERSON"],
"resourceFieldsByParticipantType": {
"INDIVIDUAL": [
{
"kind": "resource",
"key": "residentialAddress",
"name": "Residential address",
"description": "The key person's current residential address. Store this on the Commenda OS person as residentialAddress.",
"required": true,
"resourceKind": "address",
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress"
},
"fields": [
{
"kind": "scalar",
"key": "addressLine1",
"name": "Address line 1",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.addressLine1"
}
},
{
"kind": "scalar",
"key": "city",
"name": "City",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.city"
}
},
{
"kind": "scalar",
"key": "country",
"name": "Country",
"required": true,
"commendaOs": {
"entity": "keyPerson",
"field": "residentialAddress.country"
}
}
]
}
]
},
"documentRequirements": [
{
"documentKind": "PASSPORT_SCAN",
"name": "Passport scan"
},
{
"documentKind": "UTILITY_BILL",
"name": "Utility bill"
}
]
}
]
}
Was this page helpful?
⌘I