Skip to main content
OpenAPI

メンバー API

組織メンバーの招待・作成・管理、名前とロールの更新、統計、クォータ、Add-On Cap の API。

このドキュメントについて

Qoder UI 外でメンバーを招待し、メンバーとクォータを管理するインテグレーション向け。事前に API キーの取得 を完了し、共通仕様 を参照してください。

前提条件

  • 有効な API キー:Authorization: Bearer <api_key>。
  • キーは対象組織に紐づき、呼び出し元の権限が操作を許可している必要があります。

概要

メンバー管理 API は、招待、作成、検索、名前とロールの更新、統計、使用量の照会、削除、Add-On Cap 管理に対応します。すべてのエンドポイントは対象組織に紐付いた API Key で認証します。

主な機能

  • メンバー招待:一括招待、招待状態の照会、取り消し、再送、削除。
  • メンバー一覧:ユーザー ID またはメールの完全一致検索、カーソルページネーション、削除済みメンバーの任意指定での取得。
  • メンバー作成:企業メールユーザーの作成と組織への追加、シートの自動割り当て。
  • メンバー詳細:メンバー ID による個別検索。
  • 名前の更新:組織メンバーの現在の表示名を更新。
  • ロール更新:組織管理者、組織メンバー、Config Admin、Directory の設定。
  • メンバー統計:メンバー数、シート使用状況などの照会。
  • 使用量照会:個別または一括で Plan、リソースパック、合計の割り当てと使用量を照会。
  • メンバー削除:組織からメンバーを削除。
  • Add-On Cap 管理:個別または一括で Shared Add-On 上限を設定。

API 一覧

1. メンバー一覧

GET /v1/organizations/{organization_id}/members 組織のメンバーリストをページネーションで取得します。ユーザー ID またはメールアドレスによる完全一致検索をサポートします。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID

クエリパラメータ

パラメータ型必須説明
userIdstringいいえユーザー UUID による完全一致検索。email と同時に指定不可
emailstringいいえメール完全一致検索
includeDeletedstringいいえtrue に設定すると削除済みメンバーを含む
maxResultsintegerいいえページサイズ(デフォルト 20、最大 100)
nextTokenstringいいえページネーションカーソル
userId は空でない標準 UUID である必要があります。userId または email による完全一致検索では、最大 1 件を返し、新しい nextToken は返しません。一致するメンバーがない場合は、空の members 配列とともに 200 OK を返します。

成功レスポンス(200 OK)

デフォルトクエリ(アクティブメンバーのみ):
{
  "members": [
    {
      "id": "member_abc123",
      "userId": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Alice",
      "email": "alice@example.com",
      "role": "org_admin",
      "status": "ENABLED",
      "joinedAt": "2025-06-01T08:00:00Z"
    },
    {
      "id": "member_ghi789",
      "userId": "550e8400-e29b-41d4-a716-446655440001",
      "name": "Charlie",
      "role": "org_member",
      "status": "ENABLED",
      "joinedAt": "2025-07-10T14:30:00Z"
    }
  ],
  "maxResults": 20,
  "nextToken": "eyJwYWdlIjogMn0="
}
一部のメンバーレコードでは email フィールドが返されない場合があります。インテグレーション時はオプションフィールドとして処理してください。
削除済みメンバーを含む(**includeDeleted=true**):
{
  "members": [
    {
      "id": "member_abc123",
      "userId": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Alice",
      "email": "alice@example.com",
      "role": "org_admin",
      "status": "ENABLED",
      "joinedAt": "2025-06-01T08:00:00Z"
    },
    {
      "id": "member_def456",
      "userId": "550e8400-e29b-41d4-a716-446655440002",
      "name": "Bob",
      "email": "bob@example.com",
      "role": "org_member",
      "status": "DELETED",
      "joinedAt": "2025-03-15T10:00:00Z",
      "deletedAt": "2026-02-01T12:00:00Z"
    }
  ],
  "maxResults": 20
}
deletedAt は削除済みメンバーにのみ返されます。アクティブメンバーにはこのフィールドは含まれません。nextToken がない場合は最終ページです。

レスポンスフィールド

フィールド型説明
membersarrayメンバーリスト
members[].idstringメンバー ID
members[].userIdstringユーザー ID
members[].namestringメンバー名
members[].emailstringメンバーメール(空の場合あり)
members[].rolestringロール名(例:org_admin、org_member)
members[].statusstringメンバーステータス:ENABLED(アクティブ)、DISABLED(停止済み)、UNACTIVATED(未アクティブ化)、APPROVE_PENDING(承認待ち)、APPROVE_DECLINED(承認拒否)、DELETED(削除済み)
members[].joinedAtstring参加日時(ISO 8601)
members[].deletedAtstring または null削除日時(ISO 8601);アクティブメンバーには返されない
maxResultsint32このリクエストのページサイズ
nextTokenstring次ページカーソル。最終ページでは省略

2. メンバー詳細取得

