---
title: "Set up an Island connector"
og:title: "Set up an Island connector"
description: "C1 provides identity governance for Island Enterprise Browser. Integrate your Island tenant with C1 for unified visibility and governance over user and group access."
og:description: "C1 provides identity governance for Island Enterprise Browser. Integrate your Island tenant with C1 for unified visibility and governance over user and group access."
sidebarTitle: "Island"
---
## Capabilities
| Resource | Sync | Provision |
| ----------- | ---- | --------- |
| Users | | |
| Groups | | |
| Memberships | | |
The connector syncs Island users and groups and the user → group memberships derived from them. See **Synced resource types** below for how each set is fetched.
## Gather Island credentials
Mint the Island API key with the **Read-Only** role. The connector performs read-only API calls and does not require any write scopes.
Sign in to the Island Management Console for your tenant's region.
Navigate to **Modules → Platform Settings → System Settings → Integrations → API**.
Mint a new API key with the **Read-Only** role.
Store the key securely. The connector sends it verbatim as the lowercase HTTP header `api-key: ` (no `Bearer` prefix).
## Regions
Island operates five public regions. Set `base-url` to the regional console URL for your tenant; the connector does not auto-detect region.
| Region | Console URL |
| ------ | --------------------------------- |
| US | `https://management.island.io` |
| EU | `https://eu.management.island.io` |
| UK | `https://uk.management.island.io` |
| CA | `https://ca.management.island.io` |
| AU | `https://au.management.island.io` |
The US and EU URLs are verified against public Island documentation. The UK, CA, and AU subdomain pattern is plausible but unconfirmed at the time of this PR — the field is free-form on purpose so operators can configure the exact URL their tenant uses.
## Configuration fields
| Field | Required | Description |
| ---------- | -------- | -------------------------------------------------------------------------------------------------------- |
| `base-url` | Yes | Base URL of the Island Management Console API for your region. Default: `https://management.island.io`. |
| `api-key` | Yes | Island API key with the Read-Only role. Sent as the lowercase HTTP header `api-key: `. |
## Synced resource types
- **Users**: Island users from `GET /api/external/v1/users`. This is the connector's only identity source, and it returns every user the tenant has — browser-enrolled and IdP/SCIM-provisioned alike. `user_source`, `connection_name`, and `scim_id` distinguish how each user was created. PII surface includes `user_source`, `email_verified`, `expiration_date`, `last_seen`, `connection_name`, `invitation_date`, and `allowed_tenants_ids`.
- **Groups**: derived from distinct `user.groups[]` values across the Users walker. Island does not expose a public `/groups` list endpoint; the connector materializes the Group resource set in-walker.
- **Memberships**: emitted as user → group grants, one row per `(user.id, groups[i])` pair.
## Special notes
- **Pagination is PascalCase on the wire.** Island Users paginate via `?Offset=&Limit=&SortBy=CreatedDate&SortDirection=Asc`. The connector defines a dedicated `islandPagination` constant — it does not reuse Clerk's lowercase offset/limit helper.
- **Cross-tenant scope guard.** Island Users carry an `allowed_tenants_ids` array. The connector verifies tenant-scope at startup and falls back to a composite `(tenant_id, group_name)` Group stable id if the API key spans multiple tenants.
- **Empty `groups[]` degrades silently.** `null`, missing, or `[]` produces zero memberships and contributes zero entries to the derived Group set, with no warning or error logged. This is the normal state for SCIM-provisioned users with no group assignments.
- **Group names are not normalized.** Stable ids are the literal byte-for-byte string from `user.groups[]`. The connector does not apply `.toLowerCase()`, `.trim()`, or Unicode NFC.
- **Rate limits are undocumented.** The connector honors HTTP 429 responses with exponential backoff (1s → 30s, jittered) and honors `Retry-After` when present.
- **Who appears in a sync.** A person shows up in `/users` only once **enrolled in the Island browser** or **provisioned via SCIM/IdP**. IdP/directory users require SCIM provisioning to be wired on the tenant — once it is, they sync like any other user, tagged by `user_source`/`connection_name`/`scim_id`. An empty sync (`{ "users": [] }`) means nobody is enrolled and no SCIM/IdP provisioning is wired — not a connector fault. Island's external API exposes no separate IdP/directory or console-admin roster endpoint; console admins who never enroll are not browser users and do not appear here.
## Configure the Island connector
Follow your organization's standard connector setup flow for cloud-hosted or self-hosted runtime. Supply the `base-url` for your region and the read-only `api-key` minted in the steps above.