{"openapi":"3.1.0","info":{"title":"Snapshot (BYOK) API","version":"0.1.0","description":"Snapshot (BYOK) lets an AI assistant read your own Snapshot data through the Snapshot API with a key you supply (Snapshot hub API key). Read-only: 8 tools (get_space, list_spaces, get_proposal, list_proposals, get_vote, list_votes, list_space_followers, list_space_activity). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-snapshot.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-snapshot/docs"},"termsOfService":"https://connectorbay.com/byok-snapshot/terms"},"servers":[{"url":"https://byok-snapshot.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-snapshot/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_space":{"post":{"operationId":"get_space","summary":"Get one Snapshot space (DAO): name, description, network, token symbol, admins, members, proposal filters and voting str","description":"Get one Snapshot space (DAO): name, description, network, token symbol, admins, members, proposal filters and voting strategies. Use for \"What voting strategies does the ens.eth Snapshot space use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Space id, usually an ENS name such as 'ens.eth'.","maxLength":100,"title":"Id","type":"string"}},"required":["id"],"title":"get_spaceArguments","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_spaces":{"post":{"operationId":"list_spaces","summary":"List Snapshot spaces (DAOs), newest first, with name, description, network and token symbol. Up to 100 per call. Use for","description":"List Snapshot spaces (DAOs), newest first, with name, description, network and token symbol. Up to 100 per call. Use for \"Which Snapshot spaces were created most recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"First"},"skip":{"anyOf":[{"maximum":5000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (0 to 5000).","title":"Skip"}},"title":"list_spacesArguments","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_proposal":{"post":{"operationId":"get_proposal","summary":"Get one proposal: title, full text, choices, start and end times, state, final scores, voting strategies and its space. ","description":"Get one proposal: title, full text, choices, start and end times, state, final scores, voting strategies and its space. Use for \"What is Snapshot proposal 0xabc about and what was the result\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Proposal id (an IPFS hash or 0x hash from list_proposals).","maxLength":100,"title":"Id","type":"string"}},"required":["id"],"title":"get_proposalArguments","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_proposals":{"post":{"operationId":"list_proposals","summary":"List proposals newest first, optionally for one space, one state (pending, active or closed) or one author address, with","description":"List proposals newest first, optionally for one space, one state (pending, active or closed) or one author address, with choices, dates and scores. Use for \"Which proposals are currently active in the ens.eth Snapshot space\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"space":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only this Snapshot space (an ENS name such as 'ens.eth').","title":"Space"},"state":{"anyOf":[{"enum":["pending","active","closed"],"type":"string"},{"type":"null"}],"default":null,"description":"Proposal state: pending, active or closed.","title":"State"},"author":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only proposals created by this address.","title":"Author"},"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"First"},"skip":{"anyOf":[{"maximum":5000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (0 to 5000).","title":"Skip"}},"title":"list_proposalsArguments","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_vote":{"post":{"operationId":"get_vote","summary":"Get one vote by id: voter address, voting power, power state, time, chosen option number and the proposal and space it b","description":"Get one vote by id: voter address, voting power, power state, time, chosen option number and the proposal and space it belongs to. Use for \"Show Snapshot vote 0xv1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Vote id from list_votes.","maxLength":100,"title":"Id","type":"string"}},"required":["id"],"title":"get_voteArguments","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_votes":{"post":{"operationId":"list_votes","summary":"List the votes cast on one proposal, newest first, with voter, power and chosen option (options are numbered from 1). Us","description":"List the votes cast on one proposal, newest first, with voter, power and chosen option (options are numbered from 1). Use for \"Who voted on Snapshot proposal 0xabc and with how much power\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"proposal":{"description":"Proposal id from list_proposals.","maxLength":100,"title":"Proposal","type":"string"},"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"First"},"skip":{"anyOf":[{"maximum":5000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (0 to 5000).","title":"Skip"}},"required":["proposal"],"title":"list_votesArguments","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_space_followers":{"post":{"operationId":"list_space_followers","summary":"List the addresses following a space, newest first, with the follow time. Use for \"Who recently followed the ens.eth Sna","description":"List the addresses following a space, newest first, with the follow time. Use for \"Who recently followed the ens.eth Snapshot space\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"space":{"description":"Snapshot space id, usually an ENS name such as 'ens.eth' or 'aave.eth'.","maxLength":100,"title":"Space","type":"string"},"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"First"},"skip":{"anyOf":[{"maximum":5000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (0 to 5000).","title":"Skip"}},"required":["space"],"title":"list_space_followersArguments","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_space_activity":{"post":{"operationId":"list_space_activity","summary":"List the confirmed actions of a space (votes, proposals, follows, settings changes) in the order they were confirmed, wi","description":"List the confirmed actions of a space (votes, proposals, follows, settings changes) in the order they were confirmed, with type and sequence number. Use for \"What was the latest governance activity in the ens.eth Snapshot space\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"space":{"description":"Snapshot space id, usually an ENS name such as 'ens.eth' or 'aave.eth'.","maxLength":100,"title":"Space","type":"string"},"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"First"},"skip":{"anyOf":[{"maximum":5000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (0 to 5000).","title":"Skip"}},"required":["space"],"title":"list_space_activityArguments","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}}}}