Organizations

List custom domains and DNS verification hints

Returns allowed hostnames for **this project**, primary hostname (per project), API base URL, and per-domain DNS guidance. Each row uses **`dnsRecords`** for the Mudbase ownership TXT (purpose **`mudbase_ownership`**) and routing **CNAME** from Fly **`dns_requirements.cname`** when Fly ACME has provisioned (else fallback **`CUSTOM_DOMAIN_API_CNAME_TARGET`**), and—when Fly ACME is enabled (**`FLY_API_TOKEN`** + **`CUSTOM_DOMAIN_FLY_ACME_ENABLED`**)—Fly rows (`fly_ownership`, `acme_challenge`, etc.) after the org has passed Mudbase TXT at least once. **`flyCertificateStatus`** mirrors Fly’s certificate state when ACME automation is on (e.g. `pending_validation`, `active`). **`cloudflareEdge`** appears only when Cloudflare SSL-for-SaaS env is configured. Fly ACME and Cloudflare SaaS are mutually exclusive on the server. Requires Growth, Scale, or Enterprise plan (custom domains included in plan features).

AuthBearer (JWT)
GroupOrganizations
Rate limitSee Rate Limits
GET/api/orgs/{orgId}/projects/{projectId}/domains

SDK setup

Create a client and set credentials (JWT and/or API key) before calling the API. Match the authentication type shown above.

import { Configuration, OrganizationsApi } from 'mudbase-sdk';

const configuration = new Configuration({
  basePath: 'https://cloud.mudbase.dev',
  accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfbW9yZ2FuX2RlIiwiZW1haWwiOiJtb3JnYW4uY2hlbkBub3J0aHdpbmQuZGV2IiwiZXhwIjoxODI1MTI5NjAwfQ.doc_preview_sig',
});

const organizations = new OrganizationsApi(configuration);
import { Configuration, OrganizationsApi } from 'mudbase-sdk';

const configuration = new Configuration({
  basePath: 'https://cloud.mudbase.dev',
  accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfbW9yZ2FuX2RlIiwiZW1haWwiOiJtb3JnYW4uY2hlbkBub3J0aHdpbmQuZGV2IiwiZXhwIjoxODI1MTI5NjAwfQ.doc_preview_sig',
});

const organizations = new OrganizationsApi(configuration);

Example request

Call this endpoint using the client from SDK setup. Use View HTTP for a raw cURL example.

const { data: result } = await organizations.listOrgCustomDomains("org_Zabqrc7h45", "proj_PtO0l6xLALCr");
const { data: result } = await organizations.listOrgCustomDomains("org_Zabqrc7h45", "proj_PtO0l6xLALCr");

Playground

live

Test this endpoint with your own credentials. Your requests will be sent to the live API.

Use the auth endpoints to obtain a JWT.

No Request Yet

Send a request to see the full inspector

Authentication

Requires JWT
Note
Include your JWT in the Authorization: Bearer YOUR_TOKEN header (user-facing apps, RBAC). View authentication guide →

Path Parameters

NameTypeRequiredDescription
orgIdstringYes
projectIdstringYes

Responses

