LogBrew Connected clients API

AI clients you connected to the LogBrew MCP server.

Operations 2

GET /api/mcp/grants List the AI clients you connected and the projects each one reads #
DELETE /api/mcp/grants/{grant_id} Disconnect one AI client. Its tokens stop working at once #

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/logbrew:logbrew-connected-clients-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

logbrew-connected-clients-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    email: support@logbrew.co
    name: LogBrew support
    url: https://logbrew.co
  description: 'Send `Authorization: Bearer ` with an account access token or a project key. `logbrew login` signs in and stores an access token; `logbrew projects keys create` makes project keys. A read key reads one project''s telemetry and nothing else. Without the CLI, get an access token with device sign-in (RFC 8628): `POST /api/auth/device` with a form-encoded `client_id`, show the person the `user_code` and `verification_uri`, then poll `POST /api/auth/device/token` until they approve.


    Every error has the same JSON shape: a stable `code`, a readable `error`, and a `next` step that says how to recover. A `429` response carries `Retry-After`.


    Some operations have several response versions. This document describes the newest one, so send the `response_version` it requires. List operations return pages with `pagination=cursor`. Older versions keep their exact shape for clients that already use them.


    To test an integration without touching production data, create a separate project for it: each project has its own keys and data, and the free plan covers it. `load_sample_data` fills a new project with a connected example issue, logs, and trace that never count toward usage, `remove_sample_data` removes exactly those rows, and `send_test_event` checks a key end to end.'
  summary: Read and manage LogBrew projects, issues, logs, traces, actions, metrics, releases, and product analytics.
  title: LogBrew Connected clients API
  version: '1'
servers:
- description: LogBrew API
  url: https://api.logbrew.co
tags:
- description: AI clients you connected to the LogBrew MCP server.
  name: Connected clients
paths:
  /api/mcp/grants:
    get:
      description: List the AI clients you connected and the projects each one reads. Needs an account access token. Send `response_version` 2.
      operationId: list_connected_clients
      parameters:
      - description: The response version this document describes.
        in: query
        name: response_version
        required: true
        schema:
          enum:
          - 2
          type: integer
      responses:
        '200':
          content:
            application/json:
              example:
                grants:
                - client_id: string
                  client_name: string
                  created_at: '2026-10-27T12:00:00Z'
                  expires_at: '2026-10-27T12:00:00Z'
                  id: 0b9f7c4e-2f2a-4a8e-9a65-2d2a7e8f1c11
                  last_used_at: '2026-10-27T12:00:00Z'
                  project_ids:
                  - 0b9f7c4e-2f2a-4a8e-9a65-2d2a7e8f1c11
              schema:
                $ref: '#/components/schemas/GrantList'
          description: Success.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/Error'
      security:
      - accessToken: []
      summary: List the AI clients you connected and the projects each one reads
      tags:
      - Connected clients
  /api/mcp/grants/{grant_id}:
    delete:
      description: Disconnect one AI client. Its tokens stop working at once. Needs an account access token.
      operationId: disconnect_client
      parameters:
      - in: path
        name: grant_id
        required: true
        schema:
          format: uuid
          type: string
      responses:
        '204':
          description: Done.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/Error'
      security:
      - accessToken: []
      summary: Disconnect one AI client. Its tokens stop working at once
      tags:
      - Connected clients