GET /v1/organizations/{organization_id}/members/{member_id} 単一メンバーの詳細情報を取得します。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID
member_idstringはいメンバー ID

成功レスポンス(200 OK)

アクティブメンバー:
{
  "id": "member_abc123",
  "userId": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Alice",
  "email": "alice@example.com",
  "role": "org_admin",
  "status": "ENABLED",
  "joinedAt": "2025-06-01T08:00:00Z"
}
削除済みメンバー(**GetMember** は削除済みメンバーも自動的に含む):
{
  "id": "member_def456",
  "userId": "550e8400-e29b-41d4-a716-446655440002",
  "name": "Bob",
  "email": "bob@example.com",
  "role": "org_member",
  "status": "DELETED",
  "joinedAt": "2025-03-15T10:00:00Z",
  "deletedAt": "2026-02-01T12:00:00Z"
}

レスポンスフィールド

「メンバー一覧」の members[] フィールドと同一です。

3. メンバー作成

POST /v1/organizations/{organization_id}/members 新しいユーザーを作成し、現在の組織に追加します。このエンドポイントは新規アカウントのみを作成します。メールアドレスがすでに登録されている場合、既存アカウントの再利用やパスワード変更は行いません。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID

リクエストボディ(JSON)

{
  "email": "alice@example.com",
  "name": "Alice",
  "password": "StrongPassword123!",
  "role": "org_member"
}
フィールド型必須説明
emailstringはい新規ユーザーのメールアドレス。ドメインが組織で検証済みかつ有効である必要があります
namestringはいユーザーおよびメンバーの表示名
passwordstringはい初期パスワード。強度要件を満たす必要があり、レスポンスには返されません
rolestringいいえメンバーロール:org_member または org_admin。デフォルトは org_member

成功レスポンス(200 OK)

{
  "member": {
    "id": "member_abc123",
    "userId": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Alice",
    "email": "alice@example.com",
    "role": "org_member",
    "status": "ENABLED",
    "joinedAt": "2026-05-23T08:00:00Z"
  }
}

エラーレスポンス

エラーコードHTTP ステータス説明
InvalidParameter400email または name が欠落しているか無効
InvalidPassword400パスワードが欠落しているか強度要件を満たしていない
InvalidRole400ロールが org_member または org_admin ではない
EmailDomainRequired400組織に検証済みかつ有効なメールドメインがない
EmailDomainNotSupported400メールドメインが組織で有効になっていない
InsufficientSeats400組織に利用可能なシートがない
EmailAlreadyExists409メールアドレスがすでに登録されている

4. メンバー統計取得

GET /v1/organizations/{organization_id}/members/statistics 組織メンバーに関する統計データを取得します。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID

成功レスポンス(200 OK)

{
  "totalMembers": 50,
  "billableMembers": 45,
  "adminMembers": 3,
  "purchasedSeats": 100,
  "remainingSeats": 55
}

レスポンスフィールド

フィールド型説明
totalMembersint32総メンバー数
billableMembersint32課金対象メンバー数
adminMembersint32管理者数
purchasedSeatsint32購入済みシート数
remainingSeatsint32残りシート数

5. メンバー削除

DELETE /v1/organizations/{organization_id}/members/{member_id} 組織からメンバーを削除します。削除前に、現在の課金サイクル内での使用量を確認します。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID
member_idstringはいメンバー ID

成功レスポンス(200 OK)

現サイクルで使用量あり(シート解放はサイクル終了まで遅延):
{
  "id": "member_abc123",
  "hasBillingCycleUsage": true
}
現サイクルで使用量なし(シートを即時解放可能):
{
  "id": "member_abc123",
  "hasBillingCycleUsage": false
}

レスポンスフィールド

フィールド型説明
idstring削除されたメンバーの ID
hasBillingCycleUsagebool現在の課金サイクル内で使用量があるか(シート解放タイミングに影響)

エラーレスポンス

メンバーがチームに所属していない(404)
{
  "requestId": "req_abc123",
  "code": "UserNotTeamMember",
  "message": "User is not a member of this team"
}
メンバー数不足(400)
{
  "requestId": "req_abc123",
  "code": "InsufficientMembers",
  "message": "The number of organization members cannot be less than the minimum requirement"
}

6. メンバークォータ取得

GET /v1/organizations/{organization_id}/members/{member_id}/quota 指定メンバーの完全な使用状況を取得します。プランクォータ、リソースパッククォータ、合計クォータ、組織共有パッククォータを含みます。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID
member_idstringはいメンバー ID

成功レスポンス(200 OK)

