Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Exist

Scalekit connector
Open markdown

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

Tools
15
What they doRead · write · destructive
10 · 5 · 010 read5 write0 destructive
Users sign in with
OAuth app
Your own Exist 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 Exist connection

    In AgentKit > Connections, create an Exist 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

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

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

  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 = 'exist'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Exist:', 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: 'exist_attribute_templates_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
  • exist_attribute_templates_listList the attribute templates Exist supports (its built-in attribute types, such as steps, sleep or mood).Read-only

    List Attribute Templates

    List the attribute templates Exist supports (its built-in attribute types, such as steps, sleep or mood). Returns a paged object with count, next, previous and results; each template has name, label, group, priority, value_type and value_type_description. Use exist_attribute_templates_list to find a template name to pass to exist_attributes_create or exist_attributes_acquire. Use exist_attributes_list for the attributes this user actually has.

    Inputs

    groupsstring
    Comma-separated attribute group names to filter by, such as activity, productivity, mood, sleep, workouts, events, finance, food, health, location, media, social, weather, symptoms, medication or custom. Example: activity,workouts.
    include_low_priorityboolean
    Set to true to also return low-priority attributes (priority 10 or higher). Leave empty to leave them out.
    limitinteger
    Number of results per page. Leave empty to use Exist's default page size. Example: 50.
    pageinteger
    Page number of results to return, starting at 1. Leave empty for the first page. Use the 'next' URL's page number from the previous response to fetch the next page. Example: 2.
  • exist_attribute_values_getGet the daily values of one Exist attribute, newest first.Read-only

    Get Attribute Values

    Get the daily values of one Exist attribute, newest first. Returns a paged object with count, next, previous and results, where each result is a {date, value} pair (date in YYYY-MM-DD, value typed by the attribute's value_type, null for days without data). Use exist_attribute_values_get to read the history of a single attribute, paging back with page and date_max. Use exist_attributes_with_values_list for recent values across many attributes. Results are limited to the connection's read scopes.

    Inputs

    attributestringrequired
    Name of the attribute to read values for (its 'name' field from exist_attributes_list, not the label). Example: steps.
    date_maxstring
    Most recent date to include, inclusive, in YYYY-MM-DD format (the user's local date). Example: 2026-05-16.
    limitinteger
    Number of results per page, at most 100. Leave empty to use Exist's default page size. Example: 50.
    pageinteger
    Page number of results to return, starting at 1. Leave empty for the first page. Use the 'next' URL's page number from the previous response to fetch the next page. Example: 2.
  • exist_attributes_listList the user's Exist attributes (the things they track, such as steps, mood or sleep), without values.Read-only

    List Attributes

    List the user's Exist attributes (the things they track, such as steps, mood or sleep), without values. Returns a paged object with count, next, previous and results; each attribute has name, label, template, group, service (the app that owns it), active, priority, manual, value_type, value_type_description and available_services. Use exist_attributes_list to find attribute names, value types and owners. Use exist_attributes_with_values_list for recent values, exist_attribute_values_get for one attribute's history, and exist_owned_attributes_list for only the attributes this app owns. Results are limited to the connection's read scopes.

    Inputs

    attributesstring
    Comma-separated attribute names to filter by. Use the 'name' field from exist_attributes_list, not the label. Example: steps,mood,sleep.
    exclude_customboolean
    Set to true to return only templated attributes and leave out custom ones (such as custom tags). Leave empty to include both.
    groupsstring
    Comma-separated attribute group names to filter by, such as activity, productivity, mood, sleep, workouts, events, finance, food, health, location, media, social, weather, symptoms, medication or custom. Example: activity,workouts.
    include_inactiveboolean
    Set to true to also return inactive attributes (active = false), which Exist usually hides. Leave empty to return active attributes only.
    include_low_priorityboolean
    Set to true to also return low-priority attributes (priority 10 or higher). Leave empty to leave them out.
    limitinteger
    Number of results per page. Leave empty to use Exist's default page size. Example: 50.
    manualboolean
    Set to true to return only manually tracked attributes, or false to leave them out. Leave empty to include both.
    ownedboolean
    Set to true to return only attributes owned by this app (client). Leave empty to return all of the user's attributes.
    pageinteger
    Page number of results to return, starting at 1. Leave empty for the first page. Use the 'next' URL's page number from the previous response to fetch the next page. Example: 2.
  • exist_attributes_with_values_listList the user's Exist attributes together with their most recent daily values.Read-only

    List Attributes With Values

    List the user's Exist attributes together with their most recent daily values. Returns a paged object with count, next, previous and results; each attribute has name, label, template, group, service, priority, manual, active, value_type, value_type_description and a values array of {date, value} pairs, newest first, with null for days without data. Use exist_attributes_with_values_list for a dashboard of recent days (up to 31) across many attributes. Use exist_attribute_values_get for the full history of one attribute. Results are limited to the connection's read scopes.

    Inputs

    attributesstring
    Comma-separated attribute names to filter by. Use the 'name' field from exist_attributes_list, not the label. Example: steps,mood,sleep.
    date_maxstring
    Most recent date to include, inclusive, in YYYY-MM-DD format (the user's local date). Example: 2026-05-16.
    daysinteger
    Number of days of values to include for each attribute, from 1 to 31. Exist's default is 1 (today only). Example: 7.
    groupsstring
    Comma-separated attribute group names to filter by, such as activity, productivity, mood, sleep, workouts, events, finance, food, health, location, media, social, weather, symptoms, medication or custom. Example: activity,workouts.
    limitinteger
    Number of results per page. Leave empty to use Exist's default page size. Example: 50.
    manualboolean
    Set to true to return only manually tracked attributes. Leave empty to include all.
    pageinteger
    Page number of results to return, starting at 1. Leave empty for the first page. Use the 'next' URL's page number from the previous response to fetch the next page. Example: 2.
    templatesstring
    Comma-separated attribute template names to filter by, such as steps,sleep,mood. Use this instead of attributes when you only care about templated attributes; use one or the other, not both.
  • exist_averages_listList the user's weekly Exist averages (actually medians over the last 60 days) per attribute, broken down by day of the week.Read-only

    List Averages

    List the user's weekly Exist averages (actually medians over the last 60 days) per attribute, broken down by day of the week. Returns a paged object with count, next, previous and results; each result has attribute, date, overall, and monday through sunday. Use exist_averages_list for the user's typical values and goals. Set include_historical with attributes to get past weeks' averages for trend lines. Results are limited to the connection's read scopes.

    Inputs

    attributesstring
    Comma-separated attribute names to filter by. Use the 'name' field from exist_attributes_list, not the label. Example: steps,mood,sleep.
    date_maxstring
    Most recent date to include, inclusive, in YYYY-MM-DD format (the user's local date). Example: 2026-05-16.
    date_minstring
    Oldest date to include, inclusive, in YYYY-MM-DD format (the user's local date). Example: 2026-04-01.
    groupsstring
    Comma-separated attribute group names to filter by, such as activity, productivity, mood, sleep, workouts, events, finance, food, health, location, media, social, weather, symptoms, medication or custom. Example: activity,workouts.
    include_historicalboolean
    Set to true to return past weekly averages too, newest first, instead of only the latest set. Best combined with attributes to limit it to one attribute.
    limitinteger
    Number of results per page. Leave empty to use Exist's default page size. Example: 50.
    pageinteger
    Page number of results to return, starting at 1. Leave empty for the first page. Use the 'next' URL's page number from the previous response to fetch the next page. Example: 2.
  • exist_correlation_getGet the correlation Exist found between two specific attributes, if there is one.Read-only

    Get Correlation

    Get the correlation Exist found between two specific attributes, if there is one. Returns a single correlation object with attribute, attribute2, value (from -1 to 1), p, percentage, stars, second_person, strength_description, stars_description and rating; Exist returns HTTP 404 when it has found no correlation for the pair. Use exist_correlation_get to answer whether two things are related, such as sleep and workouts. Use exist_correlations_list to browse all correlations. At least one of the two attributes must be in the connection's read scopes.

    Inputs

    attributestringrequired
    Name of the first attribute (its 'name' field, not the label). Order doesn't matter. Example: sleep.
    attribute2stringrequired
    Name of the second attribute (its 'name' field, not the label). Order doesn't matter. Example: workouts_min.
  • exist_correlations_listList the correlations Exist found between the user's attributes in the last week (for example "you sleep more when you go to bed earlier").Read-only

    List Correlations

    List the correlations Exist found between the user's attributes in the last week (for example "you sleep more when you go to bed earlier"). Returns a paged object with count, next, previous and results; each correlation has attribute, attribute2, value (from -1 to 1), p, percentage, stars (confidence, 5 is highest), second_person (a plain-English sentence), strength_description, stars_description, period, offset, date and rating. Use exist_correlations_list to browse relationships, filtered by attribute, strength or confidence. Use exist_correlation_get to check one specific pair. Correlations are generated weekly on Sundays; they show relationships, not causes.

    Inputs

    attributestring
    Attribute name to limit correlations to (its 'name' field, not the label). Example: sleep.
    confidentinteger
    Set to 1 to return only correlations with five-star confidence. Leave empty to return all.one of 1
    limitinteger
    Number of results per page, at most 100. Leave empty to use Exist's default page size. Example: 50.
    pageinteger
    Page number of results to return, starting at 1. Leave empty for the first page. Use the 'next' URL's page number from the previous response to fetch the next page. Example: 2.
    stronginteger
    Set to 1 to return only correlations above Exist's strength threshold. Leave empty to return all.one of 1
  • exist_insights_listList the insights Exist generated from the user's data, such as a record step count or a monthly summary.Read-only

    List Insights

    List the insights Exist generated from the user's data, such as a record step count or a monthly summary. Returns a paged object with count, next, previous and results; each insight has created, target_date, type (name, period, priority and the related attribute), html and text. Use exist_insights_list to surface notable events in the user's data, filtered by date or priority. Use exist_correlations_list for relationships between attributes. Results are limited to the connection's read scopes.

    Inputs

    date_maxstring
    Most recent date to include, inclusive, in YYYY-MM-DD format (the user's local date). Example: 2026-05-16.
    date_minstring
    Oldest date to include, inclusive, in YYYY-MM-DD format (the user's local date). Example: 2026-04-01.
    limitinteger
    Number of results per page, at most 100. Leave empty to use Exist's default page size. Example: 50.
    pageinteger
    Page number of results to return, starting at 1. Leave empty for the first page. Use the 'next' URL's page number from the previous response to fetch the next page. Example: 2.
    priorityinteger
    Insight priority to filter by: 1 today (real time), 2 day level, 3 week level, 4 month level. Leave empty for all.one of 1234