Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Nooks

Scalekit connector
Open markdown

The Nooks connector lets your AI agent act in each user's Nooks account. Each user signs in to Nooks once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 20 tools.

Tools
20
What they doRead · write · destructive
16 · 4 · 016 read4 write0 destructive
Users sign in with
OAuth app
Your own Nooks app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Nooks connection

    In AgentKit > Connections, create a Nooks connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Nooks connections use your own OAuth app. Register one with Nooks and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Nooks connection.

    Console steps with screenshots

    Each user signs in with their own Nooks account through OAuth 2.0. You set up one OAuth client from Nooks on your Scalekit connection. Scalekit then refreshes each user’s one-hour Nooks access token for you.

    1. Create a connection in Scalekit

      • In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Find Nooks and click Create.

      • Copy the Redirect URI. It looks like: https://<SCALEKIT_ENVIRONMENT_URL>/sso/v1/oauth/<CONNECTION_ID>/callback

      Keep this tab open — you’ll return to it in step 3.

    2. Get OAuth client credentials from Nooks

      Ask your Nooks account team or Nooks support for an OAuth client for the Nooks API, and send them:

      • the Redirect URI you copied from Scalekit
      • the scopes your agent needs, from the table below
      ScopeRequired for
      users:readCurrent user and user lookups (required)
      sequences:readListing and reading sequences
      sequence-states:readListing sequence enrollments
      sequence-states:writeEnrolling prospects in sequences
      prospects:readListing and reading prospects
      notes:writeCreating CRM notes on prospects
      accounts:readListing and reading accounts
      calls:readListing and reading calls
      call-dispositions:readListing call dispositions
      emails:readListing and reading emails
      tasks:readListing and reading tasks
      tasks:writeCreating and completing tasks

      Nooks returns a Client ID and Client Secret. Store the secret securely.

    3. Add credentials in Scalekit

      • Return to Scalekit dashboard → AgentKit > Connections and open the connection you created in step 1.

      • Enter the following:

        • Client ID — from Nooks
        • Client Secret — from Nooks
        • Permissions — the same scopes Nooks enabled for your client
      • Click Save.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'nooks'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Nooks:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'nooks_accounts_list',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • nooks_account_getGet one Nooks account (company) by its ID.Read-only

    Get Account

    Get one Nooks account (company) by its ID. Returns the account's name, domain, CRM IDs, owner, and optionally its CRM custom fields. Use nooks_account_get when you have the ID. Use nooks_accounts_list to search by name, domain, or CRM ID.

    Inputs

    idstringrequired
    Nooks ID (UUID) of the account. Get it from nooks_accounts_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    include_crm_custom_fieldsboolean
    Set to true to add each record's CRM custom fields as crmCustomFields, keyed by CRM field name (for example {"hs_lead_status": "OPEN"}).
  • nooks_accounts_listList CRM-sourced accounts (companies) in Nooks, filtered by IDs, exact name, domain, CRM ID, or update time.Read-only

    List Accounts

    List CRM-sourced accounts (companies) in Nooks, filtered by IDs, exact name, domain, CRM ID, or update time. Returns up to 100 accounts per page with name, domain, CRM IDs, and owner, plus a links.next cursor. Use nooks_accounts_list to find an account. Use nooks_account_get when you already have the account ID.

    Inputs

    filter_crm_idstring
    Only return the account with this ID in your CRM. Example: 0015g00000XyZabAAB.
    filter_domainstring
    Only return the account with this exact domain. Example: acme.com.
    filter_idsstring
    Only return accounts with these Nooks IDs, comma-separated. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    filter_namestring
    Only return the account with this exact name. Example: Acme Inc.
    include_crm_custom_fieldsboolean
    Set to true to add each record's CRM custom fields as crmCustomFields, keyed by CRM field name (for example {"hs_lead_status": "OPEN"}).
    page_afterstring
    Cursor for the next page. Pass the page[after] value from the links.next URL of the previous response, unchanged. Leave empty for the first page.
    page_sizeinteger
    Number of accounts to return per page (1 to 100). Defaults to 50.
    updated_afterstring
    Only return accounts updated at or after this time. Use an ISO 8601 date-time, for example 2024-01-01T00:00:00Z.
    updated_beforestring
    Only return accounts updated before this time. Use an ISO 8601 date-time, for example 2024-12-31T23:59:59Z.
  • nooks_call_dispositions_listList the call dispositions (call outcomes) configured in the Nooks workspace.Read-only

    List Call Dispositions

    List the call dispositions (call outcomes) configured in the Nooks workspace. Returns up to 100 dispositions per page with id and name, plus a links.next cursor. Use nooks_call_dispositions_list to get disposition IDs for filtering nooks_calls_list.

    Inputs

    filter_namestring
    Only return the disposition with this exact name. Example: Meeting Booked.
    page_afterstring
    Cursor for the next page. Pass the page[after] value from the links.next URL of the previous response, unchanged. Leave empty for the first page.
    page_sizeinteger
    Number of dispositions to return per page (1 to 100). Defaults to 50.
  • nooks_call_getGet one Nooks call by its ID.Read-only

    Get Call

    Get one Nooks call by its ID. Returns the call's time, duration, direction, disposition, notes, prospect, and owner, optionally with those related records embedded. Use nooks_call_get when you have the call ID. Use nooks_calls_list to find calls.

    Inputs

    idstringrequired
    Nooks ID (UUID) of the call. Get it from nooks_calls_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    includestring
    Related records to embed in the response instead of returning only their IDs (max 3). Pass one or more of these values, comma-separated: prospect, sequence, sequenceStep, callDisposition, owner. Example: prospect,sequence.
  • nooks_calls_listList calls made in Nooks, filtered by call time, ingestion time, prospect, account, disposition, or caller.Read-only

    List Calls

    List calls made in Nooks, filtered by call time, ingestion time, prospect, account, disposition, or caller. Returns up to 100 calls per page with time, duration, direction, disposition, prospect, and owner, plus a links.next cursor. Use nooks_calls_list to find calls. Use nooks_call_get for one call by ID.

    Inputs

    account_idstring
    Only return calls linked to this account. Use the account's Nooks ID (UUID) from nooks_accounts_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    created_afterstring
    Only return calls ingested into Nooks at or after this time. Use an ISO 8601 date-time, for example 2024-01-01T00:00:00Z.
    created_beforestring
    Only return calls ingested into Nooks at or before this time. Use an ISO 8601 date-time, for example 2024-12-31T23:59:59Z.
    disposition_idstring
    Only return calls logged with this disposition. Use the disposition's Nooks ID (UUID) from nooks_call_dispositions_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    filter_idsstring
    Only return calls with these Nooks IDs, comma-separated. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    includestring
    Related records to embed in the response instead of returning only their IDs (max 3). Pass one or more of these values, comma-separated: prospect, sequence, sequenceStep, callDisposition, owner. Example: prospect,sequence.
    owner_idstring
    Only return calls placed by this user. Use the user's Nooks ID from nooks_users_list or nooks_me_get. Example: Xk3pQ9rT2vLmN8sA1bC4dE5fG6h7.
    page_afterstring
    Cursor for the next page. Pass the page[after] value from the links.next URL of the previous response, unchanged. Leave empty for the first page.
    page_sizeinteger
    Number of calls to return per page (1 to 100). Defaults to 50.
    prospect_idstring
    Only return calls with this prospect. Use the prospect's Nooks ID (UUID) from nooks_prospects_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    time_afterstring
    Only return calls that happened at or after this time. Use an ISO 8601 date-time, for example 2024-01-01T00:00:00Z.
    time_beforestring
    Only return calls that happened at or before this time. Use an ISO 8601 date-time, for example 2024-12-31T23:59:59Z.
    updated_afterstring
    Only return calls updated at or after this time. Use an ISO 8601 date-time, for example 2024-01-01T00:00:00Z.
    updated_beforestring
    Only return calls updated before this time. Use an ISO 8601 date-time, for example 2024-12-31T23:59:59Z.
  • nooks_email_getGet one Nooks email by its ID, including unsent drafts and queued sends.Read-only

    Get Email

    Get one Nooks email by its ID, including unsent drafts and queued sends. Returns the email's subject, body, status, recipients, and related prospect, task, and sequence. Use nooks_email_get when you have the email ID. Use nooks_emails_list to find sent emails.

    Inputs

    idstringrequired
    Nooks ID (UUID) of the email. Get it from nooks_emails_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    includestring
    Related records to embed in the response instead of returning only their IDs (max 3). Pass one or more of these values, comma-separated: prospect, task, sequence, sequenceStep. Example: prospect,task.
  • nooks_emails_listList sent and in-flight emails in Nooks, filtered by IDs, prospect, task, account, status, or update time.Read-only

    List Emails

    List sent and in-flight emails in Nooks, filtered by IDs, prospect, task, account, status, or update time. Returns up to 100 emails per page with subject, status, recipients, and related prospect and sequence, plus a links.next cursor. Unsent drafts are not listed. Use nooks_emails_list to review outreach. Use nooks_email_get for one email, including drafts.

    Inputs

    account_idstring
    Only return emails to prospects at this account. Use the account's Nooks ID (UUID) from nooks_accounts_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    filter_idsstring
    Only return emails with these Nooks IDs, comma-separated. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    includestring
    Related records to embed in the response instead of returning only their IDs (max 3). Pass one or more of these values, comma-separated: prospect, task, sequence, sequenceStep. Example: prospect,task.
    page_afterstring
    Cursor for the next page. Pass the page[after] value from the links.next URL of the previous response, unchanged. Leave empty for the first page.
    page_sizeinteger
    Number of emails to return per page (1 to 100). Defaults to 50.
    prospect_idstring
    Only return emails to this prospect. Use the prospect's Nooks ID (UUID) from nooks_prospects_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    statusstring
    Only return emails with these delivery statuses. Pass one or more of these values, comma-separated: draft, in_progress, sent, failed. Example: sent.
    task_idstring
    Only return emails sent for this sequence task. Use the task's Nooks ID (UUID) from nooks_tasks_list. Example: 3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f.
    updated_afterstring
    Only return emails updated at or after this time. Use an ISO 8601 date-time, for example 2024-01-01T00:00:00Z.
    updated_beforestring
    Only return emails updated before this time. Use an ISO 8601 date-time, for example 2024-12-31T23:59:59Z.
  • nooks_me_getGet the Nooks workspace and user behind the current credential.Read-only

    Get Current User

    Get the Nooks workspace and user behind the current credential. Returns workspaceId, userId, email, name, and, for OAuth tokens, the client ID and granted scopes. Use nooks_me_get to check the connection and to get your own user ID for owner fields.

    Inputs

    This tool takes no inputs.

