{"openapi":"3.1.0","info":{"title":"CustomGPT (BYOK) API","version":"0.1.0","description":"CustomGPT (BYOK) lets an AI assistant read your own CustomGPT data through the CustomGPT API with a key you supply (CustomGPT API token). Read-only: 11 tools (get_current_user, list_agents, get_agent, get_agent_stats, list_agent_documents, get_document_metadata, list_conversations, get_conversation_messages, list_agent_tasks, list_teams, list_team_members). The BYOK key travels with each request,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-customgpt.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-customgpt/docs"},"termsOfService":"https://connectorbay.com/byok-customgpt/terms"},"servers":[{"url":"https://byok-customgpt.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-customgpt/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/get_current_user":{"post":{"operationId":"get_current_user","summary":"Show the CustomGPT account the token belongs to: name, email, id and current team. Use for \"Which CustomGPT account does","description":"Show the CustomGPT account the token belongs to: name, email, id and current team. Use for \"Which CustomGPT account does my token belong to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_current_userArguments","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_agents":{"post":{"operationId":"list_agents","summary":"List your CustomGPT agents (called projects in the API), newest id first, with name, type, sharing and chat-active flags","description":"List your CustomGPT agents (called projects in the API), newest id first, with name, type, sharing and chat-active flags. Ten per page. Use for \"Which CustomGPT agents do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; keep going until last_page.","title":"Page"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction: asc or desc.","title":"Order"},"order_by":{"anyOf":[{"enum":["id","created_at"],"type":"string"},{"type":"null"}],"default":"id","description":"Sort field: id or created_at.","title":"Order By"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only agents whose name matches this text.","title":"Name"}},"title":"list_agentsArguments","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_agent":{"post":{"operationId":"get_agent","summary":"Get one agent's name, type, chat status, sharing link and timestamps. Use for \"Show CustomGPT agent 1234\".","description":"Get one agent's name, type, chat status, sharing link and timestamps. Use for \"Show CustomGPT agent 1234\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agent_id":{"description":"Numeric id of the CustomGPT agent (project); get it from list_agents.","title":"Agent Id","type":"integer"}},"required":["agent_id"],"title":"get_agentArguments","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_agent_stats":{"post":{"operationId":"get_agent_stats","summary":"Get usage numbers for an agent: pages found, crawled and indexed, words indexed, total queries and credits used. Use for","description":"Get usage numbers for an agent: pages found, crawled and indexed, words indexed, total queries and credits used. Use for \"How many pages are indexed and how many queries did CustomGPT agent 1234 get\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agent_id":{"description":"Numeric id of the CustomGPT agent (project); get it from list_agents.","title":"Agent Id","type":"integer"}},"required":["agent_id"],"title":"get_agent_statsArguments","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_agent_documents":{"post":{"operationId":"list_agent_documents","summary":"List the documents (web pages and files) in an agent's knowledge base with crawl and index status, file name and size. U","description":"List the documents (web pages and files) in an agent's knowledge base with crawl and index status, file name and size. Use for \"Which documents has CustomGPT agent 1234 indexed, and did any fail\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agent_id":{"description":"Numeric id of the CustomGPT agent (project); get it from list_agents.","title":"Agent Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; keep going until last_page.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Documents per page.","title":"Limit"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction: asc or desc.","title":"Order"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Case-insensitive text to match in the document URL or file name.","title":"Search"},"crawl_status":{"anyOf":[{"enum":["all","ok","failed","n/a","queued","limited"],"type":"string"},{"type":"null"}],"default":"all","description":"Filter by crawl status.","title":"Crawl Status"},"index_status":{"anyOf":[{"enum":["all","ok","failed","n/a","queued","limited"],"type":"string"},{"type":"null"}],"default":"all","description":"Filter by index status.","title":"Index Status"}},"required":["agent_id"],"title":"list_agent_documentsArguments","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_document_metadata":{"post":{"operationId":"get_document_metadata","summary":"Get the title, description, summary, source URL and image of one indexed document. Use for \"What is the title and summar","description":"Get the title, description, summary, source URL and image of one indexed document. Use for \"What is the title and summary of document 55 in CustomGPT agent 1234\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agent_id":{"description":"Numeric id of the CustomGPT agent (project); get it from list_agents.","title":"Agent Id","type":"integer"},"page_id":{"description":"Numeric id of the document, from list_agent_documents.","title":"Page Id","type":"integer"}},"required":["agent_id","page_id"],"title":"get_document_metadataArguments","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_conversations":{"post":{"operationId":"list_conversations","summary":"List an agent's conversations (chat sessions) with name, session id, creator and last update; filter by user type, name ","description":"List an agent's conversations (chat sessions) with name, session id, creator and last update; filter by user type, name or date. Use for \"What conversations did CustomGPT agent 1234 have recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agent_id":{"description":"Numeric id of the CustomGPT agent (project); get it from list_agents.","title":"Agent Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; keep going until last_page.","title":"Page"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction: asc or desc.","title":"Order"},"order_by":{"anyOf":[{"enum":["id","created_at"],"type":"string"},{"type":"null"}],"default":"id","description":"Sort field: id or created_at.","title":"Order By"},"user_filter":{"anyOf":[{"enum":["all","anonymous","team_member","me"],"type":"string"},{"type":"null"}],"default":"all","description":"Which users: all, anonymous, team_member or me.","title":"User Filter"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations whose name matches this text.","title":"Name"},"last_updated_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations with messages after this date and time (ISO 8601).","title":"Last Updated After"}},"required":["agent_id"],"title":"list_conversationsArguments","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_conversation_messages":{"post":{"operationId":"get_conversation_messages","summary":"Read the messages of one conversation: each user question, the agent's answer and the time. Answers can be long. Use for","description":"Read the messages of one conversation: each user question, the agent's answer and the time. Answers can be long. Use for \"What was said in CustomGPT conversation 9f8b7c6d-1111-2222-3333-444455556666\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agent_id":{"description":"Numeric id of the CustomGPT agent (project); get it from list_agents.","title":"Agent Id","type":"integer"},"session_id":{"description":"Session id of a conversation, from list_conversations (session_id field).","maxLength":200,"title":"Session Id","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; keep going until last_page.","title":"Page"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort direction: asc or desc.","title":"Order"}},"required":["agent_id","session_id"],"title":"get_conversation_messagesArguments","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_agent_tasks":{"post":{"operationId":"list_agent_tasks","summary":"List an agent's Plan and Act tasks with name and last update (tasks start with a prompt and run asynchronously). Use for","description":"List an agent's Plan and Act tasks with name and last update (tasks start with a prompt and run asynchronously). Use for \"Which Plan & Act tasks has CustomGPT agent 1234 run\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"agent_id":{"description":"Numeric id of the CustomGPT agent (project); get it from list_agents.","title":"Agent Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; keep going until last_page.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Tasks per page.","title":"Limit"}},"required":["agent_id"],"title":"list_agent_tasksArguments","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_teams":{"post":{"operationId":"list_teams","summary":"List the teams the token's user belongs to, with name, owner and whether it is a personal team. Use for \"Which CustomGPT","description":"List the teams the token's user belongs to, with name, owner and whether it is a personal team. Use for \"Which CustomGPT teams am I in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; keep going until last_page.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Teams per page.","title":"Limit"}},"title":"list_teamsArguments","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_team_members":{"post":{"operationId":"list_team_members","summary":"List the members of the current team with name, role id and join time. Use for \"Who is on my CustomGPT team\".","description":"List the members of the current team with name, role id and join time. Use for \"Who is on my CustomGPT team\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; keep going until last_page.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Members per page.","title":"Limit"}},"title":"list_team_membersArguments","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}}}}