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

# Storyblok

> Headless CMS — collaborators & access

<Tabs>
  <Tab title="Overview">
    Connect Storyblok with a personal access token to sync space owners, collaborators and spaces, and run access reviews. Read-only.

    <Info>
      **Read-only access.** DSALTA only reads data from this integration. It never creates, modifies, or deletes anything in your environment, and every remediation step is performed by your team directly in the third-party product.
    </Info>

    <Note>
      **What you'll see.** A Storyblok personal access token reaches the spaces its owner can open, so the Access page is built space by space: for each space DSALTA reads the **owner** and the **collaborators**, then merges them into one roster where each person appears once, with their role and the names of up to five spaces beside it. Someone who owns one space and collaborates on another is listed as **Owner**. Storyblok reports no account status, join date or MFA state on these endpoints, so every person is shown as **Active** with MFA **Unknown**, and each row is stamped with the date of the sync. The token's own account is included only through the spaces it owns or collaborates on.
    </Note>

    <Note>
      DSALTA collects this integration's data when you connect it — you can refresh it at any time with **Sync from integrations** on the **Integrations** page. The compliance checks below re-run once a day at 02:00 America/New\_York.
    </Note>

    ## What DSALTA reads

    DSALTA reads each space's owner and collaborator list — names, emails and roles — which appears on your **Access** page; and the **spaces** themselves, which appear on your **Inventory** page with their region, plan, whether the space requires two-factor authentication, and their story and asset counts. Content and assets are never read.

    It calls these Storyblok Management API endpoints on `mapi.storyblok.com` (or `api-us.storyblok.com` for US-region spaces):

    * `/v1/spaces/`
    * `/v1/spaces/{id}/`
    * `/v1/spaces/{id}/collaborators/`

    Every request is a read. DSALTA has no code path that creates, modifies, or deletes anything in your Storyblok environment.

    ## Troubleshooting

    <AccordionGroup>
      <Accordion title="The connection stopped working with a 401">
        Storyblok requires an expiration on personal access tokens, and the token stops working on that date. Generate a fresh token under **My account → Account settings → Personal access tokens**, then disconnect and connect again. Note that disconnecting permanently deletes the data already collected from Storyblok.
      </Accordion>

      <Accordion title="The connection is rejected">
        The token must be a **personal access token** from your account settings, not a space's **Access tokens** (those are read-only Content Delivery tokens and cannot read account data). If your spaces live on the US instance, enter `us` as the **Region** — the EU host does not know US spaces.
      </Accordion>
    </AccordionGroup>

    <AccordionGroup>
      <Accordion title="How do I check whether the connection is healthy?">
        Open **Integrations** in the DSALTA sidebar, stay on the **Connected** tab, and click **Manage** on the integration's card. Open the **Status** tab: it shows either **Connected and working properly** or **Connection issues detected**.

        Use the **Status** tab, not **Overview** — Overview always reports **Connected** regardless of the real state.
      </Accordion>

      <Accordion title="A check shows Failed and nothing changed on my side">
        On an integration-powered check, **Failed** normally means DSALTA was blocked rather than that you are non-compliant. Open the test, go to **Source Data**, and read the result code: **403** is a missing permission, **428** is a setting DSALTA still needs, **500** is a failure on DSALTA's side.

        A real compliance gap shows **207** and leaves the test looking **Completed**. See [Understanding Test Results](/guides/compliance/test-results).
      </Accordion>

      <Accordion title="Data looks out of date">
        Compliance checks re-run once a day at 02:00 America/New\_York. To refresh sooner, open **Integrations → Connected** and click **Sync from integrations** at the top right — it refreshes every connected integration at once.
      </Accordion>

      <Accordion title="How do I repair a broken connection?">
        There is no Reconnect, Repair or Refresh Token button. The only repair available is to disconnect and connect again.

        <Warning>
          **Disconnecting is destructive and cannot be undone.** DSALTA removes the access records, inventory, vulnerabilities, code changes, incidents and device records collected from this integration, and deletes the test results tied to the connection. Export anything you still need as audit evidence first — see [Integration errors](/troubleshooting/integration-errors).
        </Warning>
      </Accordion>

      <Accordion title="Configure scope will not let me change anything">
        That is expected. **Configure scope** is read-only — it shows what DSALTA is permitted to read, and has no Save action. To change what DSALTA can see, change the permissions on the credential in the third-party product, then disconnect and connect again.
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="How to connect">
    A Storyblok personal access token (My account → Personal access tokens). Read-only.

    **Before you begin**

    * A Storyblok account with access to the spaces you want reviewed. The token reaches the spaces its owner can open, so use an account that owns or is an admin of all of them.
    * Your region: EU is the default; enter `us` if your spaces are on the US instance.

    You will need:

    | Field                     | Where to find it                                                            | Example                  |
    | ------------------------- | --------------------------------------------------------------------------- | ------------------------ |
    | **Personal access token** | **My account → Account settings → Personal access tokens → Generate Token** | Shown once               |
    | **Region** (optional)     | Where your spaces are hosted                                                | `us` for the US instance |

    <Steps>
      <Step title="Start in DSALTA">
        Open **Integrations** in the DSALTA sidebar, find **Storyblok**, and click **Connect** to open the connect panel.
      </Step>

      <Step title="Create a personal access token">
        In Storyblok, open **My account → Account settings → Personal access tokens**. Set the expiration, select at least one scope, and click **Generate Token**. Copy the token — Storyblok shows it once.

        <Warning>
          This is **not** a space's content **Access tokens** entry under a space's settings. Those are read-only Content Delivery tokens and cannot read account data, so DSALTA rejects them.
        </Warning>
      </Step>

      <Step title="Pick the longest expiration">
        Storyblok requires an expiration on personal access tokens — pick the longest option offered. When the token expires the connection fails with a Storyblok 401; generate a fresh token and reconnect.
      </Step>

      <Step title="Connect Storyblok">
        Return to the connect panel, paste the token, enter `us` as the region if your spaces are on the US instance, and click **Connect**.
      </Step>
    </Steps>

    <Check>
      DSALTA validates the token when you click **Connect**, by listing the spaces it can see. On success the integration moves to the **Connected** tab, and **Manage → Status** reads **Connected and working properly**. Checks begin reporting after the first sync.
    </Check>

    <Warning>
      **If the connection is rejected.** An expired token, a space content token instead of a personal access token, or the wrong region.

      The on-screen message is generic — see [Connection error messages](/troubleshooting/connection-error-messages).
    </Warning>
  </Tab>

  <Tab title="Automated checks">
    Each check below re-runs once a day, at 02:00 America/New\_York, while this integration is connected. Click any check for step-by-step remediation guidance.

    | Check                                                                                                                    | Severity | What it verifies                                                                     |
    | ------------------------------------------------------------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------ |
    | [User access to Critical System should be valid](/integrations/storyblok/user-access-to-critical-system-should-be-valid) | Info     | Checks that everyone with Storyblok access is an active employee on the People page. |
    | [Offboarded users should not have active access](/integrations/storyblok/offboarded-users-should-not-have-active-access) | High     | Checks that offboarded employees no longer have active Storyblok access.             |
  </Tab>

  <Tab title="Useful links">
    | Topic       | Link                                                                                                          |
    | ----------- | ------------------------------------------------------------------------------------------------------------- |
    | Setup       | [Access tokens](https://www.storyblok.com/docs/concepts/access-tokens)                                        |
    | Setup       | [Management API authentication](https://www.storyblok.com/docs/api/management/getting-started/authentication) |
    | Remediation | [Roles](https://www.storyblok.com/docs/concepts/roles)                                                        |
    | General     | [Storyblok](https://app.storyblok.com)                                                                        |
    | DSALTA      | [Connection error messages](/troubleshooting/connection-error-messages)                                       |
  </Tab>
</Tabs>
