{"openapi":"3.1.0","info":{"title":"Duda (BYOK) API","version":"0.1.0","description":"Duda (BYOK) lets an AI assistant read your own Duda data through the Duda API with a key you supply (Duda API username). Read-only: 9 tools (list_sites, get_site, list_pages, get_blog, list_blog_posts, get_content_library, list_collections, list_templates, list_recently_published_sites). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached;...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-duda.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-duda/docs"},"termsOfService":"https://connectorbay.com/byok-duda/terms"},"servers":[{"url":"https://byok-duda.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-duda/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_sites":{"post":{"operationId":"list_sites","summary":"List the sites in your Duda account with domain, publish status, language, template, store status and dates. Filter by p","description":"List the sites in your Duda account with domain, publish status, language, template, store status and dates. Filter by publish status; sort by creation or last publish date. Use for \"Which of my Duda sites are published\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"publish_status":{"anyOf":[{"enum":["NOT_PUBLISHED_YET","PUBLISHED","UNPUBLISHED"],"type":"string"},{"type":"null"}],"default":null,"description":"Only sites with this status: NOT_PUBLISHED_YET, PUBLISHED or UNPUBLISHED.","title":"Publish Status"},"label_names":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only sites carrying this label name.","title":"Label Names"},"sort":{"anyOf":[{"enum":["CREATION_DATE","LAST_PUBLISHED_DATE"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by CREATION_DATE or LAST_PUBLISHED_DATE.","title":"Sort"},"direction":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: ASC or DESC.","title":"Direction"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"title":"list_sitesArguments","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_site":{"post":{"operationId":"get_site","summary":"Get one Duda site: domain, publish status, language, template, SEO title and description, HTTPS setting, business name a","description":"Get one Duda site: domain, publish status, language, template, SEO title and description, HTTPS setting, business name and country, extra languages and labels. Use for \"Show the details of Duda site abc12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"site_name":{"description":"The site's unique name (its id), as returned by list_sites in site_name.","maxLength":60,"title":"Site Name","type":"string"}},"required":["site_name"],"title":"get_siteArguments","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_pages":{"post":{"operationId":"list_pages","summary":"List the pages of a Duda site with title, path, type (regular, dynamic or booking), draft status, language and SEO setti","description":"List the pages of a Duda site with title, path, type (regular, dynamic or booking), draft status, language and SEO settings. Use for \"What pages does Duda site abc12345 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"site_name":{"description":"The site's unique name (its id), as returned by list_sites in site_name.","maxLength":60,"title":"Site Name","type":"string"}},"required":["site_name"],"title":"list_pagesArguments","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_blog":{"post":{"operationId":"get_blog","summary":"Get the blog settings of a Duda site: name, title, description, image and layouts. Use for \"What is the blog called on D","description":"Get the blog settings of a Duda site: name, title, description, image and layouts. Use for \"What is the blog called on Duda site abc12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"site_name":{"description":"The site's unique name (its id), as returned by list_sites in site_name.","maxLength":60,"title":"Site Name","type":"string"}},"required":["site_name"],"title":"get_blogArguments","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_blog_posts":{"post":{"operationId":"list_blog_posts","summary":"List the blog posts of a Duda site with title, author, status, tags, publish date and path. Set content to true to inclu","description":"List the blog posts of a Duda site with title, author, status, tags, publish date and path. Set content to true to include post bodies. Use for \"What blog posts has Duda site abc12345 published\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"site_name":{"description":"The site's unique name (its id), as returned by list_sites in site_name.","maxLength":60,"title":"Site Name","type":"string"},"content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include each post's body (larger answer).","title":"Content"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items to return (1 to 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip, for paging.","title":"Offset"}},"required":["site_name"],"title":"list_blog_postsArguments","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_library":{"post":{"operationId":"get_content_library","summary":"Get a Duda site's content library: business name, description and category, about/overview/services texts and site image","description":"Get a Duda site's content library: business name, description and category, about/overview/services texts and site images. Use for \"What business info and texts are stored for Duda site abc12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"site_name":{"description":"The site's unique name (its id), as returned by list_sites in site_name.","maxLength":60,"title":"Site Name","type":"string"}},"required":["site_name"],"title":"get_content_libraryArguments","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_collections":{"post":{"operationId":"list_collections","summary":"List the data collections of a Duda site (custom content tables) with name, number of items, fields and whether pages ca","description":"List the data collections of a Duda site (custom content tables) with name, number of items, fields and whether pages can bind to them. Use for \"Which collections does Duda site abc12345 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"site_name":{"description":"The site's unique name (its id), as returned by list_sites in site_name.","maxLength":60,"title":"Site Name","type":"string"}},"required":["site_name"],"title":"list_collectionsArguments","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_templates":{"post":{"operationId":"list_templates","summary":"List available site templates with name, categories, preview link, editor, page count and whether they include a blog or","description":"List available site templates with name, categories, preview link, editor, page count and whether they include a blog or store. Use for \"Which Duda templates include a blog\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"has_blog":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list only templates with a blog.","title":"Has Blog"},"has_store":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list only templates with an online store.","title":"Has Store"},"type":{"anyOf":[{"enum":["DUDA","CUSTOM"],"type":"string"},{"type":"null"}],"default":null,"description":"DUDA for built-in templates or CUSTOM for your own.","title":"Type"},"name_contains":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only templates whose name contains this text.","title":"Name Contains"},"lang":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only templates in this language code.","title":"Lang"},"direction":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: ASC or DESC.","title":"Direction"}},"title":"list_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}},"/v1/tools/list_recently_published_sites":{"post":{"operationId":"list_recently_published_sites","summary":"List the names of sites published in the last N days. Use for \"Which Duda sites were published in the last 7 days\".","description":"List the names of sites published in the last N days. Use for \"Which Duda sites were published in the last 7 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"last_days":{"anyOf":[{"maximum":365,"minimum":1,"type":"integer"},{"type":"null"}],"default":7,"description":"Look back this many days.","title":"Last Days"}},"title":"list_recently_published_sitesArguments","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}}}}