agentboxd-com Shakehand API
Sign in with Agentboxd: identity tokens, sign-in apps and identities without a mailbox.
Sign in with Agentboxd: identity tokens, sign-in apps and identities without a mailbox.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/agentboxd-com:agentboxd-com-shakehand-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Agentboxd Com Shakehand API
version: '1'
contact:
name: Agentboxd
url: https://agentboxd.com
email: hello@agentboxd.com
description: 'Operations tagged Shakehand across 2 of this provider''s published API definitions: agentboxd-com-openapi.json, agentboxd-com-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.agentboxd.com
security:
- apiKey: []
tags:
- name: Shakehand
description: 'Sign in with Agentboxd: identity tokens, sign-in apps and identities without a mailbox.'
paths:
/v1/identities:
post:
operationId: postIdentities
tags:
- Shakehand
summary: Create an identity without a mailbox
description: '`{ username?, display_name?, client_id?, metadata?, card? }` → `201` an identity without a mailbox (`200` on a `client_id` replay). Needs `inboxes:write` and a workspace key. `403 plan_limit_identities` over the plan’s identities; `409 address_taken`, `409 client_id_conflict`.
Permission: `inboxes:write`.'
x-permission: inboxes:write
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
minLength: 1
maxLength: 64
display_name:
type: string
minLength: 1
maxLength: 128
client_id:
type: string
minLength: 1
maxLength: 255
metadata:
type: object
propertyNames:
type: string
pattern: ^[a-zA-Z0-9_.-]{1,64}$
additionalProperties:
anyOf:
- type: string
maxLength: 1000
- type: number
- type: boolean
- type: 'null'
card:
type: object
propertyNames:
type: string
additionalProperties: {}
additionalProperties: false
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
get:
operationId: getIdentities
tags:
- Shakehand
summary: List identities without a mailbox
description: 'Identities without a mailbox, newest first, paginated; `metadata.=` filters. Needs `inboxes:read`.
Permission: `inboxes:read`.'
x-permission: inboxes:read
parameters:
- name: cursor
in: query
required: false
schema:
type: string
- name: limit
in: query
required: false
schema:
default: 25
type: integer
minimum: 1
maximum: 100
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
/v1/identities/{id}:
get:
operationId: getIdentitiesById
tags:
- Shakehand
summary: Get an identity
description: '`{ id, kind: "identity", address, username, display_name, client_id, metadata, identity_enabled, status, paused_at, paused_reason, created_at }`. Inbox ids answer `404` here.
Permission: `inboxes:read`.'
x-permission: inboxes:read
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
patch:
operationId: patchIdentitiesById
tags:
- Shakehand
summary: Update an identity
description: '`{ display_name?, metadata? }`. Needs `inboxes:write`.
Permission: `inboxes:write`.'
x-permission: inboxes:write
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
display_name:
anyOf:
- type: string
minLength: 1
maxLength: 128
- type: 'null'
metadata:
type: object
propertyNames:
type: string
pattern: ^[a-zA-Z0-9_.-]{1,64}$
additionalProperties:
anyOf:
- type: string
maxLength: 1000
- type: number
- type: boolean
- type: 'null'
additionalProperties: false
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
operationId: deleteIdentitiesById
tags:
- Shakehand
summary: Delete an identity
description: 'Removes the identity: it can’t sign in any more and its handle is never reissued. Needs `inboxes:write`.
Permission: `inboxes:write`.'
x-permission: inboxes:write
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
/v1/identity/clients:
get:
operationId: getIdentityClients
tags:
- Shakehand
summary: List sign-in apps
description: 'Your registered apps. Needs `identity:manage`.
Permission: `identity:manage`.'
x-permission: identity:manage
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
operationId: postIdentityClients
tags:
- Shakehand
summary: Register a sign-in app
description: '`{ name, type: "confidential" | "public" | "verify_only", redirect_uris?, allowed_scopes?, subject_type?: "pairwise" | "public", homepage_url? }` → `201 { client, client_secret }` (the secret only for confidential apps, shown once).
Permission: `identity:manage`.'
x-permission: identity:manage
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
minLength: 1
maxLength: 100
type:
default: confidential
type: string
enum:
- confidential
- public
- verify_only
redirect_uris:
default: []
maxItems: 10
type: array
items:
type: string
minLength: 1
maxLength: 2000
allowed_scopes:
minItems: 1
type: array
items:
type: string
enum:
- openid
- email
- profile
- workspace
subject_type:
default: pairwise
type: string
enum:
- pairwise
- public
homepage_url:
anyOf:
- type: string
maxLength: 2000
format: uri
- type: 'null'
required:
- name
additionalProperties: false
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
/v1/identity/clients/{id}:
get:
operationId: getIdentityClientsById
tags:
- Shakehand
summary: Get a sign-in app
description: 'One app: `client_id`, `type`, `redirect_uris`, `allowed_scopes`, `subject_type`, `secret_prefix`, `enabled`, `last_used_at`.
Permission: `identity:manage`.'
x-permission: identity:manage
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
patch:
operationId: patchIdentityClientsById
tags:
- Shakehand
summary: Update a sign-in app
description: '`{ name?, redirect_uris?, allowed_scopes?, homepage_url?, enabled? }`. `type` and `subject_type` are fixed.
Permission: `identity:manage`.'
x-permission: identity:manage
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
minLength: 1
maxLength: 100
redirect_uris:
maxItems: 10
type: array
items:
type: string
minLength: 1
maxLength: 2000
allowed_scopes:
minItems: 1
type: array
items:
type: string
enum:
- openid
- email
- profile
- workspace
homepage_url:
anyOf:
- type: string
maxLength: 2000
format: uri
- type: 'null'
enabled:
type: boolean
additionalProperties: false
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
operationId: deleteIdentityClientsById
tags:
- Shakehand
summary: Delete a sign-in app
description: 'Removes the app. Its tokens stop working at the token and userinfo endpoints at once.
Permission: `identity:manage`.'
x-permission: identity:manage
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
/v1/identity/clients/{id}/secret:
post:
operationId: postIdentityClientsByIdSecret
tags:
- Shakehand
summary: Rotate a sign-in app’s secret
description: 'New client secret → `{ client, client_secret }`. The old one stops working.
Permission: `identity:manage`.'
x-permission: identity:manage
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
/v1/inboxes/{id}/identity:
get:
operationId: getInboxesByIdIdentity
tags:
- Shakehand
summary: Get an inbox’s sign-in settings
description: '`{ inbox_id, enabled, apps }`: whether the inbox can sign in and the apps it signed in to. Needs `inboxes:read`.
Permission: `inboxes:read`.'
x-permission: inboxes:read
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
patch:
operationId: patchInboxesByIdIdentity
tags:
- Shakehand
summary: Turn sign-in on or off for an inbox
description: '`{ enabled }` turns the inbox’s identity on or off. Needs `identity:manage`.
Permission: `identity:manage`.'
x-permission: identity:manage
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
/v1/inboxes/{id}/identity-token:
post:
operationId: postInboxesByIdIdentityToken
tags:
- Shakehand
summary: Mint an identity token
description: '`{ audience, nonce?, scope?, expires_in? }` → `201 { id_token, token_type, issuer, audience, sub, jti, scope, expires_in, expires_at }`. A single-use ID token for one app, at most 5 minutes. `:id` is an inbox or an identity without a mailbox. Needs `identity:sign`. Errors: `400 unknown_audience`, `400 invalid_scope`, `403 identity_disabled`, `403 identity_unavailable` (temporary inbox), `429 rate_limited` (30 per inbox per minute).
Permission: `identity:sign`.'
x-permission: identity:sign
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
audience:
type: string
minLength: 1
maxLength: 2000
nonce:
type: string
minLength: 1
maxLength: 256
scope:
type: string
maxLength: 200
expires_in:
type: integer
minimum: 30
maximum: 300
required:
- audience
additionalProperties: false
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
/v1/inboxes/{id}/identity/sign-ins:
get:
operationId: getInboxesByIdIdentitySignIns
tags:
- Shakehand
summary: List an inbox’s sign-ins
description: 'Sign-in log, newest first, paginated. Needs `inboxes:read`.
Permission: `inboxes:read`.'
x-permission: inboxes:read
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
- name: cursor
in: query
required: false
schema:
type: string
- name: limit
in: query
required: false
schema:
default: 25
type: integer
minimum: 1
maximum: 100
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
4XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
5XX:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.agentboxd.com
components:
schemas:
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
description: Stable, machine-readable error code.
message:
type: string
description: What happened and how to fix it, in plain words.
details:
description: 'The specifics: which recipient, which limit, until when.'
docs_url:
type: string
format: uri
description: 'For a refused send: its entry on "Why was my send refused?" (https://agentboxd.com/docs/send-refusals).'
securitySchemes:
apiKey:
type: http
scheme: bearer
description: An API key (`mr_…`), scoped to the workspace or one inbox, with a set of permissions.
externalDocs:
description: API reference
url: https://agentboxd.com/docs/api
x-refined-from:
- agentboxd-com-openapi.json
- agentboxd-com-openapi.json