Domains
Every app has its own URL on connic.app in each environment. Serve it on a subdomain of your own instead, set in code or in the dashboard.
On this page
Default URL
Each app gets https://<key>-<id>.connic.app in every environment it's deployed to, such as https://portal-1a2b3c4d.connic.app. The first part is the app's key in lowercase, with other characters replaced by hyphens and cut to 40 characters; the ID is random and differs per environment. The URL stays the same across deploys and rollbacks, and an app that a deployment stops declaring gets it back when it returns.
The default URL appears on the app's Settings tab under Domain. With a custom domain, the app answers on both addresses unless you turn off the connic.app address.
Custom domain
Add and verify the domain under Project Settings → Domains first, as described in Custom domains. Then give it to the app in one of two ways:
- Set
domaininapps/<key>.yamlto the domain's hostname or ID. Variables work here. - Leave
domainout of the file, choose the domain under Custom domain on the app's Settings tab, and click Save changes.
environments:
Staging: {} # default URL only
Production:
domain: portal.example.com # or the domain's IDWhen the file declares domain, the dashboard shows it with an In code badge and can't change it. When a deploy stops declaring it, the app keeps the domain and the dashboard manages it from then on; choose No custom domain there to take it off.
The custom domain has its own sessions, so visitors sign in on it separately from the default URL. Deleting the domain under Project Settings → Domains takes it off the app.
Only the custom domain
Once a custom domain is saved, turn off Serve on the connic.app address too under Domain on the app's Settings tab, or send default_url: false with update_app in connic MCP. The connic.app address then permanently redirects to the custom domain, 301 for GET and HEAD and 308 for other methods, with the same path and query. Links to the old address keep working, and search engines index only the custom domain.
The setting lives in the dashboard, not in apps/<key>.yaml. Without a custom domain it can't be turned off, and when the app loses its custom domain, for example because you remove or delete it, the connic.app address serves the app again.
One domain, one app
A domain serves either one app in one environment or connector URLs. A deploy fails and names the conflict when an app's domain is used by a connector, by another app in the same deploy, or by an app in another environment, which is why the example sets the domain in one environment's override. The dashboard refuses the same, and connectors can't use a domain while an app does.
Connector paths on a custom domain
On a custom domain, the paths of connector URLs stay reserved and don't reach the app: a path whose first segment is webhook, mcp, s3, stripe, telegram, slack, ws, twilio, twilio-messaging, telnyx, or telnyx-messaging and that has a second segment, such as /slack/settings. Give client-side routes other names. On the default URL, every path reaches the app.