200Domain list and hints
json
{
  "domains": [
    {
      "_id": "WHHDfeNRXMGYQQJi",
      "hostname": "Asa Jones",
      "status": "system synthesize",
      "isPrimary": true,
      "source": "imported",
      "createdAt": "2026-07-09T23:26:37.622Z",
      "verifiedAt": "2026-07-27T06:18:44.333Z",
      "lastVerifiedAt": "2026-06-25T19:30:41.120Z",
      "cnameSubmittedAt": "2026-06-08T03:49:20.029Z",
      "cnameApprovedAt": "2026-07-04T07:52:36.675Z",
      "customDomainVerificationStep": 36683,
      "routingCnameTarget": "Ida Lubowitz",
      "dnsRecords": [
        {
          "type": "capacitor override",
          "name": "Caroline Orn",
          "value": "sensor program",
          "purpose": "capacitor parse"
        }
      ],
      "platformActivationPending": true,
      "customDomainLiveForApiTraffic": false,
      "cloudflareEdge": {
        "saasIntegrationEnabled": false,
        "skipped": false,
        "reason": "feed index",
        "customHostnameId": "Essie Howell",
        "hostnameStatus": "David Wisozk",
        "sslStatus": "interface connect",
        "ownershipVerification": {
          "name": "Kirstin Ritchie",
          "type": "circuit parse",
          "value": "sensor reboot"
        },
        "sslValidationRecords": [
          {
            "txtName": "Adam Hilpert-Dooley",
            "txtValue": "bus connect",
            "httpUrl": "https://dark-deck.name/",
            "httpBody": "panel input",
            "cname": "Eleanor Rempel",
            "cnameTarget": "Sallie Rath Jr."
          }
        ],
        "lastError": "firewall quantify",
        "instructions": "driver compress"
      },
      "flyCertificateStatus": "panel connect",
      "platformDnsVerification": {
        "recordType": "driver hack",
        "recordName": "Hailee Murphy",
        "recordValue": "panel parse",
        "ttlSeconds": 42174,
        "staffNote": "driver parse",
        "updatedAt": "2026-07-20T10:30:13.844Z"
      },
      "platformDnsVerificationSubmittedAt": "2026-07-12T17:52:05.354Z"
    }
  ],
  "dnsVerificationInstructions": "bandwidth reboot",
  "primaryHostname": "Rogers Boyle",
  "apiBaseUrl": "https://merry-violin.biz",
  "maxDomains": 66438,
  "customDomainAllowed": false
}
{
  "domains": [
    {
      "_id": "WHHDfeNRXMGYQQJi",
      "hostname": "Asa Jones",
      "status": "system synthesize",
      "isPrimary": true,
      "source": "imported",
      "createdAt": "2026-07-09T23:26:37.622Z",
      "verifiedAt": "2026-07-27T06:18:44.333Z",
      "lastVerifiedAt": "2026-06-25T19:30:41.120Z",
      "cnameSubmittedAt": "2026-06-08T03:49:20.029Z",
      "cnameApprovedAt": "2026-07-04T07:52:36.675Z",
      "customDomainVerificationStep": 36683,
      "routingCnameTarget": "Ida Lubowitz",
      "dnsRecords": [
        {
          "type": "capacitor override",
          "name": "Caroline Orn",
          "value": "sensor program",
          "purpose": "capacitor parse"
        }
      ],
      "platformActivationPending": true,
      "customDomainLiveForApiTraffic": false,
      "cloudflareEdge": {
        "saasIntegrationEnabled": false,
        "skipped": false,
        "reason": "feed index",
        "customHostnameId": "Essie Howell",
        "hostnameStatus": "David Wisozk",
        "sslStatus": "interface connect",
        "ownershipVerification": {
          "name": "Kirstin Ritchie",
          "type": "circuit parse",
          "value": "sensor reboot"
        },
        "sslValidationRecords": [
          {
            "txtName": "Adam Hilpert-Dooley",
            "txtValue": "bus connect",
            "httpUrl": "https://dark-deck.name/",
            "httpBody": "panel input",
            "cname": "Eleanor Rempel",
            "cnameTarget": "Sallie Rath Jr."
          }
        ],
        "lastError": "firewall quantify",
        "instructions": "driver compress"
      },
      "flyCertificateStatus": "panel connect",
      "platformDnsVerification": {
        "recordType": "driver hack",
        "recordName": "Hailee Murphy",
        "recordValue": "panel parse",
        "ttlSeconds": 42174,
        "staffNote": "driver parse",
        "updatedAt": "2026-07-20T10:30:13.844Z"
      },
      "platformDnsVerificationSubmittedAt": "2026-07-12T17:52:05.354Z"
    }
  ],
  "dnsVerificationInstructions": "bandwidth reboot",
  "primaryHostname": "Rogers Boyle",
  "apiBaseUrl": "https://merry-violin.biz",
  "maxDomains": 66438,
  "customDomainAllowed": false
}
401Unauthorized
403Forbidden

Errors

CodeMeaning
401Unauthorized
403Forbidden
Edit this page on GitHub