components:
  responses:
    Error:
      content:
        application/json:
          schema:
            properties:
              code:
                description: Stable reason, such as `unauthorized`, `forbidden`, `not_found`, `validation_failed`, `rate_limited`, or `usage_limit_exceeded`.
                type: string
              deleted_at:
                description: When the account was deleted, on `account_recovery_available`.
                type: string
              error:
                description: What went wrong, in words.
                type: string
              limit:
                description: The limit that was reached.
                type: string
              next:
                description: How to recover.
                type: string
              next_action:
                description: The recovery as stable codes.
                properties:
                  code:
                    description: Stable recovery action, such as `sign_in` or `retry_later`.
                    type: string
                  target:
                    description: Where the recovery happens, such as `auth` or `billing`.
                    type: string
                required:
                - code
                - target
                type: object
              recovery_token:
                description: Token for restore_account, on `account_recovery_available`.
                type: string
              reset_at:
                description: When the limit resets, as an RFC 3339 time.
                type: string
              retry_after_seconds:
                description: Seconds to wait, on `rate_limited`.
                minimum: 0
                type: integer
            required:
            - error
            - code
            - next
            - next_action
            type: object
      description: The request failed. `code` names the reason and `next` says how to recover.
    RateLimited:
      content:
        application/json:
          schema:
            properties:
              code:
                description: Stable reason, such as `unauthorized`, `forbidden`, `not_found`, `validation_failed`, `rate_limited`, or `usage_limit_exceeded`.
                type: string
              deleted_at:
                description: When the account was deleted, on `account_recovery_available`.
                type: string
              error:
                description: What went wrong, in words.
                type: string
              limit:
                description: The limit that was reached.
                type: string
              next:
                description: How to recover.
                type: string
              next_action:
                description: The recovery as stable codes.
                properties:
                  code:
                    description: Stable recovery action, such as `sign_in` or `retry_later`.
                    type: string
                  target:
                    description: Where the recovery happens, such as `auth` or `billing`.
                    type: string
                required:
                - code
                - target
                type: object
              recovery_token:
                description: Token for restore_account, on `account_recovery_available`.
                type: string
              reset_at:
                description: When the limit resets, as an RFC 3339 time.
                type: string
              retry_after_seconds:
                description: Seconds to wait, on `rate_limited`.
                minimum: 0
                type: integer
            required:
            - error
            - code
            - next
            - next_action
            type: object
      description: Too many requests. Wait the `Retry-After` seconds, then retry.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            minimum: 0
            type: integer
    Unauthorized:
      content:
        application/json:
          schema:
            properties:
              code:
                description: Stable reason, such as `unauthorized`, `forbidden`, `not_found`, `validation_failed`, `rate_limited`, or `usage_limit_exceeded`.
                type: string
              deleted_at:
                description: When the account was deleted, on `account_recovery_available`.
                type: string
              error:
                description: What went wrong, in words.
                type: string
              limit:
                description: The limit that was reached.
                type: string
              next:
                description: How to recover.
                type: string
              next_action:
                description: The recovery as stable codes.
                properties:
                  code:
                    description: Stable recovery action, such as `sign_in` or `retry_later`.
                    type: string
                  target:
                    description: Where the recovery happens, such as `auth` or `billing`.
                    type: string
                required:
                - code
                - target
                type: object
              recovery_token:
                description: Token for restore_account, on `account_recovery_available`.
                type: string
              reset_at:
                description: When the limit resets, as an RFC 3339 time.
                type: string
              retry_after_seconds:
                description: Seconds to wait, on `rate_limited`.
                minimum: 0
                type: integer
            required:
            - error
            - code
            - next
            - next_action
            type: object
      description: The credential is missing, expired, or revoked, or this operation does not accept it.
  schemas:
    GrantResponse:
      description: One connected client.
      properties:
        client_id:
          description: Client ID (its metadata document URL).
          type: string
        client_name:
          description: 'Name from the client''s metadata document when the user approved it, such

            as "Claude Code". Untrusted display text (at most 100 characters, no

            control characters); escape it. `null` for grants approved before names

            were stored; show the `client_id` host instead.'
          type:
          - string
          - 'null'
        created_at:
          description: When the user approved the client.
          format: date-time
          type: string
        expires_at:
          description: When the grant ends unless the client refreshes it.
          format: date-time
          type: string
        id:
          description: Grant ID, used to revoke it.
          format: uuid
          type: string
        last_used_at:
          description: Latest token issue; refreshes happen about hourly while the client is in use.
          format: date-time
          type: string
        project_ids:
          description: Projects the user approved for this client.
          items:
            format: uuid
            type: string
          type: array
      required:
      - id
      - client_id
      - client_name
      - project_ids
      - created_at
      - last_used_at
      - expires_at
      type: object
    GrantList:
      description: Active grants of the account.
      properties:
        grants:
          description: Most recently used first.
          items:
            $ref: '#/components/schemas/GrantResponse'
          type: array
      required:
      - grants
      type: object
  securitySchemes:
    accessToken:
      bearerFormat: JWT
      description: Account access token. It acts as your account in every project you can reach. `logbrew login` creates one; renew it with refresh_access_token before it expires.
      scheme: bearer
      type: http
    projectKey:
      description: 'Project key. A key reaches only its own project and has one kind: `read` keys (prefix `lbw_read_`) read telemetry; `sdk`, `server`, `browser`, and `cli` keys (prefix `lbw_ingest_`) send telemetry; `artifact` keys upload debug files. Each operation''s security requirement lists the kinds it accepts.'
      scheme: bearer
      type: http