# Generated by tools/build_api.py from api/operations.yaml and api/schemas.yaml. Do not edit. openapi: 3.1.0 info: title: HareBox API version: 1.0.0 summary: Full VMs for AI agents. description: 'The HareBox API. Production is served at `https://api.harebox.com/v1` once HareBox launches; a local build (`hareboxd`) serves the same API at `http://127.0.0.1:8787/v1`. Conventions: state names are identical on every surface; every error has `code`, `message` and, when one exists, `fix`; every create accepts `Idempotency-Key`; every list uses `limit` and `cursor`; every stream resumes from its last event ID.' license: name: Proprietary identifier: LicenseRef-Proprietary servers: - url: https://api.harebox.com/v1 description: Production, in the EU - url: http://127.0.0.1:8787/v1 description: A local build security: - bearer: [] tags: - name: Account description: Identity, organizations, projects, members and limits. - name: Catalog description: 'Public facts: rates, regions and harnesses.' - name: Data description: Retention, deletion, long-running operations and audit. - name: Environments description: Versioned repositories, secrets and setup for new sandboxes. - name: Keys description: Scoped API keys. - name: Events description: Webhooks, event streams and telemetry export. - name: CI description: GitHub Actions runners. - name: Credentials description: Credential profiles, the credentials proxy and vaults. - name: Sandboxes description: The sandbox lifecycle. - name: Commands description: Run, stream and inspect commands. - name: Files description: Read and change files in a sandbox. - name: Agents description: Prompt, stream, steer and interrupt harnesses. - name: Access description: Desktop, computer use, public endpoints and SSH. - name: Network description: Firewalls, static IPs, domains and private meshes. - name: Snapshots description: Disk and memory snapshots. - name: Templates description: Named, versioned starting points. - name: Fleets description: Groups of sandboxes and schedules. - name: Billing description: Plans, wallet, budgets, reservations and usage. - name: Co-pilot description: Forecasts and savings recommendations. paths: /me: get: operationId: getMe summary: Get the current identity tags: - Account x-required-scope: account.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Identity' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox whoami /orgs: get: operationId: listOrgs summary: List organizations tags: - Account x-required-scope: account.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/OrgList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org list post: operationId: createOrg summary: Create an organization tags: - Account x-required-scope: account.admin parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateOrgRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Org' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org new /orgs/{org}: patch: operationId: updateOrg summary: Update organization settings tags: - Account x-required-scope: account.admin parameters: - name: org in: path required: true schema: type: string description: The org ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateOrgRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Org' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org set /orgs/active: patch: operationId: setActiveOrg summary: Set the active organization tags: - Account x-required-scope: account.read requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SetActiveOrgRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Org' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org switch /orgs/{org}/members: get: operationId: listMembers summary: List members tags: - Account x-required-scope: account.read parameters: - name: org in: path required: true schema: type: string description: The org ID or name. - name: limit in: query required: false schema: &id001 type: integer minimum: 1 maximum: 500 default: 100 description: Page size. - name: cursor in: query required: false schema: &id002 type: string description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/MemberList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org members post: operationId: inviteMember summary: Invite a member tags: - Account x-required-scope: account.admin parameters: - name: org in: path required: true schema: type: string description: The org ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InviteMemberRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Member' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org invite /orgs/{org}/members/{member}: patch: operationId: updateMember summary: Change a member's role or caps tags: - Account x-required-scope: account.admin parameters: - name: org in: path required: true schema: type: string description: The org ID or name. - name: member in: path required: true schema: type: string description: The member ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateMemberRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Member' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org member set delete: operationId: removeMember summary: Remove a member tags: - Account x-required-scope: account.admin parameters: - name: org in: path required: true schema: type: string description: The org ID or name. - name: member in: path required: true schema: type: string description: The member ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox org remove /projects: get: operationId: listProjects summary: List projects tags: - Account x-required-scope: account.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProjectList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox project list post: operationId: createProject summary: Create a project tags: - Account x-required-scope: account.admin parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateProjectRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Project' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox project new /projects/{project}: patch: operationId: updateProject summary: Update a project tags: - Account x-required-scope: account.admin parameters: - name: project in: path required: true schema: type: string description: The project ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateProjectRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Project' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox project set delete: operationId: deleteProject summary: Delete an empty project tags: - Account x-required-scope: account.admin parameters: - name: project in: path required: true schema: type: string description: The project ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox project rm /agent-registrations: post: operationId: registerAgent summary: Register an agent without a pasted key tags: - Account security: [] parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AgentRegistrationRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/AgentRegistration' '400': $ref: '#/components/responses/E400' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox login --agent /agent-registrations/{registration}/claim: post: operationId: claimAgent summary: Start a human claim of an agent account tags: - Account security: [] parameters: - name: registration in: path required: true schema: type: string description: The registration ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ClaimRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/AgentRegistration' '400': $ref: '#/components/responses/E400' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' /limits: get: operationId: getLimits summary: Get limits and what remains tags: - Account x-required-scope: account.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Limits' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox limits /rates: get: operationId: getRates summary: Get the public rate card tags: - Catalog security: [] responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/RateCard' '400': $ref: '#/components/responses/E400' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox rates /regions: get: operationId: listRegions summary: Show the EU region tags: - Catalog security: [] responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/RegionList' '400': $ref: '#/components/responses/E400' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox regions /harnesses: get: operationId: listHarnesses summary: List harnesses and models tags: - Catalog x-required-scope: account.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/HarnessList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox harnesses /account/data-retention: get: operationId: getRetention summary: Get the retention policy tags: - Data x-required-scope: account.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/RetentionPolicy' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox data-retention status patch: operationId: updateRetention summary: Update the retention policy tags: - Data x-required-scope: account.admin requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RetentionPolicy' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/RetentionPolicy' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox data-retention set /deletion-operations/{operation}: get: operationId: getDeletion summary: Get a deletion operation tags: - Data x-required-scope: account.read parameters: - name: operation in: path required: true schema: type: string description: The operation ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox deletion status /operations/{operation}: get: operationId: getOperation summary: Get any long-running operation tags: - Data x-required-scope: sandbox.read parameters: - name: operation in: path required: true schema: type: string description: The operation ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox op /audit-log: get: operationId: listAuditLog summary: Read the audit log tags: - Data x-required-scope: audit.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: since in: query required: false schema: &id003 type: string format: date-time description: Start of the time range. - name: until in: query required: false schema: &id004 type: string format: date-time description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/AuditList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox audit /repos: get: operationId: listRepos summary: List connected repositories tags: - Environments x-required-scope: environment.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/RepoList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox repo list post: operationId: selectRepo summary: Connect a repository tags: - Environments x-required-scope: environment.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SelectRepoRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Repo' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox repo add /api-keys: get: operationId: listApiKeys summary: List API keys tags: - Keys x-required-scope: account.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ApiKeyList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox api-key list post: operationId: createApiKey summary: Create a scoped API key tags: - Keys x-required-scope: account.admin parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateApiKeyRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/ApiKeyWithSecret' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox api-key new /api-keys/{key}: patch: operationId: updateApiKey summary: Edit a key's name, scopes, IP allowlist or budget tags: - Keys x-required-scope: account.admin parameters: - name: key in: path required: true schema: type: string description: The key ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateApiKeyRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ApiKey' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox api-key set delete: operationId: revokeApiKey summary: Revoke an API key tags: - Keys x-required-scope: account.admin parameters: - name: key in: path required: true schema: type: string description: The key ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox api-key revoke /api-keys/{key}/rotate: post: operationId: rotateApiKey summary: Rotate an API key with an overlap window tags: - Keys x-required-scope: account.admin parameters: - name: key in: path required: true schema: type: string description: The key ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RotateRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ApiKeyWithSecret' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox api-key rotate /api-keys/{key}/usage: get: operationId: getApiKeyUsage summary: Get usage of an API key tags: - Keys x-required-scope: account.read parameters: - name: key in: path required: true schema: type: string description: The key ID or name. - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/UsageReport' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox api-key usage /webhooks: get: operationId: listWebhooks summary: List webhooks tags: - Events x-required-scope: webhook.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/WebhookList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook list post: operationId: createWebhook summary: Create a webhook tags: - Events x-required-scope: webhook.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateWebhookRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/WebhookWithSecret' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook new /webhooks/{webhook}: get: operationId: getWebhook summary: Get a webhook tags: - Events x-required-scope: webhook.read parameters: - name: webhook in: path required: true schema: type: string description: The webhook ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Webhook' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook info patch: operationId: updateWebhook summary: Update a webhook tags: - Events x-required-scope: webhook.write parameters: - name: webhook in: path required: true schema: type: string description: The webhook ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateWebhookRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Webhook' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook set delete: operationId: deleteWebhook summary: Delete a webhook tags: - Events x-required-scope: webhook.write parameters: - name: webhook in: path required: true schema: type: string description: The webhook ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook rm /webhooks/{webhook}/rotate: post: operationId: rotateWebhookSecret summary: Rotate the signing secret with an overlap window tags: - Events x-required-scope: webhook.write parameters: - name: webhook in: path required: true schema: type: string description: The webhook ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RotateRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/WebhookWithSecret' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook rotate /webhooks/{webhook}/deliveries: get: operationId: listDeliveries summary: List delivery attempts tags: - Events x-required-scope: webhook.read parameters: - name: webhook in: path required: true schema: type: string description: The webhook ID or name. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/DeliveryList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook deliveries /webhooks/{webhook}/deliveries/{delivery}/redeliver: post: operationId: redeliver summary: Redeliver an event tags: - Events x-required-scope: webhook.write parameters: - name: webhook in: path required: true schema: type: string description: The webhook ID or name. - name: delivery in: path required: true schema: type: string description: The delivery ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Delivery' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook redeliver /webhooks/{webhook}/test: post: operationId: testWebhook summary: Send a signed test event tags: - Events x-required-scope: webhook.write parameters: - name: webhook in: path required: true schema: type: string description: The webhook ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Delivery' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox webhook test /event-types: get: operationId: listEventTypes summary: List every event type and schema URL tags: - Events security: [] responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/EventTypeList' '400': $ref: '#/components/responses/E400' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox events types /events: get: operationId: listOrgEvents summary: Read account events with a cursor tags: - Events x-required-scope: events.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: type in: query required: false schema: &id005 type: string description: Event type or glob, such as `prompt.*`. - name: sandbox in: query required: false schema: &id006 type: string description: Filter by sandbox. - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/EventList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox events /events/stream: get: operationId: streamOrgEvents summary: Stream account events over SSE tags: - Events x-required-scope: events.read parameters: - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: type in: query required: false schema: *id005 description: Event type or glob, such as `prompt.*`. - name: sandbox in: query required: false schema: *id006 description: Filter by sandbox. responses: '200': description: 'Server-sent events. Each event''s `id` is a resume cursor. Send `Upgrade: websocket` for WebSocket framing.' content: text/event-stream: schema: $ref: '#/components/schemas/Event' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox events --follow /telemetry: get: operationId: getTelemetry summary: Get the OpenTelemetry export tags: - Events x-required-scope: telemetry.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/TelemetryExport' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox telemetry put: operationId: setTelemetry summary: Set the OpenTelemetry export tags: - Events x-required-scope: telemetry.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TelemetryExport' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/TelemetryExport' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox telemetry set delete: operationId: deleteTelemetry summary: Remove the OpenTelemetry export tags: - Events x-required-scope: telemetry.write responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox telemetry rm /ci: get: operationId: getCi summary: Get CI status and connected accounts tags: - CI x-required-scope: ci.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CiStatus' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ci /ci/connect: post: operationId: connectCi summary: Connect a GitHub account or org tags: - CI x-required-scope: ci.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CiConnectRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CiConnectLink' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ci connect /ci/public: post: operationId: setCiPublic summary: Set the policy for public repositories tags: - CI x-required-scope: ci.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CiPublicRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CiStatus' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ci public /ci/jobs/{job}: get: operationId: getCiJob summary: Get a CI job tags: - CI x-required-scope: ci.read parameters: - name: job in: path required: true schema: type: string description: The job ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CiJob' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ci job /ci/jobs/{job}/logs: get: operationId: getCiJobLogs summary: Read CI job logs tags: - CI x-required-scope: ci.read parameters: - name: job in: path required: true schema: type: string description: The job ID or name. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/LogPage' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ci logs /credential-profiles: get: operationId: listCredentialProfiles summary: List credential profiles tags: - Credentials x-required-scope: credential.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CredentialProfileList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai profiles post: operationId: createCredentialProfile summary: Create a credential profile tags: - Credentials x-required-scope: credential.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCredentialProfileRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/CredentialProfile' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai profile new /credential-profiles/{profile}: put: operationId: updateCredentialProfile summary: Rename a profile or make it the default tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCredentialProfileRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CredentialProfile' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai profile set delete: operationId: deleteCredentialProfile summary: Delete a credential profile tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai profile rm /credential-profiles/{profile}/keys/{credential}: put: operationId: setCredentialKey summary: Set an API key tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: credential in: path required: true schema: type: string description: The credential ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SecretValue' responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai key set delete: operationId: deleteCredentialKey summary: Remove a credential tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: credential in: path required: true schema: type: string description: The credential ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai key rm /credential-profiles/{profile}/accounts/{credential}: get: operationId: listCredentialAccounts summary: List accounts of a credential tags: - Credentials x-required-scope: credential.read parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: credential in: path required: true schema: type: string description: The credential ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CredentialAccountList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai accounts post: operationId: addCredentialAccount summary: Add another key to a credential tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: credential in: path required: true schema: type: string description: The credential ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SecretValue' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/CredentialAccount' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai account add /credential-profiles/{profile}/accounts/{credential}/{account}/active: put: operationId: switchCredentialAccount summary: Switch to another account tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: credential in: path required: true schema: type: string description: The credential ID or name. - name: account in: path required: true schema: type: string description: The account ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CredentialAccount' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai account switch /credential-profiles/{profile}/accounts/{credential}/{account}: delete: operationId: forgetCredentialAccount summary: Forget an account tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: credential in: path required: true schema: type: string description: The credential ID or name. - name: account in: path required: true schema: type: string description: The account ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai account rm /credential-profiles/{profile}/custom-apis/{name}: put: operationId: setCustomApi summary: Set a custom API tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: name in: path required: true schema: type: string description: The name ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomApi' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CustomApi' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai api set delete: operationId: deleteCustomApi summary: Remove a custom API tags: - Credentials x-required-scope: credential.write parameters: - name: profile in: path required: true schema: type: string description: The profile ID or name. - name: name in: path required: true schema: type: string description: The name ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai api rm /proxy: get: operationId: getProxy summary: Get the credentials proxy tags: - Credentials x-required-scope: credential.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProxyConfig' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox proxy put: operationId: setProxy summary: Configure the credentials proxy tags: - Credentials x-required-scope: credential.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProxyConfig' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProxyConfig' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox proxy set /proxy/rules: get: operationId: listProxyRules summary: List secret-injection rules tags: - Credentials x-required-scope: credential.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProxyRuleList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox proxy rules post: operationId: createProxyRule summary: Add a rule binding a secret to host tags: - Credentials x-required-scope: credential.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProxyRule' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProxyRule' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox proxy rule add /proxy/rules/{rule}: delete: operationId: deleteProxyRule summary: Remove a rule tags: - Credentials x-required-scope: credential.write parameters: - name: rule in: path required: true schema: type: string description: The rule ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox proxy rule rm /vault-connections: get: operationId: listVaults summary: List vault connections tags: - Credentials x-required-scope: credential.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/VaultList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox vault list post: operationId: createVault summary: Connect an external vault tags: - Credentials x-required-scope: credential.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VaultConnection' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/VaultConnection' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox vault connect /vault-connections/{vault}: delete: operationId: deleteVault summary: Disconnect a vault tags: - Credentials x-required-scope: credential.write parameters: - name: vault in: path required: true schema: type: string description: The vault ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox vault rm /ai-usage: get: operationId: getAiUsage summary: Get AI usage tags: - Credentials x-required-scope: account.read parameters: - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/UsageReport' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai usage /sandboxes/{sandbox}/ai-usage: get: operationId: getSandboxAiUsage summary: Get AI usage of a sandbox tags: - Credentials x-required-scope: sandbox.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/UsageReport' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai usage ID /sandboxes/{sandbox}/ai-access: put: operationId: setSandboxAiAccess summary: Block or allow AI access or set a budget tags: - Credentials x-required-scope: credential.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AiAccess' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/AiAccess' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ai block /secrets: get: operationId: getSecretsSetup summary: Get the account secrets setup tags: - Credentials x-required-scope: credential.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SecretsSetup' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox secrets post: operationId: updateSecretsSetup summary: Update the account secrets setup tags: - Credentials x-required-scope: credential.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SecretsSetup' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SecretsSetup' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox secrets set /environments: get: operationId: listEnvironments summary: List environments tags: - Environments x-required-scope: environment.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/EnvironmentList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env list post: operationId: createEnvironment summary: Create an environment tags: - Environments x-required-scope: environment.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EnvironmentInput' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Environment' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env new /environments/{environment}: put: operationId: updateEnvironment summary: Update an environment and make a new version tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EnvironmentInput' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Environment' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env set delete: operationId: deleteEnvironment summary: Delete an environment tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env rm /environments/{environment}/upgrade: post: operationId: upgradeEnvironment summary: Move running sandboxes to a version tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpgradeEnvironmentRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env upgrade /environments/{environment}/vars/{key}: put: operationId: setEnvironmentVar summary: Set a variable tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. - name: key in: path required: true schema: type: string description: The key ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SecretValue' responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env var set delete: operationId: deleteEnvironmentVar summary: Remove a variable tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. - name: key in: path required: true schema: type: string description: The key ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env var rm /environments/{environment}/secret-files: put: operationId: setEnvironmentSecretFile summary: Write a secret file tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SecretFile' responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env file set delete: operationId: deleteEnvironmentSecretFile summary: Remove a secret file tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. - name: path in: query required: true schema: &id007 type: string description: Absolute path, or a path relative to the home directory. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env file rm /environments/{environment}/repos: post: operationId: addEnvironmentRepo summary: Add a repository tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SelectRepoRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Repo' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env repo add /environments/{environment}/repos/{repository}: delete: operationId: deleteEnvironmentRepo summary: Remove a repository tags: - Environments x-required-scope: environment.write parameters: - name: environment in: path required: true schema: type: string description: The environment ID or name. - name: repository in: path required: true schema: type: string description: The repository ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox env repo rm /sandboxes: get: operationId: listSandboxes summary: List sandboxes tags: - Sandboxes x-required-scope: sandbox.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: state in: query required: false schema: $ref: '#/components/schemas/LifecycleState' description: Filter by lifecycle state. - name: label in: query required: false schema: type: string description: Label selector, such as `team=web`. - name: region in: query required: false schema: $ref: '#/components/schemas/Region' description: Filter by region. - name: fleet in: query required: false schema: type: string description: Filter by fleet. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SandboxList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox list post: operationId: createSandbox summary: Create a sandbox, optionally from a template, and optionally queue it tags: - Sandboxes x-required-scope: sandbox.create parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateSandboxRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox new /sandboxes/batch: post: operationId: createSandboxBatch summary: Create many sandboxes in one call tags: - Sandboxes x-required-scope: sandbox.create parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateSandboxBatchRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox new --count /sandboxes/{sandbox}: get: operationId: getSandbox summary: Get a sandbox tags: - Sandboxes x-required-scope: sandbox.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox info patch: operationId: updateSandbox summary: Update name, labels, deadline, sleep policy or subdomain tags: - Sandboxes x-required-scope: sandbox.update parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateSandboxRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox set delete: operationId: deleteSandbox summary: Delete a sandbox and erase its data tags: - Sandboxes x-required-scope: sandbox.delete parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox delete /sandboxes/{sandbox}/sleep: post: operationId: sleepSandbox summary: Sleep now and keep memory tags: - Sandboxes x-required-scope: sandbox.stop parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox sleep /sandboxes/{sandbox}/wake: post: operationId: wakeSandbox summary: Wake a sleeping sandbox tags: - Sandboxes x-required-scope: sandbox.resume parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox wake /sandboxes/{sandbox}/stop: post: operationId: stopSandbox summary: Save the disk and release the machine tags: - Sandboxes x-required-scope: sandbox.stop parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/StopRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox stop /sandboxes/{sandbox}/stops/{stop}: get: operationId: getStop summary: Get a stop tags: - Sandboxes x-required-scope: sandbox.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: stop in: path required: true schema: type: string description: The stop ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox stop --status /sandboxes/{sandbox}/resume: post: operationId: resumeSandbox summary: Resume a stopped or failed sandbox tags: - Sandboxes x-required-scope: sandbox.resume parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResumeRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox resume /sandboxes/{sandbox}/fork: post: operationId: forkSandbox summary: Fork a running or stopped sandbox tags: - Sandboxes x-required-scope: sandbox.fork parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ForkRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox fork /sandboxes/{sandbox}/resize: post: operationId: resizeSandbox summary: Change size live where possible tags: - Sandboxes x-required-scope: sandbox.update parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResizeRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox resize /sandboxes/{sandbox}/restore: post: operationId: restoreSandbox summary: Restore to a point in time tags: - Sandboxes x-required-scope: sandbox.update parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RestoreRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox restore /sandboxes/{sandbox}/recover: post: operationId: recoverSandbox summary: Restart a machine that does not answer tags: - Sandboxes x-required-scope: sandbox.update parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox recover /sandboxes/{sandbox}/share: post: operationId: shareSandbox summary: Share with the organization tags: - Sandboxes x-required-scope: sandbox.update parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox share /sandboxes/{sandbox}/unshare: post: operationId: unshareSandbox summary: Make private tags: - Sandboxes x-required-scope: sandbox.update parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Sandbox' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox unshare /sandboxes/{sandbox}/usage: get: operationId: getSandboxUsage summary: Get the exact bill of a sandbox tags: - Sandboxes x-required-scope: sandbox.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/UsageReport' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox usage /sandboxes/{sandbox}/metrics: get: operationId: getSandboxMetrics summary: Get CPU tags: - Sandboxes x-required-scope: sandbox.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/MetricSeries' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox metrics /sandboxes/{sandbox}/commands: post: operationId: runCommand summary: 'Run a command: wait, stream or detach' tags: - Commands x-required-scope: exec parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CommandRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Command' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox exec get: operationId: listCommands summary: List the command history tags: - Commands x-required-scope: exec parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CommandList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox history /sandboxes/{sandbox}/commands/{command}: get: operationId: getCommand summary: Get a command tags: - Commands x-required-scope: exec parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: command in: path required: true schema: type: string description: The command ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Command' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox exec --status delete: operationId: signalCommand summary: Signal or stop a command tags: - Commands x-required-scope: exec parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: command in: path required: true schema: type: string description: The command ID or name. - name: signal in: query required: false schema: type: string default: TERM description: Signal to send. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox exec --kill /sandboxes/{sandbox}/commands/{command}/stream: get: operationId: streamCommand summary: Attach to a command over SSE tags: - Commands x-required-scope: exec parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: command in: path required: true schema: type: string description: The command ID or name. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: 'Server-sent events. Each event''s `id` is a resume cursor. Send `Upgrade: websocket` for WebSocket framing.' content: text/event-stream: schema: $ref: '#/components/schemas/Event' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox attach /sandboxes/{sandbox}/commands/{command}/logs: get: operationId: getCommandLogs summary: Read command logs tags: - Commands x-required-scope: exec parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: command in: path required: true schema: type: string description: The command ID or name. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/LogPage' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox logs /sandboxes/{sandbox}/processes: get: operationId: listProcesses summary: List processes tags: - Commands x-required-scope: exec parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProcessList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ps /sandboxes/{sandbox}/files: get: operationId: readFile summary: Read a file tags: - Files x-required-scope: file.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. responses: '200': description: File content. content: application/octet-stream: schema: type: string format: binary '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file read put: operationId: writeFile summary: Write a file tags: - Files x-required-scope: file.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. requestBody: required: true content: application/octet-stream: schema: type: string format: binary responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file write delete: operationId: deleteFile summary: Delete a file tags: - Files x-required-scope: file.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file rm /sandboxes/{sandbox}/files/list: get: operationId: listFiles summary: List a directory tags: - Files x-required-scope: file.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/FileList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file ls /sandboxes/{sandbox}/files/info: get: operationId: statFile summary: Get file details tags: - Files x-required-scope: file.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/FileInfo' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file stat /sandboxes/{sandbox}/files/search: get: operationId: searchFiles summary: Search files by name tags: - Files x-required-scope: file.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. - name: query in: query required: true schema: &id008 type: string description: Text to look for. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/FileList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file find /sandboxes/{sandbox}/files/find: get: operationId: grepFiles summary: Find text in files tags: - Files x-required-scope: file.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. - name: query in: query required: true schema: *id008 description: Text to look for. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/TextMatchList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file grep /sandboxes/{sandbox}/files/folder: post: operationId: makeFolder summary: Create a directory tags: - Files x-required-scope: file.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PathRequest' responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file mkdir /sandboxes/{sandbox}/files/move: post: operationId: moveFile summary: Move or rename tags: - Files x-required-scope: file.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MoveRequest' responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file mv /sandboxes/{sandbox}/files/permissions: post: operationId: chmodFile summary: Set permissions tags: - Files x-required-scope: file.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PermissionsRequest' responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file chmod /sandboxes/{sandbox}/files/replace: post: operationId: replaceInFiles summary: Replace text in files tags: - Files x-required-scope: file.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReplaceRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ReplaceResult' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file replace /sandboxes/{sandbox}/files/download-url: post: operationId: createDownloadUrl summary: Get a signed download URL tags: - Files x-required-scope: file.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignedUrlRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SignedUrl' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file url /sandboxes/{sandbox}/files/upload-url: post: operationId: createUploadUrl summary: Get a signed upload URL tags: - Files x-required-scope: file.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignedUrlRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SignedUrl' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox file url --upload /sandboxes/{sandbox}/artifacts: get: operationId: downloadArtifact summary: Download a file or folder as an archive tags: - Files x-required-scope: file.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. responses: '200': description: File content. content: application/octet-stream: schema: type: string format: binary '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox pull /sandboxes/{sandbox}/prompts: post: operationId: createPrompt summary: Prompt a harness tags: - Agents x-required-scope: agent.prompt parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PromptRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Prompt' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox prompt /sandboxes/{sandbox}/prompts/{prompt}: get: operationId: getPrompt summary: Get a prompt tags: - Agents x-required-scope: agent.prompt parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: prompt in: path required: true schema: type: string description: The prompt ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Prompt' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox prompt --status /sandboxes/{sandbox}/conversations: get: operationId: listConversations summary: List conversations tags: - Agents x-required-scope: agent.prompt parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ConversationList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox conversations /sandboxes/{sandbox}/events: get: operationId: listAgentEvents summary: Read sandbox and agent events with a cursor tags: - Agents x-required-scope: agent.prompt parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: type in: query required: false schema: *id005 description: Event type or glob, such as `prompt.*`. - name: conversation in: query required: false schema: &id009 type: string description: Filter by conversation. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/EventList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox events ID /sandboxes/{sandbox}/events/stream: get: operationId: streamAgentEvents summary: Stream sandbox and agent events over SSE or WebSocket tags: - Agents x-required-scope: agent.prompt parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. - name: type in: query required: false schema: *id005 description: Event type or glob, such as `prompt.*`. - name: conversation in: query required: false schema: *id009 description: Filter by conversation. responses: '200': description: 'Server-sent events. Each event''s `id` is a resume cursor. Send `Upgrade: websocket` for WebSocket framing.' content: text/event-stream: schema: $ref: '#/components/schemas/Event' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox events ID --follow /sandboxes/{sandbox}/steer: post: operationId: steerAgent summary: Steer a running turn tags: - Agents x-required-scope: agent.prompt parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SteerRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Prompt' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox steer /sandboxes/{sandbox}/interrupt: post: operationId: interruptAgent summary: Interrupt running work tags: - Agents x-required-scope: agent.prompt parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InterruptRequest' responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox interrupt /sandboxes/{sandbox}/desktop: post: operationId: createDesktop summary: Get a desktop stream URL tags: - Access x-required-scope: desktop parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DesktopRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/DesktopSession' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox desktop /sandboxes/{sandbox}/recordings: post: operationId: createRecording summary: Start a screen recording tags: - Access x-required-scope: desktop parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Recording' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox record start get: operationId: listRecordings summary: List recordings tags: - Access x-required-scope: desktop parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/RecordingList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox record list /sandboxes/{sandbox}/recordings/{recording}: delete: operationId: stopRecording summary: Stop a recording tags: - Access x-required-scope: desktop parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: recording in: path required: true schema: type: string description: The recording ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Recording' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox record stop /sandboxes/{sandbox}/computer: post: operationId: computerAction summary: Screenshot, click, type or scroll tags: - Access x-required-scope: desktop parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ComputerAction' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ComputerResult' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox computer /sandboxes/{sandbox}/endpoints: get: operationId: listEndpoints summary: List public endpoints tags: - Access x-required-scope: host parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/EndpointList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox host list post: operationId: createEndpoint summary: Expose a port tags: - Access x-required-scope: host parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateEndpointRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Endpoint' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox host /sandboxes/{sandbox}/endpoints/{endpoint}: patch: operationId: updateEndpoint summary: Change auth, domain or title tags: - Access x-required-scope: host parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: endpoint in: path required: true schema: type: string description: The endpoint ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateEndpointRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Endpoint' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox host set delete: operationId: deleteEndpoint summary: Stop exposing a port tags: - Access x-required-scope: host parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: endpoint in: path required: true schema: type: string description: The endpoint ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox host hide /sandboxes/{sandbox}/endpoints/{endpoint}/rotate: post: operationId: rotateEndpointToken summary: Rotate a URL token atomically tags: - Access x-required-scope: host parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: endpoint in: path required: true schema: type: string description: The endpoint ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RotateRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Endpoint' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox host rotate /sandboxes/{sandbox}/ssh-keys: post: operationId: addSshKey summary: Authorize an SSH key tags: - Access x-required-scope: ssh parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SshKeyRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/SshAccess' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ssh-key add /sandboxes/{sandbox}/tunnel: get: operationId: openTunnel summary: 'Open a byte stream to a port inside a sandbox, over WebSocket: what SSH, SCP and port forwarding use' tags: - Access x-required-scope: ssh parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: port in: query required: true schema: type: integer minimum: 1 maximum: 65535 description: A port inside the sandbox. responses: '200': description: 'Server-sent events. Each event''s `id` is a resume cursor. Send `Upgrade: websocket` for WebSocket framing.' content: text/event-stream: schema: $ref: '#/components/schemas/Event' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox tunnel /sandboxes/{sandbox}/firewall: get: operationId: getFirewall summary: Get host-enforced firewall rules tags: - Network x-required-scope: network.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Firewall' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox firewall put: operationId: setFirewall summary: Replace firewall rules tags: - Network x-required-scope: network.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Firewall' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Firewall' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox firewall set /static-ips: get: operationId: listStaticIps summary: List reserved IPs tags: - Network x-required-scope: network.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/StaticIpList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ip list post: operationId: reserveStaticIp summary: Reserve an IP tags: - Network x-required-scope: network.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReserveIpRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/StaticIp' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ip reserve /static-ips/{ip}/attachment: put: operationId: attachStaticIp summary: Attach an IP to a sandbox tags: - Network x-required-scope: network.write parameters: - name: ip in: path required: true schema: type: string description: The ip ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AttachIpRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/StaticIp' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ip attach /static-ips/{ip}: delete: operationId: releaseStaticIp summary: Release an IP tags: - Network x-required-scope: network.write parameters: - name: ip in: path required: true schema: type: string description: The ip ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox ip release /domains: get: operationId: listDomains summary: List custom domains tags: - Network x-required-scope: network.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/DomainList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox domain list post: operationId: addDomain summary: Add a custom domain tags: - Network x-required-scope: network.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddDomainRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Domain' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox domain add /domains/{domain}: delete: operationId: deleteDomain summary: Remove a custom domain tags: - Network x-required-scope: network.write parameters: - name: domain in: path required: true schema: type: string description: The domain ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox domain rm /meshes: get: operationId: listMeshes summary: List private meshes tags: - Network x-required-scope: network.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/MeshList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox mesh list post: operationId: createMesh summary: Create a private mesh tags: - Network x-required-scope: network.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateMeshRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Mesh' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox mesh new /meshes/{mesh}: delete: operationId: deleteMesh summary: Delete a private mesh tags: - Network x-required-scope: network.write parameters: - name: mesh in: path required: true schema: type: string description: The mesh ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox mesh rm /snapshots: get: operationId: listAllSnapshots summary: List snapshots tags: - Snapshots x-required-scope: snapshot.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SnapshotList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshots /sandboxes/{sandbox}/snapshots: get: operationId: listSnapshots summary: List snapshots of a sandbox tags: - Snapshots x-required-scope: snapshot.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SnapshotList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshots ID post: operationId: createSnapshot summary: Take a disk or memory snapshot now tags: - Snapshots x-required-scope: snapshot.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateSnapshotRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Snapshot' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshot delete: operationId: deleteSandboxSnapshots summary: Delete all snapshots of a sandbox tags: - Snapshots x-required-scope: snapshot.write parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshot rm --all /sandboxes/{sandbox}/snapshots/latest: get: operationId: getLatestSnapshot summary: Get the latest snapshot tags: - Snapshots x-required-scope: snapshot.read parameters: - name: sandbox in: path required: true schema: type: string description: The sandbox ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Snapshot' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshot latest /snapshots/{snapshot}: delete: operationId: deleteSnapshot summary: Delete a snapshot tags: - Snapshots x-required-scope: snapshot.write parameters: - name: snapshot in: path required: true schema: type: string description: The snapshot ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshot rm /snapshots/{snapshot}/tree: get: operationId: getSnapshotTree summary: Browse a snapshot tags: - Snapshots x-required-scope: snapshot.read parameters: - name: snapshot in: path required: true schema: type: string description: The snapshot ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/FileList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshot tree /snapshots/{snapshot}/files: get: operationId: getSnapshotFile summary: Download a file or folder from a snapshot tags: - Snapshots x-required-scope: snapshot.read parameters: - name: snapshot in: path required: true schema: type: string description: The snapshot ID or name. - name: path in: query required: true schema: *id007 description: Absolute path, or a path relative to the home directory. responses: '200': description: File content. content: application/octet-stream: schema: type: string format: binary '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshot get /snapshots/{snapshot}/download: get: operationId: getSnapshotDownload summary: Get a signed archive URL tags: - Snapshots x-required-scope: snapshot.read parameters: - name: snapshot in: path required: true schema: type: string description: The snapshot ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/SignedUrl' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox snapshot pull /templates: get: operationId: listTemplates summary: List templates tags: - Templates x-required-scope: snapshot.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/TemplateList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox template list post: operationId: createTemplate summary: Save a sandbox as a new template version tags: - Templates x-required-scope: snapshot.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateTemplateRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Template' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox template save /templates/{template}: get: operationId: getTemplate summary: Get a template and its versions tags: - Templates x-required-scope: snapshot.read parameters: - name: template in: path required: true schema: type: string description: The template ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Template' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox template info delete: operationId: deleteTemplate summary: Delete a template or a version tags: - Templates x-required-scope: snapshot.write parameters: - name: template in: path required: true schema: type: string description: The template ID or name. - name: version in: query required: false schema: type: integer description: One template version. Omit for all versions. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox template rm /templates/{template}/shares: get: operationId: listTemplateShares summary: List share codes tags: - Templates x-required-scope: snapshot.read parameters: - name: template in: path required: true schema: type: string description: The template ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ShareList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox template shares post: operationId: createTemplateShare summary: Create a share code tags: - Templates x-required-scope: snapshot.write parameters: - name: template in: path required: true schema: type: string description: The template ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateShareRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/ShareWithCode' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox template share /templates/{template}/shares/{share}: delete: operationId: revokeTemplateShare summary: Revoke a share code tags: - Templates x-required-scope: snapshot.write parameters: - name: template in: path required: true schema: type: string description: The template ID or name. - name: share in: path required: true schema: type: string description: The share ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox template unshare /fleets: get: operationId: listFleets summary: List fleets tags: - Fleets x-required-scope: fleet.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/FleetList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox fleet list post: operationId: createFleet summary: Create a fleet tags: - Fleets x-required-scope: fleet.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FleetInput' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Fleet' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox fleet new /fleets/{fleet}: get: operationId: getFleet summary: Get a fleet tags: - Fleets x-required-scope: fleet.read parameters: - name: fleet in: path required: true schema: type: string description: The fleet ID or name. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Fleet' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox fleet info patch: operationId: updateFleet summary: Change a fleet or scale it tags: - Fleets x-required-scope: fleet.write parameters: - name: fleet in: path required: true schema: type: string description: The fleet ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FleetInput' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Fleet' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox fleet set delete: operationId: deleteFleet summary: Delete a fleet and its sandboxes tags: - Fleets x-required-scope: fleet.write parameters: - name: fleet in: path required: true schema: type: string description: The fleet ID or name. responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox fleet rm /fleets/{fleet}/prompts: post: operationId: promptFleet summary: Send one prompt to every member tags: - Fleets x-required-scope: agent.prompt parameters: - name: fleet in: path required: true schema: type: string description: The fleet ID or name. - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PromptRequest' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox fleet prompt /schedules: get: operationId: listSchedules summary: List wake timers and schedules tags: - Fleets x-required-scope: fleet.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ScheduleList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox schedule list post: operationId: createSchedule summary: Create a wake timer or schedule tags: - Fleets x-required-scope: fleet.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ScheduleInput' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Schedule' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox schedule new /schedules/{schedule}: delete: operationId: deleteSchedule summary: Delete a schedule tags: - Fleets x-required-scope: fleet.write parameters: - name: schedule in: path required: true schema: type: string description: The schedule ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox schedule rm /billing/plan: get: operationId: getPlan summary: Get the plan tags: - Billing x-required-scope: billing.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Plan' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox billing put: operationId: setPlan summary: Change the plan tags: - Billing x-required-scope: billing.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SetPlanRequest' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Plan' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox billing plan /billing/wallet: get: operationId: getWallet summary: Get the wallet tags: - Billing x-required-scope: billing.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Wallet' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox wallet /billing/wallet/quote: get: operationId: quoteWallet summary: Quote a top-up with its bonus tags: - Billing x-required-scope: billing.read parameters: - name: dollars in: query required: true schema: type: number description: Amount in US dollars. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/WalletQuote' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox wallet quote /billing/wallet/payments: post: operationId: payWallet summary: Add money to the wallet tags: - Billing x-required-scope: billing.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WalletPayRequest' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/PaymentLink' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox wallet pay /billing/wallet/auto-top-up: put: operationId: setAutoTopUp summary: Set auto top-up tags: - Billing x-required-scope: billing.write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AutoTopUp' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/AutoTopUp' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox wallet auto-top-up /billing/cards: post: operationId: addCard summary: Add a payment card tags: - Billing x-required-scope: billing.write responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/PaymentLink' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox billing card /billing/invoices: get: operationId: listInvoices summary: List invoices tags: - Billing x-required-scope: billing.read parameters: - name: limit in: query required: false schema: *id001 description: Page size. - name: cursor in: query required: false schema: *id002 description: Opaque cursor from `next_cursor`, or a stream's last event ID. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/InvoiceList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox billing invoices /usage: get: operationId: getUsage summary: Get usage by project, fleet, label, member or size tags: - Billing x-required-scope: billing.read parameters: - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. - name: group_by in: query required: false schema: type: string enum: - project - fleet - label - member - size - tier - region - sandbox description: Grouping. responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/UsageReport' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox usage --all /usage/export: get: operationId: exportUsage summary: Export usage per sandbox, with labels, as CSV or JSON Lines tags: - Billing x-required-scope: billing.read parameters: - name: since in: query required: false schema: *id003 description: Start of the time range. - name: until in: query required: false schema: *id004 description: End of the time range. - name: format in: query required: false schema: type: string enum: - csv - jsonl default: csv description: CSV with a header row, or JSON Lines. responses: '200': description: File content. content: application/octet-stream: schema: type: string format: binary '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox usage export /budgets: get: operationId: listBudgets summary: List budgets tags: - Billing x-required-scope: billing.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/BudgetList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox budget list post: operationId: createBudget summary: Create a hard or soft dollar budget tags: - Billing x-required-scope: billing.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BudgetInput' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Budget' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox budget new /budgets/{budget}: patch: operationId: updateBudget summary: Change a budget tags: - Billing x-required-scope: billing.write parameters: - name: budget in: path required: true schema: type: string description: The budget ID or name. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BudgetInput' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Budget' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox budget set delete: operationId: deleteBudget summary: Delete a budget tags: - Billing x-required-scope: billing.write parameters: - name: budget in: path required: true schema: type: string description: The budget ID or name. responses: '204': description: Success. No content. '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox budget rm /reservations: get: operationId: listReservations summary: List reservations tags: - Billing x-required-scope: billing.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ReservationList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox reserve list post: operationId: createReservation summary: Commit to capacity for one year tags: - Billing x-required-scope: billing.write parameters: - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReservationInput' responses: '201': description: Success. content: application/json: schema: $ref: '#/components/schemas/Reservation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox reserve new /copilot/forecast: get: operationId: getForecast summary: Forecast this month tags: - Co-pilot x-required-scope: billing.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Forecast' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox copilot forecast /copilot/recommendations: get: operationId: listRecommendations summary: List savings recommendations with evidence tags: - Co-pilot x-required-scope: billing.read responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/RecommendationList' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox copilot /copilot/recommendations/{recommendation}/apply: post: operationId: applyRecommendation summary: Apply a recommendation tags: - Co-pilot x-required-scope: billing.write parameters: - name: recommendation in: path required: true schema: type: string description: The recommendation ID or name. - $ref: '#/components/parameters/IdempotencyKey' responses: '202': description: Success. content: application/json: schema: $ref: '#/components/schemas/Operation' '400': $ref: '#/components/responses/E400' '401': $ref: '#/components/responses/E401' '403': $ref: '#/components/responses/E403' '404': $ref: '#/components/responses/E404' '409': $ref: '#/components/responses/E409' '429': $ref: '#/components/responses/E429' '503': $ref: '#/components/responses/E503' x-cli: harebox copilot apply components: securitySchemes: bearer: type: http scheme: bearer description: API key, agent token or OAuth access token. parameters: IdempotencyKey: name: Idempotency-Key in: header schema: type: string maxLength: 255 description: Retrying with the same key never repeats the action. Keys last 24 hours. responses: E400: description: Invalid request content: application/json: schema: $ref: '#/components/schemas/Error' E401: description: Missing or invalid credential content: application/json: schema: $ref: '#/components/schemas/Error' E403: description: Credential lacks the required scope content: application/json: schema: $ref: '#/components/schemas/Error' E404: description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' E409: description: Conflict with current state content: application/json: schema: $ref: '#/components/schemas/Error' E429: description: Limit reached content: application/json: schema: $ref: '#/components/schemas/Error' E503: description: No capacity content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Error: type: object required: - code - message - status - request_id properties: code: type: string description: Stable machine-readable code, such as start_rate_limited. Safe to branch on. message: type: string description: What happened, in one sentence. fix: type: string description: The next step to take, in one sentence. status: type: integer request_id: type: string retry_after_seconds: type: integer description: Present whenever retrying later can succeed. docs_url: type: string format: uri details: type: object additionalProperties: true Identity: type: object required: - id - kind properties: id: type: string kind: type: string enum: - user - api_key - agent - sandbox email: type: - string - 'null' org: type: - string - 'null' project: type: - string - 'null' scopes: type: array items: type: string claimed: type: boolean description: False for an agent account no human has claimed yet. Org: type: object required: - id - name properties: id: type: string name: type: string plan: $ref: '#/components/schemas/PlanName' default_visibility: type: string enum: - private - shared data_region: $ref: '#/components/schemas/Region' sso_enforced: type: boolean CreateOrgRequest: type: object required: - name properties: name: type: string maxLength: 120 UpdateOrgRequest: type: object properties: name: type: string default_visibility: type: string enum: - private - shared sso_enforced: type: boolean SetActiveOrgRequest: type: object required: - org properties: org: type: - string - 'null' description: Null selects the personal account. Member: type: object required: - id - role properties: id: type: string email: type: string role: type: string enum: - owner - admin - developer - billing - viewer caps: $ref: '#/components/schemas/MemberCaps' MemberCaps: type: object properties: monthly_usd: type: - number - 'null' concurrent_sandboxes: type: - integer - 'null' starts_per_hour: type: - integer - 'null' InviteMemberRequest: type: object required: - email - role properties: email: type: string format: email role: type: string enum: - admin - developer - billing - viewer UpdateMemberRequest: type: object properties: role: type: string enum: - admin - developer - billing - viewer caps: $ref: '#/components/schemas/MemberCaps' Project: type: object required: - id - name properties: id: type: string name: type: string default_region: $ref: '#/components/schemas/Region' labels: $ref: '#/components/schemas/Labels' CreateProjectRequest: type: object required: - name properties: name: type: string default_region: $ref: '#/components/schemas/Region' labels: $ref: '#/components/schemas/Labels' AgentRegistrationRequest: type: object required: - agent_name properties: agent_name: type: string human_email: type: - string - 'null' format: email description: Optional. The human who can claim the account. AgentRegistration: type: object required: - id - token - claim_url - limits properties: id: type: string token: type: string description: Shown once. Works immediately within anonymous limits. claim_url: type: string format: uri claim_code: type: string pattern: ^[0-9]{6}$ description: Shown once, at sign-up. Give it to your human with the claim URL; they enter it to claim the account. expires_at: type: string format: date-time description: Unclaimed accounts and their sandboxes are removed after this time. limits: $ref: '#/components/schemas/Limits' ClaimRequest: type: object required: - human_email - claim_code properties: human_email: type: string format: email claim_code: type: string pattern: ^[0-9]{6}$ description: The six digits the agent was given at sign-up. Five wrong tries lock the claim. PlanName: type: string enum: - none - trial - build - team - scale - fleet - custom description: 'none: no plan, so no machines. trial: the 7-day trial of build, which needs a card.' Region: type: string enum: - eu description: 'HareBox runs in one region, the EU: it launches in France, at Roubaix and Gravelines. There is no region to choose; placement inside the EU is automatic. Data, including snapshots, stays in the EU.' Tier: type: string enum: - spot - shared description: Both cost the same for a given size. spot can be preempted with notice; use shared unless you want that. SizeName: type: string enum: - small - default - large - xlarge Labels: type: object additionalProperties: type: string maxProperties: 64 LifecycleState: type: string enum: - creating - ready - sleeping - stopped - archived - failed - deleted description: 'The one state name used on every surface: API, CLI, dashboard, webhooks and logs.' Condition: type: string enum: - migrating - degraded - recovering - hydrating - nested_active - queued - stopping - sleeping_soon Size: type: object description: A preset name, or custom vCPU, RAM and disk. properties: preset: $ref: '#/components/schemas/SizeName' vcpu: type: integer minimum: 1 maximum: 64 ram_gb: type: integer minimum: 1 maximum: 256 disk_gb: type: integer minimum: 16 maximum: 2048 gpu: type: - string - 'null' enum: - l4 - a10 - h100 - null SleepPolicy: type: object properties: mode: type: string enum: - auto - never default: never description: 'auto sleeps an idle sandbox: its memory is saved and its RAM freed, and it is billed like a running one. It is opt-in.' idle_seconds: type: integer minimum: 30 maximum: 86400 default: 120 Sandbox: type: object required: - id - state - conditions - region - tier - size - created_at - capabilities properties: id: type: string example: hb_7f3k2q9d name: type: string state: $ref: '#/components/schemas/LifecycleState' conditions: type: array items: $ref: '#/components/schemas/Condition' condition_details: type: object additionalProperties: type: string description: Why each condition applies, and for sleep, what is keeping the sandbox awake. region: $ref: '#/components/schemas/Region' tier: $ref: '#/components/schemas/Tier' size: $ref: '#/components/schemas/Size' image: type: string description: 'Base image: ubuntu-24.04.' location: type: object description: 'Where the sandbox runs now. Read-only: HareBox places sandboxes itself and may move them on resume.' required: - region - site - kind properties: region: $ref: '#/components/schemas/Region' country: type: - string - 'null' enum: - DE - FI - FR - null description: Null on a local development host. site: type: string description: Data-centre site, such as ovh-rbx or hz-hel1, or local. kind: type: string enum: - dedicated - baremetal - cloudstack - cloudmetal - local description: 'How the host is rented: dedicated servers by the month, cloud bare metal (cloudmetal) by the hour for peaks. xlarge gets dedicated threads on either.' created_by: type: string description: The API key that created this sandbox. A key's monthly budget counts what it created. project: type: - string - 'null' fleet: type: - string - 'null' labels: $ref: '#/components/schemas/Labels' environment: type: - object - 'null' properties: id: type: string version: type: integer template: type: - string - 'null' forked_from: type: - string - 'null' ipv4: type: - string - 'null' ipv6: type: - string - 'null' subdomain: type: string sleep: $ref: '#/components/schemas/SleepPolicy' deadline: type: - string - 'null' format: date-time description: Absolute stop time. Null means none. visibility: type: string enum: - private - shared capabilities: type: object description: What this sandbox can do right now. Agents should check these rather than infer them. required: - memory_snapshot - live_migration - nested_kvm properties: memory_snapshot: type: boolean description: False while nested guests run, unless spike S1 proves otherwise. live_migration: type: boolean nested_kvm: type: boolean hydration: type: - object - 'null' properties: percent: type: number done: type: boolean simulated: type: boolean description: True when the machine is the labelled simulator rather than a real VM. fork_ids: type: array items: type: string description: All new sandboxes, when a fork asked for a count. meter: type: object properties: usd_per_hour: type: number billed_seconds: type: integer cost_usd: type: number created_at: type: string format: date-time ready_at: type: - string - 'null' format: date-time CreateSandboxRequest: type: object properties: name: type: string maxLength: 120 size: $ref: '#/components/schemas/Size' tier: $ref: '#/components/schemas/Tier' region: $ref: '#/components/schemas/Region' image: type: string enum: - ubuntu-24.04 default: ubuntu-24.04 template: type: string description: Template name, name@version, or share code. project: type: string fleet: type: string labels: $ref: '#/components/schemas/Labels' environment: type: string no_env: type: boolean description: Pass nothing of yours into the sandbox. Use for third-party tenants. env: type: object additionalProperties: type: string maxProperties: 500 setup_script: type: string maxLength: 262144 files: type: array items: $ref: '#/components/schemas/SecretFile' sleep: $ref: '#/components/schemas/SleepPolicy' ttl_seconds: type: - integer - 'null' minimum: 1 maximum: 2592000 default: 3600 description: Auto-stop this long after creation or the last resume. Omit for one hour; null for none. The trial requires 7200 or less. A running agent prompt moves the deadline. snapshots: type: boolean default: true description: False for no saved state. monitoring: type: boolean default: true visibility: type: string enum: - private - shared endpoints: type: array items: $ref: '#/components/schemas/CreateEndpointRequest' placement: type: string enum: - wait - fail_fast - queue default: wait description: wait for capacity, answer in about a second, or join the start queue. queue_deadline_seconds: type: integer maximum: 86400 CreateSandboxBatchRequest: allOf: - $ref: '#/components/schemas/CreateSandboxRequest' - type: object required: - count properties: count: type: integer minimum: 1 maximum: 10000 UpdateSandboxRequest: type: object properties: name: type: string labels: $ref: '#/components/schemas/Labels' sleep: $ref: '#/components/schemas/SleepPolicy' deadline: type: - string - 'null' format: date-time subdomain: type: string StopRequest: type: object properties: force: type: boolean description: Stop now using the last good snapshot. Newer writes are lost. pre_stop_command: type: string ResumeRequest: type: object properties: size: $ref: '#/components/schemas/Size' tier: $ref: '#/components/schemas/Tier' no_env: type: boolean environment: type: string ttl_seconds: type: - integer - 'null' minimum: 1 maximum: 2592000 description: Auto-stop after this start. Omit to keep the current one; null for none. placement: type: string enum: - wait - fail_fast - queue ForkRequest: type: object properties: name: type: string count: type: integer minimum: 1 maximum: 1000 default: 1 size: $ref: '#/components/schemas/Size' tier: $ref: '#/components/schemas/Tier' region: $ref: '#/components/schemas/Region' include_memory: type: boolean default: true description: Copy running processes as well as disk. no_env: type: boolean labels: $ref: '#/components/schemas/Labels' ttl_seconds: type: - integer - 'null' minimum: 1 maximum: 2592000 description: Auto-stop after this start. Omit to keep the current one; null for none. placement: type: string enum: - wait - fail_fast - queue ResizeRequest: type: object required: - size properties: size: $ref: '#/components/schemas/Size' allow_restart: type: boolean default: false description: Allow a restart when the change cannot be applied live. RestoreRequest: type: object properties: at: type: string format: date-time snapshot: type: string mode: type: string enum: - new_sandbox - in_place default: new_sandbox Operation: type: object required: - id - kind - status properties: id: type: string kind: type: string status: type: string enum: - pending - running - succeeded - failed - cancelled target: type: - string - 'null' percent: type: - number - 'null' error: oneOf: - $ref: '#/components/schemas/Error' - type: 'null' created_at: type: string format: date-time updated_at: type: string format: date-time CommandRequest: type: object required: - command properties: command: type: string cwd: type: string env: type: object additionalProperties: type: string user: type: string default: user mode: type: string enum: - wait - stream - detach default: wait timeout_seconds: type: integer minimum: 1 maximum: 3600 default: 60 description: For wait mode. Use stream or detach beyond this. stdin: type: string Command: type: object required: - id - status properties: id: type: string status: type: string enum: - running - exited - killed - timed_out exit_code: type: - integer - 'null' stdout: type: string stderr: type: string truncated: type: boolean description: True when output passed 256 MiB per stream. Full output stays in the logs. started_at: type: string format: date-time ended_at: type: - string - 'null' format: date-time LogPage: type: object required: - lines properties: lines: type: array items: type: object properties: t: type: string format: date-time stream: type: string text: type: string next_cursor: type: - string - 'null' ProcessList: type: object properties: processes: type: array items: type: object properties: pid: type: integer user: type: string command: type: string cpu_percent: type: number rss_mb: type: number FileInfo: type: object required: - path - kind properties: path: type: string kind: type: string enum: - file - directory - symlink size: type: integer mode: type: string owner: type: string modified_at: type: string format: date-time FileList: type: object required: - entries properties: entries: type: array items: $ref: '#/components/schemas/FileInfo' next_cursor: type: - string - 'null' TextMatchList: type: object properties: matches: type: array items: type: object properties: path: type: string line: type: integer text: type: string next_cursor: type: - string - 'null' PathRequest: type: object required: - path properties: path: type: string parents: type: boolean default: true MoveRequest: type: object required: - from - to properties: from: type: string to: type: string PermissionsRequest: type: object required: - path - mode properties: path: type: string mode: type: string owner: type: string recursive: type: boolean ReplaceRequest: type: object required: - path - find - replace properties: path: type: string find: type: string replace: type: string regex: type: boolean dry_run: type: boolean ReplaceResult: type: object properties: files_changed: type: integer replacements: type: integer SignedUrlRequest: type: object required: - path properties: path: type: string expires_seconds: type: integer maximum: 86400 default: 900 SignedUrl: type: object required: - url - expires_at properties: url: type: string format: uri expires_at: type: string format: date-time PromptRequest: type: object required: - prompt properties: prompt: type: string harness: type: string description: See GET /harnesses. Claude Code, Codex, pi, OpenCode, Prime Agent, Kimi Code, Mistral Vibe, Hermes, OpenClaw, Cursor CLI or an adapter you add. model: type: string reasoning_effort: type: string fast: type: boolean conversation: type: string description: Continue this conversation. Omit to continue the current one. new_conversation: type: boolean attachments: type: array maxItems: 32 items: type: object required: - name - url properties: name: type: string url: type: string format: uri budget_usd: type: number description: Stop this turn when proxied token spend passes this amount. webhook_url: type: string format: uri description: Also notify this URL when the prompt ends. Prompt: type: object required: - id - conversation - status properties: id: type: string conversation: type: string status: type: string enum: - queued - running - finished - failed - interrupted - budget_exceeded harness: type: string model: type: string usage: type: object properties: input_tokens: type: integer output_tokens: type: integer usd: type: number error: oneOf: - $ref: '#/components/schemas/Error' - type: 'null' ConversationList: type: object properties: conversations: type: array items: type: object properties: id: type: string prompts: type: integer running: type: boolean harness: type: string model: type: string preview: type: string current: type: boolean next_cursor: type: - string - 'null' SteerRequest: type: object required: - message properties: message: type: string conversation: type: string InterruptRequest: type: object properties: conversation: type: string description: Omit to interrupt all work on the sandbox. HarnessList: type: object properties: harnesses: type: array items: type: object required: - id - name properties: id: type: string name: type: string version: type: string models: type: array items: type: object properties: id: type: string reasoning_levels: type: array items: type: string fast_mode: type: boolean Event: type: object required: - id - type - time - schema_version - data properties: id: type: string type: type: string time: type: string format: date-time schema_version: type: integer sandbox: type: - string - 'null' project: type: - string - 'null' conversation: type: - string - 'null' data: type: object additionalProperties: true EventList: type: object required: - events properties: events: type: array items: $ref: '#/components/schemas/Event' next_cursor: type: - string - 'null' EventTypeList: type: object properties: types: type: array items: type: object properties: type: type: string description: type: string schema_url: type: string format: uri RotateRequest: type: object properties: overlap_seconds: type: integer minimum: 0 maximum: 604800 default: 3600 description: How long the old value stays valid. CreateWebhookRequest: type: object required: - url - events properties: name: type: string url: type: string format: uri events: type: array items: type: string description: Event types or globs, such as sandbox.* or prompt.finished. project: type: - string - 'null' label_selector: type: - string - 'null' UpdateWebhookRequest: type: object properties: name: type: string url: type: string format: uri events: type: array items: type: string enabled: type: boolean Webhook: type: object required: - id - url - events - enabled properties: id: type: string name: type: string url: type: string format: uri events: type: array items: type: string enabled: type: boolean failure_streak: type: integer WebhookWithSecret: allOf: - $ref: '#/components/schemas/Webhook' - type: object required: - secret properties: secret: type: string description: Shown once. Starts with whsec_. Delivery: type: object required: - id - event - status properties: id: type: string event: type: string status: type: string enum: - pending - succeeded - failed attempts: type: integer response_code: type: - integer - 'null' next_attempt_at: type: - string - 'null' format: date-time TelemetryExport: type: object required: - endpoint properties: endpoint: type: string format: uri headers: type: object additionalProperties: type: string writeOnly: true signals: type: array items: type: string enum: - metrics - logs - traces - agent_usage RetentionPolicy: type: object properties: zero_data_retention: type: boolean stopped_days: type: integer minimum: 0 maximum: 365 description: Free for the first 14 days. command_history_days: type: integer maximum: 365 monitoring: type: boolean Limits: type: object required: - plan - concurrent - starts - wallet_usd - next_start_usd properties: plan: $ref: '#/components/schemas/PlanName' concurrent: type: object properties: limit: type: integer used: type: integer starts: type: object properties: per_minute: type: integer per_hour: type: integer per_day: type: integer next_slot_at: type: - string - 'null' format: date-time sizes: type: array items: $ref: '#/components/schemas/SizeName' credits_usd: type: number wallet_usd: type: number next_start_usd: type: - number - 'null' description: 'Price of the next start: 0 while included, then 0.03 to 0.07 from the wallet. Null when it would fail.' seats: type: integer card_on_file: type: boolean templates_included: type: integer trial: type: - object - 'null' properties: ends_at: type: string format: date-time hours_left: type: number max_auto_stop_seconds: type: integer RateCard: type: object required: - as_of - currency - sizes properties: as_of: type: string format: date currency: type: string enum: - USD sizes: type: object additionalProperties: type: object properties: vcpu: type: integer ram_gb: type: integer disk_gb: type: integer spot: type: number shared: type: number reserved: type: number custom: type: object description: Custom sizes up to max_vcpu and max_ram_gb use standard; anything larger uses large. properties: standard: type: object properties: max_vcpu: type: integer max_ram_gb: type: integer usd_per_vcpu_h: type: number usd_per_gb_h: type: number large: type: object properties: usd_per_vcpu_h: type: number usd_per_gb_h: type: number template_usd_day: type: number description: Each saved template version above the plan's included number, per day. proxy_usd_day: type: number proxy_usd_per_1000: type: number extra_start_usd: type: array items: type: number description: 'Prices of starts past the included number: up to 1.5 times, 2 times and 6 times.' Region_Info: type: object required: - id - status properties: id: $ref: '#/components/schemas/Region' status: type: string jurisdiction: type: string selectable: type: boolean description: 'Always false: HareBox chooses the site.' countries: type: array items: type: string sites: type: array items: type: object properties: id: type: string provider: type: string city: type: string country: type: string kind: type: string status: type: string enum: - live - simulated - local - planned - candidate restore_budget_ms: type: object description: Target time from resume to first command, by host kind. Targets, not measurements. additionalProperties: type: integer density: type: object description: Live published ratios per tier. additionalProperties: type: object properties: vcpu_per_thread: type: number ram_overcommit: type: number start_p95_ms: type: integer RegionList: type: object properties: regions: type: array items: $ref: '#/components/schemas/Region_Info' ApiKey: type: object required: - id - name - scopes properties: id: type: string name: type: string scopes: type: array items: type: string preset: type: - string - 'null' enum: - read_only - full_sandbox - ci - tenant - admin - null sandboxes: type: array items: type: string projects: type: array items: type: string environments: type: array items: type: string label_selector: type: - string - 'null' ip_allowlist: type: array items: type: string monthly_budget_usd: type: - number - 'null' rate_limit_per_minute: type: - integer - 'null' expires_at: type: - string - 'null' format: date-time last_used_at: type: - string - 'null' format: date-time CreateApiKeyRequest: type: object required: - name properties: name: type: string scopes: type: array items: type: string preset: type: string enum: - read_only - full_sandbox - ci - tenant - admin sandboxes: type: array items: type: string projects: type: array items: type: string environments: type: array items: type: string label_selector: type: string ip_allowlist: type: array items: type: string monthly_budget_usd: type: number rate_limit_per_minute: type: integer ttl_seconds: type: - integer - 'null' description: Default 90 days. Null means no expiry and requires account.admin. UpdateApiKeyRequest: type: object properties: name: type: string scopes: type: array items: type: string ip_allowlist: type: array items: type: string monthly_budget_usd: type: - number - 'null' rate_limit_per_minute: type: - integer - 'null' ApiKeyWithSecret: allOf: - $ref: '#/components/schemas/ApiKey' - type: object required: - secret properties: secret: type: string description: Shown once. UsageReport: type: object required: - since - until - total_usd properties: since: type: string format: date-time until: type: string format: date-time total_usd: type: number billed_seconds: type: integer sleep_seconds: type: integer description: Time asleep, billed like running time. groups: type: array items: type: object properties: key: type: string usd: type: number seconds: type: integer ai: type: object properties: requests: type: integer input_tokens: type: integer output_tokens: type: integer proxy_usd: type: number MetricSeries: type: object properties: points: type: array items: type: object properties: t: type: string format: date-time cpu_percent: type: number cpu_steal_percent: type: number ram_used_gb: type: number disk_used_gb: type: number net_rx_bps: type: number net_tx_bps: type: number CiStatus: type: object properties: connected: type: array items: type: object properties: account: type: string billing_scope: type: string public_repos: type: string enum: - refuse - approve - allow labels: type: array items: type: string CiConnectRequest: type: object properties: org: type: string account: type: string CiConnectLink: type: object required: - url properties: url: type: string format: uri CiPublicRequest: type: object required: - public_repos properties: public_repos: type: string enum: - refuse - approve - allow CiJob: type: object required: - id - status properties: id: type: string repository: type: string workflow: type: string status: type: string enum: - queued - running - succeeded - failed - cancelled - refused reason: type: - string - 'null' sandbox: type: - string - 'null' cost_usd: type: number CredentialProfile: type: object required: - name properties: name: type: string default: type: boolean connected: type: array items: type: string description: Credential names. Secret values are never returned. custom_apis: type: array items: type: string CreateCredentialProfileRequest: type: object required: - name properties: name: type: string copy_from: type: string make_default: type: boolean CredentialAccount: type: object required: - id - active properties: id: type: string label: type: string active: type: boolean CredentialAccountList: type: object properties: accounts: type: array items: $ref: '#/components/schemas/CredentialAccount' SecretValue: type: object required: - value properties: value: type: string writeOnly: true maxLength: 65536 CustomApi: type: object required: - base_url properties: base_url: type: string format: uri secret: type: string writeOnly: true header: type: string ProxyConfig: type: object required: - enabled properties: enabled: type: boolean profile: type: string default_policy: type: string enum: - deny - allow_known_providers monthly_budget_usd: type: - number - 'null' ProxyRule: type: object required: - secret_ref - host properties: id: type: string readOnly: true secret_ref: type: string description: Built-in secret name or vault path. host: type: string path_prefix: type: string methods: type: array items: type: string header: type: string default: Authorization template: type: string default: Bearer {secret} label_selector: type: string VaultConnection: type: object required: - kind properties: id: type: string readOnly: true kind: type: string enum: - hashicorp_vault - aws_secrets_manager - gcp_secret_manager - azure_key_vault - onepassword - doppler config: type: object additionalProperties: true AiAccess: type: object properties: blocked: type: boolean monthly_budget_usd: type: - number - 'null' allowed_models: type: array items: type: string SecretsSetup: type: object properties: env_files: type: array items: type: string default_environment: type: string SecretFile: type: object required: - path - content properties: path: type: string content: type: string writeOnly: true mode: type: string default: '0600' Environment: type: object required: - id - name - version properties: id: type: string name: type: string version: type: integer third_party_safe: type: boolean effective: type: object description: What sandboxes really receive after all switches. additionalProperties: type: boolean vars: type: array items: type: string description: Names only. secret_files: type: array items: type: string repos: type: array items: $ref: '#/components/schemas/Repo' credential_profile: type: - string - 'null' EnvironmentInput: type: object required: - name properties: name: type: string third_party_safe: type: boolean include_github: type: boolean include_api_key: type: boolean include_agent_logins: type: boolean credential_profile: type: - string - 'null' allowed_members: type: - array - 'null' items: type: string UpgradeEnvironmentRequest: type: object properties: version: type: integer selector: type: string Repo: type: object required: - id - full_name properties: id: type: string full_name: type: string setup_script: type: - string - 'null' path: type: string SelectRepoRequest: type: object required: - full_name properties: full_name: type: string setup_script: type: string path: type: string DesktopRequest: type: object properties: view: type: string enum: - desktop - browser - spectator default: desktop resolution: type: string enum: - 720p - 1080p - 1440p - 4k default: 1080p fps: type: integer enum: - 30 - 60 default: 60 theme: type: string enum: - light - dark expires_seconds: type: integer maximum: 86400 default: 600 DesktopSession: type: object required: - url - expires_at properties: url: type: string format: uri expires_at: type: string format: date-time view: type: string Recording: type: object required: - id - status properties: id: type: string status: type: string enum: - recording - processing - ready - failed url: type: - string - 'null' format: uri include_input_log: type: boolean path: type: - string - 'null' description: Where the MP4 is inside the sandbox. Read it with `harebox file read` or a download URL. bytes: type: - integer - 'null' ComputerAction: type: object required: - action properties: action: type: string enum: - screenshot - click - double_click - right_click - move - drag - type - key - scroll - open_app - open_url - accessibility_tree x: type: integer y: type: integer text: type: string keys: type: array items: type: string delta: type: integer description: 'Scroll steps: positive scrolls down, negative up.' to_x: type: integer description: Where a drag ends. to_y: type: integer url: type: string format: uri description: 'For open_url: an http or https address to open in Chrome.' ComputerResult: type: object properties: ok: type: boolean screenshot_url: type: - string - 'null' format: uri width: type: integer height: type: integer screenshot_png: type: - string - 'null' description: The screenshot as base64 PNG, for screenshot actions. accessibility_tree: type: - array - 'null' description: 'For accessibility_tree: each node''s role, name, bounds and children.' items: type: object CreateEndpointRequest: type: object required: - port properties: port: type: integer minimum: 1 maximum: 65535 protocol: type: string enum: - https - tcp - udp default: https auth: type: string enum: - public - token - oidc - mtls default: token title: type: string domain: type: string wake_on_request: type: boolean default: true allowed_emails: type: array items: type: string UpdateEndpointRequest: type: object properties: auth: type: string enum: - public - token - oidc - mtls title: type: string domain: type: - string - 'null' wake_on_request: type: boolean Endpoint: type: object required: - id - port - protocol - auth - url properties: id: type: string port: type: integer protocol: type: string auth: type: string url: type: string token: type: - string - 'null' description: Returned on create and on rotate only. domain: type: - string - 'null' SshKeyRequest: type: object required: - public_key properties: public_key: type: string expires_seconds: type: integer SshAccess: type: object required: - host - user properties: host: type: string user: type: string port: type: integer host_key: type: string Firewall: type: object required: - inbound - outbound properties: inbound: type: array items: $ref: '#/components/schemas/FirewallRule' outbound: type: array items: $ref: '#/components/schemas/FirewallRule' default_outbound: type: string enum: - allow - deny default: allow FirewallRule: type: object required: - action properties: action: type: string enum: - allow - deny protocol: type: string enum: - tcp - udp - icmp - any ports: type: string cidrs: type: array items: type: string hosts: type: array items: type: string StaticIp: type: object required: - id - address - region properties: id: type: string address: type: string region: $ref: '#/components/schemas/Region' attached_to: type: - string - 'null' ReserveIpRequest: type: object required: - region properties: region: $ref: '#/components/schemas/Region' family: type: string enum: - ipv4 - ipv6 default: ipv4 AttachIpRequest: type: object properties: sandbox: type: - string - 'null' Domain: type: object required: - id - name - status properties: id: type: string name: type: string status: type: string enum: - pending_dns - issuing - active - failed dns_records: type: array items: type: object properties: type: type: string name: type: string value: type: string AddDomainRequest: type: object required: - name properties: name: type: string Mesh: type: object required: - id - name properties: id: type: string name: type: string cidr: type: string label_selector: type: string CreateMeshRequest: type: object required: - name properties: name: type: string label_selector: type: string Snapshot: type: object required: - id - sandbox - kind - created_at properties: id: type: string sandbox: type: string kind: type: string enum: - disk - disk_and_memory trigger: type: string enum: - automatic - stop - sleep - manual - template consistency: type: string enum: - exact - crash_consistent stored_gb: type: number expires_at: type: - string - 'null' format: date-time created_at: type: string format: date-time CreateSnapshotRequest: type: object properties: include_memory: type: boolean default: false pre_snapshot_command: type: string Template: type: object required: - name - latest_version properties: name: type: string latest_version: type: integer versions: type: array items: type: object properties: version: type: integer snapshot: type: string stored_gb: type: number includes_memory: type: boolean created_at: type: string format: date-time owner_secrets_removed: type: boolean CreateTemplateRequest: type: object required: - name - sandbox properties: name: type: string sandbox: type: string include_memory: type: boolean default: false strip_owner_secrets: type: boolean default: true Share: type: object required: - id properties: id: type: string expires_at: type: - string - 'null' format: date-time max_uses: type: - integer - 'null' uses: type: integer ShareList: type: object properties: shares: type: array items: $ref: '#/components/schemas/Share' CreateShareRequest: type: object properties: expires_seconds: type: integer max_uses: type: integer ShareWithCode: allOf: - $ref: '#/components/schemas/Share' - type: object required: - code properties: code: type: string description: Shown once. FleetInput: type: object properties: name: type: string desired: type: integer minimum: 0 maximum: 10000 template: type: string size: $ref: '#/components/schemas/Size' tier: $ref: '#/components/schemas/Tier' regions: type: array items: $ref: '#/components/schemas/Region' spot_fallback: type: string enum: - shared - wait - fail labels: $ref: '#/components/schemas/Labels' budget_usd_month: type: - number - 'null' Fleet: allOf: - $ref: '#/components/schemas/FleetInput' - type: object required: - id properties: id: type: string counts: type: object additionalProperties: type: integer description: Members per lifecycle state. cost_usd_month_to_date: type: number ScheduleInput: type: object required: - action - cron properties: action: type: string enum: - wake - sleep - stop - resume - prompt - command cron: type: string timezone: type: string default: UTC target: type: string description: Sandbox, fleet or label selector. payload: type: object additionalProperties: true Schedule: allOf: - $ref: '#/components/schemas/ScheduleInput' - type: object required: - id properties: id: type: string next_run_at: type: string format: date-time Plan: type: object required: - name properties: name: $ref: '#/components/schemas/PlanName' usd_month: type: number description: Price per seat. credits_usd: type: number seats: type: integer card_on_file: type: boolean renews_at: type: - string - 'null' format: date-time description: When the period ends. Unused included credit expires then. For a trial, when it becomes the build plan. SetPlanRequest: type: object required: - name properties: name: $ref: '#/components/schemas/PlanName' seats: type: integer minimum: 1 maximum: 10000 description: Seats to pay for. At least the number of people. Wallet: type: object required: - balance_usd properties: balance_usd: type: number auto_top_up: $ref: '#/components/schemas/AutoTopUp' grace_until: type: - string - 'null' format: date-time cards: type: array items: type: object properties: brand: type: string last4: type: string WalletQuote: type: object required: - dollars - bonus_percent - credited_usd properties: dollars: type: number bonus_percent: type: number credited_usd: type: number WalletPayRequest: type: object required: - dollars properties: dollars: type: integer minimum: 15 maximum: 100000 PaymentLink: type: object required: - url properties: url: type: string format: uri AutoTopUp: type: object required: - enabled properties: enabled: type: boolean amount_usd: type: number trigger_below_usd: type: number Invoice: type: object required: - id - total_usd properties: id: type: string total_usd: type: number period_start: type: string format: date-time period_end: type: string format: date-time pdf_url: type: string format: uri Budget: allOf: - $ref: '#/components/schemas/BudgetInput' - type: object required: - id properties: id: type: string spent_usd: type: number forecast_usd: type: number BudgetInput: type: object required: - limit_usd properties: limit_usd: type: number scope: type: string description: account, project:ID, fleet:ID or label:KEY=VALUE. period: type: string enum: - day - week - month default: month include_ai: type: boolean default: true action: type: string enum: - alert - sleep - stop - block_new_starts default: alert description: sleep and stop both save the disk and stop what the budget covers, since a sleeping sandbox is still billed; sleep is kept for older clients. alert_at_percent: type: array items: type: integer Reservation: allOf: - $ref: '#/components/schemas/ReservationInput' - type: object required: - id properties: id: type: string usd_per_hour: type: number ends_at: type: string format: date-time ReservationInput: type: object required: - size - count - region properties: size: $ref: '#/components/schemas/SizeName' count: type: integer minimum: 1 region: $ref: '#/components/schemas/Region' term_months: type: integer enum: - 12 default: 12 Forecast: type: object required: - month_end_usd - low_usd - high_usd properties: month_end_usd: type: number low_usd: type: number high_usd: type: number by_group: type: array items: type: object properties: key: type: string usd: type: number Recommendation: type: object required: - id - kind - summary - saving_low_usd - saving_high_usd - evidence properties: id: type: string kind: type: string enum: - resize - enable_sleep - move_to_spot - reserve - delete_template - delete_stopped - set_budget description: enable_sleep, move_to_spot and reserve are no longer recommended, since none saves money; they stay for older clients. summary: type: string saving_low_usd: type: number saving_high_usd: type: number risk: type: string evidence: type: array items: type: string RecommendationList: type: object properties: recommendations: type: array items: $ref: '#/components/schemas/Recommendation' AuditEntry: type: object required: - id - time - actor - action properties: id: type: string time: type: string format: date-time actor: type: string action: type: string target: type: string source_ip: type: string result: type: string OrgList: type: object required: - orgs properties: orgs: type: array items: $ref: '#/components/schemas/Org' next_cursor: type: - string - 'null' MemberList: type: object required: - members properties: members: type: array items: $ref: '#/components/schemas/Member' next_cursor: type: - string - 'null' ProjectList: type: object required: - projects properties: projects: type: array items: $ref: '#/components/schemas/Project' next_cursor: type: - string - 'null' AuditList: type: object required: - entries properties: entries: type: array items: $ref: '#/components/schemas/AuditEntry' next_cursor: type: - string - 'null' RepoList: type: object required: - repos properties: repos: type: array items: $ref: '#/components/schemas/Repo' next_cursor: type: - string - 'null' ApiKeyList: type: object required: - keys properties: keys: type: array items: $ref: '#/components/schemas/ApiKey' next_cursor: type: - string - 'null' WebhookList: type: object required: - webhooks properties: webhooks: type: array items: $ref: '#/components/schemas/Webhook' next_cursor: type: - string - 'null' DeliveryList: type: object required: - deliveries properties: deliveries: type: array items: $ref: '#/components/schemas/Delivery' next_cursor: type: - string - 'null' CredentialProfileList: type: object required: - profiles properties: profiles: type: array items: $ref: '#/components/schemas/CredentialProfile' next_cursor: type: - string - 'null' ProxyRuleList: type: object required: - rules properties: rules: type: array items: $ref: '#/components/schemas/ProxyRule' next_cursor: type: - string - 'null' VaultList: type: object required: - vaults properties: vaults: type: array items: $ref: '#/components/schemas/VaultConnection' next_cursor: type: - string - 'null' EnvironmentList: type: object required: - environments properties: environments: type: array items: $ref: '#/components/schemas/Environment' next_cursor: type: - string - 'null' SandboxList: type: object required: - sandboxes properties: sandboxes: type: array items: $ref: '#/components/schemas/Sandbox' next_cursor: type: - string - 'null' CommandList: type: object required: - commands properties: commands: type: array items: $ref: '#/components/schemas/Command' next_cursor: type: - string - 'null' RecordingList: type: object required: - recordings properties: recordings: type: array items: $ref: '#/components/schemas/Recording' next_cursor: type: - string - 'null' EndpointList: type: object required: - endpoints properties: endpoints: type: array items: $ref: '#/components/schemas/Endpoint' next_cursor: type: - string - 'null' StaticIpList: type: object required: - ips properties: ips: type: array items: $ref: '#/components/schemas/StaticIp' next_cursor: type: - string - 'null' DomainList: type: object required: - domains properties: domains: type: array items: $ref: '#/components/schemas/Domain' next_cursor: type: - string - 'null' MeshList: type: object required: - meshes properties: meshes: type: array items: $ref: '#/components/schemas/Mesh' next_cursor: type: - string - 'null' SnapshotList: type: object required: - snapshots properties: snapshots: type: array items: $ref: '#/components/schemas/Snapshot' next_cursor: type: - string - 'null' TemplateList: type: object required: - templates properties: templates: type: array items: $ref: '#/components/schemas/Template' next_cursor: type: - string - 'null' FleetList: type: object required: - fleets properties: fleets: type: array items: $ref: '#/components/schemas/Fleet' next_cursor: type: - string - 'null' ScheduleList: type: object required: - schedules properties: schedules: type: array items: $ref: '#/components/schemas/Schedule' next_cursor: type: - string - 'null' InvoiceList: type: object required: - invoices properties: invoices: type: array items: $ref: '#/components/schemas/Invoice' next_cursor: type: - string - 'null' BudgetList: type: object required: - budgets properties: budgets: type: array items: $ref: '#/components/schemas/Budget' next_cursor: type: - string - 'null' ReservationList: type: object required: - reservations properties: reservations: type: array items: $ref: '#/components/schemas/Reservation' next_cursor: type: - string - 'null'