{"openapi":"3.1.0","info":{"title":"Zealy (BYOK) API","version":"0.1.0","description":"Zealy (BYOK) lets an AI assistant read your own Zealy data through the Zealy API with a key you supply (Zealy API key (read-only scope is enough)). Read-only: 8 tools (get_community, get_leaderboard, list_sprints, list_quests, list_modules, list_reviews, get_member, get_member_review_marks). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-zealy.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zealy/docs"},"termsOfService":"https://connectorbay.com/byok-zealy/terms"},"servers":[{"url":"https://byok-zealy.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zealy/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_community":{"post":{"operationId":"get_community","summary":"Get basic public info about a community: name, subdomain, sector, blockchain, type and total member count. Use for \"How ","description":"Get basic public info about a community: name, subdomain, sector, blockchain, type and total member count. Use for \"How many members does the Zealy community 'join' have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"}},"required":["subdomain"],"title":"get_communityArguments","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_leaderboard":{"post":{"operationId":"get_leaderboard","summary":"Get the leaderboard of a community (all-time, or one sprint) with rank data: member name, XP and number of quests done. ","description":"Get the leaderboard of a community (all-time, or one sprint) with rank data: member name, XP and number of quests done. Emails and wallet addresses are not returned. Use for \"Who is at the top of the Zealy leaderboard of 'join'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"},"sprint_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Sprint ID from list_sprints, to get a sprint leaderboard instead of the all-time one.","title":"Sprint Id"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Records per page (1 to 1000, default 50).","title":"Limit"}},"required":["subdomain"],"title":"get_leaderboardArguments","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_sprints":{"post":{"operationId":"list_sprints","summary":"List the leaderboard sprints of a community with name, start and end time and reward zone; use onlyCurrent to get just t","description":"List the leaderboard sprints of a community with name, start and end time and reward zone; use onlyCurrent to get just the running one. Use for \"Which sprint is running in the Zealy community 'join'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"},"only_current":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only the active sprint.","title":"Only Current"}},"required":["subdomain"],"title":"list_sprintsArguments","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_quests":{"post":{"operationId":"list_quests","summary":"List the quests of a community (needs an admin key) with name, publish and archive flags, recurrence, claim limit, claim","description":"List the quests of a community (needs an admin key) with name, publish and archive flags, recurrence, claim limit, claim count and last update. Use for \"Which quests does the Zealy community 'join' have and how often were they claimed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"}},"required":["subdomain"],"title":"list_questsArguments","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_modules":{"post":{"operationId":"list_modules","summary":"List the modules (quest categories) of a community with name, colour and position. Use for \"What modules are in the Zeal","description":"List the modules (quest categories) of a community with name, colour and position. Use for \"What modules are in the Zealy community 'join'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"}},"required":["subdomain"],"title":"list_modulesArguments","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_reviews":{"post":{"operationId":"list_reviews","summary":"List quest submissions (reviews) of a community with status, star or flag mark, user name, quest name and time. Task ans","description":"List quest submissions (reviews) of a community with status, star or flag mark, user name, quest name and time. Task answers are not returned. Needs a reviewer or admin key; page with nextCursor. Use for \"Which Zealy submissions in 'join' are still pending review\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"},"status":{"anyOf":[{"enum":["pending","success","fail"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by review status.","title":"Status"},"quest_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only submissions for this quest ID (UUID).","title":"Quest Id"},"limit":{"anyOf":[{"maximum":102,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many submissions to return (1 to 102, default 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the nextCursor of the previous page.","title":"Cursor"}},"required":["subdomain"],"title":"list_reviewsArguments","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_member":{"post":{"operationId":"get_member","summary":"Get one community member by Zealy user ID: name, XP, level, rank, role, ban flag, referrer and sign-up time. Email, wall","description":"Get one community member by Zealy user ID: name, XP, level, rank, role, ban flag, referrer and sign-up time. Email, wallet and social handles are not returned. Use for \"What is the XP and rank of Zealy user c1d2 in 'join'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"},"user_id":{"description":"Zealy user ID (UUID).","maxLength":60,"title":"User Id","type":"string"}},"required":["subdomain","user_id"],"title":"get_memberArguments","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_member_review_marks":{"post":{"operationId":"get_member_review_marks","summary":"Get how many stars and flags a member received on reviewed submissions in a community. Use for \"How many stars has Zealy","description":"Get how many stars and flags a member received on reviewed submissions in a community. Use for \"How many stars has Zealy user c1d2 received in 'join'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Community subdomain: the last part of the community URL, for example 'join' in zealy.io/cw/join.","maxLength":100,"title":"Subdomain","type":"string"},"user_id":{"description":"Zealy user ID (UUID).","maxLength":60,"title":"User Id","type":"string"}},"required":["subdomain","user_id"],"title":"get_member_review_marksArguments","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}}}}