> ## Documentation Index
> Fetch the complete documentation index at: https://www.courier.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Okta Integration

> Set up Okta SSO and SCIM provisioning with Courier to enable secure logins, role management, and automated user syncing via SAML 2.0 and Okta's admin interface.

<Info>
  Okta SSO and SCIM provisioning are available on the Enterprise plan. [Contact Sales](mailto:sales@courier.com) or [Courier Support](mailto:support@courier.com) to get started.
</Info>

## How It Works

Okta SSO for Courier uses SAML 2.0 through AWS Cognito. Setup is a joint process between your team and Courier:

1. **You** create a SAML 2.0 app in Okta using the values provided below.
2. **You** send the SAML metadata URL and your email domain(s) to [Courier Support](mailto:support@courier.com).
3. **Courier** configures the backend to recognize your identity provider and maps your domain(s) to Okta.
4. **You** test SSO login and set up the bookmark app for your team.

## Prerequisites

* An Okta account with Admin privileges.
* A list of users who will access Courier and their intended [roles](/platform/workspaces/roles-permissions) (e.g., Administrator, Developer, Designer, Analyst). You'll assign these when provisioning users through Okta.
* Contact [Courier Support](mailto:support@courier.com) before starting so your backend configuration can be coordinated with the steps below.

## Create the App Integration in Okta

