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

# Resend OAuth 2.0 connector profile – StackOne setup guide

> Set up the OAuth 2.0 connector profile for Resend in StackOne. One-time admin setup required before your users can link Resend accounts via Hub.

<Panel>
  <div className="not-prose guides-scope-selector" data-guides-scope-selector data-guide-actions-json="[{&#x22;id&#x22;:&#x22;resend_create_api_key&#x22;,&#x22;label&#x22;:&#x22;Create API Key&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_list_api_keys&#x22;,&#x22;label&#x22;:&#x22;List API Keys&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_update_api_key&#x22;,&#x22;label&#x22;:&#x22;Update API Key&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_delete_api_key&#x22;,&#x22;label&#x22;:&#x22;Delete API Key&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_create_broadcast&#x22;,&#x22;label&#x22;:&#x22;Create Broadcast&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_send_broadcast&#x22;,&#x22;label&#x22;:&#x22;Send Broadcast&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_retrieve_broadcast&#x22;,&#x22;label&#x22;:&#x22;Retrieve Broadcast&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_list_broadcasts&#x22;,&#x22;label&#x22;:&#x22;List Broadcasts&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_update_broadcast&#x22;,&#x22;label&#x22;:&#x22;Update Broadcast&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_delete_broadcast&#x22;,&#x22;label&#x22;:&#x22;Delete Broadcast&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_create_contact&#x22;,&#x22;label&#x22;:&#x22;Create Contact&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_retrieve_contact&#x22;,&#x22;label&#x22;:&#x22;Retrieve Contact&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_list_contacts&#x22;,&#x22;label&#x22;:&#x22;List Contacts&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_update_contact&#x22;,&#x22;label&#x22;:&#x22;Update Contact&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_delete_contact&#x22;,&#x22;label&#x22;:&#x22;Delete Contact&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_create_domain&#x22;,&#x22;label&#x22;:&#x22;Create Domain&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_verify_domain&#x22;,&#x22;label&#x22;:&#x22;Verify Domain&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_retrieve_domain&#x22;,&#x22;label&#x22;:&#x22;Retrieve Domain&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_list_domains&#x22;,&#x22;label&#x22;:&#x22;List Domains&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_update_domain&#x22;,&#x22;label&#x22;:&#x22;Update Domain&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_delete_domain&#x22;,&#x22;label&#x22;:&#x22;Delete Domain&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_send_email&#x22;,&#x22;label&#x22;:&#x22;Send Email&#x22;,&#x22;scopes&#x22;:[&#x22;emails:send&#x22;]},{&#x22;id&#x22;:&#x22;resend_send_batch_emails&#x22;,&#x22;label&#x22;:&#x22;Send Batch Emails&#x22;,&#x22;scopes&#x22;:[&#x22;emails:send&#x22;]},{&#x22;id&#x22;:&#x22;resend_retrieve_email&#x22;,&#x22;label&#x22;:&#x22;Retrieve Email&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_list_emails&#x22;,&#x22;label&#x22;:&#x22;List Emails&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_update_email&#x22;,&#x22;label&#x22;:&#x22;Update Email&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_cancel_email&#x22;,&#x22;label&#x22;:&#x22;Cancel Email&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_create_segment&#x22;,&#x22;label&#x22;:&#x22;Create Segment&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_retrieve_segment&#x22;,&#x22;label&#x22;:&#x22;Retrieve Segment&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_list_segments&#x22;,&#x22;label&#x22;:&#x22;List Segments&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_update_segment&#x22;,&#x22;label&#x22;:&#x22;Update Segment&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_delete_segment&#x22;,&#x22;label&#x22;:&#x22;Delete Segment&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_add_suppression&#x22;,&#x22;label&#x22;:&#x22;Add Suppression&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_retrieve_suppression&#x22;,&#x22;label&#x22;:&#x22;Retrieve Suppression&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_list_suppressions&#x22;,&#x22;label&#x22;:&#x22;List Suppressions&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_remove_suppression&#x22;,&#x22;label&#x22;:&#x22;Remove Suppression&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_add_batch_suppressions&#x22;,&#x22;label&#x22;:&#x22;Add Batch Suppressions&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]},{&#x22;id&#x22;:&#x22;resend_remove_batch_suppressions&#x22;,&#x22;label&#x22;:&#x22;Remove Batch Suppressions&#x22;,&#x22;scopes&#x22;:[&#x22;full_access&#x22;]}]">
    <div className="guides-scope-selector__title">Select Actions to adjust the guide</div>
    <div className="guides-scope-selector__muted guides-scope-selector__subtitle">Some actions may require additional configuration in the provider to be accessible. Choose the actions you need and the guide will be updated.</div>

    <div className="guides-scope-selector__toolbar">
      <input type="text" placeholder="Search actions..." className="guides-scope-selector__input guides-scope-selector__search" data-guide-action-search />

      <button type="button" className="guides-scope-selector__quick-btn" data-guide-select-all>Select all</button>
      <button type="button" className="guides-scope-selector__quick-btn" data-guide-clear>Clear</button>
    </div>

    <div className="guides-scope-selector__list">
      <div className="guides-scope-selector__list-header">
        <div className="guides-scope-selector__list-header-spacer" />

        <div className="guides-scope-selector__list-header-action">Action</div>
        <div className="guides-scope-selector__list-header-scopes">Scope(s)</div>
      </div>

      <div className="guides-scope-selector__muted guides-scope-selector__status" data-guide-loading>Loading actions...</div>
      <div className="guides-scope-selector__muted guides-scope-selector__status" data-guide-no-results hidden>No actions match your search.</div>
    </div>

    <div className="guides-scope-selector__url-section">
      <div className="guides-scope-selector__muted guides-scope-selector__label">Dynamic Guide URL</div>

      <div className="guides-scope-selector__url-row">
        <input type="text" readOnly className="guides-scope-selector__input guides-scope-selector__url-input" data-guide-url />

        <button type="button" className="guides-scope-selector__copy-btn guides-scope-selector__copy-btn--end" data-guide-copy-url>Copy URL</button>
      </div>

      <div className="guides-scope-selector__scopes-section">
        <div className="guides-scope-selector__muted guides-scope-selector__label">Scopes Selected</div>

        <div className="guides-scope-selector__scopes-row">
          <pre className="guides-scope-selector__input guides-scope-selector__scopes-output" role="textbox" aria-readonly="true" tabIndex={0} data-guide-scopes-output />

          <div className="guides-scope-selector__muted guides-scope-selector__side-controls">
            <div className="guides-scope-selector__side-label">Separator</div>

            <select className="guides-scope-selector__input guides-scope-selector__delimiter" data-guide-scope-delimiter>
              <option value="space">Space</option>
              <option value="comma">Comma</option>
              <option value="semicolon">Semicolon</option>
              <option value="pipe">Pipe</option>
              <option value="newline">Newline</option>
            </select>

            <button type="button" className="guides-scope-selector__copy-btn" data-guide-copy-scopes>Copy scopes</button>
          </div>
        </div>
      </div>
    </div>
  </div>
