{"openapi":"3.1.0","info":{"title":"Pylon (BYOK) API","version":"0.1.0","description":"Pylon (BYOK) lets an AI assistant read your own Pylon data through the Pylon API with a key you supply (API token (US region; EU tenants use api.eu.usepylon.com and are not supported)). Read-only: 12 tools (get_me, list_issues, get_issue, list_issue_statuses, list_accounts, get_account, list_teams, list_tags, list_surveys, list_survey_responses, list_knowledge_bases, list_kb_articles). The BYOK...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-pylon.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-pylon/docs"},"termsOfService":"https://connectorbay.com/byok-pylon/terms"},"servers":[{"url":"https://byok-pylon.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-pylon/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_me":{"post":{"operationId":"get_me","summary":"Show the Pylon organization and API user the token belongs to; a quick way to check the token works. Use for \"Which Pylo","description":"Show the Pylon organization and API user the token belongs to; a quick way to check the token works. Use for \"Which Pylon organization is my token connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_meArguments","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_issues":{"post":{"operationId":"list_issues","summary":"List support issues created inside a time window (at most 365 days wide), newest first, with state, source, tags and ass","description":"List support issues created inside a time window (at most 365 days wide), newest first, with state, source, tags and assignee. Cursor paging. Use for \"Which Pylon issues were created in the last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"description":"Start of the window on the issue's creation time, inclusive, RFC 3339 with Z, for example 2026-10-01T00:00:00Z.","maxLength":200,"title":"Start Time","type":"string"},"end_time":{"description":"End of the window, exclusive, RFC 3339 with Z. Must be less than 365 days after start_time.","maxLength":200,"title":"End Time","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many issues to return (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor from the previous answer's pagination.cursor; leave empty for the first page.","title":"Cursor"}},"required":["start_time","end_time"],"title":"list_issuesArguments","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_issue":{"post":{"operationId":"get_issue","summary":"Get one issue by its id or its issue number, with state, tags, assignee, requester, account and timing fields. Use for \"","description":"Get one issue by its id or its issue number, with state, tags, assignee, requester, account and timing fields. Use for \"Show me Pylon issue 1234\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Issue id or issue number.","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_issueArguments","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_issue_statuses":{"post":{"operationId":"list_issue_statuses","summary":"List the issue statuses of the organization; the slug is the value used as an issue state. Use for \"What statuses can a ","description":"List the issue statuses of the organization; the slug is the value used as an issue state. Use for \"What statuses can a Pylon issue have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_issue_statusesArguments","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_accounts":{"post":{"operationId":"list_accounts","summary":"List customer accounts with name, primary domain, type, tags and last customer activity. Cursor paging. Use for \"Which c","description":"List customer accounts with name, primary domain, type, tags and last customer activity. Cursor paging. Use for \"Which customer accounts are in Pylon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":999,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many accounts to return (1 to 999).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor from the previous answer's pagination.cursor; leave empty for the first page.","title":"Cursor"}},"title":"list_accountsArguments","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_account":{"post":{"operationId":"get_account","summary":"Get one customer account by its Pylon id or your own external id. Use for \"Show me the Pylon account with external id ac","description":"Get one customer account by its Pylon id or your own external id. Use for \"Show me the Pylon account with external id acme-corp\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Account id or external id.","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_accountArguments","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 support teams with their ids and names. Use for \"Which teams exist in Pylon\".","description":"List support teams with their ids and names. Use for \"Which teams exist in Pylon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_tags":{"post":{"operationId":"list_tags","summary":"List tags with their values and the object type they apply to. Cursor paging. Use for \"Which tags are defined in Pylon\".","description":"List tags with their values and the object type they apply to. Cursor paging. Use for \"Which tags are defined in Pylon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor from the previous answer's pagination.cursor; leave empty for the first page.","title":"Cursor"}},"title":"list_tagsArguments","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_surveys":{"post":{"operationId":"list_surveys","summary":"List the customer surveys of the organization. Use for \"Which surveys do we run in Pylon\".","description":"List the customer surveys of the organization. Use for \"Which surveys do we run in Pylon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_surveysArguments","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_survey_responses":{"post":{"operationId":"list_survey_responses","summary":"List responses to one survey, optionally limited to a submission time window. Cursor paging. Use for \"What responses did","description":"List responses to one survey, optionally limited to a submission time window. Cursor paging. Use for \"What responses did Pylon survey s_1 get this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Survey id, taken from list_surveys.","maxLength":200,"title":"Id","type":"string"},"submitted_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only responses submitted after this RFC 3339 time.","title":"Submitted After"},"submitted_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only responses submitted before this RFC 3339 time.","title":"Submitted Before"},"limit":{"anyOf":[{"maximum":999,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many responses to return (1 to 999).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor from the previous answer's pagination.cursor; leave empty for the first page.","title":"Cursor"}},"required":["id"],"title":"list_survey_responsesArguments","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_knowledge_bases":{"post":{"operationId":"list_knowledge_bases","summary":"List the knowledge bases with title, slug and languages. Cursor paging. Use for \"What knowledge bases does Pylon hold\".","description":"List the knowledge bases with title, slug and languages. Cursor paging. Use for \"What knowledge bases does Pylon hold\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor from the previous answer's pagination.cursor; leave empty for the first page.","title":"Cursor"}},"title":"list_knowledge_basesArguments","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_kb_articles":{"post":{"operationId":"list_kb_articles","summary":"List articles of one knowledge base with title, URL, publication state and last edit time (article bodies are not return","description":"List articles of one knowledge base with title, URL, publication state and last edit time (article bodies are not returned). Cursor paging. Use for \"Which articles are published in Pylon knowledge base kb_1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Knowledge base id, taken from list_knowledge_bases.","maxLength":200,"title":"Id","type":"string"},"language":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Language code of the articles; the default language when empty.","title":"Language"},"media":{"anyOf":[{"enum":["all","none"],"type":"string"},{"type":"null"}],"default":"none","description":"Whether embedded media is included in the article HTML (not returned here): all or none.","title":"Media"},"limit":{"anyOf":[{"maximum":999,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many articles to return (1 to 999).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Opaque cursor from the previous answer's pagination.cursor; leave empty for the first page.","title":"Cursor"}},"required":["id"],"title":"list_kb_articlesArguments","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}}}}