Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/linkbreakers-com:linkbreakers-com-slack-integrations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
contact:
name: Linkbreakers Support
url: https://app.linkbreakers.com
description: 'This is a documentation of all the APIs of Linkbreakers
## Entry points
`GET https://api.linkbreakers.com/` and `GET https://api.linkbreakers.com/v1` answer without credentials with the API''s name, version and links. This document is served at `https://api.linkbreakers.com/openapi.json`.
## Rate limits
Every response describes where the caller stands in the IETF `RateLimit-Policy` and `RateLimit` header fields (draft-ietf-httpapi-ratelimit-headers), and in `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset` and `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` (a Unix timestamp) for clients that read those. A request past the limit gets `429 Too Many Requests` with `Retry-After` in seconds.
- Workspace API token: 720 requests per 60 seconds, per token.
- Dashboard session or OAuth token: 600 requests per 60 seconds, per token.
- No credentials: 300 requests per 60 seconds, per client IP.
Each plan also includes a number of API calls per billing cycle. Past it, calls answer `429` with the code `MAX_PUBLIC_API_QUERIED_REACHED` until the cycle renews or the plan changes.
## Pagination
Every list pages with opaque cursors (AIP-158). Pass `pageSize`, then send the `nextPageToken` of each response back as `pageToken` (or its alias `cursor`) to get the next page. An empty or absent `nextPageToken` means the list is complete. Each list operation describes this in `x-pagination`.
## Batches and background jobs
`POST /v1/links/bulk` creates up to 250 links in one transactional request; `POST /v1/links/batch` takes the same links as a bare JSON array. `POST /v1/links/bulk/jobs` accepts the same batch and answers `202 Accepted` at once with a job and a `Location` header; poll `GET /v1/jobs/{id}` until `status` is `JOB_STATUS_SUCCEEDED` (the created link ids are in `linksBulkCreate.linkIds`) or `JOB_STATUS_FAILED` (`error` says why, and nothing was created). Jobs can be read for 24 hours after they finish.
## Versioning and deprecation
The version is in the path: every operation lives under `/v1`. Within a version, changes are additive only: new operations, new optional request fields, new response fields and new enum values. Clients should ignore fields and enum values they do not know. Anything that would break an existing client ships under a new path version instead.
An operation is retired in two steps. First it is deprecated: it keeps working, is flagged `deprecated: true` in this document, and every response carries a `Deprecation` header field (RFC 9745) with the time it was deprecated and a `Link` with `rel="deprecation"` to the policy. Then, at least 180 days later, it may be removed; that date is announced in advance in a `Sunset` header field (RFC 8594) and as `x-sunset` on the operation. The full policy: https://linkbreakers.com/help/article/api-versioning-and-deprecation-policy
## Idempotent retries
Every POST, PUT and PATCH accepts an optional `Idempotency-Key` header (draft-ietf-httpapi-idempotency-key-header). Send a new unique value, such as a UUID, with each logical request and reuse it only to retry that request. A retry with the same key and the same request returns the first response, marked `Idempotent-Replayed: true`, instead of running again. Keys are scoped to the token and kept for 24 hours. The same key with a different request is refused with `422`, and a retry while the first request is still running gets `409` with `Retry-After`. Server errors (5xx) and refusals such as 401, 403 and 429 are not stored, so retrying them runs the request again.'
title: Linkbreakers Slack Integrations API
version: 1.185.0
x-api-versioning:
compatibility: additive changes only within a version
currentVersion: v1
deprecationHeaders:
- Deprecation
- Sunset
- Link
minimumNoticeDays: 180
policy: https://linkbreakers.com/help/article/api-versioning-and-deprecation-policy
strategy: url-path
servers:
- url: https://api.linkbreakers.com
security:
- bearerAuth: []
tags:
- description: Endpoints for managing the Slack integration. Connect your Slack workspace to receive real-time notifications when events occur on your links.
name: Slack Integrations
paths:
/v1/slack-integrations:
delete:
description: 'Disconnect and remove the Slack integration from the workspace.
Requires the `integrations:write` scope.'
operationId: SlackIntegrationsService_Delete
responses:
'200':
content:
application/json:
schema:
properties: {}
type: object
description: Everything worked as expected.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Unexpected error
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
security:
- bearerAuth:
- integrations:write
- oauth2:
- integrations:write
summary: Disconnect Slack integration
tags:
- Slack Integrations
x-required-scope: integrations:write
get:
description: 'Retrieve the Slack integration configuration for the workspace.
Requires the `integrations:read` scope.'
operationId: SlackIntegrationsService_Get
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/GetSlackIntegrationResponse'
description: Everything worked as expected.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Unexpected error
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
security:
- bearerAuth:
- integrations:read
- oauth2:
- integrations:read
summary: Get Slack integration
tags:
- Slack Integrations
x-required-scope: integrations:read
patch:
description: 'Update the Slack integration configuration (channel, triggers, status).
Requires the `integrations:write` scope.'
operationId: SlackIntegrationsService_Update
parameters:
- description: Makes retrying this request safe. See components.parameters.IdempotencyKey.
in: header
name: Idempotency-Key
required: false
schema:
maxLength: 255
minLength: 1
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSlackIntegrationRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateSlackIntegrationResponse'
description: Everything worked as expected.
headers:
Idempotent-Replayed:
$ref: '#/components/headers/Idempotent-Replayed'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Unexpected error
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
security:
- bearerAuth:
- integrations:write
- oauth2:
- integrations:write
summary: Update Slack integration
tags:
- Slack Integrations
x-required-scope: integrations:write
/v1/slack-integrations/channels:
get:
description: 'List available Slack channels the bot can send notifications to.
Requires the `integrations:read` scope.'
operationId: SlackIntegrationsService_ListChannels
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListSlackChannelsResponse'
description: Everything worked as expected.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Unexpected error
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
security:
- bearerAuth:
- integrations:read
- oauth2:
- integrations:read
summary: List Slack channels
tags:
- Slack Integrations
x-required-scope: integrations:read
/v1/slack-integrations/oauth-url:
get:
description: 'Returns the Slack OAuth authorization URL to initiate the Add to Slack flow.
Requires the `integrations:write` scope.'
operationId: SlackIntegrationsService_GetOAuthURL
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/GetSlackOAuthURLResponse'
description: Everything worked as expected.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Unexpected error
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
security:
- bearerAuth:
- integrations:write
- oauth2:
- integrations:write
summary: Get Slack OAuth URL
tags:
- Slack Integrations
x-required-scope: integrations:write
/v1/slack-integrations/oauth/complete:
post:
description: 'Exchanges the Slack authorization code for a bot token and creates the workspace integration.
Requires the `integrations:write` scope.'
operationId: SlackIntegrationsService_CompleteOAuth
parameters:
- description: Makes retrying this request safe. See components.parameters.IdempotencyKey.
in: header
name: Idempotency-Key
required: false
schema:
maxLength: 255
minLength: 1
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CompleteSlackOAuthRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CompleteSlackOAuthResponse'
description: Everything worked as expected.
headers:
Idempotent-Replayed:
$ref: '#/components/headers/Idempotent-Replayed'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Unexpected error
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
security:
- bearerAuth:
- integrations:write
- oauth2:
- integrations:write
summary: Complete Slack OAuth
tags:
- Slack Integrations
x-required-scope: integrations:write
/v1/slack-integrations/test:
post:
description: 'Send a test notification to verify the Slack integration is working.
Requires the `integrations:write` scope.'
operationId: SlackIntegrationsService_Test
parameters:
- description: Makes retrying this request safe. See components.parameters.IdempotencyKey.
in: header
name: Idempotency-Key
required: false
schema:
maxLength: 255
minLength: 1
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TestSlackIntegrationRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TestSlackIntegrationResponse'
description: Everything worked as expected.
headers:
Idempotent-Replayed:
$ref: '#/components/headers/Idempotent-Replayed'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Unexpected error
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
security:
- bearerAuth:
- integrations:write
- oauth2:
- integrations:write
summary: Test Slack integration
tags:
- Slack Integrations
x-required-scope: integrations:write
components:
schemas:
SlackIntegrationStatus:
default: SLACK_INTEGRATION_STATUS_UNSPECIFIED
description: "- SLACK_INTEGRATION_STATUS_UNSPECIFIED: Status not specified\n - SLACK_INTEGRATION_STATUS_ACTIVE: Integration is active and sending notifications\n - SLACK_INTEGRATION_STATUS_PAUSED: Integration is paused by user action\n - SLACK_INTEGRATION_STATUS_DISCONNECTED: Integration is disconnected"
enum:
- SLACK_INTEGRATION_STATUS_UNSPECIFIED
- SLACK_INTEGRATION_STATUS_ACTIVE
- SLACK_INTEGRATION_STATUS_PAUSED
- SLACK_INTEGRATION_STATUS_DISCONNECTED
title: The status of a Slack integration
type: string
CompleteSlackOAuthRequest:
properties:
code:
title: The authorization code received from Slack
type: string
state:
title: The state parameter for CSRF validation
type: string
required:
- code
- state
title: CompleteSlackOAuthRequest completes the OAuth flow by exchanging the authorization code
type: object
ListSlackChannelsResponse:
properties:
channels:
items:
$ref: '#/components/schemas/SlackChannel'
type: object
title: Available channels the bot can post to
type: array
title: ListSlackChannelsResponse returns available Slack channels
type: object
CompleteSlackOAuthResponse:
properties:
slackIntegration:
$ref: '#/components/schemas/SlackIntegration'
title: The newly created Slack integration
title: CompleteSlackOAuthResponse returns the created Slack integration
type: object
UpdateSlackIntegrationResponse:
properties:
slackIntegration:
$ref: '#/components/schemas/SlackIntegration'
title: The updated Slack integration
title: UpdateSlackIntegrationResponse returns the updated Slack integration
type: object
ErrorResponse:
properties:
code:
description: HTTP status code
format: int32
type: integer
codeType:
default: UNKNOWN
description: Custom error code type
type: string
details:
description: Additional error details
items:
type: object
type: array
message:
description: Error message
type: string
required:
- code
- codeType
- message
- details
type: object
GetSlackIntegrationResponse:
properties:
slackIntegration:
$ref: '#/components/schemas/SlackIntegration'
title: The Slack integration (nil if not connected)
title: GetSlackIntegrationResponse returns the Slack integration
type: object
SlackIntegration:
description: 'Represents a connected Slack workspace integration that receives event notifications
in a configured channel when workflow steps complete.'
properties:
createdAt:
format: date-time
readOnly: true
title: The timestamp when the integration was connected
type: string
createdBy:
title: The member who connected the integration (UUID)
type: string
failureCount:
format: int64
readOnly: true
title: Count of failed notification deliveries
type: integer
id:
example: d22f7bf1-83a9-4f3a-9b37-9a3a21b6ac11
title: The unique identifier of the Slack integration (UUID)
type: string
lastSentAt:
format: date-time
readOnly: true
title: The timestamp when a notification was last sent
type: string
linkId:
description: 'Filter notifications by a specific link ID.
Only events from this link will trigger notifications.
If empty, all links in the workspace will trigger notifications.'
example: d22f7bf1-83a9-4f3a-9b37-9a3a21b6ac11
type: string
slackChannelId:
example: C01ABC123
title: The Slack channel ID where notifications are sent
type: string
slackChannelName:
example: general
title: The Slack channel name where notifications are sent
type: string
slackTeamId:
example: T01ABC123
title: The Slack team/workspace ID
type: string
slackTeamName:
example: My Company
title: The Slack team/workspace name
type: string
status:
$ref: '#/components/schemas/SlackIntegrationStatus'
title: Current status of the integration
successCount:
format: int64
readOnly: true
title: Count of successful notification deliveries
type: integer
triggers:
description: 'Filter notifications by workflow step kinds.
Only workflow steps matching these kinds will trigger notifications.
If empty, all workflow step kinds will trigger notifications.'
items:
description: "- KIND_UNSPECIFIED: Workflow step kind not specified\n - KIND_ENTRY: Entry steps are automatically triggered when a visitor reaches the workflow\n - KIND_EXIT: Exit steps finalize the workflow (commonly a redirect)\n - KIND_INTERACTION: Interaction steps require visitor input (forms, passwords, etc.)\n - KIND_CONDITION: Condition steps evaluate logic and route to different next steps"
enum:
- KIND_UNSPECIFIED
- KIND_ENTRY
- KIND_EXIT
- KIND_INTERACTION
- KIND_CONDITION
type: array
updatedAt:
format: date-time
readOnly: true
title: The timestamp when the integration was last updated
type: string
workspaceId:
example: c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0
title: The workspace ID this integration belongs to (UUID)
type: string
title: SlackIntegration
type: object
UpdateSlackIntegrationRequest:
properties:
linkId:
title: Filter notifications by a specific link ID
type: string
slackChannelId:
title: The Slack channel ID to send notifications to
type: string
slackChannelName:
title: The Slack channel name
type: string
status:
$ref: '#/components/schemas/SlackIntegrationStatus'
title: Integration status (ACTIVE or PAUSED)
triggers:
items:
description: "- KIND_UNSPECIFIED: Workflow step kind not specified\n - KIND_ENTRY: Entry steps are automatically triggered when a visitor reaches the workflow\n - KIND_EXIT: Exit steps finalize the workflow (commonly a redirect)\n - KIND_INTERACTION: Interaction steps require visitor input (forms, passwords, etc.)\n - KIND_CONDITION: Condition steps evaluate logic and route to different next steps"
enum:
- KIND_UNSPECIFIED
- KIND_ENTRY
- KIND_EXIT
- KIND_INTERACTION
- KIND_CONDITION
title: Filter notifications by workflow step kinds
type: array
title: UpdateSlackIntegrationRequest updates the Slack integration configuration
type: object
GetSlackOAuthURLResponse:
properties:
oauthUrl:
title: The full Slack OAuth authorization URL to redirect the user to
type: string
title: GetSlackOAuthURLResponse returns the Slack OAuth authorization URL
type: object
SlackChannel:
properties:
id:
title: The Slack channel ID
type: string
isMember:
title: Whether the bot is a member of this channel (can post to it)
type: boolean
isPrivate:
title: Whether this is a private channel
type: boolean
name:
title: The channel name
type: string
title: A Slack channel available for notification delivery
type: object
TestSlackIntegrationResponse:
properties:
success:
title: Whether the test notification was sent successfully
type: boolean
title: TestSlackIntegrationResponse confirms the test notification was sent
type: object
TestSlackIntegrationRequest:
title: TestSlackIntegrationRequest sends a test notification
type: object
headers:
RateLimit-Remaining:
description: Requests left in the current window.
schema:
example: 598
type: integer
RateLimit:
description: 'What is left of the quota: `"<name>";r=<remaining requests>;t=<seconds until the window resets>` (draft-ietf-httpapi-ratelimit-headers).'
schema:
example: '"token";r=598;t=42'
type: string
Retry-After:
description: Seconds to wait before retrying a refused request.
schema:
example: 42
type: integer
X-RateLimit-Reset:
description: Unix time, in seconds, at which the current window resets.
schema:
example: 1791650400
type: integer
RateLimit-Limit:
description: Requests allowed in the current window.
schema:
example: 600
type: integer
RateLimit-Reset:
description: Seconds until the current window resets.
schema:
example: 42
type: integer
Idempotent-Replayed:
description: true when this response is the stored answer to an earlier request with the same Idempotency-Key.
schema:
type: boolean
RateLimit-Policy:
description: 'The quota that applies to this caller, as a structured field: `"<name>";q=<requests>;w=<window seconds>` (draft-ietf-httpapi-ratelimit-headers).'
schema:
example: '"token";q=600;w=60'
type: string
X-RateLimit-Limit:
description: Same as RateLimit-Limit, for clients that read the X- convention.
schema:
example: 600
type: integer
X-RateLimit-Remaining:
description: Same as RateLimit-Remaining, for clients that read the X- convention.
schema:
example: 598
type: integer
responses:
TooManyRequests:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Too many requests. Wait the number of seconds in Retry-After, or until the RateLimit window resets, then retry.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
securitySchemes:
bearerAuth:
bearerFormat: JWT
description: JWT Bearer token authentication. Use a workspace API token obtained from the Linkbreakers dashboard. When using the SDK, pass this token to the `accessToken` field in the Configuration constructor (not `apiKey`). A token has full access or a list of scopes; each operation lists the one scope it requires, and a write scope also grants the read scope of the same resource. GET /v1/api-scopes lists every scope.
scheme: bearer
type: http
oauth2:
description: OAuth 2.0 authorization code flow with PKCE and dynamic client registration. Request only the scopes you need. The scope names are the same ones workspace API tokens hold.
flows:
authorizationCode:
authorizationUrl: https://mcp.linkbreakers.com/oauth/authorize
refreshUrl: https://mcp.linkbreakers.com/oauth/token
scopes:
analytics:read: Read events, metrics, time series, analytics data and dashboards.
analytics:write: Create, update and delete analytics dashboards and generate widget summaries.
assistant:read: Read the Assistant conversation.
assistant:write: Send files to the Assistant, clear the conversation and contact support.
billing:write: Open checkout, credit top-up and billing portal sessions.
domains:read: Read custom domains and their DNS instructions.
domains:write: Add, verify, update and delete custom domains.
integrations:read: Read the Slack and Google Forms integrations.
integrations:write: Connect, configure, test, sync and disconnect the Slack and Google Forms integrations.
links:read: Read links, their QR code images, tags, folders and link settings.
links:write: Create, update and delete links, tags, folders and link settings.
mcp:tools: Full access, including scopes added later.
media:read: Read uploaded media.
media:write: Upload and delete media.
members:read: Read workspace members.
members:write: Update, revoke, sign out and remove members. Inviting a member or changing a sign-in email or password needs full access.
page_themes:read: Read page themes and page theme templates.
page_themes:write: Change page themes and create, publish and delete page theme templates.
qrcodes:read: Read QR code designs and QR code templates.
qrcodes:write: Change QR code designs and create, publish and delete QR code templates.
tokens:read: Read API tokens and their scopes, never their secrets.
tokens:write: Create, update and delete API tokens, limited to the scopes the calling token holds.
visitors:read: Read and search visitors and their attributes.
visitors:write: Identify, update and delete visitors and their attributes.
webhooks:read: Read webhooks.
webhooks:write: Create, update and delete webhooks.
workflows:read: Read the workflow steps behind a link and validate them.
workflows:write: Create, connect, update, lay out and delete workflow steps.
workspace:read: Read the workspace and its settings.
workspace:write: Update the workspace, request enrollment and delete the workspace.
tokenUrl: https://mcp.linkbreakers.com/oauth/token
type: oauth2