組織共有パックあり、ステータス正常:
{
  "userId": "user_abc123",
  "planQuota": {
    "quotaSummary": {
      "usedValue": 350.5,
      "limitValue": 1000.0,
      "unit": "credits"
    }
  },
  "resourcePackageQuota": {
    "quotaSummary": {
      "usedValue": 100.0,
      "limitValue": 500.0,
      "unit": "credits"
    }
  },
  "totalQuota": {
    "quotaSummary": {
      "usedValue": 450.5,
      "limitValue": 1500.0,
      "unit": "credits"
    }
  },
  "sharedQuota": {
    "quotaSummary": {
      "usedValue": 200.0,
      "limitValue": 1000.0,
      "unit": "credits"
    }
  },
  "lastResetAt": "2026-03-01T00:00:00Z",
  "nextResetAt": "2026-04-01T00:00:00Z",
  "status": "active"
}
組織共有パックなし、使用量超過:
{
  "userId": "user_def456",
  "planQuota": {
    "quotaSummary": {
      "usedValue": 1000.0,
      "limitValue": 1000.0,
      "unit": "credits"
    }
  },
  "totalQuota": {
    "quotaSummary": {
      "usedValue": 1000.0,
      "limitValue": 1000.0,
      "unit": "credits"
    }
  },
  "lastResetAt": "2026-03-01T00:00:00Z",
  "nextResetAt": "2026-04-01T00:00:00Z",
  "status": "restricted"
}
組織に共有パックがない場合 sharedQuota は返されません。メンバーにリソースパックがない場合 resourcePackageQuota は返されません。status が restricted の場合、使用量上限に達しています。

レスポンスフィールド

フィールド型説明
userIdstringユーザー ID
planQuotaobjectプランクォータ情報
resourcePackageQuotaobjectリソースパッククォータ情報
totalQuotaobject合計クォータ情報(プラン + リソースパック)
sharedQuotaobject または null組織共有パッククォータ(組織に共有パックがない場合は返されない)
lastResetAtstring前回リセット日時(ISO 8601)
nextResetAtstring次回リセット日時(ISO 8601)
statusstringユーザーステータス:active または restricted
クォータサマリーフィールド
フィールド型説明
usedValuefloat64使用量
limitValuefloat64クォータ上限
unitstring単位(例:credits)

7. メンバークォータ一括取得

POST /v1/organizations/{organization_id}/members/batchGetQuota 複数メンバーのクォータと使用状況を一度に取得します。メンバークォータ取得と同じ範囲を返します。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID

リクエストボディ(JSON)

フィールド型必須検証説明
memberIdsstring[]はい1~100 件の空でないメンバー IDクォータを取得するメンバー
{
  "memberIds": ["member_abc123", "member_def456"]
}

成功レスポンス(200 OK)

{
  "quotas": [
    {
      "memberId": "member_abc123",
      "userId": "user_abc123",
      "planQuota": {
        "quotaSummary": {
          "usedValue": 350.5,
          "limitValue": 1000.0,
          "unit": "credits"
        }
      },
      "resourcePackageQuota": {
        "quotaSummary": {
          "usedValue": 100.0,
          "limitValue": 500.0,
          "unit": "credits"
        }
      },
      "totalQuota": {
        "quotaSummary": {
          "usedValue": 450.5,
          "limitValue": 1500.0,
          "unit": "credits"
        }
      },
      "sharedQuota": {
        "quotaSummary": {
          "usedValue": 200.0,
          "limitValue": 1000.0,
          "unit": "credits"
        }
      },
      "lastResetAt": "2026-03-01T00:00:00Z",
      "nextResetAt": "2026-04-01T00:00:00Z",
      "status": "active"
    },
    {
      "memberId": "member_def456",
      "userId": "user_def456"
    }
  ]
}
quotas 配列は、重複を含めて memberIds と同じ順序で返されます。メンバーにクォータレコードがない場合、その要素には memberId と userId のみが含まれます。組織に存在しないメンバーが 1 件でもある場合、リクエスト全体が 404 NotFound となり、部分成功は返しません。

レスポンスフィールド

フィールド型説明
quotasarrayメンバークォータの結果一覧
quotas[].memberIdstringメンバー ID
quotas[].userIdstringユーザー ID
quotas[].planQuotaobjectPlan クォータ情報。データがない場合は省略
quotas[].resourcePackageQuotaobjectリソースパッケージクォータ情報。データがない場合は省略
quotas[].totalQuotaobject合計クォータ情報。データがない場合は省略
quotas[].sharedQuotaobject組織共有パッケージクォータ。データがない場合は省略
quotas[].lastResetAtstring前回リセット時刻(ISO 8601)。データがない場合は省略
quotas[].nextResetAtstring次回リセット時刻(ISO 8601)。データがない場合は省略
quotas[].statusstringactive または restricted。クォータデータがない場合は省略

8. メンバー Add-On Cap 更新

PUT /v1/organizations/{organization_id}/members/{member_id}/addon-cap メンバーの Shared Add-On クォータキャップを更新します(Big Model Credits クォータに基づく)。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID
member_idstringはいメンバー ID

リクエストパラメータ(JSON)

フィールド型必須バリデーション説明
addOnCapint64 または nullいいえ非負の整数または nullクォータキャップ。null または省略は無制限、0 は無効

リクエスト例

クォータキャップを設定:
{
  "addOnCap": 1000
}
無制限に設定:
{
  "addOnCap": null
}

成功レスポンス(200 OK)

