Skip to content
Back to guide
Developer API

Building with TheProfitPath's API

Use scoped API keys to sync journal data and retrieve performance, calendar, news, collaboration, and Market Monitor data without sharing a browser session.

Base URL
/api
Auth header
X-API-Key
Endpoints
177

Authentication

Use X-API-Key for your own scripts, or Authorization: Bearer for an OAuth access token approved by a user. Send exactly one credential, always in a header. Developer access never uses another person’s browser cookie.

Base URL

Use https://theprofitpath.app/api as the canonical same-origin API base.

Key management

Settings → Developer has five tabs: API keys, OAuth apps, Connected apps, Usage, and API reference. Create key asks for a name, read-only or read/write access, the resources the key may reach, an expiry of 30, 90, or 365 days (90 by default), and optionally an organization. Up to 20 keys may be active. The raw secret is shown once, next to ready-to-run cURL, JavaScript, and Python snippets; only a hash is stored. Rename a key from its ⋯ menu at any time. A key that expires within 14 days shows Replace key, which starts a new key with the same name, access, and organization: switch your integration to it, then revoke the old key. Existing keys without expiry remain valid until revoked.

Scopes

Read-only keys can fetch journal, collaboration, notification, calendar, news, and Market Monitor data. Read/write keys can also perform documented mutations. Every endpoint declares its required resource scope.

Usage

The Usage tab charts the requests your API keys made each day over the last 7, 30, or 90 days, split into succeeded, refused (4xx), and failed (5xx), with the success rate, average response time, rate-limited requests, your busiest endpoints, and a breakdown by key. Each key also shows its request count in the key list, and Connected apps shows when each app last used your account. The figures come from the request records we already keep for 90 days; they never include request bodies, query strings, or credentials.

Trying requests

The API reference tab lists every endpoint with its method, path, required scope, and a cURL example, searchable and filterable by read or write. Paste an API key to send GET requests from the page and see the status, timing, and JSON response. The key stays in that browser tab, is never saved, and is sent without your sign-in cookie, exactly as your integration would send it. The page warns when the pasted key lacks the endpoint's scope. Write requests are not sent from the page; use the cURL example from your own tools.

Organizations

Organizations label and group API keys. Each key acts only as its creator and does not grant access to other organization members. Use OAuth when each person should connect their own account.

Implementation checklist

Start with read-only permissions, store server credentials in a secret manager, handle expiry and revocation, paginate every collection, and honor Retry-After. Treat record IDs as opaque strings. Private community messages, mentor data, journal text, and imported sources can be sensitive; request only the scopes your app needs.

Request example

Send the API key in the header, never in the query string.

cURL · Trades
curl https://theprofitpath.app/api/trades \
  -H "X-API-Key: tppk_your_secret_here"
cURL · Economic calendar
curl "https://theprofitpath.app/api/economic-calendar?start=2026-08-10&end=2026-08-17" \
  -H "X-API-Key: tppk_your_secret_here"
cURL · Market Monitor
curl "https://theprofitpath.app/api/market-monitor/analysis?symbol=ES&assetClass=future" \
  -H "X-API-Key: tppk_your_secret_here"

Machine-readable discovery is available at /api/capabilities and /api/openapi.json.

OAuth connections

Register an app in Settings → Developer → OAuth apps in three steps: its name, website, and description (traders see the description on the approval screen); where it runs and its exact redirect URLs; and the most access it may ask for. Server apps receive a client secret; browser and native apps use a public client. Every authorization requires S256 PKCE and explicit consent, including server apps. After registering, the page shows the client ID, the one-time client secret, an example authorization URL, and the token request.

  1. Generate a cryptographically random state (16–512 printable characters) and a PKCE verifier (43–128 characters). Store both with the pending login. Set code_challenge to the base64url SHA-256 digest of the verifier.
  2. Redirect the user to /api/oauth/authorize with response_type=code, client_id, redirect_uri, space-separated scope, state, code_challenge, and code_challenge_method=S256. HTTPS redirects must match registration exactly; HTTP localhost is allowed for development.
  3. The user signs in on TheProfitPath and allows or cancels. Verify the callback state and iss against your pending request and the discovered issuer. A cancellation returns error=access_denied.
  4. Exchange the single-use code within five minutes using POST /api/oauth/token and application/x-www-form-urlencoded. Include grant_type=authorization_code, client_id, code, the identical redirect_uri, and code_verifier. Confidential clients also send their client secret using HTTP Basic authentication or client_secret in the body; use only one client authentication method.
  5. Send the access_token as Authorization: Bearer. Tokens last up to 15 minutes. With read:me, GET /api/auth/me identifies the authorizing account. Use its stable id to associate that person with your app; email can change.
  6. Refresh with grant_type=refresh_token, refresh_token, and the same client authentication. Save the new access and refresh tokens atomically. Serialize refreshes: reusing an old refresh token revokes the entire connection. Connections expire after 30 days and require fresh consent.
