{"openapi":"3.1.0","info":{"title":"Bytescale (BYOK) API","version":"0.1.0","description":"Bytescale (BYOK) lets an AI assistant read your own Bytescale data through the Bytescale API with a key you supply (Bytescale secret API key (starts with secret_)). Read-only: 5 tools (list_folder, get_folder_details, get_file_details, list_recent_jobs, get_job). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-bytescale.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-bytescale/docs"},"termsOfService":"https://connectorbay.com/byok-bytescale/terms"},"servers":[{"url":"https://byok-bytescale.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-bytescale/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_folder":{"post":{"operationId":"list_folder","summary":"List the files and sub-folders under a folder path with file size, last-modified time and type (folders carry folderPath","description":"List the files and sub-folders under a folder path with file size, last-modified time and type (folders carry folderPath and virtual); supports recursion and cursor paging (up to 1000 per page). Use for \"What files are in my Bytescale /uploads folder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Bytescale account id (7 characters, shown on the account settings page), for example 'A623uY2'.","maxLength":200,"title":"Account Id","type":"string"},"folder_path":{"description":"Absolute folder path that starts with / and does not end with / (1 to 512 characters), for example '/uploads'.","maxLength":512,"title":"Folder Path","type":"string"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous response, to fetch the next page.","title":"Cursor"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum items to read per page (1 to 1000); filters are applied after, so a page can hold fewer.","title":"Limit"},"recursive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to include everything under sub-folders.","title":"Recursive"},"include_files":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"False to list folders only (default true).","title":"Include Files"}},"required":["account_id","folder_path"],"title":"list_folderArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_folder_details":{"post":{"operationId":"get_folder_details","summary":"Get one folder's settings: virtual flag, own settings and inherited public permissions and storage layer. Use for \"What ","description":"Get one folder's settings: virtual flag, own settings and inherited public permissions and storage layer. Use for \"What permissions and storage settings apply to my Bytescale /uploads folder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Bytescale account id (7 characters, shown on the account settings page), for example 'A623uY2'.","maxLength":200,"title":"Account Id","type":"string"},"folder_path":{"description":"Absolute folder path that starts with / and does not end with / (1 to 512 characters), for example '/uploads'.","maxLength":512,"title":"Folder Path","type":"string"}},"required":["account_id","folder_path"],"title":"get_folder_detailsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_file_details":{"post":{"operationId":"get_file_details","summary":"Get one file's size, MIME type, original name, tags, custom metadata and raw URL (not the file content). Use for \"What a","description":"Get one file's size, MIME type, original name, tags, custom metadata and raw URL (not the file content). Use for \"What are the details and tags of /uploads/image.jpg in Bytescale\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Bytescale account id (7 characters, shown on the account settings page), for example 'A623uY2'.","maxLength":200,"title":"Account Id","type":"string"},"file_path":{"description":"Absolute file path that starts with / (1 to 512 characters), for example '/uploads/image.jpg'.","maxLength":512,"title":"File Path","type":"string"}},"required":["account_id","file_path"],"title":"get_file_detailsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_recent_jobs":{"post":{"operationId":"list_recent_jobs","summary":"List the 10 most recent jobs of one type (virus scan, batch copy or delete, image, audio or video processing, cache rese","description":"List the 10 most recent jobs of one type (virus scan, batch copy or delete, image, audio or video processing, cache reset) with status and any error. Use for \"Did my recent Bytescale image processing jobs succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Bytescale account id (7 characters, shown on the account settings page), for example 'A623uY2'.","maxLength":200,"title":"Account Id","type":"string"},"job_type":{"description":"Job type to list.","enum":["AntivirusJob","CopyFileBatchJob","CopyFolderBatchJob","DeleteFileBatchJob","DeleteFolderBatchJob","ProcessAudioJob","ProcessImageJob","ProcessVideoJob","ResetCacheJob"],"title":"Job Type","type":"string"}},"required":["account_id","job_type"],"title":"list_recent_jobsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_job":{"post":{"operationId":"get_job","summary":"Get one job's type, status, link and error details by job type and job id. Use for \"What is the status of Bytescale job ","description":"Get one job's type, status, link and error details by job type and job id. Use for \"What is the status of Bytescale job 01HZXJ8Q3M5R7T9V1W2Y4A6B8C\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Bytescale account id (7 characters, shown on the account settings page), for example 'A623uY2'.","maxLength":200,"title":"Account Id","type":"string"},"job_type":{"description":"Job type of the job.","enum":["AntivirusJob","CopyFileBatchJob","CopyFolderBatchJob","DeleteFileBatchJob","DeleteFolderBatchJob","ProcessAudioJob","ProcessImageJob","ProcessVideoJob","ResetCacheJob"],"title":"Job Type","type":"string"},"job_id":{"description":"Job id (26 characters), as returned by list_recent_jobs.","maxLength":200,"title":"Job Id","type":"string"}},"required":["account_id","job_type","job_id"],"title":"get_jobArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}