> ## Documentation Index
> Fetch the complete documentation index at: https://docs.commenda.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get incorporation requirements

> Retrieve the current requirements schema for a selected incorporation jurisdiction and type. This endpoint is informational; intake updates are validated against the current server-side incorporation requirements.

Returns the current requirements for a selected incorporation.

For Singapore private limited companies:

```bash theme={null}
curl --request GET \
  --url 'https://api.prod.commenda.io/api/v1/partner/incorporation/requirements?country=SG&countryOptions[corporationType]=PRIVATE_LIMITED_COMPANY' \
  --header 'x-api-key: <partner_api_key>'
```

Use the returned requirements to render your intake UI and to understand required fields, participant roles, document requirements, and validation constraints.

Rule of thumb: render from the requirements response, but validate from write/read responses. Intake updates are always validated against the current server-side requirements, so clients should handle `missingRequirements` and `invalidRequirements` from intake responses.

For a renderer-oriented explanation of field kinds, input types, conditions, cardinality, constraints, and endpoint routing, see [Requirements guide](/engine/incorporation/partner-incorporation-requirements-guide).

## Participant role/resource combinations

The requirements response describes participant requirements in terms of role, participant type, and resource type. For Singapore private limited companies:

| Role requirement       | `participantType` | `resource.resourceType` | Notes                                                                     |
| ---------------------- | ----------------- | ----------------------- | ------------------------------------------------------------------------- |
| Individual director    | `INDIVIDUAL`      | `KEY_PERSON`            | Use a Commenda OS person id. One person can also hold a shareholder role. |
| Individual shareholder | `INDIVIDUAL`      | `KEY_PERSON`            | Use a Commenda OS person id and include `ownershipPercentage`.            |
| Corporate shareholder  | `CORPORATE`       | `BUSINESS_ENTITY`       | Use a Commenda OS business entity id and include `ownershipPercentage`.   |
| Corporate director     | `CORPORATE`       | `BUSINESS_ENTITY`       | Not supported for Singapore private limited companies.                    |

When `documentRequirements` are returned, match them by `role`, `participantType`, and `resourceType`. Individual Singapore directors and shareholders require `PASSPORT_SCAN` and `UTILITY_BILL`; corporate shareholder documents, if required by the selected incorporation type, are surfaced by the same `documentRequirements` array.

Some participant requirements also include `resourceFieldsByParticipantType`. These are fields on the Commenda OS resource you registered as the participant. For example, Singapore individual directors require the key person to have `residentialAddress`. Satisfy that field by creating or updating the person with `residentialAddress`; it is not a reusable Commenda OS Location and should not be sent as `registeredOfficeAddressLocation`.

Requirements snippet:

```json theme={null}
{
  "participantRequirements": [
    {
      "key": "directors",
      "role": "DIRECTOR",
      "allowedParticipantTypes": ["INDIVIDUAL"],
      "allowedResourceTypes": ["KEY_PERSON"],
      "resourceFieldsByParticipantType": {
        "INDIVIDUAL": [
          {
            "kind": "resource",
            "key": "residentialAddress",
            "required": true,
            "commendaOs": {
              "entity": "keyPerson",
              "field": "residentialAddress"
            }
          }
        ]
      }
    }
  ]
}
```

If validation later returns:

```json theme={null}
{
  "path": "participants.participant_123.resource.residentialAddress",
  "message": "Residential address is required"
}
```

Find `participant_123` in the incorporation response:

```json theme={null}
{
  "id": "participant_123",
  "resource": {
    "resourceType": "KEY_PERSON",
    "resourceId": 12
  }
}
```

Then update person `12`:

```json theme={null}
{
  "residentialAddress": {
    "addressLine1": "1 Raffles Place",
    "city": "Singapore",
    "postalCode": "048616",
    "country": "SG"
  }
}
```

Validation paths in `missingRequirements` and `invalidRequirements` correspond to requirements fields or participant/document requirements. Field validation paths include the requirements block key, such as `companyNames.companyNameOptions`, even though the intake payload key remains `requirements.companyNameOptions`. Participant resource paths look like `participants.participant_123.resource.residentialAddress`. Participant document paths look like `participants.participant_123.documents.PASSPORT_SCAN`.

You may cache the requirements response by `country` plus `countryOptions`, but do not send a requirements version back to Commenda. If validation returns new missing or invalid requirements, update your UI from the latest response.


## OpenAPI

````yaml GET /partner/incorporation/requirements
openapi: 3.0.1
info:
  title: Commenda Public APIs
  description: >-
    APIs for Commenda entity management, partner incorporation, indirect tax,
    compliance, and corporate operations.
  license:
    name: NONE
    url: NONE
  version: 1.0.0
servers:
  - url: https://api.prod.commenda.io/api/v1
    description: Commenda platform APIs, including Partner Incorporation and Commenda OS.
  - url: https://transaction-tax.api.in.commenda.io/api/v1
    description: Global Indirect Tax API.
security:
  - bearerAuth: []
paths:
  /partner/incorporation/requirements:
    get:
      summary: Get incorporation requirements
      description: >-
        Retrieve the current requirements schema for a selected incorporation
        jurisdiction and type. This endpoint is informational; intake updates
        are validated against the current server-side incorporation
        requirements.
      operationId: getPartnerIncorporationRequirements
      parameters:
        - name: country
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/PartnerIncorporationCountry'
          description: Incorporation country.
          example: SG
        - name: countryOptions
          in: query
          required: true
          style: deepObject
          explode: true
          schema:
            $ref: '#/components/schemas/PartnerIncorporationCountryOptions'
          description: >-
            Country-specific options using deep-object query syntax, for example
            `countryOptions[corporationType]=PRIVATE_LIMITED_COMPANY`.
      responses:
        '200':
          description: Requirements retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerRequirementsResponse'
        '400':
          description: Unsupported or malformed incorporation selection
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffiliatePublicError'
        '401':
          description: Missing or invalid partner API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffiliatePublicError'
        '404':
          description: Requirements are not available for the requested selection
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffiliatePublicError'
      security:
        - xApiKeyAuth: []
      servers:
        - url: https://api.prod.commenda.io/api/v1
components:
  schemas:
    PartnerIncorporationCountry:
      type: string
      description: ISO 3166-1 alpha-2 country code for the incorporation jurisdiction.
      example: SG
      enum:
        - AE
        - CA
        - GB
        - IE
        - IN
        - KY
        - NZ
        - SG
        - US
    PartnerIncorporationCountryOptions:
      type: object
      description: >-
        Country-specific incorporation options. Use the jurisdiction catalog for
        the currently supported fields and values.
      additionalProperties: true
      example:
        corporationType: PRIVATE_LIMITED_COMPANY
    PartnerRequirementsResponse:
      type: object
      required:
        - requirements
      properties:
        requirements:
          $ref: '#/components/schemas/PartnerIncorporationRequirements'
    AffiliatePublicError:
      type: object
      required:
        - statusCode
        - message
        - error
      properties:
        statusCode:
          type: integer
          example: 403
        message:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          example: Company does not belong to this affiliate firm
        error:
          type: string
          example: Forbidden
    PartnerIncorporationRequirements:
      type: object
      description: >-
        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.
      additionalProperties: true
      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
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
    xApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````