{"openapi":"3.1.0","info":{"title":"Freshservice (BYOK) API","version":"0.1.0","description":"Freshservice (BYOK) lets an AI assistant read your own Freshservice data through the Freshservice API with a key you supply (Freshservice API key). Read-only: 7 tools (list_tickets, get_ticket, list_requesters, list_agents, list_assets, list_changes, list_problems). 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...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-freshservice.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-freshservice/docs"},"termsOfService":"https://connectorbay.com/byok-freshservice/terms"},"servers":[{"url":"https://byok-freshservice.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-freshservice/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_tickets":{"post":{"operationId":"list_tickets","summary":"List Freshservice tickets (only those created in the last 30 days unless updated_since is given) with subject, status co","description":"List Freshservice tickets (only those created in the last 30 days unless updated_since is given) with subject, status code, priority code, requester and dates. Use for \"What are the latest Freshservice tickets\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your Freshservice subdomain (for example 'acme' for acme.freshservice.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"filter":{"anyOf":[{"enum":["new_and_my_open","watching","spam","deleted"],"type":"string"},{"type":"null"}],"default":null,"description":"Predefined filter: new_and_my_open, watching, spam or deleted.","title":"Filter"},"type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Ticket type, for example Incident or Service Request.","title":"Type"},"requester_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only tickets of this requester id.","title":"Requester Id"},"email":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only tickets of the requester with this email address.","title":"Email"},"updated_since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only tickets updated since this ISO 8601 time, for example 2026-01-01T00:00:00Z (also lifts the 30-day limit).","title":"Updated Since"},"order_type":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc (default desc).","title":"Order Type"},"workspace_id":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Workspace id; 0 returns records from all workspaces (only for accounts with workspaces). Default is the primary workspace.","title":"Workspace Id"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100; the API default is 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1. The documentation advises staying below page 500.","title":"Page"}},"required":["domain"],"title":"list_ticketsArguments","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_ticket":{"post":{"operationId":"get_ticket","summary":"Get one Freshservice ticket by id with its description text, status and priority codes, requester, category and approval","description":"Get one Freshservice ticket by id with its description text, status and priority codes, requester, category and approval state. Use for \"Show Freshservice ticket 266\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your Freshservice subdomain (for example 'acme' for acme.freshservice.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"ticket_id":{"description":"Numeric ticket id.","title":"Ticket Id","type":"integer"}},"required":["domain","ticket_id"],"title":"get_ticketArguments","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_requesters":{"post":{"operationId":"list_requesters","summary":"List Freshservice requesters (end users) with name, primary email, job title and active flag; can filter by email or pho","description":"List Freshservice requesters (end users) with name, primary email, job title and active flag; can filter by email or phone and include agents. Use for \"Find the Freshservice requester with email harry.potter@hogwarts.edu\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your Freshservice subdomain (for example 'acme' for acme.freshservice.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"email":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the requester with this email address.","title":"Email"},"mobile_phone_number":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only the requester with this mobile phone number.","title":"Mobile Phone Number"},"work_phone_number":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only the requester with this work phone number.","title":"Work Phone Number"},"include_agents":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include agents in the answer.","title":"Include Agents"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100; the API default is 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1. The documentation advises staying below page 500.","title":"Page"}},"required":["domain"],"title":"list_requestersArguments","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 Freshservice agents with name, email, job title, active flag and last login; can filter by active state or full-tim","description":"List Freshservice agents with name, email, job title, active flag and last login; can filter by active state or full-time versus occasional. Use for \"Who are the active agents in Freshservice\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your Freshservice subdomain (for example 'acme' for acme.freshservice.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"email":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the agent with this email address.","title":"Email"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active agents only, false for deactivated ones.","title":"Active"},"state":{"anyOf":[{"enum":["fulltime","occasional"],"type":"string"},{"type":"null"}],"default":null,"description":"Agent type: fulltime or occasional.","title":"State"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100; the API default is 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1. The documentation advises staying below page 500.","title":"Page"}},"required":["domain"],"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/list_assets":{"post":{"operationId":"list_assets","summary":"List Freshservice assets (laptops, servers, monitors and so on) with name, tag, type id, usage and assignment. Valid for","description":"List Freshservice assets (laptops, servers, monitors and so on) with name, tag, type id, usage and assignment. Valid for accounts created before 31 March 2026. Use for \"What assets are tracked in Freshservice\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your Freshservice subdomain (for example 'acme' for acme.freshservice.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"order_by":{"anyOf":[{"enum":["id","created_at","updated_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field: id, created_at or updated_at.","title":"Order By"},"order_type":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc (default desc).","title":"Order Type"},"workspace_id":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Workspace id; 0 returns records from all workspaces (only for accounts with workspaces). Default is the primary workspace.","title":"Workspace Id"},"trashed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to list assets in the trash instead.","title":"Trashed"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100; the API default is 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1. The documentation advises staying below page 500.","title":"Page"}},"required":["domain"],"title":"list_assetsArguments","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_changes":{"post":{"operationId":"list_changes","summary":"List Freshservice change requests with subject, status, priority, risk, change type and planned start and end dates. Use","description":"List Freshservice change requests with subject, status, priority, risk, change type and planned start and end dates. Use for \"What changes are planned in Freshservice\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your Freshservice subdomain (for example 'acme' for acme.freshservice.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"updated_since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only changes updated since this ISO 8601 time.","title":"Updated Since"},"order_type":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc (default desc).","title":"Order Type"},"workspace_id":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Workspace id; 0 returns records from all workspaces (only for accounts with workspaces). Default is the primary workspace.","title":"Workspace Id"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100; the API default is 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1. The documentation advises staying below page 500.","title":"Page"}},"required":["domain"],"title":"list_changesArguments","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_problems":{"post":{"operationId":"list_problems","summary":"List Freshservice problem records with subject, status, priority, impact, known-error flag and due date. Use for \"Which ","description":"List Freshservice problem records with subject, status, priority, impact, known-error flag and due date. Use for \"Which problems are open in Freshservice\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your Freshservice subdomain (for example 'acme' for acme.freshservice.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"workspace_id":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Workspace id; 0 returns records from all workspaces (only for accounts with workspaces). Default is the primary workspace.","title":"Workspace Id"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many results per page (1 to 100; the API default is 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1. The documentation advises staying below page 500.","title":"Page"}},"required":["domain"],"title":"list_problemsArguments","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}}}}