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/brixsignage-com:brixsignage-com-shared-with-me-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: 3.2.0
info:
title: Brix Shared With Me API
version: '1'
summary: 'Control plane for Brix digital signage: screens, content, playlists, schedules, casts and emergencies.'
description: 'Generated from the route table the API actually mounts
(`apps/api/routes.snapshot.json`), the description each route is required to
carry (`tests/contracts/route-registry.json`), and request/response schemas
(`apps/api/src/openapi/`). CI enforces all three, so this document cannot list a
route that does not exist or omit one that does.
**Schemas.** 447 operations carry request and response schemas
(`x-brix-schema: verified`). Each is checked in CI against the response the
real handler returns — a missing, mistyped or undeclared field fails the build.
The remaining operations are route-level only (`x-brix-schema: none`): their
path, method, permission and purpose are exact, but the shape of `data` is not
yet modelled, and we would rather say so than publish a schema that validates
against nothing. Objects are open: a new field is not a breaking change.
**Envelope.** Success bodies are `{ "data": … }`. Failures are
`{ "error": "", "message": "…" }`, plus `requestId` on a 5xx.
Many list routes page opt-in (see each operation): pass `?limit=` and
follow `nextCursor` via `?cursor=` until it is null.
**Authentication.** `Authorization: Bearer ` with an API key
(`ak_…`, created in the console under Settings → API & MCP) or a user session. An
API key carries a creator-chosen set of `resource.verb` permissions and may be
pinned to one location''s subtree; a key can never be granted a permission its
creator does not hold. The permission an operation needs is in
`x-brix-permission` and in its security requirement.
**Tenancy.** Every request resolves to one workspace. A resource belonging to
another tenant returns 404, never 403, so a response never confirms that an
account exists.
**Rate limits.** A 429 carries `Retry-After`; a 503 `database_busy` means retry
after the `Retry-After` interval.'
servers:
- url: https://api.brixsignage.com
description: Production
security:
- bearerAuth: []
tags:
- name: shared-with-me
paths:
/v1/shared-with-me:
get:
operationId: getSharedWithMe
tags:
- shared-with-me
summary: List airtime shared with me
description: 'List airtime slices that other teams have reserved and made available for the caller''s team to fill.
**Notes.**
- Only slices the caller can fill are listed. Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.'
x-brix-permission: playlist.view
x-brix-schema: verified
x-brix-notes:
- Only slices the caller can fill are listed. Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.
responses:
'200':
description: Success.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
allocationId:
type: string
label:
type: string
reservedForNodeId:
type: string
description: The location the slice is reserved for.
reservedForName:
type: string
kind:
type: string
enum:
- percent
- every-nth
- daypart
description: Only `percent` and `every-nth` slices are listed.
value:
type: number
description: The share of airtime (a percentage, or every Nth item).
requiresApproval:
type: boolean
sourcePlaylist:
type: object
properties:
id:
type: string
name:
type: string
nodeId:
anyOf:
- type: string
- type: 'null'
required:
- id
- name
- nodeId
fill:
anyOf:
- type: object
properties:
id:
type: string
name:
type: string
approvalState:
type: string
enum:
- draft
- pending
- approved
- rejected
description: Where the fill stands in review. With `requiresApproval`, only `approved` plays.
required:
- id
- name
- approvalState
- type: 'null'
description: The playlist that fills the slice; null when none is bound.
required:
- allocationId
- label
- reservedForNodeId
- reservedForName
- kind
- value
- requiresApproval
- sourcePlaylist
- fill
required:
- data
'401':
description: Missing, expired or revoked bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: The token lacks the permission this operation needs (see `x-brix-permission`).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Server error. The body carries a `requestId` to quote to support.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- bearerAuth:
- playlist.view
/v1/shared-with-me/{allocationId}/fill:
post:
operationId: createSharedWithMeFill
tags:
- shared-with-me
summary: Create a fill playlist
description: 'Create a new playlist and attach it as the fill for an airtime slice reserved for the caller''s team.
**Notes.**
- Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.
- The new playlist is empty and is placed at the reserved location.'
x-brix-permission: playlist.view
x-brix-schema: verified
x-brix-notes:
- Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.
- The new playlist is empty and is placed at the reserved location.
parameters:
- name: allocationId
in: path
required: true
schema:
type: string
description: Slice (allocation) id.
example: alloc_7a8b9c0d1e2f3a4b
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
description: Default `<location> slice`.
type: string
responses:
'200':
description: 'Success: A fill playlist is already bound: it is returned (`created: false`) and nothing is created.'
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
allocationId:
type: string
fillPlaylistId:
type: string
name:
type: string
created:
type: boolean
required:
- allocationId
- fillPlaylistId
- name
- created
required:
- data
'201':
description: Success.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
allocationId:
type: string
fillPlaylistId:
type: string
name:
type: string
created:
type: boolean
required:
- allocationId
- fillPlaylistId
- name
- created
required:
- data
'401':
description: Missing, expired or revoked bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: You cannot fill this slice.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: No such fillable slice in this workspace.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Server error. The body carries a `requestId` to quote to support.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- bearerAuth:
- playlist.view
put:
operationId: replaceSharedWithMeFill
tags:
- shared-with-me
summary: Set the fill playlist
description: 'Attach an existing playlist as the fill for an airtime slice reserved for the caller''s team. Send `playlistId` as `null` to remove it.
**Notes.**
- Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.'
x-brix-permission: playlist.view
x-brix-schema: verified
x-brix-notes:
- Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.
parameters:
- name: allocationId
in: path
required: true
schema:
type: string
description: Slice (allocation) id.
example: alloc_7a8b9c0d1e2f3a4b
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
playlistId:
anyOf:
- type: string
- type: 'null'
description: A playlist you can edit; null unbinds.
required:
- playlistId
responses:
'200':
description: Success.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
allocationId:
type: string
fillPlaylistId:
anyOf:
- type: string
- type: 'null'
required:
- allocationId
- fillPlaylistId
required:
- data
'401':
description: Missing, expired or revoked bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: You cannot fill this slice, or cannot edit that playlist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: No such fillable slice, or no such playlist in this workspace.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The playlist is the one the slice belongs to.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Server error. The body carries a `requestId` to quote to support.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- bearerAuth:
- playlist.view
/v1/shared-with-me/{allocationId}/source:
get:
operationId: getSharedWithMeSource
tags:
- shared-with-me
summary: Read the playlist a slice belongs to
description: 'Get the owner playlist around an airtime slice shared with your team: its name, whether it shuffles, its items in play order (name, kind, thumbnail, duration), and the share itself (kind, value, whether approval is required, and your fill playlist). Read only. Besides `playlist.view`, you need `playlist.edit` at the location the slice is reserved for. Other locations’ shares and the owner’s settings are not returned.
**Notes.**
- Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.
- Read only. Other locations'' shares and the owner''s settings are not returned.'
x-brix-permission: playlist.view
x-brix-schema: verified
x-brix-notes:
- Besides `playlist.view`, the caller needs `playlist.edit` at the location the slice is reserved for.
- Read only. Other locations' shares and the owner's settings are not returned.
parameters:
- name: allocationId
in: path
required: true
schema:
type: string
description: Slice (allocation) id.
example: alloc_7a8b9c0d1e2f3a4b
responses:
'200':
description: Success.
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
playlist:
type: object
properties:
id:
type: string
name:
type: string
shuffle:
type: boolean
required:
- id
- name
- shuffle
items:
type: array
items:
type: object
properties:
name:
type: string
kind:
type: string
thumbnailUrl:
anyOf:
- type: string
- type: 'null'
durationSec:
type: number
required:
- name
- kind
- thumbnailUrl
- durationSec
description: 'The owner''s items in order: what plays around your share.'
share:
type: object
properties:
kind:
type: string
enum:
- percent
- every-nth
- daypart
value:
type: number
requiresApproval:
type: boolean
reservedForName:
type: string
fillPlaylistId:
anyOf:
- type: string
- type: 'null'
required:
- kind
- value
- requiresApproval
- reservedForName
- fillPlaylistId
required:
- playlist
- items
- share
required:
- data
'401':
description: Missing, expired or revoked bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: You cannot fill this slice.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: No such fillable slice in this workspace.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Server error. The body carries a `requestId` to quote to support.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- bearerAuth:
- playlist.view
components:
schemas:
Error:
type: object
properties:
error:
type: string
description: 'Machine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, …'
message:
description: Human-readable explanation. Safe to show an operator.
type: string
requestId:
description: 'Present on 5xx: quote it to support.'
type: string
required:
- error
additionalProperties: {}
description: Error envelope returned by every failing request.
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: An API key (`ak_…`) or a user session token. API keys carry `resource.verb` permissions.