linkbreakers-com Allowances API

What the workspace has used of each limit its plan sets, read from the same counters that enforce them.

Operations 2

GET /v1/allowances List allowances #
POST /v1/allowances/dismiss Dismiss an allowance notice #

Work with this as data

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-allowances-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 Specification

linkbreakers-com-allowances-api-openapi.yml Raw ↑
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 Allowances 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: What the workspace has used of each limit its plan sets, read from the same counters that enforce them.
  name: Allowances
paths:
  /v1/allowances:
    get:
      description: 'Return every limit the workspace''s plan sets with what has been used in the current cycle, when it resets and whether it has been reached.


        Requires the `workspace:read` scope.'
      operationId: AllowancesService_ListAllowances
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAllowancesResponse'
          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:
        - workspace:read
      - oauth2:
        - workspace:read
      summary: List allowances
      tags:
      - Allowances
      x-required-scope: workspace:read
  /v1/allowances/dismiss:
    post:
      description: 'Hide the over-limit notice for one limit, for the calling member, until the limit''s next cycle. Only a member can dismiss; an API token gets a permission error.


        Requires the `workspace:write` scope.'
      operationId: AllowancesService_DismissAllowanceNotice
      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/DismissAllowanceNoticeRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties: {}
                type: object
          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:
        - workspace:write
      - oauth2:
        - workspace:write
      summary: Dismiss an allowance notice
      tags:
      - Allowances
      x-required-scope: workspace:write
