> ## 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.

# Create a person

> Create a reusable Commenda OS person for one of your customers. Use the returned `person.id` as a `KEY_PERSON` resource id when registering incorporation participants. For Singapore residential address requirements, include `residentialAddress`.

Create a reusable Commenda OS person for one of your customers.

Use this endpoint when an incorporation participant does not already exist in Commenda OS. After creation, pass the returned `person.id` as the participant resource id:

```json theme={null}
{
  "participantType": "INDIVIDUAL",
  "resource": {
    "resourceType": "KEY_PERSON",
    "resourceId": 12
  },
  "roles": [{ "role": "DIRECTOR" }]
}
```

Use incorporation participant and document endpoints for incorporation-specific roles and documents. This endpoint only creates the reusable person record.

## Person addresses

Some incorporation requirements validate fields on the referenced person resource. For Singapore individual directors and shareholders, `participants.{participantId}.resource.residentialAddress` is satisfied by setting `residentialAddress` on the person:

```json theme={null}
{
  "firstName": "Jane",
  "lastName": "Tan",
  "email": "jane@example.com",
  "dateOfBirth": "1990-04-18",
  "countryOfCitizenship": "SG",
  "residentialAddress": {
    "addressLine1": "1 Raffles Place",
    "city": "Singapore",
    "postalCode": "048616",
    "country": "SG"
  }
}
```

This stores the address on the person. Person read responses return it as the top-level `residentialAddress` field. It does not create a Commenda OS Location; Location resources are business-entity addresses, such as a partner-provided registered office address.


## OpenAPI

````yaml POST /partner/commenda-os/customers/{customerId}/persons
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/commenda-os/customers/{customerId}/persons:
    post:
      summary: Create a person
      description: >-
        Create a reusable Commenda OS person for one of your customers. Use the
        returned `person.id` as a `KEY_PERSON` resource id when registering
        incorporation participants. For Singapore residential address
        requirements, include `residentialAddress`.
      operationId: createPartnerCommendaOsPerson
      parameters:
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
          description: Commenda customer identifier.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommendaOsPersonCreateRequest'
            examples:
              createPerson:
                value:
                  firstName: Jane
                  lastName: Founder
                  email: jane@acme.com
                  dateOfBirth: '1990-04-18'
                  countryOfCitizenship: SG
                  residentialAddress:
                    addressLine1: 1 Raffles Place
                    city: Singapore
                    postalCode: '048616'
                    country: SG
      responses:
        '201':
          description: Person created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommendaOsPersonMutationResponse'
        '400':
          description: Malformed person create payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommendaOsPartnerError'
        '401':
          description: Missing or invalid partner API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommendaOsPartnerError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommendaOsPartnerError'
      security:
        - xApiKeyAuth: []
      servers:
        - url: https://api.prod.commenda.io/api/v1
