Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Timely

Scalekit connector
Open markdown

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

Tools
53
What they doRead · write · destructive
31 · 16 · 631 read16 write6 destructive
Users sign in with
OAuth app
Your own Timely 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 Timely connection

    In AgentKit > Connections, create a Timely 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

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

    Then enter the app's Client ID and Client Secret on the Timely 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 = 'timely'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Timely:', 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: 'timely_list_accounts',
    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
  • timely_filter_reportsRun a filtered Timely report grouped by client, user, tag, day, or team.Read-only

    Filter Reports

    Run a filtered Timely report grouped by client, user, tag, day, or team. Returns aggregated totals, or individual entries when scope is events. Use timely_get_report_totals for a simple per-client summary.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
    billedstring
    Filter by billed status: true or false.one of truefalse
    client_idsstring
    Comma-separated client IDs to include. Example: 4521,4522.
    group_bystring
    Comma-separated grouping keys from clients, users, labels, days, teams. Example: users,days.
    label_idsstring
    Comma-separated tag IDs to include. Example: 301,302.
    project_idsstring
    Comma-separated project IDs to include. Example: 98765,98766.
    scopestring
    Result scope: totals for aggregated data or events for individual entries.one of totalsevents
    sincestring
    Start date of the report period as YYYY-MM-DD. Example: 2026-10-01.
    state_idsstring
    Comma-separated time entry state IDs to include. Example: 12,13.
    team_idsstring
    Comma-separated team IDs to include. Example: 7001,7002.
    untilstring
    End date of the report period as YYYY-MM-DD. Example: 2026-10-31.
    user_idsstring
    Comma-separated user IDs to include. Example: 5001,5002.
  • timely_get_clientRetrieve one client in a Timely account by ID.Read-only

    Get Client

    Retrieve one client in a Timely account by ID. Returns the client's name, color, active status, and external references. Use timely_list_clients to find the client ID.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
    idintegerrequired
    ID of the client. Get it from timely_list_clients. Example: 4521.
  • timely_get_complianceGet per-user time-logging compliance metrics for a Timely account over a date window.Read-only

    Get Compliance

    Get per-user time-logging compliance metrics for a Timely account over a date window. Returns per-user and per-team compliance figures and the window used. Use for timesheet follow-up reviews.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
    from_datestring
    Inclusive start date as YYYY-MM-DD; defaults to 30 days before the end date. Example: 2026-09-15.
    to_datestring
    Inclusive end date as YYYY-MM-DD; defaults to today. Example: 2026-10-14.
  • timely_get_current_userRetrieve the connected user's own profile in a Timely account.Read-only

    Get Current User

    Retrieve the connected user's own profile in a Timely account. Returns the user's id, name, email, role, and time zone. Use to learn the user_id for logging time as yourself.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
  • timely_get_insightsGet billable utilisation and where time went for a Timely account over a date window.Read-only

    Get Insights

    Get billable utilisation and where time went for a Timely account over a date window. Returns logged, billable, non-billable and capacity minutes plus breakdowns by team or person, tag, and project. The team and organisation views need the matching Timely permissions.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
    from_datestring
    Inclusive start date as YYYY-MM-DD; defaults to 30 days before the end date. Example: 2026-09-15.
    groupingstring
    How to group the utilisation card: team or person.one of teamperson
    project_scopestring
    Narrow the by-project rows: all, billable or non_billable.one of allbillablenon_billable
    tag_scopestring
    Narrow the by-tag rows: all, billable or non_billable.one of allbillablenon_billable
    to_datestring
    Inclusive end date as YYYY-MM-DD; defaults to today. Example: 2026-10-14.
    viewstring
    Whose hours to report on: mine, team or organisation. Team and organisation need permissions.one of mineteamorganisation
  • timely_get_linked_work_itemRetrieve one linked work item in a Timely account by ID.Read-only

    Get Linked Work Item

    Retrieve one linked work item in a Timely account by ID. Returns the item's title, external code, url, project, assignee, and dates. Use timely_list_linked_work_items to find the item ID.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
    idintegerrequired
    ID of the linked work item. Get it from timely_list_linked_work_items. Example: 9901.
  • timely_get_projectRetrieve one project in a Timely account by ID.Read-only

    Get Project

    Retrieve one project in a Timely account by ID. Returns the project's name, client, color, rates, budget, assigned users, and status. Use timely_list_projects to find the project ID.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
    idintegerrequired
    ID of the project. Get it from timely_list_projects. Example: 98765.
  • timely_get_report_totalsGet aggregated time and cost totals for a Timely account over a date range.Read-only

    Get Report Totals

    Get aggregated time and cost totals for a Timely account over a date range. Returns duration, cost, billed and unbilled totals per client with nested projects. Use timely_filter_reports for grouping, tag, team or state filters.

    Inputs

    account_idintegerrequired
    Timely account (workspace) ID that owns the data. Get it from timely_list_accounts. Example: 1234567.
    client_idsstring
    Comma-separated client IDs to include. Example: 4521,4522.
    project_idsstring
    Comma-separated project IDs to include. Example: 98765,98766.
    sincestring
    Start date of the report period as YYYY-MM-DD. Example: 2026-10-01.
    untilstring
    End date of the report period as YYYY-MM-DD. Example: 2026-10-31.
    user_idsstring
    Comma-separated user IDs to include. Example: 5001,5002.