{"openapi":"3.1.0","info":{"title":"ProjectDiscovery (BYOK) API","version":"0.1.0","description":"ProjectDiscovery (BYOK) lets an AI assistant read your own ProjectDiscovery data through the ProjectDiscovery API with a key you supply (ProjectDiscovery Cloud API key). Read-only: 7 tools (list_scans, get_scan, list_scan_results, list_enumerations, get_enumeration, list_enumeration_assets, list_public_templates). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-projectdiscovery.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-projectdiscovery/docs"},"termsOfService":"https://connectorbay.com/byok-projectdiscovery/terms"},"servers":[{"url":"https://byok-projectdiscovery.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-projectdiscovery/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_scans":{"post":{"operationId":"list_scans","summary":"List vulnerability scans with status, progress, target and template counts and timing; optionally filter by status or se","description":"List vulnerability scans with status, progress, target and template counts and timing; optionally filter by status or search text. Use for \"Which ProjectDiscovery scans are running or failed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many scans to return.","title":"Limit"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for scan names.","title":"Search"},"status":{"anyOf":[{"enum":["failed","finished","queued","running","starting","uploaded","scheduled"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by status: failed, finished, queued, running, starting, uploaded or scheduled.","title":"Status"},"sort_asc":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated fields to sort ascending, for example 'created_at'.","title":"Sort Asc"},"sort_desc":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated fields to sort descending, for example 'created_at,severity'.","title":"Sort Desc"}},"title":"list_scansArguments","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_scan":{"post":{"operationId":"get_scan","summary":"Get one scan's status, progress, counts, schedule and timing by scan id. Use for \"How did ProjectDiscovery scan s1 go\".","description":"Get one scan's status, progress, counts, schedule and timing by scan id. Use for \"How did ProjectDiscovery scan s1 go\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scan_id":{"description":"Scan id as returned by list_scans.","maxLength":64,"title":"Scan Id","type":"string"}},"required":["scan_id"],"title":"get_scanArguments","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_scan_results":{"post":{"operationId":"list_scan_results","summary":"List vulnerability findings from scans with target, template, severity-related fields, status and description; filter by","description":"List vulnerability findings from scans with target, template, severity-related fields, status and description; filter by severity, host, domain, status or time. Use for \"What high or critical findings are open on example.com in ProjectDiscovery\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return.","title":"Limit"},"severity":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated severities, for example 'high,critical'.","title":"Severity"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text.","title":"Search"},"host":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated hosts, for example 'https://example.com'.","title":"Host"},"domain":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated domain names, for example 'example.com'.","title":"Domain"},"vuln_status":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated finding statuses, for example 'open,fixed'.","title":"Vuln Status"},"time":{"anyOf":[{"enum":["last_day","last_week","last_month"],"type":"string"},{"type":"null"}],"default":null,"description":"Time range: last_day, last_week or last_month.","title":"Time"},"sort_asc":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated fields to sort ascending, for example 'created_at'.","title":"Sort Asc"},"sort_desc":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated fields to sort descending, for example 'created_at,severity'.","title":"Sort Desc"}},"title":"list_scan_resultsArguments","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_enumerations":{"post":{"operationId":"list_enumerations","summary":"List asset enumerations (attack surface discovery runs) with status, root domains and total and new asset counts. Use fo","description":"List asset enumerations (attack surface discovery runs) with status, root domains and total and new asset counts. Use for \"Which asset enumerations does ProjectDiscovery have and how many assets did they find\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip, for paging.","title":"Offset"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many enumerations to return.","title":"Limit"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for enumeration names.","title":"Search"},"time":{"anyOf":[{"enum":["last_day","last_week","last_month","last_3_months","last_6_months","last_12_months","all_time"],"type":"string"},{"type":"null"}],"default":"all_time","description":"Time range to list.","title":"Time"},"sort_asc":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated fields to sort ascending, for example 'created_at'.","title":"Sort Asc"},"sort_desc":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated fields to sort descending, for example 'created_at,severity'.","title":"Sort Desc"}},"title":"list_enumerationsArguments","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_enumeration":{"post":{"operationId":"get_enumeration","summary":"Get one asset enumeration with its status, root domains, exclusions, asset counts and schedule. Use for \"Show details of","description":"Get one asset enumeration with its status, root domains, exclusions, asset counts and schedule. Use for \"Show details of ProjectDiscovery enumeration e1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"enumerate_id":{"description":"Enumeration id as returned by list_enumerations.","maxLength":64,"title":"Enumerate Id","type":"string"}},"required":["enumerate_id"],"title":"get_enumerationArguments","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_enumeration_assets":{"post":{"operationId":"list_enumeration_assets","summary":"List the discovered assets (hosts, ports, IPs, titles, technologies, status codes) of one enumeration, with filters for ","description":"List the discovered assets (hosts, ports, IPs, titles, technologies, status codes) of one enumeration, with filters for host, domain, port, status code and technology. Use for \"Which assets with port 8080 did ProjectDiscovery enumeration e1 discover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"enumerate_id":{"description":"Enumeration id as returned by list_enumerations.","maxLength":64,"title":"Enumerate Id","type":"string"},"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of assets to skip.","title":"Offset"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many assets to return.","title":"Limit"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search on the asset name.","title":"Search"},"host":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated hosts to keep.","title":"Host"},"domain":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated domain names to keep.","title":"Domain"},"port":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated ports to keep, for example '80,443'.","title":"Port"},"status_code":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated HTTP status codes to keep.","title":"Status Code"},"technologies":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Technology name to filter by.","title":"Technologies"},"is_new":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only newly discovered assets.","title":"Is New"}},"required":["enumerate_id"],"title":"list_enumeration_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_public_templates":{"post":{"operationId":"list_public_templates","summary":"List public Nuclei templates with id, name, severity, type, tags, vendor and product. Use for \"Which public Nuclei templ","description":"List public Nuclei templates with id, name, severity, type, tags, vendor and product. Use for \"Which public Nuclei templates does ProjectDiscovery offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of templates to skip.","title":"Offset"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many templates to return.","title":"Limit"}},"title":"list_public_templatesArguments","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}}}}