Operations 5
Documentation
Documentation
https://developer.duda.co/docs/partner-api-introduction
RateLimits
https://artifacts.apis.io/duda/rate-limits/duda-rate-limits.yml
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/duda:duda-sites-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Duda Partner Sites API
version: '1.0'
description: The Duda Partner API is a REST API that enables partners and agencies to programmatically create and manage websites, pages, templates, sections, content, widgets, eCommerce stores, blog posts, dynamic collections, memberships, bookings, and white-label client portal access. It supports SSO for seamless user login into the Duda editor and provides webhook integration for event-driven workflows.
contact:
name: Duda Developer Documentation
url: https://developer.duda.co
termsOfService: https://www.duda.co/terms-of-service
license:
name: Proprietary
servers:
- url: https://api.duda.co/api
description: Duda Production API
security:
- basicAuth: []
tags:
- name: Sites
description: Create, read, update, and delete websites
paths:
/sites/multiscreen/create:
post:
operationId: sites-create-site
summary: Create Site
description: Create a new Site from a Template.
tags:
- Sites
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- template_alias
properties:
template_alias:
type: string
description: Required if template_id is not provided. The unique alias of the template to use for the site.
template_id:
type: integer
description: The ID of the template. This field is being replaced by template_alias.
lang:
type: string
default_domain_prefix:
type: string
description: Must be between 4-44 characters long.
labels:
type: array
items:
type: object
properties:
name:
type: string
site_data:
type: object
properties:
external_uid:
type: string
google_tracking_id:
type: string
googletagmanager_container_id:
type: array
items:
type: string
description: Max of three IDs
site_domain:
type: string
site_alternate_domains:
type: object
properties:
domains:
type: array
items:
type: string
description: Array of valid domain names. Max 10.
is_redirect:
type: boolean
site_business_info:
type: object
properties:
business_name:
type: string
email:
type: string
phone_number:
type: string
address:
type: object
properties:
street:
type: string
city:
type: string
state:
type: string
country:
type: string
zip_code:
type: string
site_seo:
type: object
properties:
description:
type: string
og_image:
type: string
title:
type: string
responses:
'200':
description: Site created successfully
content:
application/json:
schema:
type: object
properties:
site_name:
type: string
example: 28e1182c
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/sites/multiscreen/{site_name}:
get:
operationId: sites-get-site
summary: Get Site
description: Get the details of a site by name.
tags:
- Sites
parameters:
- name: site_name
in: path
required: true
description: The unique identifier of the target site.
schema:
type: string
responses:
'200':
description: Site details
content:
application/json:
schema:
$ref: '#/components/schemas/SiteData'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
delete:
operationId: sites-delete-site
summary: Delete Site
description: Permanently delete a site and all associated data.
tags:
- Sites
parameters:
- name: site_name
in: path
required: true
description: The unique identifier of the target site.
schema:
type: string
responses:
'204':
description: Site deleted successfully
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/sites/multiscreen:
get:
operationId: sites-list-sites
summary: List Sites
description: Get a paginated list of all sites in the partner account.
tags:
- Sites
parameters:
- name: offset
in: query
description: Zero-based offset for elements (0..N).
schema:
type: integer
format: int32
default: 0
- name: limit
in: query
description: The size of the page to be returned (Max 100).
schema:
type: integer
format: int32
default: 75
- name: sort
in: query
description: One of CREATION_DATE or LAST_PUBLICATION_DATE.
schema:
type: string
default: CREATION_DATE
- name: direction
in: query
description: Sort direction. One of ASC or DESC.
schema:
type: string
default: DESC
- name: publish_status
in: query
description: Filter by publication status. One of PUBLISHED, UNPUBLISHED or NOT_PUBLISHED_YET.
schema:
type: string
- name: label_names
in: query
description: Filter by site labels. Multiple values can be passed as a comma separated list.
schema:
type: string
- name: last_published_date.gte
in: query
description: Filter by sites published after specified date e.g., 2016-07-09T22:33:44.
schema:
type: string
- name: last_published_date.lte
in: query
description: Filter by sites published before specified date.
schema:
type: string
- name: creation_date.gte
in: query
description: Filter by sites created after specified date.
schema:
type: string
- name: creation_date.lte
in: query
description: Filter by sites created before specified date.
schema:
type: string
responses:
'200':
description: Paginated list of sites
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/PaginatedResponse'
- type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/SiteData'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/sites/multiscreen/update/{site_name}:
post:
operationId: sites-update-site
summary: Update Site
description: Update properties of an existing Site.
tags:
- Sites
parameters:
- name: site_name
in: path
required: true
description: The unique identifier of the target site.
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
additionalLanguages:
type: array
items:
type: string
default_domain_prefix:
type: string
description: Must be between 4-44 characters long.
external_uid:
type: string
fav_icon:
type: string
force_https:
type: boolean
google_tracking_id:
type: string
googletagmanager_container_id:
type: array
items:
type: string
description: Max of three IDs.
labels:
type: array
items:
type: object
properties:
name:
type: string
lang:
type: string
schemas:
type: object
properties:
local_business:
type: object
properties:
enabled:
type: boolean
site_alternate_domains:
type: object
properties:
domains:
type: array
items:
type: string
description: Array of valid domain names. Max 10.
is_redirect:
type: boolean
site_domain:
type: string
site_seo:
type: object
properties:
description:
type: string
og_image:
type: string
title:
type: string
no_index:
type: boolean
responses:
'204':
description: Site updated successfully
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
SiteData:
type: object
properties:
site_name:
type: string
description: Unique identifier for the site within Duda
account_name:
type: string
description: The account that owns or is associated with the site
external_uid:
type: string
description: External reference ID set by the partner
site_domain:
type: string
description: Custom domain for the site
lang:
type: string
description: Language code for the site
additionalLanguages:
type: array
items:
type: string
google_tracking_id:
type: string
googletagmanager_container_id:
type: array
items:
type: string
description: Max of three IDs
template_id:
type: integer
site_default_domain:
type: string
preview_site_url:
type: string
overview_site_url:
type: string
editor_site_url:
type: string
last_published_date:
type: string
format: date-time
first_published_date:
type: string
format: date-time
modification_date:
type: string
format: date-time
creation_date:
type: string
format: date-time
publish_status:
type: string
enum:
- PUBLISHED
- UNPUBLISHED
- NOT_PUBLISHED_YET
force_https:
type: boolean
thumbnail_url:
type: string
canonical_url:
type: string
store_status:
type: string
store_type:
type: string
enum:
- NATIVE
- THIRDPARTY
editor:
type: string
enum:
- ADVANCED
- ADVANCED-2.0
fav_icon:
type: string
certificate_status:
type: string
last_reset_by:
type: string
site_business_info:
type: object
properties:
business_name:
type: string
email:
type: string
phone_number:
type: string
address:
type: object
properties:
street:
type: string
city:
type: string
state:
type: string
country:
type: string
zip_code:
type: string
site_alternate_domains:
type: object
properties:
domains:
type: array
items:
type: string
description: Array of valid domain names. Max 10.
is_redirect:
type: boolean
site_seo:
type: object
properties:
og_image:
type: string
title:
type: string
description:
type: string
no_index:
type: boolean
labels:
type: array
items:
type: object
properties:
name:
type: string
content_collection_form:
type: object
properties:
url:
type: string
url_expiration_date:
type: string
format: date-time
PaginatedResponse:
type: object
properties:
offset:
type: integer
limit:
type: integer
total_responses:
type: integer
ErrorResponse:
type: object
properties:
error_code:
type: string
message:
type: string
securitySchemes:
basicAuth:
type: http
scheme: basic
description: HTTP Basic Authentication using API user credentials (base64 encoded user:pass)