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

# Server-to-Server OAuth

> Connect Parable to Zoom using Server-to-Server OAuth

export const platform_1 = "Zoom"

export const limit_0 = "varies by endpoint; typically 30-100 requests/second with daily quotas"

export const platform_0 = "Zoom"

export const role_0 = "Account Owner or Admin (must be allowed to create Server-to-Server OAuth apps)"

<Tabs>
  <Tab title="Setup">
    <Card title="What You'll Need" icon="key">
      | Credential        | What it is              |
      | ----------------- | ----------------------- |
      | **Account ID**    | Zoom account identifier |
      | **Client ID**     | OAuth client ID         |
      | **Client Secret** | OAuth client secret     |
    </Card>

    ## Overview

    Connect Parable to Zoom for account users, meeting reports, and past meeting participants using Server-to-Server OAuth. Parable obtains access tokens with only **Account ID**, **Client ID**, and **Client Secret** — no end-user sign-in during sync.

    <CardGroup cols={3}>
      <Card title="Users" icon="users">
        List and profile data for users in your Zoom account
      </Card>

      <Card title="Meetings & reports" icon="video">
        Per-user meeting history reports where scopes allow
      </Card>

      <Card title="Meeting participants" icon="user-group">
        Per-meeting participant identities for past meetings
      </Card>
    </CardGroup>

    ## Prerequisites

    <Info>
      **Setup access in {platform_0}.** These steps require **{role_0}**, or a colleague with equivalent permissions who can create credentials for you.

      If that is not you, ask your {platform_0} administrator.
    </Info>

    ## Setup Guide

    <Steps>
      <Step title="Access Zoom App Marketplace">
        1. Go to <a href="https://marketplace.zoom.us/" target="_blank" rel="noopener noreferrer">Zoom App Marketplace</a>
        2. Click **Develop** → **Build App**
        3. Sign in with your Zoom admin account
      </Step>

      <Step title="Create Server-to-Server OAuth App">
        1. Find **Server-to-Server OAuth** in the app types
        2. Click **Create**
        3. Enter app name: `Parable Integration`
        4. Click **Create**
      </Step>

      <Step title="Copy Credentials">
        On the **App Credentials** page, copy:

        * **Account ID**
        * **Client ID**
        * **Client Secret**

        <Warning>
          Store these credentials securely — the Client Secret cannot be retrieved later.
        </Warning>
      </Step>

      <Step title="Add Scopes">
        Go to **Scopes** and add the following:

        | Scope                                       | Purpose                          |
        | ------------------------------------------- | -------------------------------- |
        | `user:read:list_users:admin`                | List account users               |
        | `report:read:user:admin`                    | Per-user meeting history reports |
        | `meeting:read:list_past_participants:admin` | Past meeting participant lists   |

        <Info>
          These are the current granular scope names required by the Zoom API. Older apps may show `user:read:admin` and `report:read:admin` — both still work but new apps should use the granular names above.
        </Info>
      </Step>

      <Step title="Activate the App">
        1. Complete all required fields (Information, Feature)
        2. Go to **Activation**
        3. Click **Activate your app**

        <Info>
          The app will be activated immediately for your account.
        </Info>
      </Step>

      <Step title="Enter values in the form">
        Enter **Account ID**, **Client ID**, and **Client Secret** into the connector form, then click **Save & test connection**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Reference">
    ## Verify Your Setup

    <CodeGroup>
      ```bash Get Access Token theme={null}
      curl -X POST "https://zoom.us/oauth/token" \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -u "CLIENT_ID:CLIENT_SECRET" \
        -d "grant_type=account_credentials" \
        -d "account_id=ACCOUNT_ID"
      ```

      ```bash Test API Access theme={null}
      curl -H "Authorization: Bearer ACCESS_TOKEN" \
        "https://api.zoom.us/v2/users?page_size=5"
      ```
    </CodeGroup>

    <Check>
      **Success!** If you received a `200 OK` response with valid data, your credentials are configured correctly. You can now proceed to configure this connector in Parable.
    </Check>

    <Tip>
      Enter **Account ID**, **Client ID**, and **Client Secret** in the connector form, then click **Save & test connection**.
    </Tip>

    <Tip>
      **Rate Limits:** {platform_1} enforces rate limits of **{limit_0}**.

      Parable handles rate limiting automatically with exponential backoff, but initial syncs of large datasets may take longer due to these limits.
    </Tip>

    ## Troubleshooting

    | Error                      | Meaning               | Solution                          |
    | -------------------------- | --------------------- | --------------------------------- |
    | `124 Invalid access token` | Token expired/invalid | Regenerate access token           |
    | `200 Permission denied`    | Missing scope         | Add required scope and reactivate |
    | `1001 User not found`      | User doesn't exist    | Verify user email/ID              |
    | `429 Rate limit exceeded`  | Too many requests     | Implement backoff                 |

    <Accordion title="Common Issues">
      ### App not returning data

      Ensure the app is **activated** and all required scopes are added. Changes to scopes require reactivation.

      ### Can't see certain users

      Server-to-Server OAuth apps have access to all users in the account. If users are missing, they may be in a different Zoom account.
    </Accordion>

    ## Additional Resources

    <CardGroup cols={2}>
      <Card title="Zoom REST API" icon="book" href="https://developers.zoom.us/docs/api/">
        Official API documentation
      </Card>

      <Card title="S2S OAuth Guide" icon="key" href="https://developers.zoom.us/docs/internal-apps/s2s-oauth/">
        Server-to-Server OAuth guide
      </Card>
    </CardGroup>
  </Tab>
</Tabs>
