incorporationValidation to decide whether the incorporation is ready to submit.
If one participant has multiple roles with the same required
documentKind, one upsert for that participant and documentKind satisfies the overlapping requirement.
Renderer model
Build your renderer around each field’skind.
For
blocks[].fields, field keys become top-level keys in the intake requirements object. For nested object and collection fields, preserve the nested shape under the parent key.
Use each field’s key to build request payloads. commendaOs.field is an absolute Commenda OS mapping path, not the nested JSON key for the current renderer position.
For participantRequirements[].resourceFieldsByParticipantType, field keys describe data that must exist on the registered participant’s resource. Do not send those values to the intake endpoint. Update the referenced person or business entity through the Commenda OS Partner API.
The intake endpoint rejects unknown keys with 400 Bad Request. Sending participant-shaped values such as participants, directors, top-level residentialAddress, or a nested resource object under requirements fails validation before any state is stored. See Update incorporation intake for the full list of routing rules.
Scalar input types
input.type is the UI hint for scalar fields.
For
select, render from input.options. Treat option value as the exact API value and option name/description as display copy. The API validates option values as sent; do not normalize, uppercase, or otherwise change casing.
Use input.placeholder and input.examples as hints only. They are not defaults.
Required and applicable fields
required and appliesWhen are separate concepts.
Because intake updates are merge-based,
currentState is the merged history of accepted intake patches. It can contain values that are stale or no longer applicable after later choices. Treat incorporationValidation as the source of truth for readiness, not the presence of keys in currentState.
Cardinality and constraints
Collections and participant requirements can definecardinality.
Collections can also define
constraints.
Scalar fields can define
validation, such as minLength, maxLength, min, max, or pattern. Use these to provide inline validation, but still handle server-side invalidRequirements.
Resource fields
Resource fields have different submission shapes depending on where they appear.Intake resource fields
When a resource field appears underblocks[].fields, submit a resource object through the intake endpoint.
When a resource field includes a
fields array, those child fields describe the keys accepted under data. For existingResource, data supplements the saved resource values for incorporation validation. For inlineData, data is the full submitted resource value.
Use child field key values as the data keys. Child commendaOs.field values, when present, are absolute paths from the Commenda OS resource root.
Use existingResource when the customer already has a Commenda OS resource:
data when the existing resource is missing supplemental fields required for this incorporation:
inlineData when the incorporation should store the resource data only for this intake value:
commendaOs.field tells you where a field maps on a Commenda OS resource. commendaOsResource.entity tells you what kind of Commenda OS resource an existingResource value should reference. It does not create the resource automatically.
Participant resource fields
When a resource field appears underparticipantRequirements[].resourceFieldsByParticipantType, it describes data that must exist on the registered participant’s Commenda OS resource.
Do not render the intake resource object controls (mode and resourceId) for participant resource fields. Render the nested fields and submit them to the referenced person or business entity endpoint.
For Singapore individual directors and shareholders, residentialAddress is a required resource field on the KEY_PERSON resource. Satisfy it by updating the referenced person:
POST /partner/commenda-os/customers/{customerId}/persons or PATCH /partner/commenda-os/customers/{customerId}/persons/{personId}.
The Partner API person endpoints accept residentialAddress directly. They do not accept a person locations array.
If a child field under residentialAddress has key: "addressLine1" and commendaOs.field: "residentialAddress.addressLine1", submit it once under the parent object: { "residentialAddress": { "addressLine1": "1 Raffles Place" } }. Do not submit { "residentialAddress": { "residentialAddress": { "addressLine1": "1 Raffles Place" } } }.
Worked example: Singapore Pte. Ltd.
This requirements snippet says to collect exactly three unique company names:name, and prevent duplicate names before submit.
Submit the values through intake:
partnerProvidedLocation:
inlineData for that location field, use the same child fields keys under data:
participant_123 in the incorporation response, read participant.resource.resourceId, then update that person:
Validation paths
Validation paths inmissingRequirements and invalidRequirements point to the missing or invalid item:
Your renderer can prevent many invalid values before submit, but Commenda validation is authoritative. After every write, read
incorporationValidation; the incorporation is ready to submit when incorporationValidation.isComplete is true.
Renderer helpers
Most renderers need only a small set of pure helpers:
Keep client-side validation helpful but non-authoritative. The server may add or change requirements, and
incorporationValidation remains the final contract for submit readiness.