Honen Workspace Assistant API
The workspace-assistant API from Honen — 1 operation(s) for workspace-assistant.
The workspace-assistant API from Honen — 1 operation(s) for workspace-assistant.
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/honen-com:honen-com-workspace-assistant-api"
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.
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: Honen Connector Workspace Assistant API
version: 1.0.0
description: 'Workspace Connector HTTP API. Every command is POST /api/v1/{domain}/{action} with a JSON body, authenticated with a Connector Bearer token and authorized by the Connector''s policy. Mutating commands accept Idempotency-Key so network retries cannot duplicate writes. Versioning and deprecation policy: /api/v1 is stable; breaking changes use a new major version. Deprecated operations are marked in OpenAPI and documented with migration steps; scheduled retirement is announced with Sunset. See https://honen.com/developers/the-http-api-api-v1-conventions.md and https://honen.com/developers/llms.txt.'
servers:
- url: https://honen.com
tags:
- name: workspace-assistant
paths:
/api/v1/workspace-assistant/run:
post:
operationId: workspace-assistant_run
summary: Run a bash script in the Workspace Assistant sandbox
description: Same just-bash environment, fetch-*/do-* commands, and /skills/*.md as the in-app assistant. Pass sessionId to persist /data across calls.
tags:
- workspace-assistant
security:
- bearerAuth: []
parameters:
- schema:
type: string
minLength: 1
maxLength: 255
description: Unique retry key. Reusing it with the same body replays the original successful response; different input returns 409.
required: false
description: Unique retry key. Reusing it with the same body replays the original successful response; different input returns 409.
name: Idempotency-Key
in: header
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
script:
type: string
minLength: 1
sessionId:
type: string
required:
- script
responses:
'200':
description: Command result.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
enum:
- true
data:
type: object
properties:
sessionId:
type:
- string
- 'null'
exitCode:
type: number
stdout:
type: string
stderr:
type: string
navigateIntents:
type: array
items:
type: object
properties:
kind:
type: string
enum:
- navigate
href:
type: string
label:
type: string
required:
- kind
- href
- label
dataFiles:
type: array
items:
type: string
snapshotReport:
type: string
dataSnapshotMaxBytes:
type: number
required:
- sessionId
- exitCode
- stdout
- stderr
- navigateIntents
- dataFiles
- snapshotReport
- dataSnapshotMaxBytes
required:
- success
- data
'400':
description: Malformed JSON request body.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid Connector credentials.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: Connector policy does not permit this command.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Unknown command.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: Idempotency key is reused, in progress, or belongs to a failed request.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Input validation error.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Request quota exhausted. Wait for Retry-After seconds before retrying, with jitter. Reuse Idempotency-Key for mutations.
headers:
RateLimit:
description: 'Current quota: policy name, remaining requests (r), seconds until reset (t).'
schema:
type: string
example: '"connector-api";r=599;t=42'
RateLimit-Policy:
description: 'Quota policy: requests per window (q), window length in seconds (w). Authenticated calls share 600 requests per 60 seconds per Connector; unauthenticated calls have 60 per 60 seconds per client IP.'
schema:
type: string
example: '"connector-api";q=600;w=60'
RateLimit-Limit:
description: 'Compatibility field: requests allowed per window.'
schema:
type: integer
minimum: 1
RateLimit-Remaining:
description: 'Compatibility field: requests remaining after this request.'
schema:
type: integer
minimum: 0
RateLimit-Reset:
description: 'Compatibility field: seconds until reset, not a Unix timestamp.'
schema:
type: integer
minimum: 0
Retry-After:
description: Minimum seconds to wait before retrying.
schema:
type: integer
minimum: 1
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
ErrorResponse:
type: object
properties:
success:
type: boolean
enum:
- false
error:
type: object
properties:
code:
type: string
message:
type: string
resolution:
type: string
errors:
type: object
additionalProperties:
type: array
items:
type: string
details: {}
required:
- code
- message
- resolution
required:
- success
- error
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'A Connector secret or child token (Authorization: Bearer hn_…).'
externalDocs:
description: Honen documentation
url: https://honen.com/docs