{"openapi":"3.1.0","info":{"title":"OpenAI API account metadata (BYOK) API","version":"0.1.0","description":"OpenAI API account metadata (BYOK) lets an AI assistant read your own OpenAI data through the OpenAI API with a key you supply (OpenAI API key). Read-only: 6 tools (list_models, get_model, list_files, list_batches, list_fine_tuning_jobs, list_vector_stores). 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-openai.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-openai/docs"},"termsOfService":"https://connectorbay.com/byok-openai/terms"},"servers":[{"url":"https://byok-openai.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-openai/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_models":{"post":{"operationId":"list_models","summary":"List the models the key can use, with id, owner and creation time (Unix seconds). Returns up to 50 models. Reads account","description":"List the models the key can use, with id, owner and creation time (Unix seconds). Returns up to 50 models. Reads account metadata only: it sends no prompt and uses no tokens. Use for \"Which OpenAI models can my API key use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_modelsArguments","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_model":{"post":{"operationId":"get_model","summary":"Get one model by id: owner and creation time (Unix seconds). Reads account metadata only: it sends no prompt and uses no","description":"Get one model by id: owner and creation time (Unix seconds). Reads account metadata only: it sends no prompt and uses no tokens. Use for \"Does my key have access to gpt-4o\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"model":{"description":"Model id, for example 'gpt-4o'.","maxLength":100,"title":"Model","type":"string"}},"required":["model"],"title":"get_modelArguments","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_files":{"post":{"operationId":"list_files","summary":"List files uploaded to your account with name, size in bytes, purpose, status and creation time. Does not return file co","description":"List files uploaded to your account with name, size in bytes, purpose, status and creation time. Does not return file contents. Reads account metadata only: it sends no prompt and uses no tokens. Use for \"What files have I uploaded to OpenAI\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"purpose":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only files uploaded for this purpose, for example 'fine-tune', 'assistants' or 'batch'.","title":"Purpose"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort by creation time: 'desc' for newest first or 'asc' for oldest first.","title":"Order"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor for paging: the last_id (or id of the last item) of the previous page.","title":"After"}},"title":"list_filesArguments","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_batches":{"post":{"operationId":"list_batches","summary":"List your batch jobs with status, endpoint, request counts and key times (Unix seconds). Does not return batch results. ","description":"List your batch jobs with status, endpoint, request counts and key times (Unix seconds). Does not return batch results. Reads account metadata only: it sends no prompt and uses no tokens. Use for \"Are my OpenAI batch jobs finished\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor for paging: the last_id (or id of the last item) of the previous page.","title":"After"}},"title":"list_batchesArguments","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_fine_tuning_jobs":{"post":{"operationId":"list_fine_tuning_jobs","summary":"List your fine-tuning jobs with base model, resulting model name, status, trained tokens and times (Unix seconds). Reads","description":"List your fine-tuning jobs with base model, resulting model name, status, trained tokens and times (Unix seconds). Reads account metadata only: it sends no prompt and uses no tokens. Use for \"What is the status of my OpenAI fine-tuning jobs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 20).","title":"Limit"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor for paging: the last_id (or id of the last item) of the previous page.","title":"After"}},"title":"list_fine_tuning_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/list_vector_stores":{"post":{"operationId":"list_vector_stores","summary":"List your vector stores with name, status, size in bytes, file counts and last activity time (Unix seconds). Reads accou","description":"List your vector stores with name, status, size in bytes, file counts and last activity time (Unix seconds). Reads account metadata only: it sends no prompt and uses no tokens. Use for \"What vector stores do I have in OpenAI\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort by creation time: 'desc' for newest first or 'asc' for oldest first.","title":"Order"},"after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor for paging: the last_id (or id of the last item) of the previous page.","title":"After"}},"title":"list_vector_storesArguments","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}}}}