{
  "memberId": "member_abc123",
  "email": "alice@example.com",
  "addOnCap": 1000
}
無制限の場合:
{
  "memberId": "member_abc123",
  "email": "alice@example.com",
  "addOnCap": null
}

レスポンスフィールド

フィールド型説明
memberIdstringメンバー ID
emailstringメンバーメール
addOnCapint64 または null現在のクォータキャップ;null は無制限

エラーレスポンス

addOnCap 形式無効(400)
{
  "requestId": "req_abc123",
  "code": "InvalidAddOnCapFormat",
  "message": "Invalid addOnCap format"
}
メンバーがチームに所属していない(404)
{
  "requestId": "req_abc123",
  "code": "UserNotTeamMember",
  "message": "User is not a member of this team"
}

9. メンバー Add-On Cap 一括更新

POST /v1/organizations/{organization_id}/batchUpdateAddOnCap 指定メンバーの Shared Add-On クォータキャップを一括更新します(Big Model Credits クォータに基づく)。1リクエストあたり最大100メンバー、全メンバーに同じキャップを設定します。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID

リクエストパラメータ(JSON)

フィールド型必須バリデーション説明
addOnCapint64 または nullいいえ非負の整数または nullクォータキャップ。null または省略は無制限、0 は無効
memberIdsstring[]はい1〜100 個の非空文字列更新対象のメンバー ID リスト

リクエスト例

一括でクォータキャップを設定:
{
  "addOnCap": 1000,
  "memberIds": ["member_abc123", "member_def456"]
}
一括で無制限に設定:
{
  "addOnCap": null,
  "memberIds": ["member_abc123"]
}

成功レスポンス(200 OK)

{
  "members": [
    {
      "memberId": "member_abc123",
      "previousAddOnCap": 500
    },
    {
      "memberId": "member_def456"
    }
  ]
}
メンバーが以前無制限だった場合、previousAddOnCap は省略されます。

レスポンスフィールド

フィールド型説明
membersarray更新結果リスト、リクエストの memberIds と同じ順序
members[].memberIdstringメンバー ID
members[].previousAddOnCapint64更新前のクォータキャップ。以前無制限だった場合は省略

エラーレスポンス

addOnCap 形式無効(400)
{
  "requestId": "req_abc123",
  "code": "InvalidAddOnCapFormat",
  "message": "Invalid addOnCap format"
}
memberIds が空(400)
{
  "requestId": "req_abc123",
  "code": "EmptyMemberIDs",
  "message": "memberIds must not be empty"
}
memberIds が 100 件超過(400)
{
  "requestId": "req_abc123",
  "code": "TooManyMemberIDs",
  "message": "memberIds must not exceed 100"
}

10. メンバーロールの更新

PUT /v1/organizations/{organization_id}/members/{member_id}/role 組織メンバーのロールを Organization Admin、Organization Member、Config Admin、Directory のいずれかに設定します。CN / Global、Teams / Enterprise に対応し、管理コンソールと同じ IAM ロール変更機能を使用します。

認証と権限

対象組織の API キー(Authorization: Bearer <api_key>)を使用します。キーはパスで指定した組織に属している必要があります。サービスアカウントの認証情報では呼び出せません。member_id も同じ組織に属している必要があります。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 ID
member_idstringはいメンバー照会 API で取得するメンバー ID。ユーザー ID ではありません

リクエストボディ

{
  "role": "org_admin"
}
フィールド型必須説明
rolestringはいorg_admin:Organization Admin、org_member:Organization Member、org_config_admin:Config Admin、org_directory:Directory
role の省略、null、空文字列は許可されません。廃止された org_free_member やその他のロールは指定できません。非課金ロールを再設定した場合も IAM による利用権限の回収が実行されるため、未完了の回収を再試行できます。

成功レスポンス(200 OK)

更新後のメンバー詳細を直接返します。フィールドはメンバー詳細取得 API と同じです。
{
  "id": "member_abc123",
  "userId": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Alice",
  "email": "alice@example.com",
  "role": "org_admin",
  "status": "ENABLED",
  "joinedAt": "2026-09-01T08:00:00Z"
}

制約

  • 管理者(Organization Admin または Config Admin)を最低 1 名残す必要があります。ロール変更には管理コンソールと同じ IAM 検証が適用されます。
  • 削除済みメンバーのロールは変更できません。その他の利用不可状態も IAM により拒否されます。
  • Teams から Enterprise へのアップグレードの有効化待ち期間中は、ロールを変更できません。
  • Config Admin または Directory の新規割り当てには、組織で DirectoryRole の段階的提供が有効になっている必要があります。未有効の場合は 403 を返します。どちらも非課金ロールであり、切り替え時は IAM の処理によりシートの解放、課金対象の利用権限の削除、セッションの失効が行われます。課金ロールに戻すには空きシートが必要です。失敗時には IAM の補償処理が適用されます。特殊アカウントの制限は管理コンソールと同じです。

エラーレスポンス

