All integrations

Productlane

BUSINESS · CRM & SUPPORT

Threads, contacts, roadmap projects, and changelogs in the workspace they connected.

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

productlane_delete_changelog_tags_by_idWRITE

Delete a changelog tag. DELETE /changelog-tags/{id}. Hard-delete a changelog tag. The tag is also unlinked from every changelog it was applied to. Requires the Scale plan and the changelogs:write scope.

changelogs:write
productlane_delete_changelogs_by_idWRITE

Delete changelog. DELETE /changelogs/{id}. Soft-delete a changelog. Requires the changelogs:write scope.

changelogs:write
productlane_delete_companies_by_idWRITE

Delete company. DELETE /companies/{id}. Soft-delete a company. Linear customer is deleted asynchronously and threads that lost the company link are reindexed. Requires the companies:write scope.

companies:write
productlane_delete_contacts_blocked_senders_by_idWRITE

Unblock a sender. DELETE /contacts/blocked-senders/{id}. Remove a blocked sender entry. Requires the contacts:write scope.

contacts:write
productlane_delete_contacts_by_idWRITE

Delete contact. DELETE /contacts/{id}. Soft-delete a contact. Requires the contacts:write scope.

contacts:write
productlane_delete_contacts_by_id_companies_by_company_idWRITE

Remove a contact from a company. DELETE /contacts/{id}/companies/{company_id}. Remove one of the contact's company memberships. When it was the primary, another membership takes over. Requires the contacts:write scope.

contacts:write
productlane_delete_docs_articles_by_idWRITE

Delete docs article. DELETE /docs/articles/{id}. Soft-delete a help-center article. Requires the docs:write scope.

docs:write
productlane_delete_docs_groups_by_idWRITE

Delete docs group. DELETE /docs/groups/{id}. Hard-delete a help-center group. Articles in the group are detached, not deleted. Requires the docs:write scope.

docs:write
productlane_delete_integrations_by_nameWRITE

Disconnect an integration. DELETE /integrations/{name}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Drop the stored credential for one integration. Nothing changes on the other side, so reconnecting later restores the same workspace. Requires the admin scope.

admin
productlane_delete_issues_by_idWRITE

Delete issue. DELETE /issues/{id}. Archive the issue in Linear and soft-delete it locally. Linear failures are logged but do not block the local soft-delete. Requires the issues:write scope.

issues:write
productlane_delete_members_by_user_idWRITE

Remove a member. DELETE /members/{user_id}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Remove a member from the workspace. Cannot remove yourself or the last admin. Threads assigned to the removed member become unassigned. Requires the admin scope.

admin
productlane_delete_members_invites_by_idWRITE

Cancel a pending invite. DELETE /members/invites/{id}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Cancel a pending workspace invite. Accepted invites cannot be cancelled; remove the resulting member instead. Requires the admin scope.

admin
productlane_delete_projects_by_idWRITE

Delete project. DELETE /projects/{id}. Archive the project in Linear and soft-delete it locally. Linear failures are logged but do not block the local soft-delete. Requires the projects:write scope.

projects:write
productlane_delete_settings_allowed_email_domains_by_idWRITE

Delete allowed email domain. DELETE /settings/allowed-email-domains/{id}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Remove a domain from the workspace's join list. People with that email domain can no longer join on their own. Requires the admin scope.

admin
productlane_delete_settings_custom_domainWRITE

Remove the custom domain. DELETE /settings/custom-domain. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Release the workspace's custom domain. The portal returns to its productlane.com address. Needs the Starter plan and the admin scope.

admin
productlane_delete_settings_webhooks_by_idWRITE

Delete webhook. DELETE /settings/webhooks/{id}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Delete a webhook subscription. Deliveries stop immediately. Requires the admin scope.

admin
productlane_delete_snippets_by_idWRITE

Delete snippet. DELETE /snippets/{id}. Soft-delete a snippet. Requires the Pro plan and the snippets:write scope.

snippets:write
productlane_delete_tags_by_idWRITE

Delete tag. DELETE /tags/{id}. Soft-delete a tag. The tag is removed from any threads it was applied to. Requires the tags:write scope.

tags:write
productlane_delete_tags_groups_by_idWRITE

Delete tag group. DELETE /tags/groups/{id}. Soft-delete an empty tag group. Returns 409 if the group still owns any tags - move or delete those first. Requires the tags:write scope.

tags:write
productlane_delete_threads_by_idWRITE

