{"openapi":"3.1.0","info":{"title":"Umbraco Heartcore (BYOK) API","version":"0.1.0","description":"Umbraco Heartcore (BYOK) lets an AI assistant read your own Umbraco Heartcore data through the Umbraco Heartcore API with a key you supply (Heartcore API key (needed when the delivery API is protected)). Read-only: 11 tools (get_root_content, get_content, get_content_by_url, list_content_by_type, list_content_children, list_content_descendants, list_content_ancestors, search_content,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-umbraco-heartcore.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-umbraco-heartcore/docs"},"termsOfService":"https://connectorbay.com/byok-umbraco-heartcore/terms"},"servers":[{"url":"https://byok-umbraco-heartcore.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-umbraco-heartcore/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_root_content":{"post":{"operationId":"get_root_content","summary":"Get the published content items at the root of the content tree with name, content type alias, URL and dates. Use for \"W","description":"Get the published content items at the root of the content tree with name, content type alias, URL and dates. Use for \"What are the top-level pages of my Umbraco Heartcore site\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"content_type":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only content of this content type alias, for example 'products'.","title":"Content Type"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"}},"title":"get_root_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}},"/v1/tools/get_content":{"post":{"operationId":"get_content","summary":"Get one published content item by ID with its properties. Depth controls how many levels of referenced content and media","description":"Get one published content item by ID with its properties. Depth controls how many levels of referenced content and media are resolved (0 to 5). Use for \"Show Umbraco Heartcore content item ec4aafcc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_id":{"description":"Content item ID (a GUID) from another call.","maxLength":64,"title":"Content Id","type":"string"},"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"},"depth":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":1,"description":"How many levels of referenced content or media to include (0 to 5).","title":"Depth"}},"required":["content_id"],"title":"get_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}},"/v1/tools/get_content_by_url":{"post":{"operationId":"get_content_by_url","summary":"Get the published content item that lives at a site URL path, for example /products/. Use for \"Which Heartcore content i","description":"Get the published content item that lives at a site URL path, for example /products/. Use for \"Which Heartcore content item is at /about/\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"description":"Site URL path of the page, for example /products/.","maxLength":300,"title":"Url","type":"string"},"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"},"depth":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":1,"description":"How many levels of referenced content or media to include (0 to 5).","title":"Depth"}},"required":["url"],"title":"get_content_by_urlArguments","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_by_type":{"post":{"operationId":"list_content_by_type","summary":"List published content items of one content type alias with paging (_totalItems, _totalPages). Use for \"List all product","description":"List published content items of one content type alias with paging (_totalItems, _totalPages). Use for \"List all product pages in my Umbraco Heartcore project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_type":{"description":"Content type alias, for example 'products'.","maxLength":100,"title":"Content Type","type":"string"},"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"}},"required":["content_type"],"title":"list_content_by_typeArguments","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_children":{"post":{"operationId":"list_content_children","summary":"List the published children of a content item with paging. Use for \"What pages are under the Heartcore content item ec4a","description":"List the published children of a content item with paging. Use for \"What pages are under the Heartcore content item ec4aafcc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_id":{"description":"Content item ID (a GUID) from another call.","maxLength":64,"title":"Content Id","type":"string"},"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"content_type":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only content of this content type alias, for example 'products'.","title":"Content Type"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"}},"required":["content_id"],"title":"list_content_childrenArguments","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_descendants":{"post":{"operationId":"list_content_descendants","summary":"List all published descendants of a content item (children, grandchildren and so on) with paging. Use for \"List everythi","description":"List all published descendants of a content item (children, grandchildren and so on) with paging. Use for \"List everything below the Heartcore content item ec4aafcc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_id":{"description":"Content item ID (a GUID) from another call.","maxLength":64,"title":"Content Id","type":"string"},"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"content_type":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only content of this content type alias, for example 'products'.","title":"Content Type"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"}},"required":["content_id"],"title":"list_content_descendantsArguments","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_ancestors":{"post":{"operationId":"list_content_ancestors","summary":"List the published ancestors of a content item up to the root, for breadcrumbs. Use for \"What is the breadcrumb of Heart","description":"List the published ancestors of a content item up to the root, for breadcrumbs. Use for \"What is the breadcrumb of Heartcore content item ec4aafcc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_id":{"description":"Content item ID (a GUID) from another call.","maxLength":64,"title":"Content Id","type":"string"},"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"content_type":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only content of this content type alias, for example 'products'.","title":"Content Type"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"}},"required":["content_id"],"title":"list_content_ancestorsArguments","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_content":{"post":{"operationId":"search_content","summary":"Search published content by a term with paging. Use for \"Search my Umbraco Heartcore content for 'jacket'\".","description":"Search published content by a term with paging. Use for \"Search my Umbraco Heartcore content for 'jacket'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"description":"Search term.","maxLength":200,"title":"Term","type":"string"},"culture":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Culture code to return, for example en-US (invariant or default language when empty).","title":"Culture"},"hyperlinks":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to leave out the _links objects.","title":"Hyperlinks"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"}},"required":["term"],"title":"search_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}},"/v1/tools/get_root_media":{"post":{"operationId":"get_root_media","summary":"Get the media items and folders at the root of the media tree. Use for \"What is at the root of my Heartcore media librar","description":"Get the media items and folders at the root of the media tree. Use for \"What is at the root of my Heartcore media library\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_root_mediaArguments","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_media":{"post":{"operationId":"get_media","summary":"Get one media item by ID: type, name, URL, file size and image dimensions. Use for \"Show Heartcore media item 662af6ca\".","description":"Get one media item by ID: type, name, URL, file size and image dimensions. Use for \"Show Heartcore media item 662af6ca\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"media_id":{"description":"Media item ID (a GUID) from another call.","maxLength":64,"title":"Media Id","type":"string"}},"required":["media_id"],"title":"get_mediaArguments","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_media_children":{"post":{"operationId":"list_media_children","summary":"List the children of a media folder with paging. Use for \"What files are in my Heartcore media folder b6f11172\".","description":"List the children of a media folder with paging. Use for \"What files are in my Heartcore media folder b6f11172\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"media_id":{"description":"Media item ID (a GUID) from another call.","maxLength":64,"title":"Media Id","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"}},"required":["media_id"],"title":"list_media_childrenArguments","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}}}}