cURL · Token exchange
curl https://theprofitpath.app/api/oauth/token \
  --data-urlencode "grant_type=authorization_code" \
  --data-urlencode "client_id=$CLIENT_ID" \
  --data-urlencode "client_secret=$CLIENT_SECRET" \
  --data-urlencode "code=$CODE" \
  --data-urlencode "redirect_uri=$REDIRECT_URI" \
  --data-urlencode "code_verifier=$CODE_VERIFIER"

Public clients omit client_secret. Browser requests use credentials: "omit"; CORS supports explicit developer credentials without sharing browser cookies. This is OAuth 2.0 authorization with an account identity endpoint; OpenID Connect ID tokens are not issued.

Disconnect in Connected apps, or POST /api/oauth/revoke with token and client authentication. Disabling a registered app revokes all its user connections. New consent replaces that user’s previous connection to the app. Revocation affects new requests immediately; an already-open news stream ends within 60 seconds.

Each registered app shows how many traders are connected and when the latest one connected; you never see who. From the app's ⋯ menu, Edit details and redirects changes the name, website, description, and redirect URLs: new sign-ins use them at once and existing connections stay. The app type and permissions stay as traders approved them; register a new app to change either. Rotate client secret (server apps) replaces the secret immediately: access tokens already issued keep working until they expire, but token refreshes need the new secret. Preview sign-in opens the real approval screen for your app with a fresh state and PKCE challenge; approving it connects your own account to the app, and the code it returns cannot be redeemed.

Discover endpoints and supported scopes at OAuth server metadata. Registration is managed through your signed-in Developer settings. Up to 10 active registered apps and 50 active connected apps are supported per account.

Complete exports

GET /api/trades?pagination=cursor&limit=200 returns items, hasMore, and nextCursor. Pass nextCursor as cursor on the next request and keep filters unchanged. Stop when nextCursor is null. This mode has no offset ceiling and avoids an expensive total count. Records are ordered by createdAt and then id, newest first.

JavaScript · Cursor export
let cursor;
do {
  const url = new URL("https://theprofitpath.app/api/trades");
  url.searchParams.set("pagination", "cursor");
  url.searchParams.set("limit", "200");
  if (cursor) url.searchParams.set("cursor", cursor);
  const response = await fetch(url, {
    headers: { "X-API-Key": process.env.TPP_API_KEY }
  });
  if (!response.ok) throw new Error(`Export failed: ${response.status}`);
  const page = await response.json();
  for (const trade of page.items) console.log(JSON.stringify(trade));
  cursor = page.nextCursor;
} while (cursor);

Trade responses retain journal notes, reviews, checklists, emotion phases, media links, and import-source availability. When hasImportSource is true, GET /api/trades/{id}/import-source retrieves the private original. Large sources provide revision, totalBytes, and chunkBytes: fetch each offset, decode the base64 data, join the bytes, verify SHA-256 against revision, and parse the JSON.

Default trade pagination still returns items and total, with limit 1–200 and offset 0–10,000. Cursor exports are a traversal of live data, not a snapshot: rerun to reconcile changes during export. updatedAt currently mirrors createdAt, so it cannot detect edits. Trashed trades use /trades/trash and remain restorable for 30 days.

Create trades with POST /trades and update supplied fields with PUT /trades/{id}. Use JSON numbers for numeric fields; use ISO 8601 or epoch milliseconds for times. Journal text fields accept up to 30,000 characters each. Account and strategy references must belong to the authorizing user. Consult OpenAPI for writable fields and aliases.

Updates preserve long notes and structured checklists without truncation. The images field accepts up to 12 Cloudinary HTTPS image or video URLs, each at most 2,048 characters, as an array or JSON-encoded array. Invalid or excess media returns 400 before saving.

Limits and errors