エラーコードHTTP ステータス説明
BadRequest400リクエストボディの形式不正、無効なメンバー ID、または変更不可のメンバー状態
InvalidRole400ロールの欠落または許可範囲外
OrgMemberAdminCountLacked400最後の管理者ロールは削除できません
OrganizationPendingUpgrade400Teams から Enterprise へのアップグレードの有効化待ち
Unauthorized401認証情報の欠落または無効
Forbidden403権限不足、または新しいロールの段階的提供が組織で未有効
UserNotTeamMember404メンバーが存在しない、削除済み、または別の組織に所属
InternalError500サービス内部エラー
その他の IAM 業務エラーは、requestId、code、message を含む標準の OpenAPI エラーレスポンスを使用します。
{
  "requestId": "req_abc123",
  "code": "InvalidRole",
  "message": "role must be org_admin, org_member, org_config_admin or org_directory"
}

呼び出し例

curl -X PUT 'https://api.qoder.com/v1/organizations/org_xxx/members/member_abc123/role' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{"role":"org_member"}'

11. メンバー名の更新

PUT /v1/organizations/{organization_id}/members/{member_id}/profile 組織メンバーの現在の表示名を更新します。

パスパラメータ

パラメータ型必須説明
organization_idstringはいAPI キーに紐づく組織 ID
member_idstringはいメンバー照会 API が返す id フィールドのメンバー ID。userId ではありません

リクエストボディ

{
  "name": "Alice"
}
フィールド型必須説明
namestringはい新しい表示名。最大 100 文字

成功レスポンス(200 OK)

変更したメンバー ID、紐づくユーザー ID、変更後の表示名を返します。
{
  "memberId": "member_abc123",
  "userId": "user_abc123",
  "name": "Alice"
}
フィールド型説明
memberIdstring今回変更した組織メンバー ID
userIdstringこのメンバーに紐づくユーザー ID
namestring前後の空白を除いた変更後の表示名

制約

  • 組織から削除されていないメンバーのみ変更できます。無効化されたメンバーの名前も変更できます。
  • 表示名の重複は許可されます。現在と同じ名前を送信しても 200 OK が返されます。
  • 紐づくアカウントの表示名のみ変更します。アバター、メールアドレス、ログイン方法、ロール、シートは変更しません。
  • 名前のコンテンツチェックが有効な場合、ポリシー違反と判定された名前は拒否されます。

エラーレスポンス

エラーコードHTTP ステータス説明
BadRequest400ボディの形式不正、未対応フィールド、16 KiB を超えるボディ、不正な ID、不正な名前、または名前のコンテンツポリシー違反
Unauthorized401認証情報の欠落、無効、失効、または有効期限切れ
Forbidden403パスの組織と API キーの組織が不一致、または認証情報の種類が未対応
NotFound404メンバーが存在しない、削除済み、または別の組織に所属
InternalError500サービス内部エラー
エラーは requestId、code、message を含む標準の OpenAPI レスポンスを使用します。
{
  "requestId": "req_abc123",
  "code": "BadRequest",
  "message": "name must contain 1 to 100 characters"
}

呼び出し例

curl -X PUT 'https://api.qoder.com/v1/organizations/org_xxx/members/member_abc123/profile' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Alice"}'

12. メール招待の一括作成

POST /v1/organizations/{organization_id}/members/emailInvitations ユーザーを組織に招待します。現在はメールで招待を送信します。受信者はリンクから登録またはログインし、招待を承諾します。

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 UUID。

メール招待の前提条件

  • 招待の作成、キャンセル、再送、削除は組織プランの制限を受けます。プランが期限切れ、一時停止、キャンセル済み、または有効な Free プランの場合、これらの書き込み操作は拒否されます。一覧取得は引き続き利用できます。
  • 招待の作成には割り当て可能なシートも必要です。送信時には予約されず、承諾時に空き状況を確認して割り当てます。
  • 他の組織が管理するドメインのアドレスには招待を送信できません。デプロイ環境でドメイン検証が有効な場合(デフォルトは無効)、対象組織に検証済みかつ有効なメールドメインがあり、招待先のアドレスがそれに一致する必要もあります。
一部のアドレスだけが成功する場合があります。個別の失敗は failedEmails に返され、全件失敗でも 200 OK になる場合があります。リクエストパラメータが無効な場合や組織の前提条件を満たさない場合は、リクエスト全体がエラーになります。

リクエストボディ

フィールド型必須説明
emailsstring[]はい1 回あたり 1〜3000 件。前後の空白を除去し、小文字に変換します。空文字列は無視され、処理後に空のリストになるとエラーになります。
rolestringいいえorg_member または org_admin。デフォルトは org_member。
inviterIdstringいいえ招待者のユーザー UUID。ユーザーは存在する必要があります。省略時は組織の作成者を使用します。作成者情報がない場合は明示的に指定してください。
expiresInHoursint32いいえ有効期間(時間)。24〜720。省略時やこの範囲外の int32 値では 168(7 日間)を使用します。小数や int32 の範囲を超える値はリクエストボディの解析エラーになります。

