Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Reply.io

Scalekit connector
Open markdown

The Reply.io connector lets your AI agent act in each user's Reply.io account. Each user connects their own Reply.io access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 112 tools.

Tools
112
What they doRead · write · destructive
54 · 46 · 1254 read46 write12 destructive
Users sign in with

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 Reply.io connection

    In AgentKit > Connections, create a Reply.io connection. The name you give it is the connection_name your code passes. See Configure connections.

  4. 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 = 'reply'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Reply.io:', 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: 'reply_whoami',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user opens the link once and enters their Reply.io credentials there. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • reply_filter_contact_accountsGet a narrower set of accounts than plain listing.Read-only

    Filter accounts

    Get a narrower set of accounts than plain listing. Search by name or domain, scope to one list, and add up to 20 conditions. Returns a page of contact account records (items, hasMore); each has id, ownerUserId, name, description, domainName, domainSecondary. Use reply_filter_contact_accounts for filtered company queries. Use reply_get_contact_accounts to browse.

    Inputs

    filtersarray
    Advanced filter conditions. Optional.
    listIdinteger
    Filter by contact list ID. Optional.
    searchstring
    Search term to filter accounts by name. Optional.
    skipinteger
    Number of items to skip. Optional.
    sortBystring
    Field name to sort by. Optional.
    sortDirectionstring
    Sort direction. Optional.one of ascdesc
    topinteger
    Maximum number of items to return (default 25, max 1000). Optional.
  • reply_filter_contactsUse this endpoint when you need a filtered, sorted page of contacts that a plain email or LinkedIn lookup cannot express.Read-only

    Filter contacts

    Use this endpoint when you need a filtered, sorted page of contacts that a plain email or LinkedIn lookup cannot express. Combine field rules (property, condition, value) with optional scoping by list, sequence, or sequence step, a free-text search term, and a sort order. Returns a page of contact records (items, hasMore); each has id, email, domain, firstName, lastName, phone. Use reply_filter_contacts for property-based queries. Use reply_get_contacts for plain browsing or an exact email lookup.

    Inputs

    listIdinteger
    Filter by contact list ID. Optional.
    rulesarray
    rules value. Optional.
    searchTermstring
    Free-text search term. Optional.
    sequenceIdinteger
    Filter by sequence ID. Optional.
    sequenceStepIdinteger
    Filter by sequence step ID. Optional.
    skipinteger
    Number of contacts to skip. Optional.
    sortBystring
    Field to sort by. Optional.
    sortDirectionstring
    Sort direction (asc or desc). Optional.
    topinteger
    Maximum number of contacts to return (default 25, max 1000). Optional.
  • reply_filter_inbox_threadsUse this endpoint when you need the inbox threads matching specific criteria — a search term, channel, owner, sequence, email or LinkedIn account, contact, category, date range, source, or only those flagged with meeting intent.Read-only

    Filter inbox threads

    Use this endpoint when you need the inbox threads matching specific criteria — a search term, channel, owner, sequence, email or LinkedIn account, contact, category, date range, source, or only those flagged with meeting intent. Every filter field is optional, and an empty body matches the same set as the plain thread listing. Returns a page of inbox thread list item records (items, hasMore); each has id, channel, isRead, subject, bodyPreview, lastActivityDate. Use reply_filter_inbox_threads for filtered inbox queries. Use reply_list_inbox_threads to browse.

    Inputs

    categoryIdsarray
    category Ids value. Optional.
    channelsarray
    Restrict to threads on the given channels. unknown is rejected by validation. Optional.
    contactIdsarray
    contact Ids value. Optional.
    emailAccountIdsarray
    email Account Ids value. Optional.
    fromstring
    from value. Optional.
    linkedInAccountIdsarray
    linked In Account Ids value. Optional.
    onlyWithMeetingIntentboolean
    only With Meeting Intent value. Optional.
    ownerUserIdinteger
    Restrict to threads owned by the given user. The target must be a member of the caller's team; otherwise the request fails with 400 inboxThread.invalidInput. Optional.
    searchstring
    Free-text search across subject, body preview, and contact identifiers. Optional.
    sequenceIdsarray
    sequence Ids value. Optional.
    skipinteger
    skip value. Optional.
    sourcestring
    Predefined source bucket: - inbox — all threads with at least one inbound message. - sent — threads where the latest activity is outbound. - unread — only unread threads. - aiDraft — threads with a pending AI-drafted reply. Optional.one of inboxsentunreadaiDraft
    tostring
    Upper bound on lastActivityDate. Must be strictly after from when both are supplied. Optional.
    topinteger
    top value. Optional.
  • reply_filter_tasksNarrow the task list by due date, type, status, or overdue.Read-only

    Filter tasks

    Narrow the task list by due date, type, status, or overdue. Every field is optional, so an empty object returns them all. Returns a page of tasklistitemresponse records (items, hasMore); each has id, taskType, status, linkedInTaskType, assignedUserId, contact. Use reply_filter_tasks for filtered task queries. Use reply_get_tasks to browse.

    Inputs

    assignedUserIdinteger
    Filter tasks assigned to a specific user. Only returns results if the caller has permission to view that user's tasks. Optional.
    contactIdinteger
    Filter tasks for a specific contact. Optional.
    fromstring
    Filter tasks with StartAt >= this value. Defaults to 2000-01-01 if omitted. Optional.
    overdueboolean
    Filter by overdue status. true = overdue only, false = not overdue only, null = all. Optional.
    sequenceIdsarray
    Filter tasks belonging to these sequences. Optional.
    sequenceStepIdsarray
    Filter tasks belonging to these sequence steps. Optional.
    skipinteger
    Number of items to skip. Optional.
    statusstring
    Filter by task status. Must be a valid enum value. Possible values: new, finished, cancelled, archived, sequenceDetached. Optional.one of newfinishedcancelledarchivedsequenceDetached
    taskTypestring
    Filter by task type. Must be a valid enum value. Possible values: toDo, call, meeting, linkedIn, manualEmail, sms, whatsApp. Optional.one of toDocallmeetinglinkedInmanualEmailsmswhatsApp
    timeZoneIdsarray
    Filter by prospect timezone (e.g. "America/New_York"). Optional.
    tostring
    Filter tasks with StartAt <= this value. Must be after from when both are provided. Defaults to now + 1 year if omitted. Optional.
    topinteger
    Maximum number of items to return (default 25, max 1000). Optional.
  • reply_get_background_job_by_idCheck how far a background job has got.Read-only

    Get a background job

    Check how far a background job has got. Poll until status settles on Done, Failed, Cancelled, or Expired, and read progress. Returns background job with jobId, status, category, startedAt, finishedAt, progress, jsonData, jsonDataResult.

    Inputs

    jobIdstringrequired
    Background job identifier (must be a non-empty GUID) (UUID).
  • reply_get_background_jobsSee the asynchronous work you've started and where each job stands, running and finished alike.Read-only

    List background jobs

    See the asynchronous work you've started and where each job stands, running and finished alike. Paged with top and skip. Returns a page of background job list item records (items, hasMore); each has jobId, status, category, startedAt, finishedAt, progress.

    Inputs

    categorystring
    Category suffix to filter by — prefix-matched against r2/bg-jobs/{suffix}. For example, pass email-validation to list only email-validation jobs. Omit to list all of the user's background jobs. Optional.
    skipinteger
    Number of items to skip. Optional.
    topinteger
    Maximum number of items to return (default 100, max 200). Optional.
  • reply_get_billing_detailsSee the plan you are on and how many active contacts the current billing month has consumed, day by day.Read-only

    Get billing details

    See the plan you are on and how many active contacts the current billing month has consumed, day by day. A contact counts once per pool per month, on the day it is first touched. Returns billing details with generatedAt, timeZone, billingScope, subscription, activeContacts.

    Inputs

    This tool takes no inputs.

  • reply_get_channel_efficiency_overviewCompare channels for a period: contacts touched, touches across email, SMS, calls, tasks, and LinkedIn, replies, and meetings.Read-only

    Get channel efficiency overview

    Compare channels for a period: contacts touched, touches across email, SMS, calls, tasks, and LinkedIn, replies, and meetings. Returns channel efficiency overview response with totalPeopleContacted, totalTouches, replies, repliesPercentage, meetingsBooked, meetingsBookedPercentage.

    Inputs

    filtersobjectrequired
    Base filters shared across all reporting endpoints.