OpenAPI referencePartner members

Create or update one of YOUR users as a Keyspace member

PUT
/partner/members/{externalUserId}

Idempotent on externalUserId. Resolves WHICH Keyspace member you mean before writing, in this order (first hit wins): (1) the member already linked to this externalUserId; (2) email → an existing Keyspace user (case-insensitive); (3) phone → an existing user after normalization (Thai numbers, +66 default); (4) employeeId → a member of the project carrying that employee id; (5) nothing matched → a new member is created. A matched user that is not yet a member of your project is added as one. A key that resolves to a DIFFERENT member than the one already linked to this externalUserId — or to a member this app already manages under another externalUserId — is rejected 409 (data.conflictKey names the key); Keyspace never silently re-links. unit is a BINDING, never an identity: it places the member in the condo unit (first resident = reservation owner, later ones = participants) but never picks the person. First call links the member to your app and adds it to the access groups fixed at app provisioning (partnerAccessGroupIds) — devices only ever receive credentials through those groups (credential ≠ permission). Later calls update the profile. A previously offboarded member is re-activated by this call (same memberId, groups restored). Requires an app_credentials token (a delegated act_as token is rejected 403) and a single-project app.

Authorization

bearerAuth
AuthorizationBearer <token>

Access token from POST /auth/accessToken

In: header

Path Parameters

externalUserId*string

YOUR stable identifier for the user (opaque to Keyspace). Bound to exactly one Keyspace member per app on first PUT.

Lengthlength <= 128

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/partner/members/string" \  -H "Content-Type: application/json" \  -d '{    "firstName": "string",    "lastName": "string"  }'
{  "code": "KS000",  "success": true,  "message": "string",  "data": {    "memberId": "string",    "externalUserId": "string",    "projectId": "string",    "created": true,    "matchedBy": "link",    "accessGroupIds": [      "string"    ],    "employeeId": "string",    "unit": {      "roomId": "string",      "addressNo": "string",      "groupId": "string",      "role": "owner"    }  }}