1. Docs
  2. API Reference
  3. Bulk-create Account identities

Bulk-create Account identities

POST/portal/v1/accounts/{accountSlug}/identities/bulk-create

Partial-success bulk create for the directory CSV-import wizard, capped at 200 rows per request. Each row is processed independently so per-row validation, duplicate-email, and Environment-not-in-Account errors fold into the failures array rather than aborting the batch; an optional per-row environment_id provisions an EnvironmentMembership in the same transaction. Returns 200 on full success or 207 Multi-Status when any row failed, with a { summary, results } body either way.

Authentication

Bearer TokenAuthorization

JWT access token. Never send alongside X-API-Key: a request carrying both is refused.

Requires capability identities.manageIdentities

Manage end-user identities across the account. Granted through an administrator role in the Admin Workspace; a valid token without it is refused with 403.

Request body

application/json

identitiesCreateAccountIdentityDto[] Required

Responses

application/json

  • summaryobject*
  • resultsobject[]*

application/json

  • summaryobject*
  • results("success" | "error")[]*

application/json

  • errorApiErrorBodyDto*

application/json

  • errorApiErrorBodyDto*

Errors

When the request can't be completed, the response body includes a stable error code you can branch on.

403account.capability_requiredForbidden
When it happens

The signed-in user's administrator roles do not grant the capability this endpoint requires.

Remediation

Ask an account administrator to grant a role carrying the capability named in the Authentication section, then retry.

Request
curl -X POST "https://auth.canopy-io.com/portal/v1/accounts/{accountSlug}/identities/bulk-create" \
  -H "Authorization: Bearer $CANOPY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "identities": [
      {
        "email": "string",
        "first_name": "string",
        "last_name": "string",
        "password": "string",
        "external_id": "string",
        "metadata": {},
        "environment_id": "string"
      }
    ]
  }'
Response
{
  "summary": {
    "total": 0,
    "succeeded": 0,
    "failed": 0
  },
  "results": [
    {
      "index": 0,
      "status": "success",
      "code": 0,
      "data": {
        "id": "string",
        "email": "string",
        "first_name": "string",
        "last_name": "string",
        "avatar_url": "string",
        "external_id": "string",
        "metadata": {},
        "is_active": false,
        "erased_at": "2026-04-20T12:00:00.000Z",
        "email_verified": false,
        "email_verified_at": "2026-04-20T12:00:00.000Z",
        "locked_until": "2026-04-20T12:00:00.000Z",
        "password_changed_at": "2026-04-20T12:00:00.000Z",
        "environment_membership_count": 0,
        "total_assignments": 0,
        "created_at": "2026-04-20T12:00:00.000Z",
        "environment_memberships": [
          {
            "id": "string",
            "environment_id": "string",
            "environment_slug": "string",
            "environment_name": "string",
            "application_slug": "string",
            "application_name": "string",
            "status": "active",
            "created_at": "2026-04-20T12:00:00.000Z",
            "assignment_count": 0
          }
        ]
      }
    }
  ]
}
Related endpoints
GETList identities in Account
POSTCreate an Account identity
GETGet directory counts for the Account
GETGet an Account identity
PATCHUpdate an Account identity profile
PATCHSet Account-wide is_active flag
POSTErase an identity (GDPR/CCPA right to be forgotten)
POSTAdmin-trigger a password reset email
POSTRe-send email verification
POSTRevoke all active sessions for an identity
GETList audit events for an Account identity
POSTAdd an identity to an Environment (create EnvironmentMembership)
POSTBulk-attach EnvironmentMemberships for the Add-from-directory picker
DELETERemove an identity from an Environment (revoke EnvironmentMembership)
Was this page helpful?

Tell us how we can improve this guide.