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: 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