components:
  schemas:
    CommendaOsPersonCreateRequest:
      type: object
      description: >-
        Create a reusable Commenda OS person for one of your customers. The
        `customerId` is taken from the URL path.
      required:
        - firstName
      properties:
        firstName:
          type: string
          example: Jane
        lastName:
          type: string
          example: Founder
        email:
          type: string
          format: email
          example: jane@acme.com
        phoneNumber:
          type: string
          example: '+14155550123'
        residentialAddress:
          $ref: '#/components/schemas/CommendaOsPersonAddress'
          description: >-
            Person residential address. Use this for participant resource
            requirements such as
            `participants.{participantId}.resource.residentialAddress`.
        employmentStartDate:
          type: string
          format: date
          example: '2025-01-01'
        dateOfBirth:
          type: string
          format: date
          example: '1990-04-18'
        countryOfCitizenship:
          type: string
          example: SG
        ssn:
          type: string
          description: SSN or ITIN, when applicable.
          example: 123-45-6789
        hasNoSSN:
          type: boolean
          example: false
        directorIdentificationNumber:
          type: string
          description: Director Identification Number (DIN) assigned to Indian directors.
          example: '00012345'
    CommendaOsPersonMutationResponse:
      type: object
      required:
        - person
      properties:
        person:
          $ref: '#/components/schemas/CommendaOsPerson'
    CommendaOsPartnerError:
      type: object
      required:
        - statusCode
        - message
        - error
      properties:
        statusCode:
          type: integer
          description: HTTP status code for the error response.
        message:
          description: >-
            Error message returned by the API. Exact text varies by failure
            mode.
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        error:
          type: string
          description: Standard error label for the response status.
    CommendaOsPersonAddress:
      type: object
      description: Address fields stored directly on a Commenda OS person.
      required:
        - addressLine1
        - city
        - country
      properties:
        addressLine1:
          type: string
          example: 1 Raffles Place
        addressLine2:
          type: string
          nullable: true
          example: Suite 21045
        addressLine3:
          type: string
          nullable: true
        city:
          type: string
          example: Singapore
        postalCode:
          type: string
          nullable: true
          example: '048616'
        state:
          type: string
          nullable: true
        country:
          type: string
          example: SG
    CommendaOsPerson:
      type: object
      required:
        - id
        - firstName
        - lastName
        - dateOfBirth
        - email
        - kycIds
        - residentialAddress
        - stakeholderId
        - phoneNumber
        - businessEntitiesInfo
      properties:
        id:
          type: integer
          example: 12
        firstName:
          type: string
          example: Jane
        lastName:
          type: string
          example: Founder
        dateOfBirth:
          type: string
          example: '1990-04-18'
        email:
          type: string
          format: email
          example: jane@acme.com
        gender:
          type: string
          nullable: true
        nationalities:
          type: array
          items:
            type: string
        kycIds:
          type: array
          items:
            $ref: '#/components/schemas/CommendaOsKycId'
        residentialAddress:
          type: object
          allOf:
            - $ref: '#/components/schemas/CommendaOsPersonAddress'
          nullable: true
          description: >-
            Person residential address, used for participant resource
            requirements such as
            `participants.{participantId}.resource.residentialAddress`.
        onboardingInfo:
          type: object
          nullable: true
          additionalProperties: true
        stakeholderId:
          type: string
          example: stk_123
        phoneNumber:
          type: string
          example: '+14155550123'
        employmentStartDate:
          type: string
          nullable: true
          example: '2025-01-01'
        directorIdentificationNumber:
          type: string
          nullable: true
          description: Director Identification Number (DIN) assigned to Indian directors.
          example: '00012345'
        businessEntitiesInfo:
          type: array
          items:
            type: object
            required:
              - businessEntityId
              - businessEntityName
              - sharePercentage
              - governanceRelationships
            properties:
              businessEntityId:
                type: integer
                example: 44
              businessEntityName:
                type: string
                example: Acme Holdings LLC
              sharePercentage:
                type: number
                example: 75
              governanceRelationships:
                type: object
                description: >
                  Map of governance roles this person holds at the business
                  entity, keyed by role name. The value carries role-specific
                  flags. The set of keys present is a subset of `DIRECTOR`,
                  `AUTHORIZED_SIGNATORY`, and `BENEFICIAL_OWNER`.
                  `BENEFICIAL_OWNER` is included when the person is currently
                  recorded as an ultimate beneficial owner (UBO) of the business
                  entity by Commenda's ownership engine.
                additionalProperties: true
                example:
                  DIRECTOR:
                    startDate: '2020-01-15'
                    endDate: null
                    isResidentDirector: true
                  BENEFICIAL_OWNER:
                    isBeneficialOwner: true
              jobTitle:
                type: array
                items:
                  type: string
              startDateOfEmployment:
                type: string
                nullable: true
                example: '2025-01-01'
              isResidentDirector:
                type: boolean
                nullable: true
                description: >-
                  Whether this director is a resident director of the business
                  entity. Applicable to jurisdictions that require at least one
                  locally resident director (e.g. India).
    CommendaOsKycId:
      type: object
      required:
        - type
        - name
      properties:
        type:
          type: string
          example: US_SSN
        name:
          type: string
          example: Social Security Number
        value:
          type: string
          nullable: true
        documentId:
          type: string
          nullable: true
        doesNotHaveKYCId:
          type: boolean
          nullable: true
        decryptedValue:
          type: string
          nullable: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
    xApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````