App and API security

API-key risk, OAuth limits, consent, token safety, app review, audit trails, and revocation.

01

Do apps or AI agents get a different security model?

No. Agents and other software must use a personal API key or the same scoped OAuth flow as any other app.

A personal API key acts for its owner and has no per-feature scope picker. OAuth is the safer choice when software acts for other users because each user sees the requested access and can remove it without changing their Graph One login.

02

What can a personal API key access?

It acts as its owner on API routes that accept account access. It has no per-feature scope picker.

Treat the key like a password. Do not put it in browser code, a public app, a prompt, a log, or a shared file.

We use a hash to look up the key and encrypt the stored key value. Rotating it stops the old key and gives the user a new one.

03

Can an OAuth app access everything in an account?

No. An app gets only the named scopes and choices in the user's grant.

We reject an OAuth token on any route that has not chosen to accept OAuth. On an enabled route, we check the required scope before the route runs.

Some scopes also let the user limit access to named tables, boards, folders, saved searches, work domains, or connected accounts. Each token keeps a fixed copy of those limits.

04

Which OAuth scopes can Graph One apps request?

The current scope list is below. A user still has to approve the scopes an app requests.

A scope name sets the broad limit. Resource and connected account choices can make it narrower.

Current Graph One app scopes

Exact scope
Access
Extra control
read:tables Read table metadata, columns, and rows. The user can limit this to selected tables
write:tables Modify rows, columns, and metadata of granted tables; create new tables (newly-created tables are auto-added to the grant). The user can limit this to selected tables
read:boards Read board metadata, lanes, fields, cards, and comments. The user can limit this to selected boards
write:boards Modify lanes, fields, cards, labels, comments, and metadata of granted boards; create new boards (newly-created boards are auto-added to the grant). The user can limit this to selected boards
read:folders See granted folders and your sidebar as you see them: the name, owner and size of each item inside. Opening an item still needs that item's own permission. The user can limit this to selected folders
write:folders Manage granted folders. The user can limit this to selected folders
read:search_histories Read granted saved searches. The user can limit this to selected saved searches
write:search_histories Manage granted saved searches. The user can limit this to selected saved searches
read:documents Read granted documents and their published history. The user can limit this to selected documents
write:documents Create documents and edit, publish, or manage granted documents. The user can limit this to selected documents
read:prospector Read Prospector runs and validate setup in granted team workspaces. A personal run has no workspace resource; App grants for personal runs are checked without a resource id. The user can limit this to selected workspaces
write:prospector Manage Prospector run settings and results in granted team workspaces. A personal run has no workspace resource; App grants for personal runs are checked without a resource id. The user can limit this to selected workspaces
execute:prospector Start or resume paid Prospector work in granted team workspaces. A personal run has no workspace resource; App grants for personal runs are checked without a resource id. The user can limit this to selected workspaces; Graph One must approve this for third-party apps
read:workspaces See which workspaces you belong to, with each one's name, settings and email preferences. The user can limit this to selected workspaces
read:workspace-members See a workspace's members and open invites, with their names, emails and roles. The user can limit this to selected workspaces
read:workspace-sharing See what a workspace has shared with people outside it: named people, pending invites and public links. The user can limit this to selected workspaces
write:workspace-settings Change a workspace's name, settings, email preferences and web address. The user can limit this to selected workspaces
write:workspace-members Invite people to a workspace, resend or cancel invites, change roles and remove members. The user can limit this to selected workspaces
write:workspace-membership Accept or decline a workspace invite sent to you, and leave a workspace. The user can limit this to selected workspaces
write:workspace-sharing Remove everything a workspace has shared with people outside it, all at once. This cannot be undone. The user can limit this to selected workspaces
write:workspace-ownership Create a workspace, claim ownership of one, and delete an empty workspace for good. The user can limit this to selected workspaces
read:workflows Read granted workflows and their published versions, excluding runs. The user can limit this to selected workflows
write:workflows Create workflows; edit, publish and manage granted workflows. The user can limit this to selected workflows
execute:workflows Start granted workflows using your own service access and credits. Workflow read access is still required. The user can limit this to selected workflows
read:workflow-runs Read separately granted workflow runs and their accepted results. The user can limit this to selected workflow runs
write:workflow-runs Control granted workflow runs. Resuming or retrying work uses your own service access and credits. The user can limit this to selected workflow runs
read:facts Read current public org facts, sources, and supporting evidence. No extra picker or approval
write:facts Submit and withdraw evidence flags on public facts, sources, and conflicts. Does not allow moderation. No extra picker or approval
execute:facts Validate public sources and extract public org facts through workflow tasks. Does not allow moderation. Graph One must approve this for third-party apps
read:profile Read your basic profile information (name, email, avatar). No extra picker or approval
read:people Read person profiles in your graph. Graph One must approve this for third-party apps
read:organisations Read organisation profiles in your reach. No extra picker or approval
read:team-people Read team-scoped people endpoints for the workspaces you grant access to. The user can limit this to selected workspaces; Graph One must approve this for third-party apps
read:team-organisations Read team-scoped organisation endpoints for the workspaces you grant access to. The user can limit this to selected workspaces; Graph One must approve this for third-party apps
read:connection-strength Read how strong each of your connections is, your overrides and recent changes, and the counts and dates of contact the strength is worked out from. No subject line, meeting title or message text. Graph One must approve this for third-party apps
read:email-interactions Read the subject line, date, sender, recipients, thread and labels of the emails in the inboxes you grant. No email body and no attachment. The user can limit this to selected connected inboxes; Graph One must approve this for third-party apps
read:calendar-interactions Read the title, description, time, place, guests, organiser and links of the events on the calendars of the accounts you grant. The user can limit this to selected connected calendar accounts; Graph One must approve this for third-party apps
read:linkedin-interactions Read your one-to-one LinkedIn messages with their full text, and when you connected with a person on LinkedIn. Graph One must approve this for third-party apps
read:twitter-interactions Read the direct messages of the Twitter/X accounts you grant, with their full text. The user can limit this to selected connected Twitter/X accounts; Graph One must approve this for third-party apps
write:connection-strength Override connection-strength values in your graph. Graph One must approve this for third-party apps
read:feed Read your activity feed. No extra picker or approval
read:sync Read sync state (which inboxes/calendars are connected and their last-synced timestamps) for the connected accounts you select. The user can limit this to selected connected accounts
offline_access Keep access to your graph.one account while you are signed out. No extra picker or approval
execute:search Run people and organisation search queries. No extra picker or approval
execute:semantic-search Run AI-powered natural-language search queries (consumes LLM credits from your account). Graph One must approve this for third-party apps
execute:access-requests Ask for access to items you can't open, in your name. No extra picker or approval
read:investors Look up investor profiles and portfolio data. No extra picker or approval
read:podcasts Look up podcast feeds and known-people on episodes. No extra picker or approval
write:linkedin.profiles Save LinkedIn profiles it reads to graph.one. Graph One must approve this for third-party apps
write:linkedin.positions Save the jobs listed on LinkedIn profiles to graph.one. Graph One must approve this for third-party apps
write:linkedin.educations Save the schools listed on LinkedIn profiles to graph.one. Graph One must approve this for third-party apps
write:linkedin.connections Save your direct LinkedIn connections to graph.one. Graph One must approve this for third-party apps
write:linkedin.messages Save your one-to-one LinkedIn messages, with their text, to graph.one. Graph One must approve this for third-party apps
write:linkedin.reachability Save the 2nd- and 3rd-degree LinkedIn people you can reach, and who links you to them, to graph.one. Graph One must approve this for third-party apps
read:profile-notes Read private or team-shared notes and replies you may access. Graph One must approve this for third-party apps
write:profile-notes Create and manage profile notes and their replies. Graph One must approve this for third-party apps
05