リクエスト例

{
  "emails": ["zhangsan@example.com", "invalid-email"],
  "role": "org_member"
}

成功レスポンス(200 OK)

{
  "invitations": [
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "organizationId": "550e8400-e29b-41d4-a716-446655440000",
      "email": "zhangsan@example.com",
      "role": "org_member",
      "status": "PENDING",
      "expiresAt": "2026-10-22T08:00:00Z",
      "batchId": "770e8400-e29b-41d4-a716-446655440002",
      "createdAt": "2026-10-15T08:00:00Z",
      "updatedAt": "2026-10-15T08:00:00Z"
    }
  ],
  "failedEmails": [
    {
      "email": "invalid-email",
      "reason": "invalid email format"
    }
  ],
  "totalSent": 1,
  "totalFailed": 1
}

レスポンスフィールド

フィールド型説明
invitationsarray作成されたメール招待オブジェクト。同じバッチでは batchId を共有します。成功がなければ空配列です。
failedEmailsarrayemail と reason を持つ失敗項目。失敗がなければ空配列です。
totalSentint32作成された招待数。メールは非同期で送信されるため、配信完了数ではありません。
totalFailedint32検証エラーや書き込みエラーを含む失敗項目数。

アドレスごとの失敗理由

failedEmails[].reason にはコードまたはテキストが入ります。調査のために元の値を保存してください。
reason説明
invalid email formatメールアドレスの形式が無効。
duplicate email in batch正規化後に同一バッチ内で重複。
pending invitation already exists for this email承諾待ちの招待がすでに存在。
this email has already joined the organization承諾済みの招待記録がすでに存在。
OrgEmailInvitationUserInAnotherOrgユーザーはすでに組織に所属。現在の組織に所属している場合もあります。
OrgEmailInvitationDomainOwnedByAnotherOrgメールドメインを他の組織が管理。
OrgEmailInvitationDomainNotMatchedドメイン検証が有効な環境で、組織の検証済みドメインに不一致。
internal_error_batch_write_failed一括書き込みに失敗。成功分を保持し、失敗した項目のみ調査または再試行してください。
reason に示された原因を解決し、再試行が必要なアドレスだけを作成 API に送信してください。成功済みの項目を再送信しないでください。承諾待ちの招待がある場合は再送 API を使用します。

13. メール招待の一覧取得

GET /v1/organizations/{organization_id}/members/emailInvitations

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 UUID。

クエリパラメータ

パラメータ型必須説明
statusstringいいえPENDING、JOINED、EXPIRED、CANCELLED。省略時はすべての状態を取得。
batchIdstringいいえ作成レスポンスのバッチ UUID で絞り込み。
maxResultsintegerいいえデフォルト 20、最大 100。100 を超える正の int32 値は 100、非正数や int32 として解析できない値は 20 になります。
nextTokenstringいいえ前のレスポンスのページトークン。最初のページでは省略。
列挙された値以外の status、または有効な UUID ではない batchId を指定すると、400 BadRequest を返します。

成功レスポンス(200 OK)

次の例は最後のページです。
{
  "invitations": [
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "organizationId": "550e8400-e29b-41d4-a716-446655440000",
      "email": "zhangsan@example.com",
      "role": "org_member",
      "status": "PENDING",
      "expiresAt": "2026-10-22T08:00:00Z",
      "batchId": "770e8400-e29b-41d4-a716-446655440002",
      "createdAt": "2026-10-15T08:00:00Z",
      "updatedAt": "2026-10-15T08:00:00Z"
    }
  ],
  "maxResults": 20
}
invitations は招待の配列、maxResults は実際に使用したページサイズです。次のページがある場合は nextToken が返されるので、次のリクエストにそのまま渡してください。最後のページでは nextToken が省略されます。該当する招待がない場合は invitations: [] を返します。無効な nextToken を指定すると最初のページを返します。

メール招待オブジェクト

作成と一覧の invitations[]、再送の invitation は同じ構造です。日時は RFC 3339 形式の文字列です。
フィールド型説明
idstringキャンセル、再送、削除に使用する招待 UUID。
organizationIdstring組織 ID。
emailstring招待先メールアドレス。
rolestring割り当てるロール。org_member または org_admin。
statusstringPENDING(承諾待ち)、JOINED(参加済み)、EXPIRED(期限切れ)、CANCELLED(キャンセル済み)。
expiresAtstring有効期限。
joinedUserIdstring参加後のユーザー ID。未設定時は省略。
joinedAtstring参加日時。未設定時は省略。
emailSentAtstring記録されたメール送信日時。未設定時は省略。現在の送信処理では更新が保証されないため、配信確認には使用しないでください。
cancelledAtstringキャンセル日時。未設定時は省略。
batchIdstringバッチ ID。未設定時は省略。
createdAtstring作成日時。
updatedAtstring更新日時。

14. メール招待のキャンセル

