<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
  <channel>
    <title>CloudCannon API Changelog</title>
    <link>https://cloudcannon.com/documentation/</link>
    <atom:link href="https://cloudcannon.com/documentation/developer-reference/api/changelog/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Changes to the CloudCannon API, its endpoints, and its fields</description>
    <lastBuildDate>Thu, 05 Nov 2026 03:15:27 GMT</lastBuildDate>
    <language>en</language>
    <generator>Lume 3.3.2</generator>
    <item>
      <title>Subdomain endpoints and Site SSL deprecations</title>
      <link>
        https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/11/05/subdomain-endpoints-and-site-ssl-deprecations/
      </link>
      <guid isPermaLink="false">
        https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/11/05/subdomain-endpoints-and-site-ssl-deprecations/
      </guid>
      <content:encoded>
        <![CDATA[<p>This update added endpoints for managing the <em>Subdomains</em> of a <em>Base Domain</em>, and deprecated the <em>Site</em> SSL endpoints and fields in favor of their <em>Subdomain</em> replacements. It also changed <code>GET /api/v0/base-domains/{base_domain_uuid}/subdomains</code> to return <em>Subdomains</em> rather than <em>Sites</em>, which affects any code that reads its items as <em>Sites</em>.</p>
<h2>Added</h2>
<ul>
<li>Added <em>Subdomain</em> endpoints under <code>/api/v0/base-domains/{base_domain_uuid}/subdomains</code>, allowing you to create, get, update, and delete <em>Subdomains</em>.</li>
<li>Added <code>POST …/subdomains/{subdomain_uuid}/sites</code>, <code>PUT …/sites/{site_uuid}</code>, <code>PUT …/sites/{site_uuid}/swap</code>, and <code>DELETE …/sites/{site_uuid}</code>, allowing you to add a <em>Site</em> to a <em>Subdomain</em> at a subpath, change its subpath, swap it for another <em>Site</em> in one step, and remove it.</li>
<li>Added <code>POST …/subdomains/{subdomain_uuid}/redirect</code> and <code>POST …/subdomains/{subdomain_uuid}/site</code>, allowing you to switch a <em>Subdomain</em> between redirecting visitors and serving <em>Sites</em>. Redirects use a 301, 302, 307, or 308 status code.</li>
<li>Added <code>POST …/subdomains/{subdomain_uuid}/fallback</code>, allowing you to make a <em>Subdomain</em> the <em>Fallback Redirect</em> for its <em>Base Domain</em>.</li>
<li>Added <code>POST …/subdomains/{subdomain_uuid}/ssl/retry</code>, allowing you to retry issuing the <em>SSL Certificate</em> for a <em>Subdomain</em>, at most once a minute.</li>
<li>Added <code>GET</code> and <code>POST …/subdomains/{subdomain_uuid}/checks</code>, <code>POST …/subdomains/{subdomain_uuid}/dns/fix</code>, and <code>POST …/subdomains/{subdomain_uuid}/dns/updated</code>, allowing you to list the DNS checks for a <em>Subdomain</em>, check its DNS now, fix its record on CloudCannon DNS, and tell CloudCannon you have updated its record.</li>
<li>Added <code>GET /api/v0/base-domains/{base_domain_uuid}/dns/checks</code>, <code>POST …/dns/check</code>, <code>POST …/dns/nameservers-updated</code>, <code>POST …/dns/wildcard-updated</code>, and <code>POST …/dns/wildcard-record-updated</code>, allowing you to list and run nameserver checks, and tell CloudCannon you have updated your nameservers or wildcard records.</li>
<li>Added <code>GET /api/v0/ssl-certificates/{ssl_certificate_uuid}/subdomains</code>, allowing you to list the <em>Subdomains</em> that use an <em>SSL Certificate</em>, including <em>Redirect Subdomains</em>, on the <em>Base Domains</em> you can read.</li>
<li>Added the <code>fallback_redirect_status</code> and <code>lower_subdomains</code> fields to <code>PUT /api/v0/base-domains/{base_domain_uuid}</code>, allowing you to set the status code of the <em>Fallback Redirect</em>, and to lower the minimum TLS version of your <em>Subdomains</em> along with your <em>Base Domain</em>.</li>
<li>Added DNS setup fields to <em>Base Domain</em> responses, such as <code>dns_setup_stage</code>, <code>wildcard_certificate</code>, <code>disconnect_blockers</code>, <code>found_name_servers</code>, <code>wildcard_record_checked_at</code>, <code>wildcard_record_found</code>, and <code>wildcard_record_updated_at</code>. Fields that need a live check are filled only by <code>GET /api/v0/base-domains/{base_domain_uuid}</code> and the DNS endpoints.</li>
<li>Added the <code>hostnames</code> and <code>removal_requested_at</code> fields to <em>SSL Certificate</em> responses, and a <code>removing</code> filter to <code>GET /api/v0/orgs/{org_uuid}/ssl-certificates</code>.</li>
<li>Added a <code>subdomain_uuid</code> field to <em>Site</em> responses, allowing you to find the <em>Subdomain</em> a <em>Site</em> is served on.</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Changed <code>GET /api/v0/base-domains/{base_domain_uuid}/subdomains</code> to return <em>Subdomains</em> rather than <em>Sites</em>. Each item has its own <code>uuid</code>, an <code>is_fallback</code> field in place of <code>is_fallback_redirect</code>, and a <code>sites</code> array in place of <code>site_uuid</code> and <code>site_id</code>. The list now includes <em>Redirect Subdomains</em> and <em>Subdomains</em> with no <em>Site</em>, and needs only permission to read the <em>Base Domain</em>.</li>
<li>Changed <code>PUT /api/v0/sites/{site_uuid}/domain</code> to stop connecting a new <em>Base Domain</em>. It needs the <em>Base Domain</em> connected to your <em>Organization</em> first, and permission to edit the settings of both the current and the new <em>Base Domain</em>.</li>
<li>Changed <code>DELETE /api/v0/ssl-certificates/{ssl_certificate_uuid}</code> to remove a certificate that <em>Subdomains</em> still use, rather than refusing it. Every <em>Subdomain</em> that uses it switches to a certificate CloudCannon issues. It returns <code>202</code> while <em>Subdomains</em> still serve the certificate, and <code>204</code> once it is deleted.</li>
<li>Changed <code>DELETE /api/v0/base-domains/{base_domain_uuid}</code> to refuse while redirects lead to or from the <em>Base Domain</em>, and to list each one in the error.</li>
<li>Changed <code>PUT /api/v0/base-domains/{base_domain_uuid}/migrate</code> to need permission to edit the DNS of the <em>Base Domain</em> as well as its settings.</li>
<li>Changed the <code>hosting_choice</code>, <code>force_ssl</code>, <code>auto_generate_ssl</code>, and <code>ssl_certificate</code> filters on the <em>Site</em> list endpoints to match only <em>Sites</em> with a <em>Custom Domain</em>.</li>
</ul>
<h2>Deprecated</h2>
<ul>
<li>Deprecated the <em>Site</em> SSL endpoints and fields. They still work, but each has a replacement on the <em>Subdomain</em> a <em>Site</em> is served on, which the <code>subdomain_uuid</code> field on the <em>Site</em> identifies.
<ul>
<li><code>PUT /api/v0/sites/{site_uuid}/ssl</code>, <code>DELETE /api/v0/sites/{site_uuid}/ssl</code>, and <code>PUT /api/v0/sites/{site_uuid}/ssl/cloudflare</code> are replaced by <code>PUT /api/v0/base-domains/{base_domain_uuid}/subdomains/{subdomain_uuid}</code>.</li>
<li><code>POST /api/v0/sites/{site_uuid}/ssl/auto</code> and <code>POST /api/v0/sites/{site_uuid}/ssl/cloudflare</code> are replaced by <code>POST …/subdomains/{subdomain_uuid}/ssl/retry</code>, and share its limit of one retry a minute.</li>
<li><code>POST /api/v0/sites/{site_uuid}/domain/prioritise</code> is replaced by <code>POST …/subdomains/{subdomain_uuid}/fallback</code>.</li>
<li>The <code>hosting_choice</code>, <code>force_ssl</code>, <code>auto_generate_ssl</code>, and <code>ssl_certificate_id</code> fields on <code>PUT /api/v0/sites/{site_uuid}/hosting</code> are replaced by the same fields on the <em>Subdomain</em>. On a <em>Site</em> without a <em>Custom Domain</em>, these fields return an error unless the value matches the one the <em>Site</em> already reports.</li>
<li>The <code>sites</code> field on <code>GET /api/v0/ssl-certificates/{ssl_certificate_uuid}</code> is replaced by <code>GET /api/v0/ssl-certificates/{ssl_certificate_uuid}/subdomains</code>.</li>
</ul>
</li>
</ul>
<h2>Removed</h2>
<ul>
<li>Removed the <code>sites</code> field from <code>GET /api/v0/orgs/{org_uuid}/ssl-certificates</code> and <code>POST /api/v0/orgs/{org_uuid}/ssl-certificates</code>.</li>
<li>Removed the <code>wildcard</code> field from <code>PUT /api/v0/sites/{site_uuid}/ssl/cloudflare</code>. Sending it returns an error.</li>
<li>Removed the <code>external</code> value of <code>hosting_choice</code> on <code>PUT /api/v0/sites/{site_uuid}/hosting</code>.</li>
<li>Removed the <code>cloudflare_error</code> filter and the <code>priority_domain_at</code> sort from <code>GET /api/v0/orgs/{org_uuid}/sites</code> and <code>GET /api/v0/projects/{project_uuid}/sites</code>.</li>
</ul>]]>
      </content:encoded>
      <category>api-changelog</category>
      <pubDate>Thu, 05 Nov 2026 02:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Single Inbox submission endpoint</title>
      <link>https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/10/09/single-inbox-submission-endpoint/</link>
      <guid isPermaLink="false">https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/10/09/single-inbox-submission-endpoint/</guid>
      <content:encoded>
        <![CDATA[<p>This update added an endpoint for getting a single <em>Inbox</em> submission, and new options for listing and exporting submissions.</p>
<h2>Added</h2>
<ul>
<li>Added <code>GET /api/v0/form-hooks/{form_hook_uuid}</code>, allowing you to get a single <em>Inbox</em> submission.</li>
<li>Added the <code>uuids</code> parameter to the <em>Inbox</em> export endpoint, allowing you to export specific submissions.</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Changed the endpoints that list submissions for an <em>Inbox</em> or a <em>Site</em> to accept the <code>forwarded</code> category.</li>
</ul>]]>
      </content:encoded>
      <category>api-changelog</category>
      <pubDate>Fri, 09 Oct 2026 02:31:00 GMT</pubDate>
    </item>
    <item>
      <title>Guest Access endpoints</title>
      <link>https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/10/08/guest-access-endpoints/</link>
      <guid isPermaLink="false">https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/10/08/guest-access-endpoints/</guid>
      <content:encoded>
        <![CDATA[<p>This update added endpoints and fields for <em>Guest Access</em>, which replaced <em>Client Sharing</em>, and deprecated the <em>Client Sharing</em> endpoints and fields.</p>
<h2>Added</h2>
<ul>
<li>Added the <code>guest-access</code> and <code>guest-password</code> endpoints, allowing you to manage <em>Guest Access</em> for a <em>Site</em>.</li>
<li>Added the <code>guest_</code> fields to <em>Site</em> responses, which replace the <code>client_</code> fields.</li>
</ul>
<h2>Deprecated</h2>
<ul>
<li>Deprecated the <code>client-sharing</code> and <code>client-password</code> endpoints and the <code>client_</code> fields on a <em>Site</em>. They still work, but the <code>guest-access</code> and <code>guest-password</code> endpoints and the <code>guest_</code> fields replace them.</li>
</ul>]]>
      </content:encoded>
      <category>api-changelog</category>
      <pubDate>Thu, 08 Oct 2026 01:38:00 GMT</pubDate>
    </item>
    <item>
      <title>Inbox secret keys no longer returned</title>
      <link>https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/10/01/inbox-secret-keys-no-longer-returned/</link>
      <guid isPermaLink="false">https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/10/01/inbox-secret-keys-no-longer-returned/</guid>
      <content:encoded>
        <![CDATA[<p>This update stopped the <em>Inbox</em> endpoints returning the values of secret keys.</p>
<h2>Changed</h2>
<ul>
<li>Changed the <em>Inbox</em> endpoints to show whether a secret key is set, rather than returning the value of that key.</li>
</ul>]]>
      </content:encoded>
      <category>api-changelog</category>
      <pubDate>Thu, 01 Oct 2026 01:40:00 GMT</pubDate>
    </item>
    <item>
      <title>Optional fields for Inbox endpoints</title>
      <link>https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/09/25/optional-fields-for-inbox-endpoints/</link>
      <guid isPermaLink="false">https://cloudcannon.com/documentation/developer-reference/api/changelog/2026/09/25/optional-fields-for-inbox-endpoints/</guid>
      <content:encoded>
        <![CDATA[<p>This update made every field optional on the <em>Inbox</em> and <em>Inbox Target</em> update endpoints, added a field for allowing file uploads, and fixed captcha provider validation.</p>
<h2>Added</h2>
<ul>
<li>Added the <code>allow_uploads</code> field to the fields you can set on an <em>Inbox</em>.</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Changed the <em>Inbox</em> and <em>Inbox Target</em> update endpoints so that every field is optional, allowing you to send only the fields you want to change.</li>
</ul>
<h2>Removed</h2>
<ul>
<li>Removed the <code>monthly_quota</code> field from the fields you can set on an <em>Inbox</em>.</li>
</ul>
<h2>Fixes</h2>
<ul>
<li>Fixed an issue where an <em>Inbox</em> accepted an unrecognized captcha provider, which then never ran.</li>
</ul>]]>
      </content:encoded>
      <category>api-changelog</category>
      <pubDate>Thu, 24 Sep 2026 21:40:00 GMT</pubDate>
    </item>
  </channel>
</rss>