{"openapi":"3.1.0","info":{"title":"P2P.org (BYOK) API","version":"0.1.0","description":"P2P.org (BYOK) lets an AI assistant read your own P2P.org data through the P2P.org API with a key you supply (P2P.org API bearer token (issued by P2P.org support)). Read-only: 10 tools (get_last_staking_period, get_network_apy, get_network_apr, get_validators_count, get_delegators_count, get_network_stake, get_network_rewards, get_exit_queue, get_staking_queue, get_staked_supply). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-p2p.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-p2p/docs"},"termsOfService":"https://connectorbay.com/byok-p2p/terms"},"servers":[{"url":"https://byok-p2p.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-p2p/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_last_staking_period":{"post":{"operationId":"get_last_staking_period","summary":"Get the number and update time of the most recent staking period for a network. Use for \"What is the latest staking peri","description":"Get the number and update time of the most recent staking period for a network. Use for \"What is the latest staking period P2P.org reports for Ethereum\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Network: solana, polkadot, kusama, sui, ethereum or celestia.","enum":["solana","polkadot","kusama","sui","ethereum","celestia"],"title":"Network","type":"string"}},"required":["network"],"title":"get_last_staking_periodArguments","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_network_apy":{"post":{"operationId":"get_network_apy","summary":"Get network APY per staking period (Ethereum also splits consensus and execution layer APY). Use for \"What was the Ether","description":"Get network APY per staking period (Ethereum also splits consensus and execution layer APY). Use for \"What was the Ethereum staking APY over the last month according to P2P.org\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Network: solana, polkadot, kusama, sui, ethereum or celestia.","enum":["solana","polkadot","kusama","sui","ethereum","celestia"],"title":"Network","type":"string"},"start_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period as an ISO 8601 timestamp, for example 2026-01-01T00:00:00.000Z (default: one month ago; a range is at most 31 days).","title":"Start At"},"finish_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period as an ISO 8601 timestamp (default: now).","title":"Finish At"},"start_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"First staking period number to include.","title":"Start Number"},"finish_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Last staking period number to include.","title":"Finish Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many staking periods to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many staking periods to skip, for paging.","title":"Offset"}},"required":["network"],"title":"get_network_apyArguments","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_network_apr":{"post":{"operationId":"get_network_apr","summary":"Get network APR per staking period. Use for \"What was the Solana staking APR last month on P2P.org\".","description":"Get network APR per staking period. Use for \"What was the Solana staking APR last month on P2P.org\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Network: solana, polkadot, kusama, sui, ethereum or celestia.","enum":["solana","polkadot","kusama","sui","ethereum","celestia"],"title":"Network","type":"string"},"start_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period as an ISO 8601 timestamp, for example 2026-01-01T00:00:00.000Z (default: one month ago; a range is at most 31 days).","title":"Start At"},"finish_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period as an ISO 8601 timestamp (default: now).","title":"Finish At"},"start_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"First staking period number to include.","title":"Start Number"},"finish_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Last staking period number to include.","title":"Finish Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many staking periods to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many staking periods to skip, for paging.","title":"Offset"}},"required":["network"],"title":"get_network_aprArguments","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_validators_count":{"post":{"operationId":"get_validators_count","summary":"Get the number of validators per staking period for a network. Use for \"How many validators did P2P.org run on Sui last ","description":"Get the number of validators per staking period for a network. Use for \"How many validators did P2P.org run on Sui last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Network: solana, polkadot, kusama, sui, ethereum or celestia.","enum":["solana","polkadot","kusama","sui","ethereum","celestia"],"title":"Network","type":"string"},"start_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period as an ISO 8601 timestamp, for example 2026-01-01T00:00:00.000Z (default: one month ago; a range is at most 31 days).","title":"Start At"},"finish_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period as an ISO 8601 timestamp (default: now).","title":"Finish At"},"start_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"First staking period number to include.","title":"Start Number"},"finish_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Last staking period number to include.","title":"Finish Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many staking periods to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many staking periods to skip, for paging.","title":"Offset"}},"required":["network"],"title":"get_validators_countArguments","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_delegators_count":{"post":{"operationId":"get_delegators_count","summary":"Get the number of delegators per staking period for a network. Use for \"How many delegators were staking on Polkadot via","description":"Get the number of delegators per staking period for a network. Use for \"How many delegators were staking on Polkadot via P2P.org last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Network: solana, polkadot, kusama, sui, ethereum or celestia.","enum":["solana","polkadot","kusama","sui","ethereum","celestia"],"title":"Network","type":"string"},"start_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period as an ISO 8601 timestamp, for example 2026-01-01T00:00:00.000Z (default: one month ago; a range is at most 31 days).","title":"Start At"},"finish_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period as an ISO 8601 timestamp (default: now).","title":"Finish At"},"start_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"First staking period number to include.","title":"Start Number"},"finish_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Last staking period number to include.","title":"Finish Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many staking periods to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many staking periods to skip, for paging.","title":"Offset"}},"required":["network"],"title":"get_delegators_countArguments","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_network_stake":{"post":{"operationId":"get_network_stake","summary":"Get the total stake per staking period with its currency. Use for \"How much ETH was staked in P2P.org's Ethereum network","description":"Get the total stake per staking period with its currency. Use for \"How much ETH was staked in P2P.org's Ethereum network last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Network: solana, polkadot, kusama, sui, ethereum or celestia.","enum":["solana","polkadot","kusama","sui","ethereum","celestia"],"title":"Network","type":"string"},"start_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period as an ISO 8601 timestamp, for example 2026-01-01T00:00:00.000Z (default: one month ago; a range is at most 31 days).","title":"Start At"},"finish_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period as an ISO 8601 timestamp (default: now).","title":"Finish At"},"start_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"First staking period number to include.","title":"Start Number"},"finish_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Last staking period number to include.","title":"Finish Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many staking periods to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many staking periods to skip, for paging.","title":"Offset"}},"required":["network"],"title":"get_network_stakeArguments","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_network_rewards":{"post":{"operationId":"get_network_rewards","summary":"Get the total staking rewards per staking period with their currency. Use for \"How much did the P2P.org Ethereum network","description":"Get the total staking rewards per staking period with their currency. Use for \"How much did the P2P.org Ethereum network earn in rewards last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"description":"Network: solana, polkadot, kusama, sui, ethereum or celestia.","enum":["solana","polkadot","kusama","sui","ethereum","celestia"],"title":"Network","type":"string"},"start_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period as an ISO 8601 timestamp, for example 2026-01-01T00:00:00.000Z (default: one month ago; a range is at most 31 days).","title":"Start At"},"finish_at":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period as an ISO 8601 timestamp (default: now).","title":"Finish At"},"start_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"First staking period number to include.","title":"Start Number"},"finish_number":{"anyOf":[{"maximum":100000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Last staking period number to include.","title":"Finish Number"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many staking periods to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many staking periods to skip, for paging.","title":"Offset"}},"required":["network"],"title":"get_network_rewardsArguments","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_exit_queue":{"post":{"operationId":"get_exit_queue","summary":"Get the current length of the Ethereum validator exit queue. Use for \"How long is the Ethereum validator exit queue\".","description":"Get the current length of the Ethereum validator exit queue. Use for \"How long is the Ethereum validator exit queue\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"const":"ethereum","description":"Network; only ethereum is supported.","title":"Network","type":"string"}},"required":["network"],"title":"get_exit_queueArguments","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_staking_queue":{"post":{"operationId":"get_staking_queue","summary":"Get the current length of the Ethereum validator activation (staking) queue. Use for \"How long is the Ethereum staking a","description":"Get the current length of the Ethereum validator activation (staking) queue. Use for \"How long is the Ethereum staking activation queue\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"const":"ethereum","description":"Network; only ethereum is supported.","title":"Network","type":"string"}},"required":["network"],"title":"get_staking_queueArguments","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_staked_supply":{"post":{"operationId":"get_staked_supply","summary":"Get the share of the Ethereum supply that is currently staked, in percent. Use for \"What percentage of ETH supply is sta","description":"Get the share of the Ethereum supply that is currently staked, in percent. Use for \"What percentage of ETH supply is staked\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"network":{"const":"ethereum","description":"Network; only ethereum is supported.","title":"Network","type":"string"}},"required":["network"],"title":"get_staked_supplyArguments","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}}}}