POST /v1/organizations/{organization_id}/members/emailInvitations/{invitation_id}/cancel

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 UUID。
invitation_idstringはい招待オブジェクトの id(UUID)。
招待のキャンセル、再送、削除にも組織プランの制限が適用されます。 PENDING の招待のみキャンセルできます。招待は無効になり、記録は CANCELLED として残ります。リクエストボディは不要です。

成功レスポンス(200 OK)

id はキャンセルした招待の ID です。
{
  "id": "660e8400-e29b-41d4-a716-446655440001"
}

15. メール招待の再送

POST /v1/organizations/{organization_id}/members/emailInvitations/{invitation_id}/resend

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 UUID。
invitation_idstringはい招待オブジェクトの id(UUID)。
招待のキャンセル、再送、削除にも組織プランの制限が適用されます。 リクエストボディは不要です。次の状態に対応します。
  • PENDING:同じ招待を使用し、ID、リンク、有効期限は変わりません。同じ招待のメール送信には 24 時間の重複排除期間があります。期間内の再呼び出しでは延長されず、通常は送信をスキップして 200 OK を返します。期間終了後の次の送信試行で、新たな 24 時間の期間が始まります。送信に失敗してもこの期間が適用される場合があります。
  • EXPIRED:メールアドレス、ロール、招待者を引き継いで新しい招待を作成し、作成時の前提条件を再確認します。ID、リンク、バッチ ID は新しくなり、有効期間はデフォルトの 168 時間です。作成後に古い記録の削除を試みますが、削除に失敗しても成功レスポンスを返します。以降の操作には返された新しい ID を使用してください。
再送は保存された status に従って処理され、状態の更新が遅れる場合があります。expiresAt を過ぎても PENDING の場合、再送しても有効期限は延長されません。新しい招待が必要な場合は、まず一覧取得で EXPIRED になったことを確認してください。 メール送信の失敗は、この API のエラーとして返されません。200 OK は配信完了を保証しません。

成功レスポンス(200 OK)

invitation は今回使用する招待オブジェクトです。
{
  "invitation": {
    "id": "660e8400-e29b-41d4-a716-446655440004",
    "organizationId": "550e8400-e29b-41d4-a716-446655440000",
    "email": "zhangsan@example.com",
    "role": "org_member",
    "status": "PENDING",
    "expiresAt": "2026-10-22T08:00:00Z",
    "batchId": "770e8400-e29b-41d4-a716-446655440002",
    "createdAt": "2026-10-15T08:00:00Z",
    "updatedAt": "2026-10-15T08:00:00Z"
  }
}

16. メール招待の削除

DELETE /v1/organizations/{organization_id}/members/emailInvitations/{invitation_id}

パスパラメータ

パラメータ型必須説明
organization_idstringはい組織 UUID。
invitation_idstringはい招待オブジェクトの id(UUID)。
招待のキャンセル、再送、削除にも組織プランの制限が適用されます。 リクエストボディは不要です。任意の状態の招待記録を削除できます。承諾待ちの招待は無効になります。JOINED の記録を削除しても組織メンバーは削除されません。メンバーの削除にはメンバー削除を使用してください。

成功レスポンス(200 OK)

id は削除した招待の ID です。
{
  "id": "660e8400-e29b-41d4-a716-446655440001"
}

エラーコード

エラーコードHTTP ステータス説明
BadRequest400リクエストパラメータが無効(例:member_id が空)。招待 API:リクエストボディや status / batchId が無効、または組織のサブスクリプション記録がない。
InvalidParameter400メンバー作成の email または name が欠落または無効、または userId が無効、email と同時指定。招待 API:メールリストが空、または招待者 / 招待 ID が無効。inviterId is required は作成者情報の欠落を示すため、招待者を明示的に指定してください。
InvalidPassword400パスワードが欠落しているか強度要件を満たしていない
InvalidRole400メンバーロールが無効
EmailDomainRequired400組織に検証済みかつ有効なメールドメインがない
EmailDomainNotSupported400メールドメインが組織で有効になっていない
InsufficientSeats400組織に利用可能なシートがない
InvalidBatchQuotaRequest400一括クォータ取得の JSON リクエストボディが無効
InvalidAddOnCapFormat400addOnCap 形式が無効
InvalidBatchAddOnCapRequest400Add-On Cap 一括更新の JSON リクエストボディが無効
EmptyMemberIDs400memberIds が空
TooManyMemberIDs400memberIds が 100 件を超えている
EmptyMemberIDAtIndex400memberIds に空文字列が含まれる
InsufficientMembers400組織メンバー数が最低要件を下回ることはできない
OrgEmailInvitationInviterNotFound400招待者が存在しない。デフォルトの組織作成者も対象。
OrgEmailInvitationBatchSizeExceeded400一括招待数が 3000 を超過。
OrgInvitationInsufficientSeats400招待作成時に空きシートがない。
OrgEmailInvitationNoVerifiedDomain400ドメイン検証が有効だが、検証済みかつ有効なドメインがない。
OrgEmailInvitationDomainOwnedByAnotherOrg400再送先のメールドメインを他の組織が管理している。
OrgEmailInvitationOrgMismatch400招待が指定した組織に属していない。
OrgEmailInvitationCannotCancel400招待が PENDING ではない。
OrgEmailInvitationStatusNotResendable400招待が PENDING と EXPIRED のいずれでもない。
OrgEmailInvitationCannotResend400期限切れ招待の再作成で新しい招待を作成できなかった。サブスクリプションやシートなどのリクエスト全体のエラーは、それぞれのコードを返す。
Unauthorized401API キーが欠落または無効
Forbidden403この組織へのアクセス権限なし
OrganizationPlanExpired403組織プランが期限切れ、一時停止、キャンセル済み、または有効な Free プランのため、招待の作成、キャンセル、再送、削除が禁止されている。
NotFound404メンバーまたは招待が存在しない。
UserNotTeamMember404ユーザーはこのチームのメンバーではない
EmailAlreadyExists409メールアドレスがすでに登録されている
InternalError500サーバー内部エラー
リクエスト全体のエラーは requestId、code、message を返します。200 OK 内の failedEmails とは分けて処理してください。例えば招待者が存在しない場合は 400 を返します。
{
  "requestId": "req_abc123",
  "code": "OrgEmailInvitationInviterNotFound",
  "message": "Inviter user does not exist, please provide a valid user id as inviter"
}
エラーレスポンスの形式は 共通仕様 の エラーレスポンス を参照してください。

