Skip to main content
RapidDev - Software Development Agency
bubble-integrationsBubble API Connector

Time Doctor

Connect Bubble to Time Doctor v2 by storing your OAuth 2.0 client credentials as Private App Constants, then running the token exchange inside a Backend Workflow so the client secret never reaches the browser. Use the resulting Bearer token to pull per-user worklogs and team activity data into a Repeating Group dashboard. This integration requires a paid Time Doctor plan and a paid Bubble plan for Backend Workflows.

What you'll learn

  • How to obtain Time Doctor v2 OAuth client credentials and where to find your company ID
  • How to store credentials as Private App Constants in Bubble
  • How to build a Backend Workflow that exchanges credentials for a Bearer token and caches it
  • How to configure API Connector calls for worklogs and team member lists
  • How to bind Time Doctor data to a Repeating Group dashboard with user and date filters
  • How to handle token expiry gracefully with a validity-check workflow
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate20 min read2–3 hoursProductivityLast updated July 2026RapidDev Engineering Team
TL;DR

Connect Bubble to Time Doctor v2 by storing your OAuth 2.0 client credentials as Private App Constants, then running the token exchange inside a Backend Workflow so the client secret never reaches the browser. Use the resulting Bearer token to pull per-user worklogs and team activity data into a Repeating Group dashboard. This integration requires a paid Time Doctor plan and a paid Bubble plan for Backend Workflows.

Quick facts about this guide
FactValue
ToolTime Doctor
CategoryProductivity
MethodBubble API Connector
DifficultyIntermediate
Time required2–3 hours
Last updatedJuly 2026

Build a Team Productivity Dashboard Without Leaving Bubble

Time Doctor v2 is the current API version for new integrations — the older v1.1 API (webapi.timedoctor.com) is a separate system with a different auth model and is not recommended for new builds. The v2 API lives at https://api2.timedoctor.com/api/1.0 and requires OAuth 2.0 client credentials: a Client ID and a Client Secret that together unlock a time-limited Bearer token.

In Bubble, the challenge is keeping the Client Secret out of the browser. Bubble's API Connector runs all calls from Bubble's servers, so a Private-flagged header is never sent to the frontend — but the OAuth token exchange itself must be orchestrated in a Backend Workflow that holds the secret and performs the POST to /oauth/v2/token. The resulting access_token is then stored in a Bubble Data Type with an expiry timestamp so subsequent API calls reuse it rather than minting a fresh one every time.

Once authenticated, the primary endpoints are GET /{companyId}/worklogs (daily time entries per user and project) and GET /{companyId}/users (team member list for filter dropdowns). Together they power a per-user, per-project time dashboard that gives founders and managers real visibility without exporting CSVs from Time Doctor.

Important upfront: Time Doctor API credentials are not self-service — you must contact Time Doctor support or use their integrations portal to register an OAuth application. Budget extra lead time for credential approval. Additionally, Backend Workflows are only available on paid Bubble plans (Starter and above) — this integration is not viable on the Free plan.

Integration method

Bubble API Connector

OAuth 2.0 Bearer token obtained via a Backend Workflow (client secret stays Private), then used in API Connector calls to Time Doctor v2 endpoints.