All API keys and OAuth connections for an account share 120 requests per minute across server instances. RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset describe that budget. Platform and endpoint limits also apply. JSON bodies are limited to 2 MiB. JSON responses over 1 KB are sent gzip or Brotli encoded when your client sends Accept-Encoding; most HTTP clients decode them automatically. OAuth refreshes are limited to 30 per connection per hour; reuse the access token until it approaches expiry.

  • 400: invalid input, repeated query parameters, or malformed JSON. Correct the request.
  • 401: invalid, revoked, or expired credential. Refresh an OAuth token once or reconnect; replace expired API keys.
  • 403: missing scope, an unsupported developer operation, or account, plan, or platform restrictions. Wider scopes cannot enable browser-only operations.
  • 404: missing resource or a resource you do not own. 409: conflict with current state.
  • 413: request too large. Reduce the payload. 429: wait for Retry-After, then add jitter before retrying.
  • 5xx: transient service failure (503 when the service is briefly busy, 502 or 504 when an upstream provider did not answer). Retry reads with a bounded backoff. Do not blindly retry creates or mutations: an interrupted response does not prove the write failed.

Developer-boundary errors include error, code, and requestId; keep X-Request-Id when reporting a failure. OAuth token errors follow the OAuth error and error_description format. A request rejected before the developer boundary may have a platform error format. Mutating operations do not currently offer an Idempotency-Key contract.

Supported resources

Profile identity

1 endpoints
  • GET /api/auth/meReturn the authorizing user's account profileread:me

Trades and CSV imports

16 endpoints
  • GET /api/tradesList tradesread:trades
  • GET /api/trades/{id}Get one traderead:trades
  • GET /api/trades/{id}/import-sourceRead a trade's private original import source; large archives use verified byte segmentsread:trades
  • GET /api/trades/{id}/replayGet a trade replayread:trades
  • POST /api/tradesCreate a tradewrite:trades
  • PUT /api/trades/{id}Update a tradewrite:trades
  • PATCH /api/trades/bulk-assignAssign trades in bulkwrite:trades
  • PATCH /api/trades/bulk-updateApply one change (playbook, account, account type, symbol, rating, labels) to many trades, or undo onewrite:trades
  • POST /api/trades/bulk-deleteMove multiple trades to the trashwrite:trades
  • DELETE /api/trades/{id}Move a trade to the trash (restorable for 30 days)write:trades
  • GET /api/trades/trashList trashed trades with their purge datesread:trades
  • POST /api/trades/{id}/restoreRestore a trade from the trashwrite:trades
  • POST /api/trades/trash/restoreRestore several trades from the trashwrite:trades
  • GET /api/trades/symbolsList the symbols in the journal with their trade countsread:trades
  • POST /api/csv-import/importImport trades from CSVwrite:trades
  • POST /api/csv-import/completeClose a saved CSV import review after all selected trades are syncedwrite:trades

Accounts

13 endpoints
  • GET /api/accountsList trading accountsread:accounts
  • GET /api/accounts/overviewGet the account overviewread:accounts
  • GET /api/accounts/rule-alertsList prop-rule alerts (80% / 100% of a limit, profit target)read:accounts
  • GET /api/accounts/{id}/statsGet account statisticsread:accounts
  • GET /api/accounts/{id}/transactionsList account cash-flow transactionsread:accounts
  • POST /api/accounts/{id}/transactionsCreate an account cash-flow transactionwrite:accounts
  • DELETE /api/accounts/{id}/transactions/{transactionId}Delete an account cash-flow transactionwrite:accounts
  • PUT /api/accounts/{id}/settingsUpdate account risk, target, display, and prop-firm settingswrite:accounts
  • POST /api/accounts/{id}/assign-tradesAssign selected or unassigned trades to an accountwrite:accounts
  • GET /api/accounts/{id}Get one trading accountread:accounts
  • POST /api/accountsCreate an accountwrite:accounts
  • PUT /api/accounts/{id}Update an accountwrite:accounts
  • DELETE /api/accounts/{id}Delete an accountwrite:accounts

Statistics and achievements

7 endpoints
  • GET /api/statistics/dashboardGet dashboard statisticsread:statistics
  • GET /api/statistics/summaryGet performance summary statisticsread:statistics
  • GET /api/statistics/by-symbolGroup statistics by symbolread:statistics
  • GET /api/statistics/by-periodGroup statistics by periodread:statistics
  • GET /api/statistics/equity-curveGet the equity curveread:statistics
  • GET /api/statistics/advancedGet advanced statisticsread:statistics
  • GET /api/statistics/achievement-coachGet achievement progress and coachingread:statistics

