{"openapi":"3.1.0","info":{"title":"Botify (BYOK) API","version":"0.1.0","description":"Botify (BYOK) lets an AI assistant read your own Botify data through the Botify API with a key you supply (Botify API token). Read-only: 10 tools (list_projects, list_analyses, get_analysis, get_crawl_statistics, get_crawl_statistics_over_time, get_sitemaps_report, get_search_console_stats, list_top_linked_domains, get_scoring_summary, list_jobs). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-botify.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-botify/docs"},"termsOfService":"https://connectorbay.com/byok-botify/terms"},"servers":[{"url":"https://byok-botify.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-botify/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_projects":{"post":{"operationId":"list_projects","summary":"List the active SEO projects of a user or organization with slug, creation date, which products are enabled and the web ","description":"List the active SEO projects of a user or organization with slug, creation date, which products are enabled and the web property domain. Use for \"Which SEO projects do I have in Botify\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only projects whose name matches this text.","title":"Name"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results per page (default set by Botify).","title":"Size"}},"required":["username"],"title":"list_projectsArguments","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_analyses":{"post":{"operationId":"list_analyses","summary":"List the crawl analyses of a project with status, URLs crawled, launch and finish times; successful analyses only by def","description":"List the crawl analyses of a project with status, URLs crawled, launch and finish times; successful analyses only by default. Use for \"What were the latest Botify crawls of project example-com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results per page (default set by Botify).","title":"Size"},"only_success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True (default) for finished analyses only, false to include failed or running ones.","title":"Only Success"}},"required":["username","project_slug"],"title":"list_analysesArguments","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_analysis":{"post":{"operationId":"get_analysis","summary":"Get one crawl analysis: status, URLs done and queued, launch type and key dates. Use for \"How did Botify analysis 202610","description":"Get one crawl analysis: status, URLs done and queued, launch type and key dates. Use for \"How did Botify analysis 20261001 of project example-com finish\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"analysis_slug":{"description":"Analysis (crawl) slug (from list_analyses), for example '20261001'.","maxLength":120,"title":"Analysis Slug","type":"string"}},"required":["username","project_slug","analysis_slug"],"title":"get_analysisArguments","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_crawl_statistics":{"post":{"operationId":"get_crawl_statistics","summary":"Get global crawl statistics of an analysis: pages crawled by HTTP class (2xx, 3xx, 4xx, 5xx, network errors), pages know","description":"Get global crawl statistics of an analysis: pages crawled by HTTP class (2xx, 3xx, 4xx, 5xx, network errors), pages known and current depth. Use for \"How many pages returned errors in Botify analysis 20261001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"analysis_slug":{"description":"Analysis (crawl) slug (from list_analyses), for example '20261001'.","maxLength":120,"title":"Analysis Slug","type":"string"}},"required":["username","project_slug","analysis_slug"],"title":"get_crawl_statisticsArguments","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_crawl_statistics_over_time":{"post":{"operationId":"get_crawl_statistics_over_time","summary":"Get crawl statistics of an analysis over time (average response delay, HTTP code counts, new URLs) in 1, 5 or 60 minute ","description":"Get crawl statistics of an analysis over time (average response delay, HTTP code counts, new URLs) in 1, 5 or 60 minute buckets. Use for \"How did the Botify crawler's response time change during analysis 20261001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"analysis_slug":{"description":"Analysis (crawl) slug (from list_analyses), for example '20261001'.","maxLength":120,"title":"Analysis Slug","type":"string"},"frequency":{"description":"Bucket size: 1mn, 5mn or 60mn.","enum":["1mn","5mn","60mn"],"title":"Frequency","type":"string"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of buckets per series.","title":"Limit"}},"required":["username","project_slug","analysis_slug","frequency"],"title":"get_crawl_statistics_over_timeArguments","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_sitemaps_report":{"post":{"operationId":"get_sitemaps_report","summary":"Get the sitemap report of an analysis: sitemap files found with valid and invalid URL counts, and URLs found only in sit","description":"Get the sitemap report of an analysis: sitemap files found with valid and invalid URL counts, and URLs found only in sitemaps. Use for \"Which sitemaps have invalid URLs in Botify analysis 20261001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"analysis_slug":{"description":"Analysis (crawl) slug (from list_analyses), for example '20261001'.","maxLength":120,"title":"Analysis Slug","type":"string"}},"required":["username","project_slug","analysis_slug"],"title":"get_sitemaps_reportArguments","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_search_console_stats":{"post":{"operationId":"get_search_console_stats","summary":"Get Google Search Console clicks and impressions per day imported into an analysis. Use for \"What were the daily clicks ","description":"Get Google Search Console clicks and impressions per day imported into an analysis. Use for \"What were the daily clicks and impressions from Search Console in Botify analysis 20261001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"analysis_slug":{"description":"Analysis (crawl) slug (from list_analyses), for example '20261001'.","maxLength":120,"title":"Analysis Slug","type":"string"}},"required":["username","project_slug","analysis_slug"],"title":"get_search_console_statsArguments","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_top_linked_domains":{"post":{"operationId":"list_top_linked_domains","summary":"List the external domains the crawled site links to most, with follow and nofollow link counts. Use for \"Which external ","description":"List the external domains the crawled site links to most, with follow and nofollow link counts. Use for \"Which external domains does the site link to most in Botify analysis 20261001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"analysis_slug":{"description":"Analysis (crawl) slug (from list_analyses), for example '20261001'.","maxLength":120,"title":"Analysis Slug","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results per page (default set by Botify).","title":"Size"}},"required":["username","project_slug","analysis_slug"],"title":"list_top_linked_domainsArguments","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_scoring_summary":{"post":{"operationId":"get_scoring_summary","summary":"Get the scoring summary of an analysis (page scoring results). Use for \"What is the scoring summary of Botify analysis 2","description":"Get the scoring summary of an analysis (page scoring results). Use for \"What is the scoring summary of Botify analysis 20261001\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Botify username or organization slug that owns the projects, shown in the app URL.","maxLength":80,"title":"Username","type":"string"},"project_slug":{"description":"Project slug (from list_projects), for example 'example-com'.","maxLength":120,"title":"Project Slug","type":"string"},"analysis_slug":{"description":"Analysis (crawl) slug (from list_analyses), for example '20261001'.","maxLength":120,"title":"Analysis Slug","type":"string"}},"required":["username","project_slug","analysis_slug"],"title":"get_scoring_summaryArguments","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_jobs":{"post":{"operationId":"list_jobs","summary":"List Botify jobs (exports and other background tasks) with type, status and creation time, optionally for one project or","description":"List Botify jobs (exports and other background tasks) with type, status and creation time, optionally for one project or analysis. Use for \"Which Botify export jobs have finished\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results per page (default set by Botify).","title":"Size"},"job_type":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs of this type.","title":"Job Type"},"project":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs of this project slug.","title":"Project"},"analysis":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs of this analysis slug.","title":"Analysis"}},"title":"list_jobsArguments","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}}}}