Prerequisites

  • A paid Time Doctor account (Basic plan or higher) — API access is not available on the free tier
  • Time Doctor OAuth client credentials (Client ID and Client Secret) obtained through the Time Doctor integrations portal or support
  • Your Time Doctor company ID — found as the number in your dashboard URL (https://2.timedoctor.com/{companyId})
  • A paid Bubble plan (Starter or higher) — Backend Workflows required for OAuth token exchange are not available on the Free plan
  • The API Connector plugin installed in your Bubble app (Plugins → Add plugins → search 'API Connector' by Bubble)

Step-by-step guide

1

Obtain Time Doctor v2 Credentials and Note Your Company ID

Before writing a single workflow in Bubble, you need two things from Time Doctor: OAuth credentials and your company ID. The company ID is visible immediately — log in at https://2.timedoctor.com and look at the URL after the domain. The number that appears (e.g., https://2.timedoctor.com/123456/dashboard) is your company ID. Copy it somewhere safe. For OAuth credentials, Time Doctor does not offer self-service API key generation in the standard account dashboard. You need to either submit a request through the Time Doctor integrations portal or contact their support team explaining that you are building a custom integration. This process can take several business days — start this step well before your build deadline. When Time Doctor confirms your OAuth application, you will receive a Client ID (a public identifier) and a Client Secret (treat this like a password — never share it or put it in client-side code). Keep both values in a secure place; you will enter them into Bubble as App Constants in the next step. Verify that your Time Doctor account is on v2 — the v2 dashboard URL is 2.timedoctor.com. The older v1.1 interface is at timedoctor.com with a different URL structure. If you see a different domain pattern, contact Time Doctor support to confirm which API version your account uses, because v1.1 and v2 have entirely separate auth systems and mixing credentials between them produces 401 errors with no version-mismatch explanation.

Pro tip: Save your company ID and credentials in a password manager now. You will need them in multiple places during setup and it is easy to lose track of which numeric ID is which.

Expected result: You have your Time Doctor company ID, Client ID, and Client Secret ready to enter into Bubble. Your Time Doctor account confirms it uses the v2 API at 2.timedoctor.com.

2

Store Credentials as Bubble App Constants

In Bubble, sensitive values like OAuth secrets should be stored as App Constants rather than hardcoded into workflow expressions. App Constants let you reference a value by name across all workflows without exposing the literal string in the visual editor. To add App Constants, click the Settings icon in the left sidebar, then go to the App data tab. Scroll down to find the App Constants section and click 'Add a constant'. Create three constants: 1. Name: TD_CLIENT_ID — Value: paste your Time Doctor Client ID — leave Private unchecked (Client IDs are not secret) 2. Name: TD_CLIENT_SECRET — Value: paste your Client Secret — tick the Private checkbox (this hides the value in the editor and excludes it from client-side exposure) 3. Name: TD_COMPANY_ID — Value: paste your numeric company ID — leave Private unchecked The Private checkbox on TD_CLIENT_SECRET is important: it prevents the value from appearing in Bubble's debugger output and ensures it is only accessible in server-side contexts (Backend Workflows and API Connector calls with Private headers). Never paste the client secret directly into a text expression visible in the workflow editor — use the App Constant reference instead. Once all three constants are saved, click back to the main editor. In the next step you will build the Backend Workflow that uses these constants to mint an OAuth token.

Pro tip: If you ever need to rotate credentials (Time Doctor can expire or revoke secrets), updating the App Constant in one place automatically propagates the new value to every workflow that references it — no hunting through individual actions.

Expected result: Three App Constants appear in your Bubble app settings: TD_CLIENT_ID, TD_CLIENT_SECRET (Private), and TD_COMPANY_ID. The client secret value is masked in the editor.

3

Build the OAuth Token-Exchange Backend Workflow and Cache the Token

Backend Workflows in Bubble run entirely on Bubble's servers and can safely hold Private App Constants. You will build a workflow that (a) POSTs to Time Doctor's token endpoint to get a fresh access token, (b) stores the token and its expiry time in a Bubble Data Type, and (c) can be called from any other workflow that needs a valid token. First, create a Data Type to cache the token. Go to the Data tab → Data types → Add a type → name it 'TD_TokenCache'. Add these fields: access_token (text), expires_at (date). You will use a single record in this type as a rolling cache. Next, go to Backend Workflows (Settings → API → check 'This app exposes a Workflow API', then click 'Backend workflows' in the left sidebar). Create a new API Workflow named 'refresh_td_token'. Inside this workflow, add an 'API Connector call' action and configure it to POST to the Time Doctor token endpoint. Since you are inside a Backend Workflow, you can reference the Private App Constant safely. In the API Connector, create a new API group named 'Time Doctor OAuth'. Add one call named 'Get Token' with the following configuration: - Method: POST - URL: https://api2.timedoctor.com/oauth/v2/token - Body type: Form data (application/x-www-form-urlencoded) - Body parameters: - grant_type = client_credentials - client_id = [App Constant TD_CLIENT_ID] - client_secret = [App Constant TD_CLIENT_SECRET] — mark this parameter Private Initialize this call by clicking 'Initialize call' — Bubble needs a real successful response to detect the response fields. Use your actual credentials; you should see access_token appear in the detected fields. Back in the Backend Workflow, after the token call, add a 'Make changes to a Thing' step: find or create the TD_TokenCache record, set access_token = result of Get Token's access_token, and set expires_at = Current date/time + (the token TTL in seconds — check the expires_in field from the response, typically 3600 seconds = 1 hour). This cached record is what all other workflows will read before making a Time Doctor API call. Before calling any Time Doctor endpoint, add a condition check at the start of every downstream workflow: if TD_TokenCache's expires_at is in the past (or the record does not exist), trigger 'refresh_td_token' first; otherwise use the cached access_token directly. This avoids unnecessary token-mint round-trips on every page load.

time-doctor-oauth-token-call.json
1{
2 "method": "POST",
3 "url": "https://api2.timedoctor.com/oauth/v2/token",
4 "headers": {
5 "Content-Type": "application/x-www-form-urlencoded"
6 },
7 "body": {
8 "grant_type": "client_credentials",
9 "client_id": "<App Constant TD_CLIENT_ID>",
10 "client_secret": "<App Constant TD_CLIENT_SECRET — Private>"
11 },
12 "expected_response": {
13 "access_token": "eyJhbGciOi...",
14 "token_type": "Bearer",
15 "expires_in": 3600
16 }
17}

Pro tip: Note: Backend Workflows require a paid Bubble plan (Starter or above). If you are on the Free plan, the Backend Workflows option will not appear in Settings → API. Upgrade before attempting this step.

Expected result: The 'Get Token' API Connector call initializes successfully and shows access_token, token_type, and expires_in in the detected fields. The refresh_td_token Backend Workflow runs without errors and creates or updates a TD_TokenCache record with a valid token and future expiry timestamp.

4

Configure API Connector Calls for Worklogs and Team Members

With the token-exchange workflow in place, you can now build the actual data calls. In the API Connector (Plugins tab → API Connector → add calls to your 'Time Doctor OAuth' group or create a new group named 'Time Doctor Data'), configure the following two calls: **Call 1: Get Worklogs** - Name: Get Worklogs - Method: GET - URL: https://api2.timedoctor.com/api/1.0/[App Constant TD_COMPANY_ID]/worklogs - Headers: Authorization = Bearer [value from TD_TokenCache's access_token] — mark Private - Query parameters: - start_date = <dynamic> (format: YYYY-MM-DD) - end_date = <dynamic> - user_id = <dynamic> (optional; omit to get all users) - Use as: Data - Initialize: Click 'Initialize call' with a real date range that has tracked hours — use today's date minus 7 days as start_date. Bubble will detect the response fields including user_id, task_id, project_id, and worklog values. **Call 2: Get Team Members** - Name: Get Users - Method: GET - URL: https://api2.timedoctor.com/api/1.0/[App Constant TD_COMPANY_ID]/users - Headers: Authorization = Bearer [same cached token] — mark Private - Use as: Data - Initialize: Click 'Initialize call'; Bubble will detect id, name, email, and role fields. For both calls, the Authorization header value must be constructed dynamically as 'Bearer ' + TD_TokenCache's access_token. In Bubble's API Connector, use the dynamic value picker to concatenate the prefix with the cached token value. Mark the Authorization header Private on both calls. After initializing both calls, create a 'TD_Worklog' Data Type with fields matching the detected worklog response fields (user_id as text, project_id as text, task_id as text, hours as number, date as date). This Data Type lets you optionally persist worklogs locally for faster repeated loads rather than fetching from Time Doctor on every page visit.

time-doctor-data-calls.json
1{
2 "Get_Worklogs": {
3 "method": "GET",
4 "url": "https://api2.timedoctor.com/api/1.0/{companyId}/worklogs",
5 "headers": {
6 "Authorization": "Bearer <cached access_token — Private>"
7 },
8 "query_params": {
9 "start_date": "<dynamic YYYY-MM-DD>",
10 "end_date": "<dynamic YYYY-MM-DD>",
11 "user_id": "<dynamic — optional>"
12 }
13 },
14 "Get_Users": {
15 "method": "GET",
16 "url": "https://api2.timedoctor.com/api/1.0/{companyId}/users",
17 "headers": {
18 "Authorization": "Bearer <cached access_token — Private>"
19 }
20 }
21}

Pro tip: Always initialize API Connector calls with real data that returns a non-empty response. An empty array response during initialization means Bubble cannot detect field types, and you will need to re-initialize when the call returns actual data.

Expected result: Both API Connector calls initialize successfully. Get Worklogs shows detected fields including user_id, project_id, and hours values. Get Users shows detected fields including id, name, and email. Both calls are set to 'Use as Data' and have Private Authorization headers.

5

Build the Dashboard Page with User and Date Filters

Now build the actual productivity dashboard that team members and managers will use. Create a new Bubble page named 'productivity-dashboard'. The page needs three UI components: a date range picker, a user filter dropdown, and a Repeating Group for worklog results. Date range: Add two Date/Time Picker elements — one for 'Start Date' and one for 'End Date'. Connect them to two Custom States on the page (type: date) named 'filter_start' and 'filter_end'. Set default values to 7 days ago and today respectively. User filter: Add a Dropdown element. Set its Choices source to 'Get Users' API Connector call. Set the option label to the 'name' field and the value to the 'id' field. Add a 'All Users' placeholder option. Connect the selected value to a Custom State named 'filter_user_id'. Worklog Repeating Group: Add a Repeating Group with Type of Content = 'Get Worklogs result'. In the Data source field, select 'Get Worklogs' from the API Connector. Pass the dynamic parameters: - start_date = Custom State filter_start (formatted as YYYY-MM-DD) - end_date = Custom State filter_end (formatted as YYYY-MM-DD) - user_id = Custom State filter_user_id (leave blank if the 'All Users' option is selected) Inside each Repeating Group cell, add text elements displaying: current cell's user_id (or look up the name from the Get Users call), project_id, task name, date, and hours. For a visual summary, add a Text element that calculates total hours by doing a search across all visible cells — use a 'Calculate formula' expression summing the hours field. Token validity check: Add a 'Page is loaded' workflow. The first action checks if TD_TokenCache's expires_at is less than Current date/time (or if no record exists). If true, run the 'refresh_td_token' Backend Workflow as a schedule (immediate), then set a wait for the token to be ready before the Repeating Group loads. This ensures the dashboard always opens with a valid token. RapidDev's team has built hundreds of Bubble apps with integrations like this, including multi-user productivity dashboards that combine Time Doctor data with Bubble's native database for deeper reporting — get a free scoping call at rapidevelopers.com/contact.

Pro tip: If you see 'This action will not run' in Bubble's debugger when the Repeating Group tries to load, check the token cache first — an expired or missing TD_TokenCache record is the most common cause of data-load failures on this page.

Expected result: The productivity dashboard page loads with real Time Doctor worklog data in the Repeating Group. Changing the date range or selecting a specific user from the dropdown updates the Repeating Group in real time. Total hours calculate correctly in the summary text element.

6

Test the Full Flow and Validate in Bubble's Debugger

Before considering the integration production-ready, run a full end-to-end test in Bubble's debugger to catch any silent failures. Open the Bubble debugger (Preview the app → click 'Debug mode' in the top bar). Navigate to the productivity dashboard page. Watch the Step-by-step panel as the 'Page is loaded' workflow runs: 1. Confirm the token validity check evaluates correctly — if TD_TokenCache is empty, the refresh_td_token Backend Workflow should trigger and complete before data loads. 2. Watch the Get Worklogs API Connector call fire. Check the returned data: does it contain the expected fields? Are the user_id, project_id, and hours values populated? 3. If the call returns an empty response, check your date range — use a range that covers days with real tracked hours (not weekends or days before Time Doctor was set up). 4. Test the user filter: select a specific team member from the dropdown and confirm only that user's worklogs appear. 5. Check the Logs tab (Settings → Logs → Workflow logs) to see the API calls that fired, their WU cost, and any error responses. Time Doctor API calls that return 401 after setup typically mean the cached token has expired or was stored incorrectly. For rate limiting: Time Doctor does not publish a specific rate limit. Avoid triggering the Get Worklogs call on every keystroke in the date pickers — use a 'Search' button to trigger the Repeating Group refresh instead of live-updating on date-picker change, to minimize unnecessary API calls and WU consumption. Once the test is clean in debugger mode, deploy the app (Deploy → Live) and verify the dashboard works in the live environment. Backend Workflows behave identically in test and live, but always confirm with a real deployment before sharing with the team.

Pro tip: Use Bubble's 'Schedule API workflow' action with a 0-second delay to chain the token refresh before the data load in the same workflow chain — this keeps the sequence predictable without relying on page-load timing.

Expected result: The debugger shows the full workflow chain completing successfully: token validity check → token refresh (if needed) → Get Worklogs call returns 200 with data → Repeating Group populates with real Time Doctor entries. No 401 or 403 errors appear in the Logs tab. The live deployment shows the same results as the debug preview.

Common use cases

Team Productivity Dashboard

Surface per-user and per-project worklog data from Time Doctor inside a custom Bubble dashboard. Founders and managers can see who worked on what, filter by date range, and compare team member hours without logging into Time Doctor directly.

Bubble Prompt

Show me a Bubble Repeating Group that displays each team member's total hours worked this week, grouped by project, using data from Time Doctor's /worklogs endpoint.

Copy this prompt to try it in Bubble

Client Billing Hours Report

Pull Time Doctor worklogs filtered by project into a Bubble client portal so clients can see billable hours in real time. Combine with a Bubble workflow that calculates total hours × hourly rate and displays an estimated invoice amount.

Bubble Prompt

How do I filter Time Doctor worklogs by a specific project ID and display total hours in a Bubble client-facing page with a billable amount calculation?

Copy this prompt to try it in Bubble

Daily Activity Alerts

Use a Bubble recurring Backend Workflow (scheduled daily) to fetch the previous day's worklogs, check if any team member logged below a minimum hour threshold, and trigger a SendGrid email alert to the manager.

Bubble Prompt

Set up a Bubble Backend Workflow that runs each morning, checks Time Doctor worklogs from yesterday, and sends an alert email if any user logged fewer than 4 hours.

Copy this prompt to try it in Bubble

Troubleshooting

API Connector 'Get Token' call returns 401 Unauthorized on initialization

Cause: The Client ID or Client Secret is entered incorrectly, or you are using v1.1 credentials against the v2 token endpoint. The v2 token URL is https://api2.timedoctor.com/oauth/v2/token — using the v1.1 base URL (webapi.timedoctor.com) returns 401 with no version explanation.

Solution: Double-check that your Client ID and Client Secret exactly match what Time Doctor provided. Confirm you are posting to https://api2.timedoctor.com/oauth/v2/token (note api2 subdomain). If you received credentials from Time Doctor support before specifying v2, contact them again to confirm the credentials are for the v2 API.

All worklogs endpoints return 404 after successful token exchange

Cause: The company ID in the URL path is wrong. The v2 company ID is the number in your 2.timedoctor.com dashboard URL — it is different from any user ID or account number in Time Doctor's settings panels.

Solution: Log in at https://2.timedoctor.com and look at the browser URL immediately after login. The number that appears after the domain (e.g., /123456/dashboard) is your correct company ID. Update the TD_COMPANY_ID App Constant with this value. Using any other numeric identifier (user ID, billing account number) will return 404 on every endpoint.

'There was an issue setting up your call' appears when initializing the Get Worklogs API Connector call

Cause: The initialization request failed because either the Bearer token used during setup was already expired, the date range used for initialization has no tracked hours, or the companyId in the URL path was wrong during the initialize step.

Solution: Re-initialize the call: click the 'Initialize call' button in the API Connector editor. Use today's date minus 2 days as start_date and today as end_date — choose a date range you know has real tracked hours. Ensure the Authorization header value is set to 'Bearer ' + a valid, non-expired access_token at the time of initialization. If the token expires between setup steps, re-run the refresh_td_token Backend Workflow to get a fresh one first.

Backend Workflows option does not appear in Settings → API

Cause: Backend Workflows are unavailable on Bubble's Free plan. The 'This app exposes a Workflow API' toggle and the Backend Workflows section in the left sidebar only appear on paid plans (Starter and above).

Solution: Upgrade your Bubble app to at least the Starter plan ($32/month as of early 2026). The Time Doctor integration is not viable on the Free plan because the OAuth token exchange requires a Backend Workflow to keep the Client Secret server-side. Without it, the secret would need to appear in a client-side workflow, which is a security risk.

Worklog data disappears after approximately one hour and the dashboard shows an empty Repeating Group

Cause: The cached access token in TD_TokenCache has expired (Time Doctor tokens have a limited TTL, typically around 3600 seconds). The token validity check on page load is not running, or is not triggering the refresh_td_token Backend Workflow correctly when the token is expired.

Solution: Review the 'Page is loaded' workflow. Confirm the condition checking TD_TokenCache's expires_at < Current date/time is correctly structured. If the condition evaluates to 'yes', the next action must be a 'Schedule API workflow' (immediate) call to refresh_td_token — and subsequent actions must be triggered AFTER that workflow completes, not in parallel. Add a small Pause action (0.5 seconds) after scheduling the refresh to let the token update before the Get Worklogs call fires.

Best practices

  • Always store the Time Doctor Client Secret as a Private App Constant — never paste it directly into a workflow expression or a non-Private API Connector field. Bubble's debugger logs Private-flagged values as [hidden], protecting the secret from accidental exposure in debug sessions shared with teammates.
  • Cache the OAuth access token in a dedicated TD_TokenCache Data Type with an expires_at field. Check validity before every API call and refresh only when expired — this reduces WU consumption, eliminates extra latency on every dashboard load, and prevents hitting the token endpoint unnecessarily.
  • Use a 'Search' button to trigger the Repeating Group refresh instead of live-updating on every date-picker change. Time Doctor does not publish a rate limit, but firing a new API call on every calendar click creates unnecessary server load, inflates WU usage, and can produce confusing interleaved responses.
  • Add privacy rules on any Bubble Data Type that stores Time Doctor data (Bubble Data tab → Privacy → Add a rule). Productivity data — hours worked, project breakdown, activity summaries — is sensitive. Make sure only the authenticated manager role can search or view these records; never leave the 'Everyone can see all fields' default in place.
  • Distinguish between v1.1 and v2 clearly in your Bubble app constants and workflow names. If your team ever needs to reference old v1.1 documentation, the naming confusion between the two API systems is a common source of credential mix-up that produces opaque 401 errors.
  • Test with real tracked data — not an empty time period. The API Connector's Initialize call requires a non-empty response to detect field types correctly. Always use a start_date and end_date range that you know contains logged hours for at least one team member.
  • Plan for token rotation from the start: wrap all Time Doctor API calls in a reusable Backend Workflow sub-step that checks token validity before proceeding. This makes future maintenance easier if Time Doctor changes token TTL or credential requirements.
  • Monitor WU usage in the Bubble Logs tab during development. Each Backend Workflow run, API Connector call, and Data operation consumes WU. A dashboard that re-fetches all worklogs on every filter interaction can accumulate significant WU costs at scale — consider caching results locally in a Bubble Data Type and refreshing on a schedule rather than on every user interaction.

Alternatives

Frequently asked questions

Do I need a paid Time Doctor plan to use the API?

Yes. Time Doctor API access is only available on paid plans (Basic and above, starting around $7/user/month — verify current pricing at timedoctor.com/pricing). Free accounts do not have access to API credentials. Additionally, the OAuth credential registration process requires contacting Time Doctor support or their integrations portal, so budget extra time for approval before you can start building.

Why do I need a Backend Workflow for this integration? Can I just use the API Connector directly?

The Time Doctor OAuth exchange requires a Client Secret that must never reach the browser. Bubble's API Connector runs calls server-side, so Private-flagged headers are safe — but the token exchange itself needs to happen in a Backend Workflow so the Private App Constant (Client Secret) can be referenced in a server-only context. Without a Backend Workflow, there is no safe way to perform the OAuth exchange without exposing the secret in a client-side workflow expression.

What is the difference between Time Doctor v1.1 and v2?

v1.1 (webapi.timedoctor.com) is the older API with a simpler authentication model but is not recommended for new integrations. v2 (api2.timedoctor.com/api/1.0) is the current standard with OAuth 2.0 client credentials and is the version covered in this tutorial. The two systems are entirely separate — v1.1 tokens do not work on v2 endpoints and vice versa. If you are starting a new Bubble integration, always use v2.

How do I find my Time Doctor company ID?

Log in at https://2.timedoctor.com. Look at the browser URL immediately after the page loads — the company ID is the number that appears directly after the domain (for example, https://2.timedoctor.com/123456/dashboard means your company ID is 123456). This number must be stored as an App Constant in Bubble and included in every API endpoint URL as the path segment after /api/1.0/.

Can I track individual employee screenshots or app usage through the Bubble integration?

No. Time Doctor's active monitoring features — screenshots, app and URL tracking, idle time detection — run exclusively in the Time Doctor desktop and mobile client applications. These features are not exposed via the API. The API only surfaces worklog data (hours logged, project/task assignments, timestamps). You can display who worked on what and for how long, but not the screenshot or activity-monitoring data.

What happens to my Bubble app if the Time Doctor token expires while a user is actively using the dashboard?

If the cached access token expires mid-session and your page-load token check does not re-run, the API Connector calls will return 401 errors and the Repeating Group will show empty or fail to update. To handle this gracefully, add a 'Refresh' button that manually triggers the token validity check and the Get Worklogs call. You can also add a recurring Backend Workflow (Schedule API Workflow every 50 minutes) that proactively refreshes the token before it expires, so active users never hit a stale-token state.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Bubble integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.