Journal

9 endpoints
  • GET /api/journalGet journal entriesread:journal
  • GET /api/journal/statsGet journal statisticsread:journal
  • GET /api/journal/calendarGet journal calendar dataread:journal
  • GET /api/journal/daysList daily journal pages (plan, review, mood) with search and date pagingread:journal
  • GET /api/journal/days/insightsCompare results on journaled days by mood, discipline and tag, with the journal streakread:journal
  • GET /api/journal/days/{date}Get one day's journal page with that day's trades and the previous reviewread:journal
  • PUT /api/journal/days/{date}Create or update a day's journal page; only the fields sent changewrite:journal
  • DELETE /api/journal/days/{date}Delete a day's journal pagewrite:journal
  • GET /api/journal/achievementsGet earned milestones with unlock dates and live standardsread:journal

Playbooks

8 endpoints
  • GET /api/strategiesList playbooks and strategiesread:strategies
  • GET /api/strategies/overviewGet playbook analytics, adherence, goals, and portfolio comparisonread:strategies
  • GET /api/strategies/{id}Get a playbook or strategyread:strategies
  • POST /api/strategiesCreate a playbook or strategywrite:strategies
  • POST /api/strategies/{id}/duplicateDuplicate a playbookwrite:strategies
  • POST /api/strategies/{id}/assign-tradesAssign existing trades to a playbookwrite:strategies
  • PUT /api/strategies/{id}Update a playbook or strategywrite:strategies
  • DELETE /api/strategies/{id}Delete a playbook or strategywrite:strategies

Goals

4 endpoints
  • GET /api/goalsList goalsread:goals
  • POST /api/goalsCreate a goalwrite:goals
  • PUT /api/goals/{id}Update a goalwrite:goals
  • DELETE /api/goals/{id}Delete a goalwrite:goals

Emotions

3 endpoints
  • GET /api/emotionsList tracked emotionsread:emotions
  • GET /api/emotions/analysisGet emotion performance analysisread:emotions
  • GET /api/emotions/coachGet emotion coachingread:emotions

Reports

5 endpoints
  • GET /api/reportsList generated reportsread:reports
  • GET /api/reports/overviewGet report availability and coverageread:reports
  • GET /api/reports/scheduleGet automatic report schedule settingsread:reports
  • GET /api/reports/{id}Get one generated reportread:reports
  • DELETE /api/reports/{id}Delete a reportwrite:reports

Insights

2 endpoints
  • GET /api/insightsGet deterministic and saved AI insightsread:insights
  • GET /api/insights/performanceGet insight performance seriesread:insights

Economic Calendar

1 endpoints
  • GET /api/economic-calendarGet economic events for a UTC date rangeread:economic-calendar

Market News

2 endpoints
  • GET /api/economic-calendar/newsGet paginated market-news historyread:market-news
  • GET /api/economic-calendar/news/streamStream market headlines with server-sent eventsread:market-news

Market Monitor

12 endpoints
  • GET /api/market-monitor/catalogGet the supported instrument catalogread:market-monitor
  • GET /api/market-monitor/catalog/searchSearch the supported instrument catalogread:market-monitor
  • GET /api/market-monitor/watchlistGet the saved Market Monitor watchlistread:market-monitor
  • PUT /api/market-monitor/watchlistUpdate the Market Monitor watchlistwrite:market-monitor
  • POST /api/market-monitor/overviewGet quotes and report status for a watchlistread:market-monitor
  • GET /api/market-monitor/settingsGet Market Monitor settingsread:market-monitor
  • PUT /api/market-monitor/settingsUpdate Market Monitor settingswrite:market-monitor
  • GET /api/market-monitor/analysisGet deterministic multi-timeframe market analysisread:market-monitor
  • GET /api/market-monitor/reportGet a market report and its chart payloadread:market-monitor
  • GET /api/market-monitor/candlesGet market candlesread:market-monitor
  • GET /api/market-monitor/contextGet calendar and news catalysts for an instrumentread:market-monitor
  • POST /api/market-monitor/quotesGet quotes for supplied instrumentsread:market-monitor

Notifications

2 endpoints
  • GET /api/notificationsGet account notificationsread:notifications
  • POST /api/notifications/readMark account notifications as readwrite:notifications