What can a user control when an app connects?

The user approves the scopes and, where offered, the specific data sources or items the app may use.

An app cannot add a new scope without sending the user through consent again. Existing tokens do not become wider when a grant grows.

Later, the user can remove a scope, change selected resources or connected accounts, ask for consent again, or disconnect the app.

06

Which app permissions need Graph One review?

We review higher-risk scopes before a third-party app can ask other users for them.

The scope table marks each scope that needs our approval. Approval lets the app request that scope; it does not certify the app's full security or privacy program.

Before an app can appear in our marketplace, it must publish a description, privacy policy, terms, install link, logo, an approved scope, and a registered return address. The app maker's policy and terms govern what its service does with data it receives.

07

How are OAuth app tokens protected?

We require PKCE, store token hashes rather than plain tokens, rotate refresh tokens, and revoke reused tokens.

PKCE with SHA-256 is required for public and confidential apps. We show a plain token to the client only when we issue it and keep its SHA-256 hash.

  • Access tokens expire after one hour.
  • Refresh tokens expire after 180 days without use.
  • Authorization codes expire after 10 minutes.
  • Tokens and codes use 256 bits of random input.
  • Reusing a rotated refresh token revokes its whole token family.
08

What happens when app access is cut back or removed?

We revoke tokens affected by the change and record the app or grant event.

Removing a scope or narrowing a data choice revokes tokens that carry the old access. Disconnecting an app revokes its grant and tokens.

Removing a Google, Microsoft, LinkedIn, or X source also removes it from app grants and revokes tokens tied to it. Account deletion revokes the user's app grants and tokens.

App calls also use account rate and credit limits. Token events stay for 365 days; we keep other app and grant audit events for longer.