Delete thread. DELETE /threads/{id}. Soft-delete a thread. To remove many threads, call `/threads/bulk-delete` once instead of looping here. Requires the threads:write scope.

threads:write
productlane_delete_threads_by_thread_id_comments_by_comment_idWRITE

Delete an internal comment. DELETE /threads/{thread_id}/comments/{comment_id}. Soft-delete an internal comment. Requires the comments:write scope.

comments:write
productlane_get_billing_invoicesREAD

List invoices. GET /billing/invoices. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. List recent invoices, newest first, with links to the hosted copies. Requires the admin scope.

admin
productlane_get_billing_subscriptionREAD

Get subscription. GET /billing/subscription. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Report the workspace's plan, subscription status, seat count, and renewal date. Requires the admin scope.

admin
productlane_get_changelog_tagsREAD

List changelog tags. GET /changelog-tags. List tags that can be attached to changelogs. Requires the changelogs:read scope.

changelogs:read
productlane_get_changelogsREAD

List changelogs. GET /changelogs. List changelogs in the workspace. Cursor-paginated. Requires the changelogs:read scope.

changelogs:read
productlane_get_changelogs_by_idREAD

Get changelog. GET /changelogs/{id}. Fetch a changelog by id. Requires the changelogs:read scope.

changelogs:read
productlane_get_coding_agent_runsREAD

List coding agent runs. GET /coding-agent/runs. List coding agent runs, newest first. Filter to one issue with issue_id.

no provider scope
productlane_get_coding_agent_runs_by_idREAD

Get coding agent run. GET /coding-agent/runs/{id}. Fetch one coding agent run, including its status, branch, and pull request.

no provider scope
productlane_get_companiesREAD

List companies. GET /companies. List companies in the workspace. Cursor-paginated. Requires the companies:read scope.

companies:read
productlane_get_companies_by_idREAD

Get company. GET /companies/{id}. Fetch a company by id. Requires the companies:read scope.

companies:read
productlane_get_companies_linear_optionsREAD

Get Linear customer options. GET /companies/linear-options. Returns the Linear customer statuses, tiers, and team members eligible to be a company owner. Sub-fields are `null` when Linear isn't connected or no team can be resolved. Requires the companies:read scope.

companies:read
productlane_get_contactsREAD

List contacts. GET /contacts. List contacts in the workspace. Cursor-paginated. Requires the contacts:read scope.

contacts:read
productlane_get_contacts_blocked_sendersREAD

List blocked senders. GET /contacts/blocked-senders. List blocked email addresses and domains in the workspace. Requires the contacts:read scope.

contacts:read
productlane_get_contacts_by_idREAD

Get contact. GET /contacts/{id}. Fetch a contact by id. Requires the contacts:read scope.

contacts:read
productlane_get_contacts_by_id_companiesREAD

List contact companies. GET /contacts/{id}/companies. List every company this contact belongs to, primary first. Requires the contacts:read and companies:read scopes.

companies:readcontacts:read
productlane_get_contacts_by_id_issuesREAD

List contact issues. GET /contacts/{id}/issues. List issues this contact is linked to via customer needs on their threads. Cursor-paginated. Requires the contacts:read and issues:read scopes.

contacts:readissues:read
productlane_get_contacts_by_id_projectsREAD

List contact projects. GET /contacts/{id}/projects. List projects this contact is linked to via customer needs on their threads. Cursor-paginated. Requires the contacts:read and projects:read scopes.

contacts:readprojects:read
productlane_get_docs_articlesREAD

List docs articles. GET /docs/articles. List help-center articles in the workspace. Pass sort=order to read them in the order the docs site renders. Cursor-paginated. Requires the docs:read scope.

docs:read
productlane_get_docs_articles_by_idREAD

Get docs article. GET /docs/articles/{id}. Fetch a help-center article by id. Requires the docs:read scope.

docs:read
productlane_get_docs_draftsREAD

List docs drafts. GET /docs/drafts. List article drafts (proposed edits, new articles, or deletions) awaiting review. Cursor-paginated.

no provider scope
productlane_get_docs_drafts_by_idREAD

Get docs draft. GET /docs/drafts/{id}. Fetch a single article draft by id.

no provider scope
productlane_get_docs_groupsREAD

List docs groups. GET /docs/groups. List help-center groups. Filter by portal with portal_instance_id. Requires the docs:read scope.

