{"openapi":"3.1.0","info":{"title":"PhishSpot API","version":"0.1.0","description":"A phishing-email/SMS red-flags checklist: red-flag categories with examples, a URL-inspection guide, a real Levenshtein-based lookalike-domain detector, and a what-to-do-if-clicked recovery checklist. All local -- never a real URL fetch or DNS lookup.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://phishspot.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/phishspot/docs"},"termsOfService":"https://connectorbay.com/phishspot/terms"},"servers":[{"url":"https://phishspot.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/phishspot/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_red_flag_categories":{"post":{"operationId":"list_red_flag_categories","summary":"The full catalog of phishing red-flag categories this reference covers, each with a one-line","description":"The full catalog of phishing red-flag categories this reference covers, each with a one-line\n    description. Use for \"what are the signs of a phishing email\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_red_flag_categoriesArguments","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_red_flag_category":{"post":{"operationId":"get_red_flag_category","summary":"Full detail on one phishing red-flag category: a description and real example phrasing/patterns. Use","description":"Full detail on one phishing red-flag category: a description and real example phrasing/patterns. Use\n    for \"what does a sender-domain-mismatch phishing email look like\", \"examples of urgency tactics in\n    phishing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"category":{"description":"A red-flag category name or natural-language description.","examples":["urgency","sender domain mismatch","generic greeting","credential harvesting link","too good to be true","unexpected attachment"],"title":"Category","type":"string"}},"required":["category"],"title":"get_red_flag_categoryArguments","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/url_inspection_guide":{"post":{"operationId":"url_inspection_guide","summary":"How to check a link's real destination before clicking: hovering or long-pressing to preview it,","description":"How to check a link's real destination before clicking: hovering or long-pressing to preview it,\n    reading a domain right-to-left to find the actual registered domain, spotting lookalike-character tricks,\n    and being cautious of URL shorteners. Use for \"how do I check where a link actually goes before\n    clicking\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"url_inspection_guideArguments","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/check_lookalike_domain":{"post":{"operationId":"check_lookalike_domain","summary":"A REAL computed lookalike-domain heuristic: Levenshtein edit-distance-compares the given domain against","description":"A REAL computed lookalike-domain heuristic: Levenshtein edit-distance-compares the given domain against\n    well-known brand domains and flags likely character-substitution/typosquat impersonation (insertions,\n    deletions, or substitutions like 'rn' for 'm', '1' for 'l', '0' for 'o') within a length-scaled distance\n    threshold, while correctly leaving genuinely unrelated domains unflagged. This is a local string-\n    similarity calculation -- it never fetches, resolves, or visits the domain. Use for \"is arnazon.com an\n    impersonation of amazon.com\", \"check this domain against known brands\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"The suspicious domain or URL to check.","examples":["arnazon.com","rnicrosoft.com","https://paypa1.com/login"],"title":"Domain","type":"string"},"brand_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Well-known domains to compare against; omit to use the bundled default list of ~29 major brands.","title":"Brand Domains"},"max_results":{"default":5,"description":"How many closest-matching brand domains to return.","maximum":20,"minimum":1,"title":"Max Results","type":"integer"}},"required":["domain"],"title":"check_lookalike_domainArguments","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/what_to_do_if_clicked_checklist":{"post":{"operationId":"what_to_do_if_clicked_checklist","summary":"A recovery checklist for if you already clicked a phishing link or opened a malicious attachment:","description":"A recovery checklist for if you already clicked a phishing link or opened a malicious attachment:\n    what to do immediately, depending on whether you entered credentials, a one-time code, or opened a file,\n    plus how to report the message. Use for \"I clicked a phishing link, what do I do now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"what_to_do_if_clicked_checklistArguments","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}}}}