Notification settings

2 endpoints
  • GET /api/auth/notification-settingsGet notification preferencesread:notification-settings
  • PUT /api/auth/notification-settingsUpdate notification preferenceswrite:notification-settings

Mentor Mode

12 endpoints
  • GET /api/mentor/codeGet mentor connection statusread:mentor
  • POST /api/mentor/code/generateGenerate a new mentor codewrite:mentor
  • GET /api/mentor/menteesList connected menteesread:mentor
  • GET /api/mentor/mentees/{menteeId}/statsGet authorized mentee statisticsread:mentor
  • POST /api/mentor/mentees/{menteeId}/acceptAccept a pending student connection requestwrite:mentor
  • DELETE /api/mentor/mentees/{menteeId}/requestDecline a pending student connection requestwrite:mentor
  • POST /api/mentor/connectRequest a mentor connectionwrite:mentor
  • POST /api/mentor/requests/{mentorId}/acceptAccept a mentor connection requestwrite:mentor
  • DELETE /api/mentor/requests/{mentorId}Decline or cancel a mentor requestwrite:mentor
  • DELETE /api/mentor/connect/{menteeId}Disconnect a menteewrite:mentor
  • PATCH /api/mentor/mentors/{mentorId}/accessChange what a connected mentor can seewrite:mentor
  • DELETE /api/mentor/mentorDisconnect the current mentorwrite:mentor

Community and messages

56 endpoints
  • GET /api/community/search/postsSearch community postsread:community
  • GET /api/community/trendsGet trending community tagsread:community
  • GET /api/community/suggestionsGet suggested community accountsread:community
  • GET /api/community/link-previewPreview a link as a card: a community post reference or a page's title, description and imageread:community
  • GET /api/community/tickers/searchSearch tickers for cashtags with latest pricesread:community
  • GET /api/community/tickers/{symbol}Get a cashtag's name, venue and latest quoteread:community
  • GET /api/community/tickers/{symbol}/chartGet a cashtag's price chart for 1D, 1W, 1M, 1Y or ALLread:community
  • GET /api/community/likedList liked community postsread:community
  • GET /api/community/tags/{tag}List posts for a hashtagread:community
  • GET /api/community/feedGet the community feedread:community
  • GET /api/community/feed/new-countCount posts added to the feed since a timestampread:community
  • GET /api/community/statsGet community workspace countersread:community
  • GET /api/community/leaderboardGet the community leaderboard for a time rangeread:community
  • GET /api/community/exploreExplore community postsread:community
  • GET /api/community/reelsGet the community reels feedread:community
  • GET /api/community/searchSearch community accountsread:community
  • GET /api/community/activityGet community activity notificationsread:community
  • GET /api/community/unread-countGet combined unread community countersread:community
  • POST /api/community/activity/readMark community activity as readwrite:community
  • GET /api/community/savedList saved community postsread:community
  • GET /api/community/storiesGet the story feedread:community
  • POST /api/community/storiesCreate a community storywrite:community
  • POST /api/community/stories/{id}/viewRecord a story viewwrite:community
  • GET /api/community/stories/{id}/viewersList viewers for an owned storyread:community
  • DELETE /api/community/stories/{id}Delete an owned storywrite:community
  • GET /api/community/directList direct-message conversationsread:community
  • POST /api/community/directStart or retrieve a direct-message conversationwrite:community
  • GET /api/community/direct/unread-countGet the unread direct-message countread:community
  • GET /api/community/direct/{id}/messagesList direct messages in a conversationread:community
  • POST /api/community/direct/{id}/messagesSend a direct messagewrite:community
  • POST /api/community/direct/{id}/readMark a direct-message conversation as readwrite:community
  • POST /api/community/direct/{id}/typingPublish a direct-message typing eventwrite:community
  • POST /api/community/direct/share-postShare a community post by direct messagewrite:community
  • GET /api/community/gifsSearch the configured GIF providerread:community
  • GET /api/community/gifs/suggestionsGet GIF search suggestionsread:community
  • GET /api/community/posts/{id}Get a community postread:community
  • GET /api/community/posts/{id}/tradeGet trade details shared with a postread:community
  • GET /api/community/posts/{id}/commentsList comments on a postread:community
  • POST /api/community/postsCreate a community postwrite:community
  • POST /api/community/posts/share-tradeCreate a post from an owned tradewrite:community
  • PUT /api/community/posts/{id}Update a community postwrite:community
  • DELETE /api/community/posts/{id}Delete a community postwrite:community
  • GET /api/community/posts/{id}/likesList accounts that liked a postread:community
  • POST /api/community/posts/{id}/saveToggle a saved postwrite:community
  • POST /api/community/posts/{id}/repostToggle a repostwrite:community
  • POST /api/community/posts/{id}/viewRecord a post viewwrite:community
  • POST /api/community/posts/{id}/likeToggle a post likewrite:community
  • POST /api/community/posts/{id}/commentsCreate a comment on a postwrite:community
  • GET /api/community/posts/{id}/quotesList posts quoting a postread:community
  • GET /api/community/posts/{id}/repostsList accounts that reposted a postread:community
  • GET /api/community/posts/{id}/ai-statusList Intelligence replies still being written under a postread:community
  • POST /api/community/posts/{id}/pinPin or unpin an owned post on the profilewrite:community
  • POST /api/community/posts/{id}/reply-policyChange who can reply to an owned postwrite:community
  • POST /api/community/posts/{id}/poll/voteVote in a post's pollwrite:community
  • POST /api/community/comments/{commentId}/likeToggle a comment likewrite:community
  • DELETE /api/community/posts/{postId}/comments/{commentId}Delete an owned commentwrite:community