docs:read
productlane_get_docs_groups_by_idREAD

Get docs group. GET /docs/groups/{id}. Fetch a help-center group by id. Requires the docs:read scope.

docs:read
productlane_get_integrations_cursorREAD

Get Cursor Cloud settings. GET /integrations/cursor. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Fetch the repository, model, and instructions the coding agent runs with. The API key is never returned. Requires the admin scope.

admin
productlane_get_integrations_githubREAD

Get GitHub connection. GET /integrations/github. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Report whether the GitHub app is installed and list the repositories it can reach. Requires the admin scope.

admin
productlane_get_integrations_linearREAD

Get Linear connection. GET /integrations/linear. Report whether Linear is connected and whether its customers feature is enabled.

no provider scope
productlane_get_integrations_linear_membersREAD

List Linear team members. GET /integrations/linear/members. List the members of one Linear team. Use an id as assignee_id when creating an issue.

no provider scope
productlane_get_integrations_linear_teamsREAD

List Linear teams. GET /integrations/linear/teams. List the Linear teams this workspace can file into. Use an id as team_id when creating an issue.

no provider scope
productlane_get_issuesREAD

List issues. GET /issues. List roadmap issues in the workspace. Cursor-paginated. Requires the issues:read scope.

issues:read
productlane_get_issues_by_idREAD

Get issue. GET /issues/{id}. Fetch an issue by id. Requires the issues:read scope.

issues:read
productlane_get_issues_workflow_statesREAD

List workflows. GET /issues/workflow-states. List Linear workflow states for a team. Requires Linear to be connected and the issues:read scope.

issues:read
productlane_get_meREAD

Get authenticated identity. GET /me. Returns the calling key's identity, granted scopes, and the workspace's Linear team selection. Any authenticated key may call this.

no provider scope
productlane_get_membersREAD

List members. GET /members. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. List workspace members. Cursor-paginated. Requires the admin scope.

admin
productlane_get_members_invitesREAD

List pending invites. GET /members/invites. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. List pending workspace invites. Cursor-paginated. Requires the admin scope.

admin
productlane_get_portal_customer_portalREAD

Get the customer portal view for a contact. GET /portal/customer-portal. Returns the requests a contact sees in their support portal, looked up by email. Requires the Scale plan and the portal:read scope.

portal:read
productlane_get_portal_instancesREAD

List portal instances. GET /portal/instances. List the workspace's portal instances. The Main (Root) portal is implicit and represented elsewhere as a null portal_instance_id. Requires the portal:read scope.

portal:read
productlane_get_portal_roadmapREAD

Get the public roadmap. GET /portal/roadmap. Returns the public roadmap as the portal renders it. Requires the portal:read scope.

portal:read
productlane_get_projectsREAD

List projects. GET /projects. List roadmap projects in the workspace. Cursor-paginated. Requires the projects:read scope.

projects:read
productlane_get_projects_by_idREAD

Get project. GET /projects/{id}. Fetch a project by id. Requires the projects:read scope.

projects:read
productlane_get_projects_statusesREAD

List statuses. GET /projects/statuses. List Linear project statuses configured at the organization level. Requires Linear to be connected and the projects:read scope.

projects:read
productlane_get_reporting_ai_involvementREAD

Get AI participation and resolution rate. GET /reporting/ai-involvement. How many conversations the AI answered, and how many closed without a human reply.

no provider scope
productlane_get_reporting_ai_spendREAD

Get AI spend and limits. GET /reporting/ai-spend. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Month-to-date AI spend, the monthly cap, and AI resolution usage against its limit. Requires the admin scope.

admin
productlane_get_reporting_conversationsREAD

Get conversation volume. GET /reporting/conversations. Conversation counts for a date range, split by state, reply status, and origin. Defaults to the last 30 days.

no provider scope
productlane_get_reporting_response_timesREAD

Get response and resolution times. GET /reporting/response-times. Average, median, and 90th percentile for first reply and resolution. Reads at most 5000 threads in the range.

no provider scope
productlane_get_reporting_tagsREAD

Get conversation counts by tag. GET /reporting/tags. Thread count per tag for a date range, ordered by volume.

no provider scope
productlane_get_reporting_teamREAD

Get per-member conversation counts. GET /reporting/team. Assigned and resolved conversation counts per workspace member for a date range.

no provider scope
productlane_get_settings_ai_agentREAD