components:
  schemas:
    PricingPlanId:
      default: PRICING_PLAN_ID_UNSPECIFIED
      description: "- PRICING_PLAN_ID_UNSPECIFIED: Not set\n - PRICING_PLAN_ID_FREE: Free plan, no payment\n - PRICING_PLAN_ID_LIGHT: Light plan\n - PRICING_PLAN_ID_PRO: Pro plan. Trials and sponsored workspaces are allowed what Pro allows unless a limit says otherwise.\n - PRICING_PLAN_ID_ENTERPRISE: Enterprise plan, billed on usage and priced on request through sales"
      enum:
      - PRICING_PLAN_ID_UNSPECIFIED
      - PRICING_PLAN_ID_FREE
      - PRICING_PLAN_ID_LIGHT
      - PRICING_PLAN_ID_PRO
      - PRICING_PLAN_ID_ENTERPRISE
      title: PricingPlanId identifies a plan a workspace can subscribe to
      type: string
    WorkspaceAllowance:
      description: One limit the workspace's plan sets, with what the workspace has used of it.
      properties:
        cheapestActionCost:
          format: int32
          title: 'Platform credits only: the credits the cheapest action that spends them needs before it runs'
          type: integer
        cycleEndAt:
          description: The last second of the current cycle; the allowance refills one second later. Absent for totals that never refill and when nothing has been counted yet.
          format: date-time
          type: string
        cycleStartAt:
          description: Start of the current cycle. Absent when nothing has been counted yet.
          format: date-time
          type: string
        key:
          $ref: '#/components/schemas/PlanLimitKey'
          title: What the limit is on
        kind:
          $ref: '#/components/schemas/PlanLimitKind'
          title: How the limit behaves
        limit:
          description: The ceiling. Absent when kind is PLAN_LIMIT_KIND_UNLIMITED or PLAN_LIMIT_KIND_METERED.
          format: int32
          type: integer
        limitBytes:
          description: 'Media storage only: the most media the workspace may hold, in bytes. Absent for other limits and when there is no ceiling.'
          format: int64
          type: integer
        lockedCount:
          description: 'Tracked visits only: visits recorded past the limit in the current cycle that the workspace''s plan still locks. Absent for other limits.'
          format: int32
          type: integer
        lockedTotalCount:
          description: 'Tracked visits only: every visit the workspace''s plan still locks, across all cycles. Upgrading to a plan with a higher limit reveals them. Absent for other limits.'
          format: int32
          type: integer
        noticeDismissed:
          title: Whether the calling member dismissed the over-limit notice for this limit in the current cycle
          type: boolean
        reached:
          description: Whether the limit is used up for the current cycle. Platform credits count as reached once neither the monthly credits nor the purchased top-up credits hold cheapest_action_cost, so nothing that spends credits can run. Never reached on a plan billed per unit used.
          type: boolean
        recordedCount:
          description: 'Tracked visits only: every visit recorded in the current cycle, used plus locked_count. Absent for other limits.'
          format: int32
          type: integer
        remaining:
          description: Units left in the current cycle. For platform credits, the monthly credits left plus the purchased top-up credits left. Absent when there is no ceiling.
          format: int32
          type: integer
        resetsOn:
          $ref: '#/components/schemas/typeDate'
          description: The day the allowance refills, which is the first day of the next cycle in the workspace's timezone. Absent for totals that never refill and when nothing has been counted yet.
        used:
          description: Units used in the current cycle. For a total such as custom domains, what the workspace holds.
          format: int32
          type: integer
        usedBytes:
          description: 'Media storage only: the bytes the workspace''s media holds, exact. used is the same figure in megabytes, rounded up. Absent for other limits.'
          format: int64
          type: integer
      title: WorkspaceAllowance
      type: object
    DismissAllowanceNoticeRequest:
      properties:
        key:
          $ref: '#/components/schemas/PlanLimitKey'
          title: The limit whose notice to dismiss
      title: Request to stop showing the over-limit notice for one limit until its next cycle
      type: object
    PlanLimitKey:
      default: PLAN_LIMIT_KEY_UNSPECIFIED
      description: "- PLAN_LIMIT_KEY_UNSPECIFIED: Not set\n - PLAN_LIMIT_KEY_CUSTOM_DOMAINS: Custom domains connected to the workspace\n - PLAN_LIMIT_KEY_TEAM_MEMBERS: Members of the workspace\n - PLAN_LIMIT_KEY_PLATFORM_CREDITS: Platform credits, spent by creating links and by AI features\n - PLAN_LIMIT_KEY_TRACKED_VISITS: Tracked visits (scans and clicks)\n - PLAN_LIMIT_KEY_PUBLIC_API_CALLS: Public API calls\n - PLAN_LIMIT_KEY_WEBHOOKS: Webhooks configured in the workspace\n - PLAN_LIMIT_KEY_ASSISTANT_MESSAGES_PER_MINUTE: Assistant messages per minute\n - PLAN_LIMIT_KEY_LINKS_INCLUDED: Links the monthly platform credits pay for. Links are not capped on their own: each one spends credits.\n - PLAN_LIMIT_KEY_MEDIA_STORAGE_MB: Megabytes of uploaded media (media for Open media steps, QR code logos, page theme images) the workspace may hold at once. A standing total: deleting media frees it."
      enum:
      - PLAN_LIMIT_KEY_UNSPECIFIED
      - PLAN_LIMIT_KEY_CUSTOM_DOMAINS
      - PLAN_LIMIT_KEY_TEAM_MEMBERS
      - PLAN_LIMIT_KEY_PLATFORM_CREDITS
      - PLAN_LIMIT_KEY_TRACKED_VISITS
      - PLAN_LIMIT_KEY_PUBLIC_API_CALLS
      - PLAN_LIMIT_KEY_WEBHOOKS
      - PLAN_LIMIT_KEY_ASSISTANT_MESSAGES_PER_MINUTE
      - PLAN_LIMIT_KEY_LINKS_INCLUDED
      - PLAN_LIMIT_KEY_MEDIA_STORAGE_MB
      title: PlanLimitKey names one thing a plan puts a number on
      type: string
    ListAllowancesResponse:
      properties:
        allowances:
          items:
            $ref: '#/components/schemas/WorkspaceAllowance'
            type: object
          title: One entry per limit the plan sets
          type: array
        limits:
          description: Every limit this workspace is allowed, as enforced for its subscription, including the ones not counted per cycle such as webhooks and the Assistant rate. A trial or sponsored workspace can be allowed less than the plan it reports, and these are what it gets.
          items:
            $ref: '#/components/schemas/PlanLimit'
            type: object
          type: array
        plan:
          $ref: '#/components/schemas/PricingPlanId'
          description: The plan the limits come from. A trial or sponsored workspace reports the plan it is allowed what of.
      title: The workspace's allowances
      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
    PlanLimitKind:
      default: PLAN_LIMIT_KIND_UNSPECIFIED
      description: "- PLAN_LIMIT_KIND_UNSPECIFIED: Not set\n - PLAN_LIMIT_KIND_TOTAL: A standing total that does not refill, such as connected domains\n - PLAN_LIMIT_KIND_MONTHLY: An allowance that refills every month\n - PLAN_LIMIT_KIND_PER_MINUTE: A rate that refills every minute\n - PLAN_LIMIT_KIND_UNLIMITED: No ceiling\n - PLAN_LIMIT_KIND_METERED: No ceiling; every unit is billed"
      enum:
      - PLAN_LIMIT_KIND_UNSPECIFIED
      - PLAN_LIMIT_KIND_TOTAL
      - PLAN_LIMIT_KIND_MONTHLY
      - PLAN_LIMIT_KIND_PER_MINUTE
      - PLAN_LIMIT_KIND_UNLIMITED
      - PLAN_LIMIT_KIND_METERED
      title: PlanLimitKind says how a limit behaves
      type: string
    typeDate:
      description: '* A full date, with non-zero year, month, and day values

        * A month and day value, with a zero year, such as an anniversary

        * A year on its own, with zero month and day values

        * A year and month value, with a zero day, such as a credit card expiration

        date


        Related types are [google.type.TimeOfDay][google.type.TimeOfDay] and

        `google.protobuf.Timestamp`.'
      properties:
        day:
          description: 'Day of a month. Must be from 1 to 31 and valid for the year and month, or 0

            to specify a year by itself or a year and month where the day isn''t

            significant.'
          format: int32
          type: integer
        month:
          description: 'Month of a year. Must be from 1 to 12, or 0 to specify a year without a

            month and day.'
          format: int32
          type: integer
        year:
          description: 'Year of the date. Must be from 1 to 9999, or 0 to specify a date without

            a year.'
          format: int32
          type: integer
      title: 'Represents a whole or partial calendar date, such as a birthday. The time of

        day and time zone are either specified elsewhere or are insignificant. The

        date is relative to the Gregorian Calendar. This can represent one of the

        following:'
      type: object
    PlanLimit:
      properties:
        key:
          description: "- PLAN_LIMIT_KEY_UNSPECIFIED: Not set\n - PLAN_LIMIT_KEY_CUSTOM_DOMAINS: Custom domains connected to the workspace\n - PLAN_LIMIT_KEY_TEAM_MEMBERS: Members of the workspace\n - PLAN_LIMIT_KEY_PLATFORM_CREDITS: Platform credits, spent by creating links and by AI features\n - PLAN_LIMIT_KEY_TRACKED_VISITS: Tracked visits (scans and clicks)\n - PLAN_LIMIT_KEY_PUBLIC_API_CALLS: Public API calls\n - PLAN_LIMIT_KEY_WEBHOOKS: Webhooks configured in the workspace\n - PLAN_LIMIT_KEY_ASSISTANT_MESSAGES_PER_MINUTE: Assistant messages per minute\n - PLAN_LIMIT_KEY_LINKS_INCLUDED: Links the monthly platform credits pay for. Links are not capped on their own: each one spends credits.\n - PLAN_LIMIT_KEY_MEDIA_STORAGE_MB: Megabytes of uploaded media (media for Open media steps, QR code logos, page theme images) the workspace may hold at once. A standing total: deleting media frees it."
          enum:
          - PLAN_LIMIT_KEY_UNSPECIFIED
          - PLAN_LIMIT_KEY_CUSTOM_DOMAINS
          - PLAN_LIMIT_KEY_TEAM_MEMBERS
          - PLAN_LIMIT_KEY_PLATFORM_CREDITS
          - PLAN_LIMIT_KEY_TRACKED_VISITS
          - PLAN_LIMIT_KEY_PUBLIC_API_CALLS
          - PLAN_LIMIT_KEY_WEBHOOKS
          - PLAN_LIMIT_KEY_ASSISTANT_MESSAGES_PER_MINUTE
          - PLAN_LIMIT_KEY_LINKS_INCLUDED
          - PLAN_LIMIT_KEY_MEDIA_STORAGE_MB
          title: What the limit is on
        kind:
          description: "- PLAN_LIMIT_KIND_UNSPECIFIED: Not set\n - PLAN_LIMIT_KIND_TOTAL: A standing total that does not refill, such as connected domains\n - PLAN_LIMIT_KIND_MONTHLY: An allowance that refills every month\n - PLAN_LIMIT_KIND_PER_MINUTE: A rate that refills every minute\n - PLAN_LIMIT_KIND_UNLIMITED: No ceiling\n - PLAN_LIMIT_KIND_METERED: No ceiling; every unit is billed"
          enum:
          - PLAN_LIMIT_KIND_UNSPECIFIED
          - PLAN_LIMIT_KIND_TOTAL
          - PLAN_LIMIT_KIND_MONTHLY
          - PLAN_LIMIT_KIND_PER_MINUTE
          - PLAN_LIMIT_KIND_UNLIMITED
          - PLAN_LIMIT_KIND_METERED
          title: How the limit behaves
        value:
          description: The ceiling. Absent when kind is PLAN_LIMIT_KIND_UNLIMITED or PLAN_LIMIT_KIND_METERED.
          format: int32
          type: integer
      title: PlanLimit is one number a plan puts on something
      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