Honen Course Editor API

The course-editor API from Honen — 1 operation(s) for course-editor.

GitHub OpenAPI

Operations 1

POST /api/v1/course-editor/run Run a bash script against a course revision filesystem #

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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/honen-com:honen-com-course-editor-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

honen-com-course-editor-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Honen Connector Course Editor 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: course-editor
paths:
  /api/v1/course-editor/run:
    post:
      operationId: course-editor_run
      summary: Run a bash script against a course revision filesystem
      description: Run a bash script against a course revision filesystem.
      tags:
      - course-editor
      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:
                courseId:
                  type: string
                  pattern: ^[0-9a-fA-F]{24}$
                script:
                  type: string
                  minLength: 1
                sessionId:
                  type: string
              required:
              - courseId
              - 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:
                      text:
                        type: string
                      isError:
                        type: boolean
                        enum:
                        - false
                        - true
                    required:
                    - text
                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