Get AI agent settings. GET /settings/ai-agent. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Fetch the AI agent's configuration, including where it is deployed and its draft and routine settings. Requires the admin scope.

admin
productlane_get_settings_allowed_email_domainsREAD

List allowed email domains. GET /settings/allowed-email-domains. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. List the domains whose users can join the workspace, with their verification state. Requires the admin scope.

admin
productlane_get_settings_api_keysREAD

List API keys. GET /settings/api-keys. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. List the workspace's API keys with their scopes and usage. Only the four-character preview is returned, never the key. Requires the admin scope.

admin
productlane_get_settings_email_addressesREAD

List email addresses. GET /settings/email-addresses. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. List the workspace's sending addresses with their auto-reply and DNS state. Requires the admin scope.

admin
productlane_get_settings_integrationsREAD

List integration connections. GET /settings/integrations. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Report which third-party integrations are connected. Credentials are never returned. Requires the admin scope.

admin
productlane_get_settings_ssoREAD

Get SSO settings. GET /settings/sso. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Fetch the SSO configuration and which public surfaces it gates. The signing secret is never returned. Requires the admin scope.

admin
productlane_get_settings_webhooksREAD

List webhooks. GET /settings/webhooks. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. List webhook subscriptions with their URLs and event patterns. Signing secrets are never returned. Requires the admin scope.

admin
productlane_get_settings_widgetREAD

Get widget settings. GET /settings/widget. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Fetch the embeddable widget's configuration and which sections it shows. Requires the admin scope.

admin
productlane_get_settings_workspaceREAD

Get workspace settings. GET /settings/workspace. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Fetch workspace-level configuration: name, domains, SLA, timezone, and inbound email. Requires the admin scope.

admin
productlane_get_snippetsREAD

List snippets. GET /snippets. List reply snippets in the workspace. Cursor-paginated. Requires the Pro plan and the snippets:read scope.

snippets:read
productlane_get_snippets_by_idREAD

Get snippet. GET /snippets/{id}. Fetch a snippet by id. Requires the Pro plan and the snippets:read scope.

snippets:read
productlane_get_snippets_foldersREAD

List snippet folders. GET /snippets/folders. List snippet folders in the workspace. Use a returned `id` as `folder_id` when creating or moving a snippet. Requires the Pro plan and the snippets:read scope.

snippets:read
productlane_get_tagsREAD

List tags. GET /tags. List thread tags in the workspace. Cursor-paginated. Requires the tags:read scope.

tags:read
productlane_get_tags_by_idREAD

Get tag. GET /tags/{id}. Fetch a tag by id. Requires the tags:read scope.

tags:read
productlane_get_tags_groupsREAD

List tag groups. GET /tags/groups. List tag groups in the workspace. Use a returned `id` as `tag_group_id` when creating or moving a tag. Requires the tags:read scope.

tags:read
productlane_get_tags_groups_by_idREAD

Get tag group. GET /tags/groups/{id}. Fetch a tag group by id. Requires the tags:read scope.

tags:read
productlane_get_threadsREAD

List threads. GET /threads. List threads in the workspace. Cursor-paginated. Requires the threads:read scope.

threads:read
productlane_get_threads_by_idREAD

Get thread. GET /threads/{id}. Fetch a thread by id. Use `expand` to inline messages and/or comments. Requires the threads:read scope.

threads:read
productlane_get_threads_by_thread_id_commentsREAD

List internal comments. GET /threads/{thread_id}/comments. List internal comments on a thread. Comments are visible to teammates only. Requires the threads:read scope.

threads:read
productlane_get_threads_by_thread_id_messagesREAD

List thread messages. GET /threads/{thread_id}/messages. List the conversation on a thread, merged across all channels and sorted oldest-first by default. Requires the threads:read scope.

threads:read
productlane_patch_changelog_tags_by_idWRITE

Update a changelog tag. PATCH /changelog-tags/{id}. Patch a changelog tag's name, color, or icon. Pass `icon: null` to remove the icon and render a colored dot. Requires the Scale plan and the changelogs:write scope.

changelogs:write
productlane_patch_changelogs_by_idWRITE

Update changelog. PATCH /changelogs/{id}. Update a changelog. `content` replaces the whole body, so read the current one and edit that rather than sending a body you assembled earlier. Pass `language` to upsert a translation row; non-translatable fields always apply to the base. Requires the changelogs:write scope.

changelogs:write
productlane_patch_companies_by_idWRITE