</Panel>

<section data-guide-section data-guide-scopes="">
  <h2>Register an OAuth client</h2>

  <p>Resend does not yet have a dashboard screen for creating OAuth clients, so you register one by calling the OAuth registration endpoint, as described in the <a href="https://resend.com/docs/guides/building-a-resend-oauth-client" target="_blank" rel="noopener noreferrer">Building a Resend OAuth client guide</a>. Registration returns the Client ID and Client Secret you enter in StackOne.</p>

  <Steps>
    <Step title="Register your OAuth client">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Send a registration request to `POST https://api.resend.com/oauth/register`. Register a confidential client so that Resend issues a Client Secret, and include StackOne's callback URL as a redirect URI.</p>

        <ul>
          <li>Set `client_name` to `StackOne Integration`.</li>
          <li>Add StackOne's callback URL to `redirect_uris`: `https://api.stackone.com/connect/oauth2/resend/callback`</li>
          <li>Include both `authorization_code` and `refresh_token` in `grant_types`. The `refresh_token` grant is required so StackOne can refresh the access token once it expires.</li>
          <li>Set `token_endpoint_auth_method` to `client_secret_post`, because StackOne sends the client credentials in the request body when exchanging and refreshing tokens. Resend still issues a Client Secret for the confidential client.</li>
          <li>The Client Secret is returned only once at registration and cannot be retrieved later — store it securely for use later.</li>
        </ul>
      </div>
    </Step>

    <Step title="Choose the scopes">
      <div data-guide-step data-guide-scopes="emails:send,full_access" data-guide-display-scopes-list="emails:send,full_access">
        <div className="connector-guide-actions-badge" data-guide-actions-badge data-guide-actions-badge-scopes="emails:send,full_access">
          <span>Enables actions: </span><span data-guide-actions-badge-labels>Add Batch Suppressions, Add Suppression, Cancel Email, Create API Key, Create Broadcast, Create Contact, Create Domain, Create Segment, Delete API Key, Delete Broadcast, Delete Contact, Delete Domain, Delete Segment, List API Keys, List Broadcasts, List Contacts, List Domains, List Emails, List Segments, List Suppressions, Remove Batch Suppressions, Remove Suppression, Retrieve Broadcast, Retrieve Contact, Retrieve Domain, Retrieve Email, Retrieve Segment, Retrieve Suppression, Send Batch Emails, Send Broadcast, Send Email, Update API Key, Update Broadcast, Update Contact, Update Domain, Update Email, Update Segment, Verify Domain</span>
        </div>

        <p>Request the scopes this integration needs. Use full access for all API routes, or sending access to only send email.</p>

        <div className="connector-guide-display-scopes" data-guide-display-scopes>
          <div className="connector-guide-scopes-container">
            <ul className="not-prose connector-guide-scopes-list">
              <li data-guide-display-scope="emails:send">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy emails:send" title="Copy scope" data-copy="emails:send">
                  <span className="connector-guide-scope-copy__label">emails:send</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>

              <li data-guide-display-scope="full_access">
                <button type="button" className="connector-guide-scope-copy" aria-label="Copy full_access" title="Copy scope" data-copy="full_access">
                  <span className="connector-guide-scope-copy__label">full\_access</span>
                  <span className="connector-guide-scope-copy__icon" aria-hidden="true">⧉</span>
                </button>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </Step>

    <Step title="Enter the credentials in StackOne">
      <div data-guide-step data-guide-scopes="" data-guide-display-scopes-list="">
        <p>Paste the returned `client_id` into the <strong>Client ID</strong> field and the `client_secret` into the <strong>Client Secret</strong> field in the StackOne Connector profile. In the <strong>Scopes</strong> field, enter the space-separated scopes you registered, such as `full_access`.</p>
      </div>
    </Step>
  </Steps>
</section>

## Creating the StackOne Connector Profile

To create the Connector Profile in StackOne for <strong>Resend</strong>:

<Steps>
  <Step title="Navigate to Connector Profiles">
    Login to StackOne and navigate to [Connector Profiles](https://app.stackone.com/connector_profiles)
  </Step>

  <Step title="Create New Connector Profile">
    <ul>
      <li>Click <strong>+ Connector Profile</strong></li>
      <li>Search for and select <strong>Resend</strong></li>
      <li>Select <strong>Type</strong> as <strong>OAuth 2.0</strong></li>

      <li>
        Fill out the fields using details retrieved from your provider:

        <ul className="connector-guide-field-list">
          <li><strong>Client ID</strong></li>
          <li><strong>Client Secret</strong></li>
          <li><strong>Scopes</strong> (Optional)</li>
        </ul>
      </li>

      <li>(Optional) Select <strong>Actions</strong> to be enabled for this Connector Profile</li>
      <li>Click <strong>Create profile</strong></li>
    </ul>
  </Step>
</Steps>

Congratulations! The new Connector Profile will now show up in your project ready to be used. You can now continue to <a href="/connect/managing-connectors/linking-accounts">Link Accounts</a> for <strong>Resend</strong>.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.