User Endpoints

Endpoints are under /v1/users.

Base URL: https://api.gpcn.com/v1

See the API Reference → for examples in TypeScript, Python, Go, and C#.

Get Current User

GET /users/me

Returns the authenticated user's profile. No special permission required.

List Users

GET /users

Query Parameters

Parameter Type Default Description
page integer 1 Page number
limit integer 10 Items per page (max 100)
sort string createdAt:desc Sort field and direction
search string Search by email, first name, or last name
filter[entityId] UUID Filter by entity
filter[excludeTeamId] integer Exclude users in this resource group
inviteStatus string Filter: activated, pending, expired (repeatable)
teamId integer Filter by resource group (use 0 for unassigned)
roleId string Filter by role (use 0 for no roles)
noTeam boolean Only users without resource groups
noRole boolean Only users without roles
deletedFilter string exclude exclude, include, or only
curl https://api.gpcn.com/v1/users \
  -H "X-API-Key: gpcn_your_api_key_here"

Create User (Invite or Register)

POST /users

Request Body (Invite)

{
  "email": "jane@example.com",
  "firstName": "Jane",
  "lastName": "Developer",
  "action": "invite",
  "roleNames": ["tenant-user"],
  "teamIds": [1, 3]
}

Request Body (Register)

{
  "email": "jane@example.com",
  "password": "SecurePass123!",
  "firstName": "Jane",
  "lastName": "Developer",
  "action": "register",
  "roleNames": ["tenant-user"],
  "teamIds": [1],
  "entityId": "entity-uuid"
}
Field Type Required Description
email string Yes User email
action string No "invite" (default) or "register"
password string Register only 12–50 chars, mixed case + number + special
firstName string No First name
lastName string No Last name
roleNames string[] No Roles to assign
teamIds integer[] No Resource groups to add the user to
entityId UUID Register only Entity for registration
curl -X POST https://api.gpcn.com/v1/users \
  -H "X-API-Key: gpcn_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "firstName": "Jane",
    "lastName": "Developer",
    "action": "invite",
    "roleNames": ["tenant-user"],
    "teamIds": [1, 3]
  }'

Response (201 Created)

Get User Details

GET /users/{id}

Edit User

PUT /users/{id}

Request Body

{ "firstName": "Jane", "lastName": "Senior Dev", "email": "jane.new@example.com" }

Delete User

DELETE /users/{id}

Soft-delete. User can no longer sign in.

Response (204 No Content)

Resend Invitation

POST /users/{id}/resend-invite

Get User's Resource Groups

GET /users/{id}/teams

Paginated list of resource groups the user belongs to.

Update Password (Self)

PUT /users/{id}/password

No special permission (self-service only).

Request Body

{ "currentPassword": "OldPass123!", "newPassword": "NewPass456!" }

Forgot Password

POST /users/forgot-password

Public endpoint (no auth required). Rate limited: 5 requests per IP per 15 minutes.

Request Body

{ "email": "jane@example.com" }

Get User's Roles

GET /users/{userId}/roles

Assign Role

POST /users/{userId}/roles

Request Body

{ "roleName": "tenant-admin" }

Revoke Role

DELETE /users/{userId}/roles/{roleName}

Response (204 No Content)

Bulk Delete Users

POST /users/bulk/delete
{ "ids": ["user-uuid-1", "user-uuid-2"] }

1–50 IDs.

Bulk Resend Invites

POST /users/bulk/resend-invite
{ "ids": ["user-uuid-1", "user-uuid-2"] }

Bulk Assign Roles

POST /users/bulk/assign-roles
{ "userIds": ["user-uuid-1", "user-uuid-2"], "roleNames": ["tenant-user", "vm-operator"] }

Bulk Assign Resource Groups

POST /users/bulk/assign-teams
{ "userIds": ["user-uuid-1"], "teamIds": [1, 2, 3] }

Next Steps