Update company. PATCH /companies/{id}. Update a company. Linear identity fields are synced asynchronously. Requires the companies:write scope.

companies:write
productlane_patch_contacts_by_idWRITE

Update contact. PATCH /contacts/{id}. Update a contact. Requires the contacts:write scope.

contacts:write
productlane_patch_docs_articles_by_idWRITE

Update docs article. PATCH /docs/articles/{id}. Update a help-center article. `content` replaces the whole body and is rejected when it leaves out an image the article still has. Pass `language` to upsert a translation row; non-translatable fields always apply to the base. Requires the docs:write scope.

docs:write
productlane_patch_docs_groups_by_idWRITE

Update docs group. PATCH /docs/groups/{id}. Update a help-center group. Requires the docs:write scope.

docs:write
productlane_patch_integrations_cursorWRITE

Update Cursor Cloud settings. PATCH /integrations/cursor. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Set the repository, model, or standing instructions for the coding agent. Requires the admin scope.

admin
productlane_patch_issues_by_idWRITE

Update issue. PATCH /issues/{id}. Update an issue, synced to Linear. Linear sync failures are logged but do not block the local update. Requires the issues:write scope.

issues:write
productlane_patch_members_by_user_idWRITE

Change a member's role. PATCH /members/{user_id}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Change a member's role. Cannot demote the last admin and cannot change your own role. Requires the admin scope.

admin
productlane_patch_projects_by_idWRITE

Update project. PATCH /projects/{id}. Update a project, synced to Linear. Linear sync failures are logged but do not block the local update. Requires the projects:write scope.

projects:write
productlane_patch_settings_ai_agentWRITE

Update AI agent settings. PATCH /settings/ai-agent. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Update the agent's drafts, routines, and deployment surfaces. Enabling a surface makes the agent answer customers there. Instructions, prompts, and the auto-reply switch are read-only here. Requires the admin scope.

admin
productlane_patch_settings_email_addresses_by_idWRITE

Update email address settings. PATCH /settings/email-addresses/{id}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Update an address's sender names, auto-reply, and forwarding behavior. Only the fields you send change. Requires the admin scope.

admin
productlane_patch_settings_ssoWRITE

Update SSO settings. PATCH /settings/sso. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Update the SSO token endpoint and which public surfaces it gates. Needs the Scale plan and the admin scope.

admin
productlane_patch_settings_webhooks_by_idWRITE

Update webhook. PATCH /settings/webhooks/{id}. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Update a webhook's label, url, events, or active state. Setting active to true also clears an automatic disable. Requires the admin scope.

admin
productlane_patch_settings_widgetWRITE

Update widget settings. PATCH /settings/widget. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Update the widget's appearance and which sections it shows to customers. Requires the admin scope.

admin
productlane_patch_settings_workspaceWRITE

Update workspace settings. PATCH /settings/workspace. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Update workspace name, logo, timezone, and SLA configuration. Only the fields you send change. Requires the admin scope.

admin
productlane_patch_snippets_by_idWRITE

Update snippet. PATCH /snippets/{id}. Update a snippet. Requires the Pro plan and the snippets:write scope.

snippets:write
productlane_patch_tags_by_idWRITE

Update tag. PATCH /tags/{id}. Update a tag. Requires the tags:write scope.

tags:write
productlane_patch_tags_groups_by_idWRITE

Update tag group. PATCH /tags/groups/{id}. Update a tag group. Requires the tags:write scope.

tags:write
productlane_patch_threads_by_idWRITE

Update thread. PATCH /threads/{id}. Update a thread. To patch many threads, call `/threads/bulk-update` once instead of looping here. Requires the threads:write scope.

threads:write
productlane_patch_threads_by_thread_id_comments_by_comment_idWRITE

Update an internal comment. PATCH /threads/{thread_id}/comments/{comment_id}. Edit an internal comment. Requires the comments:write scope.

comments:write
productlane_post_billing_cancelWRITE

Cancel the subscription. POST /billing/cancel. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Cancel at the end of the paid period; access continues until then. Startup program contracts cannot cancel this way. Requires the admin scope.

admin
productlane_post_billing_resumeWRITE

Resume a cancelling subscription. POST /billing/resume. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Clear a pending cancellation so the subscription renews as normal. Requires the admin scope.

admin
productlane_post_changelog_tagsWRITE