Workflows

List today’s open call tasks
const tasks = await actions.executeTool({
connector: 'nooks',
identifier: 'user_123',
toolName: 'nooks_tasks_list',
toolInput: {
action: 'call',
status: 'ready',
due_before: '2024-06-01T23:59:59Z',
include: 'prospect',
},
});
console.log(tasks);
Enroll a prospect in a sequence

Find the prospect with nooks_prospects_list (for example by filter_emails), the sequence with nooks_sequences_list, and your user ID with nooks_me_get.

const enrollment = await actions.executeTool({
connector: 'nooks',
identifier: 'user_123',
toolName: 'nooks_sequence_state_create',
toolInput: {
prospect_id: '3f2b8c1e-4d5a-4b6c-9e7f-1a2b3c4d5e6f',
sequence_id: '9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d',
owner_id: 'Xk3pQ9rT2vLmN8sA1bC4dE5fG6h7',
},
});
console.log(enrollment);
Page through results

List tools return up to 100 records per page. When links.next is present in the response, pass its page[after] value as page_after to get the next page.

const nextPage = await actions.executeTool({
connector: 'nooks',
identifier: 'user_123',
toolName: 'nooks_calls_list',
toolInput: { page_size: 100, page_after: 'eyJpZCI6IjNmMmI4YzFlIn0' },
});