APG PayAPG Paydocs

Merchants

Create beneficial owners

POST/beneficial-owners

Add a beneficial owner to a merchant. The platform verifies them; the response says how far it got.

Permissions

Required permission
merchantKyb:create

Requires the `create` action on `merchantKyb` for the supplied runtime context

Request body

This body is a tagged shape: type is always "PsonCmdCreate". Send it; more variants can be added, and a caller that switches on it keeps working when they are.

Discriminated by type
type = "PsonCmdCreate"
merchantIdMchtIdrequired

Identifier of a merchant.

Example mcht_9f2Kd8QpLzXw

What is known about a beneficial owner.

curl -X POST https://api.tst.au.apgpay.dev/beneficial-owners \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "PsonCmdCreate",
  "merchantId": "mcht_9f2Kd8QpLzXw",
  "profile": {
    "type": "PsonProfileAttributes",
    "title": "string",
    "roles": [
      "Director"
    ],
    "givenName": "Ada Lovelace",
    "middleName": "Ada Lovelace",
    "familyName": "Ada Lovelace",
    "dateOfBirth": "2026-08-19",
    "address": {
      "type": "PsonAddressAttributes",
      "unitNumber": "string",
      "streetNumber": "string",
      "streetName": "Ada Lovelace",
      "streetType": "string",
      "suburb": "string",
      "city": "string",
      "state": "string",
      "postalCode": "3000",
      "country": "AU"
    },
    "emailAddress": "ada@example.com",
    "phoneNumber": "+61400000000",
    "identityDocuments": [
      {
        "type": "PsonDocumentDriverLicence",
        "number": "string",
        "issuingCountry": "AU",
        "issuingRegion": "string",
        "documentNumber": "string",
        "versionNumber": "string"
      }
    ],
    "verificationDocument": {
      "type": "PsonVerificationDocAttributes",
      "idType": "Passport",
      "frontFileId": "lfile_9f2Kd8QpLzXw",
      "backFileId": "lfile_9f2Kd8QpLzXw"
    }
  }
}'

Responses

The response is a tagged shape: type is always "PsonCreateRspAttributes". Switch on it; subtypes can be added, and a client that already reads it will not break.

Discriminated by type
type = "PsonCreateRspAttributes"

The resource that was created.

Example
{
  "type": "PsonCreateRspAttributes",
  "created": {
    "type": "PsonViewAttributes",
    "beneficialOwnerId": "pson_9f2Kd8QpLzXw",
    "merchantId": "mcht_9f2Kd8QpLzXw",
    "profile": {
      "type": "PsonProfileAttributes",
      "title": "string",
      "roles": [
        "Director"
      ],
      "givenName": "Ada Lovelace",
      "middleName": "Ada Lovelace",
      "familyName": "Ada Lovelace",
      "dateOfBirth": "2026-08-19",
      "address": {
        "type": "PsonAddressAttributes",
        "unitNumber": "string",
        "streetNumber": "string",
        "streetName": "Ada Lovelace",
        "streetType": "string",
        "suburb": "string",
        "city": "string",
        "state": "string",
        "postalCode": "3000",
        "country": "AU"
      },
      "emailAddress": "ada@example.com",
      "phoneNumber": "+61400000000",
      "identityDocuments": [
        {
          "type": "PsonDocumentDriverLicence",
          "number": "string",
          "issuingCountry": "AU",
          "issuingRegion": "string",
          "documentNumber": "string",
          "versionNumber": "string"
        }
      ],
      "verificationDocument": {
        "type": "PsonVerificationDocAttributes",
        "idType": "Passport",
        "frontFileId": "lfile_9f2Kd8QpLzXw",
        "backFileId": "lfile_9f2Kd8QpLzXw"
      }
    },
    "verification": {
      "type": "PsonVerificationAttributes",
      "status": "Pending",
      "errorCodes": [
        "string"
      ],
      "details": [
        "string"
      ]
    },
    "deletable": true
  }
}

Error responses