{"openapi":"3.1.0","info":{"title":"HubSpot CMS Site Settings (BYOK) API","version":"0.1.0","description":"HubSpot CMS Site Settings (BYOK) lets an AI assistant read your own HubSpot CMS Site Settings data through the HubSpot CMS Site Settings API with a key you supply (HubSpot private app access token (scopes: content, cms.domains.read)). Read-only: 6 tools (list_domains, get_domain, list_url_redirects, get_url_redirect, list_content_audit_logs, search_site_content). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-hubspot-cms-site.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-hubspot-cms-site/docs"},"termsOfService":"https://connectorbay.com/byok-hubspot-cms-site/terms"},"servers":[{"url":"https://byok-hubspot-cms-site.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-hubspot-cms-site/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_domains":{"post":{"operationId":"list_domains","summary":"List the domains connected to the HubSpot account with SSL state, which content types each serves and which is primary. ","description":"List the domains connected to the HubSpot account with SSL state, which content types each serves and which is primary. Use for \"Which domains are connected to our HubSpot account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: paging.next.after from the previous answer. Leave out for the first page.","title":"After"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to list archived items instead of active ones.","title":"Archived"}},"title":"list_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_domain":{"post":{"operationId":"get_domain","summary":"Get one connected domain by id: DNS resolution, SSL settings, content types served and primary flags. Use for \"Is domain","description":"Get one connected domain by id: DNS resolution, SSL settings, content types served and primary flags. Use for \"Is domain 5001 resolving and using SSL\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain_id":{"description":"Id of the domain (a numeric string such as '5001').","maxLength":200,"title":"Domain Id","type":"string"}},"required":["domain_id"],"title":"get_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/list_url_redirects":{"post":{"operationId":"list_url_redirects","summary":"List URL redirects with source path, destination, redirect type (301 or 302), match options and precedence. Use for \"Wha","description":"List URL redirects with source path, destination, redirect type (301 or 302), match options and precedence. Use for \"What URL redirects are set up in HubSpot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: paging.next.after from the previous answer. Leave out for the first page.","title":"After"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to list archived items instead of active ones.","title":"Archived"},"created_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only redirects created after this ISO 8601 time.","title":"Created After"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only redirects updated after this ISO 8601 time.","title":"Updated After"}},"title":"list_url_redirectsArguments","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_url_redirect":{"post":{"operationId":"get_url_redirect","summary":"Get one URL redirect by id with source, destination, redirect type and match options. Use for \"Where does redirect 88 po","description":"Get one URL redirect by id with source, destination, redirect type and match options. Use for \"Where does redirect 88 point\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"redirect_id":{"description":"Id of the redirect (a numeric string such as '88').","maxLength":200,"title":"Redirect Id","type":"string"}},"required":["redirect_id"],"title":"get_url_redirectArguments","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_content_audit_logs":{"post":{"operationId":"list_content_audit_logs","summary":"List the content audit log: which pages, posts, templates, domains or files were created, updated, published or deleted,","description":"List the content audit log: which pages, posts, templates, domains or files were created, updated, published or deleted, and when. User names are not returned. Use for \"What content changed in HubSpot in the last few days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 100).","title":"Limit"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: paging.next.after from the previous answer. Leave out for the first page.","title":"After"},"before":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor for earlier entries.","title":"Before"},"event_type":{"anyOf":[{"enum":["CREATED","UPDATED","PUBLISHED","DELETED","UNPUBLISHED","RESTORE"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this event: CREATED, UPDATED, PUBLISHED, DELETED, UNPUBLISHED or RESTORE.","title":"Event Type"},"object_type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only this kind of content, for example BLOG_POST, LANDING_PAGE, WEBSITE_PAGE, TEMPLATE, MODULE, DOMAIN, URL_MAPPING, EMAIL, HUBDB_TABLE, FILE.","title":"Object Type"},"sort":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Field to sort by, for example 'timestamp' or '-timestamp'.","title":"Sort"}},"title":"list_content_audit_logsArguments","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/search_site_content":{"post":{"operationId":"search_site_content","summary":"Search the public content HubSpot indexes for your site (pages, blog posts, knowledge articles) with a text query; retur","description":"Search the public content HubSpot indexes for your site (pages, blog posts, knowledge articles) with a text query; returns titles, URLs and descriptions. Use for \"Search our HubSpot-hosted site for 'refund policy'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Search text.","maxLength":200,"title":"Q","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of results to skip.","title":"Offset"},"type":{"anyOf":[{"enum":["SITE_PAGE","LANDING_PAGE","BLOG_POST","LISTING_PAGE","KNOWLEDGE_ARTICLE"],"type":"string"},{"type":"null"}],"default":null,"description":"Limit to one content type: SITE_PAGE, LANDING_PAGE, BLOG_POST, LISTING_PAGE or KNOWLEDGE_ARTICLE.","title":"Type"},"language":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Limit to one language code such as 'en'.","title":"Language"}},"required":["q"],"title":"search_site_contentArguments","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}}}}