Route Management
Section titled “Route Management”Resolve, discover, and test script URL routes; generate, serve, merge, and validate user OpenAPI specs; and manage imported SDK packages. All paths returned by these endpoints are scripts-root-relative (root: /hoody/storage/hoody-exec/scripts) and carry the full `<subdomain>/<execId>` prefix, for example default/1/api/users/[id].ts. The exec service does not apply host or exec scope to routing — pass baseDir explicitly when you need to scope a query to a single exec instance. SDK middleware files generated by the import endpoint are named pre.js and post.js, and marker is the metadata file path default/<sdkId>/.sdk.json.
Route Discovery and Resolution
Section titled “Route Discovery and Resolution”These endpoints implement Next.js-style dynamic routing against the scripts directory. Routes are matched in priority order: static > dynamic > catch-all > optional catch-all. Every returned script path is scripts-root-relative with the full `<subdomain>/<execId>/` prefix.
POST /api/v1/exec/route/discover
Section titled “POST /api/v1/exec/route/discover”Scan the scripts directory and classify each .js or .ts file as static, dynamic ([param]), catch-all ([...slug]), or optional catch-all ([[...path]]). Returns the route pattern, file path (as file), type, and extracted parameter names. Set includeMetadata to include file size and modification time.
This endpoint takes no path, query, or header parameters.
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
baseDir | string | No | Scripts-root-relative directory to scan. Pass `<subdomain>/<execId>` to scope to a single instance. Default: "" |
includeMetadata | boolean | No | Include file size and modification time in each route entry. Default: false |
{ "baseDir": "default/1", "includeMetadata": true}Response
Section titled “Response”{ "baseDir": "default/1", "count": 2, "routes": [ { "file": "default/1/api/users/[id].ts", "routePattern": "api/users/[id]", "type": "dynamic", "parameters": ["id"] }, { "file": "default/1/api/posts/[...slug].ts", "routePattern": "api/posts/[...slug]", "type": "catchall", "parameters": ["slug"] } ]}{ "error": "Invalid baseDir", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "baseDir not found", "code": "NOT_FOUND", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
NOT_FOUND | Resource not found | The requested resource does not exist | Verify the resource identifier |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X POST "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/route/discover" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"baseDir": "default/1", "includeMetadata": true}'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.route.discover({ baseDir: 'default/1', includeMetadata: true,});POST /api/v1/exec/route/resolve
Section titled “POST /api/v1/exec/route/resolve”Resolve a URL path to the script that handles it, using Next.js-style dynamic routing. Matches in priority order: static > dynamic > catch-all > optional catch-all. Scoped by hostname and execId: checks {hostname}/{execId}/, then {hostname}/, then {execId}/, then root. Returns the matched scriptPath, extracted route parameters, and route type.
This endpoint takes no path, query, or header parameters.
Request Body
Section titled “Request Body”The request body is required but no fields are documented. Send a JSON object — pass any fields the runtime expects (for example, the target path).
{}Response
Section titled “Response”{ "matched": true, "path": "api/users/123", "scriptPath": "default/1/api/users/[id].ts", "routePattern": "api/users/[id]", "parameters": {"id": "123"}, "type": "dynamic", "baseDir": "default/1"}When no route matches, the response still returns 200 with matched: false:
{ "matched": false, "path": "api/missing", "hostname": "api.example.com", "execId": null, "triedDirectories": ["api.example.com/1/", "api.example.com/", "1/"]}{ "error": "Invalid path", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X POST "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/route/resolve" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{}'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.route.resolve({});POST /api/v1/exec/route/test
Section titled “POST /api/v1/exec/route/test”Test multiple URL paths against the routing system in a single batch. For each path, resolves which script would handle it using the same priority and scoping rules as route resolve. Returns per-path match results plus aggregate counts.
This endpoint takes no path, query, or header parameters.
Request Body
Section titled “Request Body”The request body is required but no fields are documented. Send a JSON object containing the batch of paths to test.
{}Response
Section titled “Response”{ "tested": 2, "matched": 1, "notMatched": 1, "results": [ { "path": "api/users/123", "matched": true, "scriptPath": "default/1/api/users/[id].ts", "routePattern": "api/users/[id]", "parameters": {"id": "123"}, "type": "dynamic", "baseDir": "default/1" }, { "path": "api/missing", "matched": false, "triedDirectories": ["1/", ""] } ]}{ "error": "Invalid paths array", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X POST "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/route/test" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{}'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.route.test({});User OpenAPI
Section titled “User OpenAPI”Generate, list, validate, serve, and merge OpenAPI specifications derived from your scripts. All paths referenced in these responses are scripts-root-relative with the full `<subdomain>/<execId>/` prefix.
GET /api/v1/exec/user-openapi/list
Section titled “GET /api/v1/exec/user-openapi/list”List available scripts with schema information.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
directory | query | string | No | Script directory to list (absolute or relative to scripts-dir). Default: scripts |
dir | query | string | No | Alias of directory. Ignored when directory is provided. |
subdomain | query | string | No | Limit scan to scripts under this subdomain. Falls back to the Host header when omitted. |
execId | query | string | No | Limit scan to scripts under this execId. Falls back to the Host header when omitted. |
Response
Section titled “Response”{ "success": true, "data": { "directory": "default/1", "totalScripts": 3, "withSchemas": 2, "scripts": [ { "path": "default/1/api/users/[id].ts", "routePath": "api/users/[id]", "hasSchema": true, "schemaFormat": "zod", "pathParameters": ["id"] }, { "path": "default/1/api/posts.ts", "routePath": "api/posts", "hasSchema": true, "schemaFormat": "json-schema", "pathParameters": [] }, { "path": "default/1/api/health.ts", "routePath": "api/health", "hasSchema": false, "pathParameters": [] } ] }}{ "error": "Invalid directory parameter", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/user-openapi/list?directory=default/1" \ -H "Authorization: Bearer $HOODY_TOKEN"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.openapi.listScripts({ directory: 'default/1' });GET /api/v1/exec/user-openapi/schema
Section titled “GET /api/v1/exec/user-openapi/schema”Serve a script’s schema file directly. Either file or path must be provided.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
file | query | string | No | Absolute or scripts-dir-relative path to the target script (for example, default/api/users/[id].ts). Either file or path must be provided. |
path | query | string | No | Alias of file. Either file or path must be provided. |
Response
Section titled “Response”{ "zod": { "input": { "type": "object", "properties": { "id": {"type": "string"} }, "required": ["id"] }, "output": { "type": "object", "properties": { "id": {"type": "string"}, "name": {"type": "string"}, "email": {"type": "string", "format": "email"} }, "required": ["id", "name", "email"] } }}{ "error": "Missing file or path parameter", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/user-openapi/schema?file=default/1/api/users/[id].ts" \ -H "Authorization: Bearer $HOODY_TOKEN"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.openapi.serveSchema({ file: 'default/1/api/users/[id].ts' });GET /api/v1/exec/user-openapi/spec
Section titled “GET /api/v1/exec/user-openapi/spec”Generate and serve an OpenAPI specification on-the-fly from the script directory.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
dir | query | string | No | Script directory to scan (absolute or relative to scripts-dir). Default: scripts |
directory | query | string | No | Alias of dir. Ignored when dir is provided. |
format | query | string | No | Output format. One of: json, yaml. Default: json |
subdomain | query | string | No | Limit scan to scripts under this subdomain. Falls back to the Host header when omitted. |
execId | query | string | No | Limit scan to scripts under this execId. Falls back to the Host header when omitted. |
Response
Section titled “Response”{ "openapi": "3.0.0", "info": { "title": "User API", "version": "1.0.0" }, "paths": { "/api/users/{id}": { "get": { "summary": "Get user by id", "parameters": [ {"name": "id", "in": "path", "required": true, "schema": {"type": "string"}} ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": {"type": "string"}, "name": {"type": "string"} } } } } } } } } }}{ "error": "Invalid format parameter", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/user-openapi/spec?dir=default/1&format=json" \ -H "Authorization: Bearer $HOODY_TOKEN"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.openapi.serve({ dir: 'default/1', format: 'json' });POST /api/v1/exec/user-openapi/generate
Section titled “POST /api/v1/exec/user-openapi/generate”Generate an OpenAPI specification from user scripts.
This endpoint takes no path, query, or header parameters.
Request Body
Section titled “Request Body”The request body is required but no fields are documented. Send a JSON object.
{}Response
Section titled “Response”{ "success": true, "data": { "openapi": "3.0.0", "info": {"title": "User API", "version": "1.0.0"}, "paths": {} }, "meta": { "pathCount": 3, "scanDirectory": "default/1", "generatedAt": "2025-01-15T10:30:00.000Z" }}{ "error": "Invalid request", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X POST "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/user-openapi/generate" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{}'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.openapi.generate({});POST /api/v1/exec/user-openapi/merge
Section titled “POST /api/v1/exec/user-openapi/merge”Merge multiple OpenAPI specs into one.
This endpoint takes no path, query, or header parameters.
Request Body
Section titled “Request Body”The request body is required but no fields are documented. Send a JSON object containing the specs to merge.
{}Response
Section titled “Response”{ "success": true, "data": { "openapi": "3.0.0", "info": {"title": "Merged API", "version": "1.0.0"}, "paths": {} }}{ "error": "Invalid specs payload", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X POST "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/user-openapi/merge" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{}'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.openapi.merge({});POST /api/v1/exec/user-openapi/validate
Section titled “POST /api/v1/exec/user-openapi/validate”Validate a script’s schema file.
This endpoint takes no path, query, or header parameters.
Request Body
Section titled “Request Body”The request body is required but no fields are documented. Send a JSON object identifying the script to validate.
{}Response
Section titled “Response”{ "success": true, "data": {"valid": true, "schemaFormat": "zod"}, "errors": []}When validation fails, success is false and errors contains the issues:
{ "success": false, "data": null, "errors": [ "Missing required field: output", "Invalid type at path $.input.id" ]}{ "error": "Invalid validation request", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X POST "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/user-openapi/validate" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{}'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.openapi.validateSchema({});SDK Management
Section titled “SDK Management”Import, inspect, list, and delete SDK packages. All SDK paths returned by these endpoints are scripts-root-relative. The SDK root for an imported SDK is default/<sdkId>/; middleware files are default/<sdkId>/pre.js and default/<sdkId>/post.js, and the marker is the metadata file path default/<sdkId>/.sdk.json.
GET /api/v1/exec/sdk/{id}
Section titled “GET /api/v1/exec/sdk/{id}”Get the metadata, middleware status, and file inventory for a single SDK.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Id parameter |
Response
Section titled “Response”{ "id": "sdk-abc123", "type": "sdk", "source_url": "https://github.com/example/sdk.git", "path": "default/sdk-abc123", "marker": "default/sdk-abc123/.sdk.json", "middleware": { "pre": { "exists": true, "path": "default/sdk-abc123/pre.js", "hash": "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08" }, "post": { "exists": false, "path": null, "hash": null } }, "files": { "total": 12, "endpoints": 10, "list": [ {"path": "default/sdk-abc123/api/users.ts"}, {"path": "default/sdk-abc123/api/posts.ts"} ] }}{ "error": "Invalid id parameter", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "SDK not found", "code": "NOT_FOUND", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
NOT_FOUND | Resource not found | The requested resource does not exist | Verify the resource identifier |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/sdk/sdk-abc123" \ -H "Authorization: Bearer $HOODY_TOKEN"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.sdk.get('sdk-abc123');GET /api/v1/exec/sdk/list
Section titled “GET /api/v1/exec/sdk/list”List all imported SDKs.
This endpoint takes no parameters.
Response
Section titled “Response”{ "sdks": [ { "id": "sdk-abc123", "source_url": "https://github.com/example/sdk.git", "files": 12, "middleware": { "pre": true, "post": false }, "marker": "default/sdk-abc123/.sdk.json" } ], "total": 1}{ "error": "Invalid request", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/sdk/list" \ -H "Authorization: Bearer $HOODY_TOKEN"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.sdk.list();POST /api/v1/exec/sdk/import
Section titled “POST /api/v1/exec/sdk/import”Import an SDK from a source URL into the scripts directory.
This endpoint takes no path, query, or header parameters.
Request Body
Section titled “Request Body”| Field | Type | Required | Description |
|---|---|---|---|
execId | string | Yes | Exec Id |
source_url | string | Yes | Source URL of the SDK to import |
source_auth | string | No | Authentication token for the source repository |
middleware | string | No | Middleware configuration |
magic_comments | string | No | Magic comments to inject into generated scripts |
force | boolean | No | Force re-import even if the SDK already exists. Default: false |
{ "execId": "1", "source_url": "https://github.com/example/sdk.git", "source_auth": "ghp_exampleToken", "force": false}Response
Section titled “Response”{ "action": "imported", "summary": { "new": 12, "updated": 0, "conflicts": 0, "total": 12 }, "sdk": { "id": "sdk-abc123", "source_url": "https://github.com/example/sdk.git", "path": "default/sdk-abc123", "files": { "endpoints": 10, "pre": "default/sdk-abc123/pre.js", "post": "default/sdk-abc123/post.js", "marker": "default/sdk-abc123/.sdk.json" } }}{ "error": "Missing execId or source_url", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X POST "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/sdk/import" \ -H "Authorization: Bearer $HOODY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "execId": "1", "source_url": "https://github.com/example/sdk.git" }'import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.sdk.importSDK({ execId: '1', source_url: 'https://github.com/example/sdk.git',});DELETE /api/v1/exec/sdk/{id}
Section titled “DELETE /api/v1/exec/sdk/{id}”Delete an SDK and remove all of its files from the scripts directory.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes | Id parameter |
Response
Section titled “Response”{ "message": "SDK deleted", "removed": { "marker": "default/sdk-abc123/.sdk.json", "files": 12, "directory": "default/sdk-abc123" }}{ "error": "Invalid id parameter", "code": "VALIDATION_ERROR", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
VALIDATION_ERROR | Invalid input | Request parameters failed validation | Check parameter format and requirements |
{ "error": "SDK not found", "code": "NOT_FOUND", "timestamp": "2025-01-15T10:30:00.000Z"}| Error Code | Title | Description | Resolution |
|---|---|---|---|
NOT_FOUND | Resource not found | The requested resource does not exist | Verify the resource identifier |
{ "error": "Internal server error", "code": "ERROR_500", "timestamp": "2025-01-15T10:30:00.000Z"}SDK Usage
Section titled “SDK Usage”curl -X DELETE "https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com/api/v1/exec/sdk/sdk-abc123" \ -H "Authorization: Bearer $HOODY_TOKEN"import { HoodyClient } from 'hoody-sdk';
const client = new HoodyClient({ baseURL: 'https://67e89abc123def456789abcd-890abcdef12345678901cdef.node-us.containers.hoody.com', token: process.env.HOODY_TOKEN });
await client.exec.sdk.delete('sdk-abc123');