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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/granite-md:granite-md-meta-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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
openapi: 3.2.0
info:
title: Granite Meta API
version: 1.0.0
summary: REST API for Granite clients, bots, and integrations.
description: 'Conventions (apply to every operation; see PLAN.md 3.2 and 3.6):
- **Base URL** `https://api.granite.md`. All public operations live under `/v1`.
After Phase 6 ships, `/v1` changes are additive only.
- **Errors** use RFC 9457 problem details (`application/problem+json`, schema `Problem`).
The `type` URI is `https://granite.md/problems/`; `code` refines it for programmatic handling.
Every response carries `X-Request-ID`, also echoed as `request_id` in problems.
- **Pagination** is cursor based. List operations accept `cursor` and `limit` and return
`{ "items": [...], "next_cursor": "..." }`. `next_cursor` is absent on the last page.
Cursors are opaque; clients must not parse or build them.
- **Idempotency**: non-idempotent `POST` operations accept an `Idempotency-Key` header
(1-255 printable ASCII). Repeating a request with the same key and body within 24 hours
returns the original response; the same key with a different body returns `409` with
code `idempotency_key_reused`.
- **IDs** are UUIDv7 strings. **Timestamps** are RFC 3339 in UTC.
- **Authentication**: `Authorization: Bearer ` with a session access token,
a personal API token (`gr_pat_...`), or an OAuth access token. Scopes are listed per operation.
- **Rate limits**: each personal API token may make 600 requests a minute. Over the limit
the API answers `429` with code `token_rate_limited` and a `Retry-After` header (seconds).'
license:
name: Proprietary
identifier: LicenseRef-Proprietary
servers:
- url: https://api.granite.md
description: Production
- url: http://localhost:8080
description: Local development
security:
- bearerAuth: []
tags:
- name: Meta
description: Service information.
paths:
/v1/meta:
get:
operationId: getMeta
tags:
- Meta
summary: Service information
description: Returns the API and server versions. Does not require authentication.
security: []
responses:
'200':
description: Service information.
content:
application/json:
schema:
$ref: '#/components/schemas/Meta'
default:
$ref: '#/components/responses/Error'
/v1/telemetry:
post:
operationId: reportClientError
tags:
- Meta
summary: Report an app error
description: 'Crash and error reports from the apps (PLAN.md P5-T01), written to the server log for
the on-call person. No sign-in is needed (an app can fail before it). Reports must not
contain note text, file names, or anything the person typed. Limited per address.'
security: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClientErrorReport'
responses:
'202':
description: Recorded.
'429':
$ref: '#/components/responses/TooManyRequests'
default:
$ref: '#/components/responses/Error'
components:
headers:
RequestID:
description: Identifier of this request, for support and log correlation.
schema:
type: string
RetryAfter:
description: Seconds to wait before retrying.
schema:
type: integer
schemas:
ClientErrorReport:
type: object
required:
- kind
- message
- platform
- app_version
properties:
kind:
type: string
enum:
- crash
- error
- render
message:
type: string
maxLength: 1000
stack:
type: string
maxLength: 8000
screen:
type: string
maxLength: 200
platform:
type: string
enum:
- web
- macos
- windows
- linux
- ios
- android
- cli
- other
app_version:
type: string
maxLength: 50
os_version:
type: string
maxLength: 50
Meta:
type: object
required:
- api_version
- server_version
properties:
api_version:
type: string
description: Version of this API document.
examples:
- 1.0.0
server_version:
type: string
description: Build version of the server.
examples:
- 2026.10.1
Problem:
type: object
description: RFC 9457 problem details.
required:
- type
- title
- status
properties:
type:
type: string
format: uri
examples:
- https://granite.md/problems/conflict
title:
type: string
status:
type: integer
format: int32
detail:
type: string
instance:
type: string
code:
type: string
description: Machine-readable refinement of `type`, for example `version_conflict`.
request_id:
type: string
errors:
type: array
description: Per-field validation errors.
items:
$ref: '#/components/schemas/FieldError'
FieldError:
type: object
required:
- field
- detail
properties:
field:
type: string
description: JSON path of the invalid field, for example `ops[2].path`.
detail:
type: string
responses:
TooManyRequests:
description: Rate limit exceeded.
headers:
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Request-ID:
$ref: '#/components/headers/RequestID'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
Error:
description: Error response.
headers:
X-Request-ID:
$ref: '#/components/headers/RequestID'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Session access token, personal API token, or OAuth access token.