Community profiles

13 endpoints
  • GET /api/profiles/u/{username}Get a community profileread:profiles
  • GET /api/profiles/u/{username}/cardGet a profile with banner, counts and relationshipread:profiles
  • GET /api/profiles/u/{username}/repliesList a profile's replies with the posts they answerread:profiles
  • GET /api/profiles/u/{username}/mediaList a profile's posts with mediaread:profiles
  • GET /api/profiles/u/{username}/likesList posts the key owner liked (own profile only)read:profiles
  • GET /api/profiles/u/{username}/followersList profile followersread:profiles
  • GET /api/profiles/u/{username}/followingList accounts followed by a profileread:profiles
  • POST /api/profiles/u/{username}/followFollow a community profilewrite:profiles
  • DELETE /api/profiles/u/{username}/followUnfollow a community profilewrite:profiles
  • POST /api/profiles/u/{username}/blockBlock a community profilewrite:profiles
  • DELETE /api/profiles/u/{username}/blockUnblock a community profilewrite:profiles
  • POST /api/profiles/u/{username}/muteMute a community profilewrite:profiles
  • DELETE /api/profiles/u/{username}/muteUnmute a community profilewrite:profiles

Referrals

9 endpoints
  • GET /api/referrals/summaryGet referral progress and eligibilityread:referrals
  • GET /api/referrals/lookupValidate a referral usernameread:referrals
  • POST /api/referrals/claim-usernameClaim a referral offer by usernamewrite:referrals
  • DELETE /api/referrals/claim-usernameRemove the pending referral offerwrite:referrals
  • GET /api/referrals/usersList referred usersread:referrals
  • GET /api/referrals/users/exportExport referred users as CSVread:referrals
  • GET /api/referrals/rewardsList referral rewardsread:referrals
  • POST /api/referrals/rewards/{id}/claimClaim a referral reward that is readywrite:referrals
  • POST /api/referrals/rewards/{id}/retryRetry an eligible referral rewardwrite:referrals

Security model

  • Keys are hashed at rest. The raw secret is never stored in plain text.
  • Revoking a key immediately disables the integrations using it. Rotating an OAuth client secret retires the old secret at once.
  • Scope checks happen per resource, so read-only keys cannot mutate journal data.
  • A good integration starts with trades, then expands into accounts and reports.

Browser session only

  • Create, rename, list, replace, and revoke API keys; register, edit, rotate secrets for, and disable OAuth apps; review connected apps, organizations, and API usage
  • Password, two-factor authentication, and active-session controls
  • Stripe billing, checkout, and customer portal actions
  • Notion OAuth, support conversations, uploads, and Intelligence chat, projects, memory or live voice
  • AI market report generation and AI explanations inside Market Monitor
  • Backtesting sessions and the indicator builder

Market Monitor data is available to signed-in members and keys with the matching resource scope. AI generation requires a signed-in session and uses that account's AI allowance. Plan, rate-limit, and platform-feature controls continue to apply.

Existing keys retain exactly their stored resource scopes when the catalogue expands. Create a replacement key and select the new resource when an integration needs access to a newly connected product surface.