Create a changelog tag. POST /changelog-tags. Create a tag that can be attached to changelogs. Provide at least one of `color` or `icon`: with only `color`, the dashboard renders a colored dot; with `icon` (a Lucide icon name), it renders the icon in that color. Requires the Scale plan and the changelogs:write scope.

changelogs:write
productlane_post_changelogsWRITE

Create changelog. POST /changelogs. Create a changelog. Pass `language` to create a translation row instead of populating the base row. Requires the changelogs:write scope.

changelogs:write
productlane_post_changelogs_by_id_broadcastWRITE

Send a changelog broadcast. POST /changelogs/{id}/broadcast. Broadcast an existing changelog to subscribers via email and/or Slack. Pass `email: true` to send to subscribed contacts (requires the email integration enabled) and/or `slack: true` to post to the configured Slack channels (requires Slack connect). At least one channel is required. This endpoint never toggles `published` - use PATCH /changelogs/{id} for that. Requires the Pro plan or higher and the changelogs:write scope.

changelogs:write
productlane_post_changelogs_by_id_translateWRITE

Translate a changelog. POST /changelogs/{id}/translate. Queue an AI translation of a changelog into one language. Counts against the workspace's AI budget.

no provider scope
productlane_post_coding_agent_runsWRITE

Start a coding agent run. POST /coding-agent/runs. Hand an issue to the coding agent, which writes code and opens a pull request. Requires Cursor Cloud connected with a repository.

no provider scope
productlane_post_coding_agent_runs_by_id_follow_upWRITE

Send a follow-up to a coding agent run. POST /coding-agent/runs/{id}/follow-up. Send more instructions to a run that is still working.

no provider scope
productlane_post_coding_agent_runs_by_id_stopWRITE

Stop a coding agent run. POST /coding-agent/runs/{id}/stop. Stop a run that is still working. Any branch it already pushed stays.

no provider scope
productlane_post_companiesWRITE

Create company. POST /companies. Create a company. Linear customer is provisioned asynchronously once a domain is set. Requires the companies:write scope.

companies:write
productlane_post_companies_by_id_mergeWRITE

Merge a company into another. POST /companies/{id}/merge. Merge source_id into the path company. Moves the source's threads, contacts, and upvotes to the survivor, fills the survivor's empty properties, then deletes the source. Merges the linked Linear customers when both exist. Requires the companies:write scope.

companies:write
productlane_post_contactsWRITE

Create contact. POST /contacts. Create a contact. Requires the contacts:write scope.

contacts:write
productlane_post_contacts_blocked_sendersWRITE

Block a sender. POST /contacts/blocked-senders. Block an email address (`type: "EMAIL"`) or an entire domain (`type: "DOMAIN"`). Blocked senders cannot create new threads or post on existing ones. Requires the contacts:write scope.

contacts:write
productlane_post_contacts_by_id_companiesWRITE

Add a contact to a company. POST /contacts/{id}/companies. Add a company to the contact's memberships. Idempotent, and becomes the primary when the contact has none. Requires the contacts:write scope.

contacts:write
productlane_post_docs_articlesWRITE

Create docs article. POST /docs/articles. Create a help-center article. Pass `language` to create a translation row instead of populating the base. Requires the docs:write scope.

docs:write
productlane_post_docs_articles_by_id_translateWRITE

Translate a help center article. POST /docs/articles/{id}/translate. Queue an AI translation of an article into one language. The translated row appears when the job finishes. Counts against the workspace's AI budget.

no provider scope
productlane_post_docs_articles_moveWRITE

Move articles to a group. POST /docs/articles/move. Reassign articles to a group. Requires the docs:write scope.

docs:write
productlane_post_docs_draftsWRITE

Create docs draft. POST /docs/drafts. Propose an article change for review. `kind: edit` edits an existing article, `kind: create` proposes a new article, `kind: delete` proposes removal.

no provider scope
productlane_post_docs_drafts_by_id_acceptWRITE

Accept docs draft. POST /docs/drafts/{id}/accept. Merge the draft. EDIT writes a new version of the article; CREATE materializes a new (unpublished) article; DELETE soft-deletes the article. Returns `superseded` instead of `accepted` when the draft no longer applies cleanly.

no provider scope
productlane_post_docs_drafts_by_id_declineWRITE

Decline docs draft. POST /docs/drafts/{id}/decline. Reject the draft. Keeps the row for audit but marks it as REJECTED so it stops appearing in the open queue.

no provider scope
productlane_post_docs_groupsWRITE