<Steps>
  <Step title="Open the Applications page">
    Navigate to the Applications > Applications section of the Okta admin panel and hit the "Create App Integration" button.

    <Frame caption="Create App Integration button">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/create-app.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=c8484a7163f4809bc343e66558e6d2cc" alt="Create App Integration button." width="2880" height="1548" data-path="assets/platform/workspaces/create-app.png" />
    </Frame>
  </Step>

  <Step title="Select SAML 2.0">
    Select SAML 2.0 as the sign-in method and hit "Next".

    <Frame caption="Select Sign-in Method">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/saml.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=f1e244045ed6059627a7751f417098fb" alt="Select Sign-in Method" width="2880" height="1546" data-path="assets/platform/workspaces/saml.png" />
    </Frame>
  </Step>

  <Step title="Name your app">
    Enter `Courier` as the app name and optionally provide the Courier logo, then click "Next".

    <Frame caption="App Name & Logo">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/general-settings.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=bc1fd9044a397a9d24aa2bedb7830dc9" alt="App Name & Logo" width="2880" height="1548" data-path="assets/platform/workspaces/general-settings.png" />
    </Frame>

    <Note>
      You can optionally upload the Courier logo. [Download it here](pathname:///img/logo_2023.png).
    </Note>
  </Step>

  <Step title="Enter SAML settings">
    Enter the following values in their respective fields under SAML settings:

    * **Single sign-on URL**: `https://courier.auth.us-east-1.amazoncognito.com/saml2/idpresponse`
    * **Audience URI (SP Entity ID)**: `urn:amazon:cognito:sp:us-east-1_ptbRzqiLw`

    <Frame caption="SSO URL and Audience URI fields">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/settings-urls.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=2d84e9d2dad66df55f14c9564482008a" alt="SSO URL and Audience URI fields" width="2880" height="1548" data-path="assets/platform/workspaces/settings-urls.png" />
    </Frame>
  </Step>

  <Step title="Configure attribute statements">
    In the **Attribute Statements** section, enter the following information:

    | Name                                                                 | Name Format | Value      |
    | -------------------------------------------------------------------- | ----------- | ---------- |
    | `id`                                                                 | Unspecified | user.id    |
    | `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` | Unspecified | user.email |

    <Frame caption="Okta attribute statements">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/attributes.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=cf8b114282874e6030823de12d5bdc04" alt="Okta attribute statements." width="1416" height="588" data-path="assets/platform/workspaces/attributes.png" />
    </Frame>
  </Step>

  <Step title="Finish the app creation">
    Hit "Next", then under "Application Feedback" select "I'm an Okta customer adding an internal app" and hit "Finish".

    <Frame caption="Okta feedback form">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/feedback-form.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=f63dc97194d46df9e7782bd6400b576b" alt="Okta feedback form" width="1440" height="344" data-path="assets/platform/workspaces/feedback-form.png" />
    </Frame>
  </Step>

  <Step title="Send the Metadata URL to Courier">
    From the "Sign On" tab of the new Courier application integration, find the Metadata URL. Copy the link address and send it to the Courier support team member.

    <Frame caption="Okta Metadata URL">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/metadata.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=080f77a24df59a783881a70269ae2916" alt="Okta Metadata URL" width="748" height="720" data-path="assets/platform/workspaces/metadata.png" />
    </Frame>
  </Step>

  <Step title="Confirm your email domains">
    Along with the metadata URL, confirm which **email domain(s)** should route through Okta (e.g., `yourcompany.com`). If your organization uses multiple domains, list all of them.
  </Step>
</Steps>

That's all you need for Okta sign-in. Assign users from the **Assignments** tab of the Courier app integration in Okta.

## Creating a Courier Bookmark App

Courier does not support IdP-initiated login, so users cannot launch Courier by clicking an app tile in Okta. Instead, create a bookmark app that points to your SSO login URL.

Once Courier Support has configured your SSO backend, your bookmark URL will follow this pattern (replace `YOUR_PROVIDER_NAME` with the provider name Courier gives you):

```
https://courier.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=token&identity_provider=YOUR_PROVIDER_NAME&client_id=5f4fmec2qnuscp89qbt8nsuftj&redirect_uri=https%3A%2F%2Fapp.courier.com%2Flogin%2Fcallback&scope=aws.cognito.signin.user.admin%20email%20openid%20profile
```

<Note>
  Courier Support will provide your specific provider name (e.g., `OktaYourCompany`) and the complete bookmark URL after backend configuration is complete.
</Note>

<Steps>
  <Step title="Open the Okta admin panel">
    Log in to the Okta admin panel as an Admin and go to **Applications > Applications**.
  </Step>

  <Step title="Add a Bookmark App">
    Click **Browse App Catalog**, search for `Bookmark App`, select it, and click **Add**.
  </Step>

  <Step title="Configure the bookmark">
    Enter an app name (e.g. `Courier Login`) and paste the bookmark URL from Courier Support into the URL field.

    <Frame caption="Okta Bookmark App Settings">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/okta-bookmark-app.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=8dbe9494de9046eaf6b062b62a3d5e67" alt="Okta Bookmark App Settings" width="1920" height="1212" data-path="assets/platform/workspaces/okta-bookmark-app.png" />
    </Frame>
  </Step>

  <Step title="Save and assign">
    Click **Save**, then assign to users to test.
  </Step>
</Steps>

## Migrating Users to Okta

Enabling Okta SSO does not automatically switch existing users to Okta. Users who signed up with email or Google will continue using their original login method until they are re-invited. To migrate them:

<Steps>
  <Step title="Check Google SSO settings">
    From the [Settings > Team](https://app.courier.com/settings/team) page in Courier, confirm that "Require Google SSO" is not checked.

    <Frame caption="Google SSO setting on the Team page">
      <img src="https://mintcdn.com/courier-4f1f25dc/8IzqS8fSFZjGaKji/assets/platform/workspaces/google-sso.png?fit=max&auto=format&n=8IzqS8fSFZjGaKji&q=85&s=b523fdc34f72c1b98671332728f4743a" alt="Google SSO checkbox in team settings" width="2386" height="1420" data-path="assets/platform/workspaces/google-sso.png" />
    </Frame>
  </Step>

  <Step title="Re-invite users">
    Remove and re-invite any users who should sign in with Okta.

    <Warning>
      If SCIM provisioning is enabled, the manual "Invite User" button is hidden in Courier. Migration must go through Okta app assignments — assign the user in Okta, and SCIM will send them a new invite automatically.
    </Warning>
  </Step>
</Steps>

## Accepting an Okta Invitation

<Steps>
  <Step title="Sign out of Courier">
    Sign out of any existing Courier session.
  </Step>

  <Step title="Open the invite">
    Click the "join" button from the email invite.
  </Step>

  <Step title="Enter your work email">
    Enter your work email (the email address your invite was sent to) and hit continue.

    <Frame caption="Courier login page">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/log-in.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=539706d5c430f8c9ff7f01ba0c157fea" alt="Courier login page with email entry" width="657" height="434" data-path="assets/platform/workspaces/log-in.png" />
    </Frame>

    <Note>
      Users with Okta logins to Courier must use the email login process.

      <Frame caption="Email Login Process">
        <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/log-in-email.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=ebd7e8ba63386956a56f9eac15cfd25a" alt="Email login process for Okta users" style={{width: 500}} width="642" height="384" data-path="assets/platform/workspaces/log-in-email.png" />
      </Frame>
    </Note>
  </Step>
</Steps>

## User Provisioning with Okta SCIM v2

<Steps>
  <Step title="Get SCIM credentials">
    Contact Courier support for a SCIM endpoint URL and bearer token.
  </Step>

  <Step title="Open provisioning settings">
    Navigate to the Courier App from the Okta admin panel, go to the provisioning tab, and click "Edit".

    <Frame caption="Provisioning settings">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/provisioning.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=14f098b87e0f4a9992ea80c6efa6d9c2" alt="Okta provisioning tab with Edit button" width="2028" height="574" data-path="assets/platform/workspaces/provisioning.png" />
    </Frame>
  </Step>

  <Step title="Configure the SCIM connector">
    Enter the following settings:

    * **SCIM connector base URL**: the URL provided by Courier
    * **Unique identifier field for users**: `userName`
    * **Supported provisioning actions**: check "Push New Users" and "Push Profile Updates"
    * **Authentication Mode**: `HTTP Header`
    * **Bearer token**: the token provided by Courier

    <Frame caption="SCIM authentication settings">
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/scim-auth.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=42a6a8ded11d6b4ed47fff6a4f1f5b4f" alt="SCIM connector URL and authentication settings" width="1532" height="1380" data-path="assets/platform/workspaces/scim-auth.png" />
    </Frame>

    Hit "Save".
  </Step>

  <Step title="Enable provisioning to app">
    After 30 seconds the provisioning tab should have a "To App" section on the left. If it doesn't, try refreshing the page. Once it appears, select it and hit the "Edit" button. Check "Create Users", "Update User Attributes", and "Deactivate Users", then hit save.

    <Frame>
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/to-app-settings.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=d9b8556e74ccc2927b42f5df9278dc38" alt="" width="2004" height="1166" data-path="assets/platform/workspaces/to-app-settings.png" />
    </Frame>
  </Step>

  <Step title="Open the Profile Editor">
    Using the side menu, navigate to Directory > Profile Editor and hit the edit profile button of the Courier App.

    <Frame>
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/profile-editor.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=39b7037c80b6b114366a9b77fa9c7736" alt="" width="2700" height="1152" data-path="assets/platform/workspaces/profile-editor.png" />
    </Frame>
  </Step>

  <Step title="Add the role attribute">
    Hit the "Add Attribute" button and enter the following values:

    <Frame>
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/profile-editor-attributes.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=5caadd86a920687c0885e47aabe780be" alt="" width="2022" height="910" data-path="assets/platform/workspaces/profile-editor-attributes.png" />
    </Frame>

    * Data type: `string`
    * Display name: `Role`
    * Variable name: `role`
    * External name: `role`
    * External namespace: `urn:ietf:params:scim:schemas:core:2.0:User`
    * Description: `Courier Role`

    <Frame>
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/add-attribute-form.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=7bbbf275e75ae617f14a644f41da854f" alt="" width="1380" height="1060" data-path="assets/platform/workspaces/add-attribute-form.png" />
    </Frame>
  </Step>

  <Step title="Define role values">
    Check the "Define enumerated list of values" checkbox and enter the following values:

    * Display Name: `Admin`, Value: `ADMINISTRATOR`
    * Display Name: `Manager`, Value: `MANAGER`
    * Display Name: `Developer`, Value: `DEVELOPER`
    * Display Name: `Designer`, Value: `DESIGNER`
    * Display Name: `Support`, Value: `SUPPORT_SPECIALIST`
    * Display Name: `Analyst`, Value: `ANALYST`

    Check the "Attribute required" checkbox and hit "save".

    <Frame>
      <img src="https://mintcdn.com/courier-4f1f25dc/ocKTSyLlc6Ky9Ivc/assets/platform/workspaces/add-attribute-form-extra.png?fit=max&auto=format&n=ocKTSyLlc6Ky9Ivc&q=85&s=f9a60e8794831f03a5efe8a1aa270ddd" alt="" width="1378" height="1436" data-path="assets/platform/workspaces/add-attribute-form-extra.png" />
    </Frame>

    <Warning>
      If the `role` attribute is not set on a user's Okta app assignment, they default to the **Analyst** role with the lowest permission level. Set a sensible default (e.g., `DEVELOPER`) in the Profile Editor and override only for administrators and managers.
    </Warning>

    <Note>
      If users were already assigned to the Courier app before you set up provisioning, edit their assignment and update their role.
    </Note>
  </Step>
</Steps>

### Finalizing User Provisioning

* Changes to user assignments in the Courier Okta app will automatically be reflected in the Courier Workspace.
* Users will receive an invite via email to Courier when added.
* Users are automatically removed from the Courier Workspace when no longer assigned in Okta.

## Troubleshooting

| Symptom                                                         | Cause                                                                                                                                                   | Fix                                                                                                                                                                                            |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| "You must be signed in with an SSO provider" message in Courier | You're logged in via email or Google, not Okta SSO. The SSO management page only appears for SSO-authenticated sessions.                                | Log out and sign in again through the Okta bookmark app or via email login flow.                                                                                                               |
| All users showing as Analyst role                               | The `role` attribute is not set on their Okta app assignments.                                                                                          | Edit each user's assignment in Okta and set the `role` value. Consider setting a default in the Profile Editor.                                                                                |
| Workspace shows "Free plan"                                     | This is a display artifact of the Analyst role's reduced permissions. The actual plan is tied to the workspace, not the user.                           | Restore the user's intended role (e.g., `ADMINISTRATOR`) via their Okta assignment.                                                                                                            |
| Can't click Courier tile in Okta to log in                      | Courier's auth provider (AWS Cognito) does not support IdP-initiated login.                                                                             | Use the [bookmark app](#creating-a-courier-bookmark-app) instead.                                                                                                                              |
| SCIM-provisioned users can't accept invites                     | Invite verification codes expire after 14 days. If users don't accept in time, subsequent SCIM syncs find stale invitation objects and skip re-sending. | Delete the stale invitation objects, then re-push users from Okta (remove and re-assign). Note: Okta *group* membership changes may not trigger SCIM events; use app-level assignment changes. |
| "Invite User" button missing in Courier                         | SCIM provisioning is enabled, which hides manual team management.                                                                                       | Manage users through Okta app assignments instead.                                                                                                                                             |
