Skip to main content
OpenAPI

Members API

Endpoints for querying, managing, and retrieving statistics and quotas for organization members.

List members

GET /v1/organizations/{org_id}/members
Query parameters:
ParameterTypeDescription
userIdstringExact user UUID lookup; cannot be combined with email
emailstringExact match on email address
includeDeletedbooleanInclude deleted members; defaults to false
maxResultsintegerItems per page; default 20, max 100
nextTokenstringPagination cursor
userId must be a non-empty standard UUID. Exact lookup by userId or email returns at most one member and does not return a new nextToken. If no member matches, the API returns 200 OK with an empty members array. Request example:
curl -X GET "https://api.qoder.com.cn/v1/organizations/org_xxx/members?maxResults=10" \
  -H "Authorization: Bearer <api_key>"
Response example:
{
  "members": [
    {
      "id": "member_001",
      "userId": "550e8400-e29b-41d4-a716-446655440000",
      "email": "user@example.com",
      "name": "Alice Zhang",
      "role": "org_member",
      "status": "ENABLED",
      "joinedAt": "2025-01-10T08:00:00Z"
    }
  ],
  "maxResults": 10,
  "nextToken": "token_abc"
}

Member status values

StatusDescription
ENABLEDActive
DISABLEDDisabled
UNACTIVATEDNot yet activated
APPROVE_PENDINGPending approval
APPROVE_DECLINEDApproval declined
DELETEDDeleted

Get member details

GET /v1/organizations/{org_id}/members/{member_id}
Request example:
curl -X GET "https://api.qoder.com.cn/v1/organizations/org_xxx/members/member_001" \
  -H "Authorization: Bearer <api_key>"
Response example:
{
  "id": "member_001",
  "userId": "550e8400-e29b-41d4-a716-446655440000",
  "email": "user@example.com",
  "name": "Alice Zhang",
  "role": "org_member",
  "status": "ENABLED",
  "joinedAt": "2025-01-10T08:00:00Z"
}

Create a member

POST /v1/organizations/{org_id}/members
Create a new user and add the user to the organization. This endpoint creates new accounts only. If the email is already registered, the existing account is not reused and its password is not changed. Request body:
{
  "email": "user@example.com",
  "name": "Alice Zhang",
  "password": "StrongPassword123!",
  "role": "org_member"
}
FieldTypeRequiredDescription
emailstringYesNew user email. Its domain must be verified and enabled for the organization
namestringYesUser and member display name
passwordstringYesInitial password. It must meet the password-strength requirements and is never returned
rolestringNoorg_member or org_admin; defaults to org_member
Request example:
curl -X POST "https://api.qoder.com.cn/v1/organizations/org_xxx/members" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","name":"Alice Zhang","password":"StrongPassword123!","role":"org_member"}'
Response example:
{
  "member": {
    "id": "member_001",
    "userId": "550e8400-e29b-41d4-a716-446655440000",
    "email": "user@example.com",
    "name": "Alice Zhang",
    "role": "org_member",
    "status": "ENABLED",
    "joinedAt": "2026-05-23T08:00:00Z"
  }
}
The endpoint may return InvalidParameter, InvalidPassword, InvalidRole, EmailDomainRequired, EmailDomainNotSupported, or InsufficientSeats (HTTP 400), or EmailAlreadyExists (HTTP 409).

Member statistics

GET /v1/organizations/{org_id}/members/statistics
Request example:
curl -X GET "https://api.qoder.com.cn/v1/organizations/org_xxx/members/statistics" \
  -H "Authorization: Bearer <api_key>"
Response example:
{
  "totalMembers": 50,
  "billableMembers": 45,
  "adminMembers": 3,
  "purchasedSeats": 60,
  "remainingSeats": 15
}
FieldDescription
totalMembersTotal number of members
billableMembersNumber of billable members
adminMembersNumber of administrators
purchasedSeatsTotal purchased seats
remainingSeatsAvailable seats

Delete a member

DELETE /v1/organizations/{org_id}/members/{member_id}
Request example:
curl -X DELETE "https://api.qoder.com.cn/v1/organizations/org_xxx/members/member_001" \
  -H "Authorization: Bearer <api_key>"
Returns HTTP 204 No Content on success.

Get member quota

GET /v1/organizations/{org_id}/members/{member_id}/quota
Request example:
curl -X GET "https://api.qoder.com.cn/v1/organizations/org_xxx/members/member_001/quota" \
  -H "Authorization: Bearer <api_key>"
Response example:
{
  "planQuota": 1000,
  "resourcePackageQuota": 500,
  "totalQuota": 1500,
  "sharedQuota": 200
}
FieldDescription
planQuotaQuota from the subscription plan
resourcePackageQuotaQuota from resource packages
totalQuotaTotal available quota
sharedQuotaShared pool quota

Batch get member quotas

POST /v1/organizations/{org_id}/members/batchGetQuota
Request body:
{
  "memberIds": ["member_001", "member_002", "member_003"]
}
  • memberIds: Array of member IDs (1–100 items).
Request example:
curl -X POST "https://api.qoder.com.cn/v1/organizations/org_xxx/members/batchGetQuota" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"memberIds": ["member_001", "member_002"]}'
Response example:
{
  "quotas": [
    {
      "memberId": "member_001",
      "planQuota": 1000,
      "resourcePackageQuota": 500,
      "totalQuota": 1500,
      "sharedQuota": 200
    },
    {
      "memberId": "member_002",
      "planQuota": 1000,
      "resourcePackageQuota": 0,
      "totalQuota": 1000,
      "sharedQuota": 200
    }
  ]
}

Update member Add-On Cap

PUT /v1/organizations/{org_id}/members/{member_id}/addon-cap
Request body:
{
  "addOnCap": 500
}
addOnCap accepts a non-negative integer, null, or omission. null or omission means unlimited; 0 disables the quota. Request example:
curl -X PUT "https://api.qoder.com.cn/v1/organizations/org_xxx/members/member_001/addon-cap" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"addOnCap": 500}'
Response example:
{
  "memberId": "member_001",
  "email": "user@example.com",
  "addOnCap": 500
}

Batch update Add-On Cap

POST /v1/organizations/{org_id}/batchUpdateAddOnCap
Request body:
{
  "addOnCap": 500,
  "memberIds": ["member_001", "member_002"]
}
Each request accepts 1–100 non-empty member IDs and applies the same cap to every member. addOnCap accepts a non-negative integer, null, or omission; null or omission means unlimited. Request example:
curl -X POST "https://api.qoder.com.cn/v1/organizations/org_xxx/batchUpdateAddOnCap" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"addOnCap": 500, "memberIds": ["member_001", "member_002"]}'
Response example:
{
  "members": [
    { "memberId": "member_001", "previousAddOnCap": 300 },
    { "memberId": "member_002" }
  ]
}
previousAddOnCap is omitted when the member was previously unlimited. Request validation may return InvalidBatchAddOnCapRequest, EmptyMemberIDs, TooManyMemberIDs, EmptyMemberIDAtIndex, or InvalidAddOnCapFormat.