Create docs group. POST /docs/groups. Create a help-center group. Requires the docs:write scope.

docs:write
productlane_post_files_importWRITE

Import a file. POST /files/import. Store a file from a public URL or from inline base64 and return its CDN URL. The JSON alternative to the multipart POST /files upload.

files:write
productlane_post_issuesWRITE

Create issue. POST /issues. Create an issue, filed in Linear first and mirrored to Productlane. Requires Linear to be connected and the issues:write scope.

issues:write
productlane_post_members_invitesWRITE

Invite a member. POST /members/invites. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Create a workspace invite and send the invitation email. The API key must have been created by a workspace member because the invite is attributed to a user. Requires the admin scope.

admin
productlane_post_projectsWRITE

Create project. POST /projects. Create a project, synced to Linear. Requires Linear to be connected and the projects:write scope.

projects:write
productlane_post_settings_api_keysWRITE

Create API key. POST /settings/api-keys. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Mint a new API key with the scopes you name. The key itself is returned once and is never retrievable again. Requires the admin scope.

admin
productlane_post_settings_api_keys_by_id_revokeWRITE

Revoke API key. POST /settings/api-keys/{id}/revoke. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Revoke an API key. It stops authenticating immediately. A key cannot revoke itself. Requires the admin scope.

admin
productlane_post_settings_sso_rotate_secretWRITE

Rotate the SSO secret. POST /settings/sso/rotate-secret. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Issue a new SSO signing secret. The old one stops verifying at once, so update your identity provider first. Returned once. Needs the Scale plan and the admin scope.

admin
productlane_post_settings_webhooks_by_id_rotate_secretWRITE

Rotate webhook signing secret. POST /settings/webhooks/{id}/rotate-secret. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Issue a new signing secret for a webhook. The old secret stops verifying at once, so update your receiver first. The new secret is returned once. Requires the admin scope.

admin
productlane_post_snippetsWRITE

Create snippet. POST /snippets. Create a reply snippet. Requires the Pro plan and the snippets:write scope.

snippets:write
productlane_post_tagsWRITE

Create tag. POST /tags. Create a thread tag. `tag_group_id` is required; fetch the workspace's groups via `GET /tags/groups`. Requires the tags:write scope.

tags:write
productlane_post_tags_groupsWRITE

Create tag group. POST /tags/groups. Create a tag group. Requires the tags:write scope.

tags:write
productlane_post_threadsWRITE

Create thread. POST /threads. Create a thread and upsert its contact by email. Requires the threads:write scope.

threads:write
productlane_post_threads_bulk_deleteWRITE

Delete threads in bulk. POST /threads/bulk-delete. Soft-delete up to 100 threads. The batch counts as a single write against the rate limit and reports per-thread rejects in `failed`. Requires the threads:write scope.

threads:write
productlane_post_threads_bulk_updateWRITE

Update threads in bulk. POST /threads/bulk-update. Apply one patch to up to 100 threads. The batch counts as a single write against the rate limit and reports per-thread rejects in `failed`. Requires the threads:write scope.

threads:write
productlane_post_threads_by_thread_id_commentsWRITE

Post an internal comment. POST /threads/{thread_id}/comments. Post an internal comment on a thread. Visible to teammates only. Requires the comments:write scope.

comments:write
productlane_post_threads_by_thread_id_customer_needsWRITE

Link thread to issues or projects. POST /threads/{thread_id}/customer-needs. Link a thread to one or more issues and/or projects via Linear's customer-need pipeline. Requires Linear to be connected and the threads:write scope.

threads:write
productlane_post_threads_by_thread_id_messagesWRITE

Send a message. POST /threads/{thread_id}/messages. Send a message on a thread. The channel (email, Slack, live chat, Microsoft Teams) is auto-detected from the thread's origin and the response includes the channel that was used. Returns 400 with code `validation_failed` when the matching integration is not configured for the workspace. Requires the messages:write scope; Slack replies need the Pro plan and Teams replies the Scale plan.

messages:write
productlane_put_settings_custom_domainWRITE

Set the custom domain. PUT /settings/custom-domain. REQUIRES A FULL-ACCESS API KEY: Productlane never grants the admin scope over OAuth, so an OAuth connection is refused. Point a domain you own at this workspace's portal and help center. A workspace can hold one custom domain; contact support to change it later. Needs the Starter plan and the admin scope.

admin

Put Productlane behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.