使用例

メンバー一覧

curl -X GET "https://api.qoder.com/v1/organizations/org_xxx/members?maxResults=20" \
  -H "Authorization: Bearer <api_key>"

メールでメンバー検索

curl -X GET "https://api.qoder.com/v1/organizations/org_xxx/members?email=alice@example.com" \
  -H "Authorization: Bearer <api_key>"

ユーザー ID でメンバー検索

curl -X GET "https://api.qoder.com/v1/organizations/org_xxx/members?userId=550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer <api_key>"

メンバー一覧(削除済みを含む)

curl -X GET "https://api.qoder.com/v1/organizations/org_xxx/members?includeDeleted=true" \
  -H "Authorization: Bearer <api_key>"

メンバー詳細取得

curl -X GET "https://api.qoder.com/v1/organizations/org_xxx/members/member_abc123" \
  -H "Authorization: Bearer <api_key>"

メンバー作成

curl -X POST "https://api.qoder.com/v1/organizations/org_xxx/members" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"email":"alice@example.com","name":"Alice","password":"StrongPassword123!","role":"org_member"}'

メンバー統計取得

curl -X GET "https://api.qoder.com/v1/organizations/org_xxx/members/statistics" \
  -H "Authorization: Bearer <api_key>"

メンバー削除

curl -X DELETE "https://api.qoder.com/v1/organizations/org_xxx/members/member_abc123" \
  -H "Authorization: Bearer <api_key>"

メンバー Add-On Cap 更新

curl -X PUT "https://api.qoder.com/v1/organizations/org_xxx/members/member_abc123/addon-cap" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "addOnCap": 1000
  }'

メンバークォータ取得

curl -X GET "https://api.qoder.com/v1/organizations/org_xxx/members/member_abc123/quota" \
  -H "Authorization: Bearer <api_key>"

メンバークォータ一括取得

curl -X POST "https://api.qoder.com/v1/organizations/org_xxx/members/batchGetQuota" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "memberIds": ["member_abc123", "member_def456"]
  }'

メンバー Add-On Cap 一括更新

curl -X POST "https://api.qoder.com/v1/organizations/org_xxx/batchUpdateAddOnCap" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "addOnCap": 1000,
    "memberIds": ["member_abc123", "member_def456"]
  }'

メール招待の一括作成

curl -X POST "https://api.qoder.com/v1/organizations/org_xxx/members/emailInvitations" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"emails":["zhangsan@example.com","invalid-email"],"role":"org_member"}'

メール招待の一覧取得

curl --get "https://api.qoder.com/v1/organizations/org_xxx/members/emailInvitations" \
  -H "Authorization: Bearer <api_key>" \
  --data-urlencode "status=PENDING" \
  --data-urlencode "maxResults=20"

メール招待のキャンセル

curl -X POST "https://api.qoder.com/v1/organizations/org_xxx/members/emailInvitations/660e8400-e29b-41d4-a716-446655440001/cancel" \
  -H "Authorization: Bearer <api_key>"

メール招待の再送

各操作例は独立して使用します。以下の ID を、実際に PENDING または EXPIRED の招待 ID に置き換えてください。キャンセル済みの招待は再送できません。
curl -X POST "https://api.qoder.com/v1/organizations/org_xxx/members/emailInvitations/660e8400-e29b-41d4-a716-446655440004/resend" \
  -H "Authorization: Bearer <api_key>"

メール招待の削除

curl -X DELETE "https://api.qoder.com/v1/organizations/org_xxx/members/emailInvitations/660e8400-e29b-41d4-a716-446655440001" \
  -H "Authorization: Bearer <api_key>"