DoDomain API API

The `/api/v1` surface integrators call to create domain-connect sessions, drive detection and DNS verification, and manage the resulting connections.

Operations 30

GET /api/v1/apps List apps #
POST /api/v1/apps Create an app #
GET /api/v1/cf/callback Cloudflare OAuth return URL (called by Cloudflare) #
GET /api/v1/connections List connections #
DELETE /api/v1/connections/{connectionId} Disconnect a connection #
GET /api/v1/connections/{connectionId} Read one connection #
POST /api/v1/connections/{connectionId}/reverify Queue an on-demand DNS recheck #
GET /api/v1/digitalocean/callback DigitalOcean OAuth return URL #
POST /api/v1/domains/check Pre-flight a domain #
GET /api/v1/hostinger/callback Hostinger OAuth return URL #
POST /api/v1/keys/rotate Rotate the calling app's secret key #
GET /api/v1/porkbun/callback Porkbun DNS Connect return URL #
POST /api/v1/sessions Create a connect session #
GET /api/v1/sessions/{token} Read a connect session (by token, or by id with a credential) #
GET /api/v1/sessions/{token}/cloudflare/start Start the Cloudflare one-click flow #
POST /api/v1/sessions/{token}/detect Detect the session domain's DNS provider #
GET /api/v1/sessions/{token}/digitalocean/start Start DigitalOcean one-click setup #
GET /api/v1/sessions/{token}/domain-connect/callback Domain Connect return URL (called by the DNS provider) #
GET /api/v1/sessions/{token}/domain-connect/start Start the Domain Connect one-click flow #
GET /api/v1/sessions/{token}/hostinger/start Start Hostinger one-click setup #
GET /api/v1/sessions/{token}/porkbun/start Start the Porkbun DNS Connect flow #
POST /api/v1/sessions/{token}/verify Verify the session's records against live DNS #
GET /api/v1/teams List the teams this credential can use #
GET /api/v1/webhook-endpoints List webhook endpoints #
POST /api/v1/webhook-endpoints Register a webhook endpoint #
DELETE /api/v1/webhook-endpoints/{endpointId} Delete a webhook endpoint #
PATCH /api/v1/webhook-endpoints/{endpointId} Repoint a webhook endpoint #
POST /api/v1/webhook-endpoints/{endpointId}/resume Resume an auto-paused webhook endpoint #
POST /api/v1/webhook-endpoints/{endpointId}/rotate-secret Rotate a webhook endpoint's signing secret #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dodomain-io:dodomain-api-api"
All apis
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.

Get an API 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 Specification

dodomain-io-api-openapi.json Raw ↑
{
  "components": {
    "headers": {
      "RateLimit": {
        "description": "Where this call left the window: `\"<policy>\";r=<remaining>;t=<seconds until the window resets>`. `r` is never negative. On the `429` the plan rate limit itself answers (`details.reason: request_rate`), `r` is `0` and `t` equals `Retry-After`; a `429` for another reason keeps describing the request window, so `Retry-After` is the number to obey there.",
        "required": false,
        "schema": {
          "examples": [
            "\"app\";r=59;t=30"
          ],
          "type": "string"
        }
      },
      "RateLimitPolicy": {
        "description": "The plan rate limit that metered this call (draft-ietf-httpapi-ratelimit-headers-11): `\"<policy>\";q=<requests>;w=<window seconds>`. The policy is `app` (per app, for a secret key) or `team` (per team, for an OAuth token). Present on every response to a call authenticated with a secret key or an OAuth token, including its `429`.",
        "required": false,
        "schema": {
          "examples": [
            "\"app\";q=60;w=60"
          ],
          "type": "string"
        }
      },
      "XRateLimitLimit": {
        "description": "The plan's requests per window (the `q` of `RateLimit-Policy`).",
        "required": false,
        "schema": {
          "minimum": 1,
          "type": "integer"
        }
      },
      "XRateLimitRemaining": {
        "description": "Requests left in the current window after this one (the `r` of `RateLimit`).",
        "required": false,
        "schema": {
          "minimum": 0,
          "type": "integer"
        }
      },
      "XRateLimitReset": {
        "description": "When the current window resets, as Unix epoch seconds.",
        "required": false,
        "schema": {
          "type": "integer"
        }
      }
    },
    "parameters": {
      "DoDomainTeam": {
        "description": "The id of the team this call acts on, from `GET /api/v1/teams`. Needed only when the credential can use more than one team (an OAuth connection granted several); a secret key has exactly one. A team the credential cannot use is refused 404 `TEAM_NOT_FOUND`, the same answer whether the team exists or not.",
        "in": "header",
        "name": "DoDomain-Team",
        "required": false,
        "schema": {
          "type": "string"
        }
      }
    },
    "responses": {
      "Conflict": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "conflict",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`409 conflict`: The resource is in a state that forbids the operation; for re-verify, the connection was disconnected and is no longer monitored (`details.reason` is `disconnected`)."
      },
      "Expired": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "expired",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`410 expired`: The connect session's 24-hour lifetime has elapsed. Returned before any verification, metering, or webhook work happens."
      },
      "Forbidden": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "forbidden",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`403 forbidden`: The OAuth access token was not granted the scope this operation requires. `details.code` is `SCOPE_MISSING` and `details.requiredScope` names the scope. Secret keys (`dd_sk_`) carry no scopes and never see this for a missing scope. The one-click start routes also answer it for a session created without one-click (a Free-plan team's session): no `details`, and the end user falls back to the manual records."
      },
      "Internal": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "internal",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`500 internal`: An unhandled server-side failure. Reported to our error tracker; safe to retry."
      },
      "InvalidRequest": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "invalid_request",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`400 invalid_request`: The request body or query failed schema validation, or a documented capability rule rejected it. `details` carries the field-level report when the failure came from schema validation."
      },
      "NotConfigured": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "not_configured",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`503 not_configured`: The one-click flow this endpoint starts is not configured on this deployment. The manual-records flow remains available."
      },
      "NotFound": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "not_found",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`404 not_found`: The addressed resource does not exist, or the caller does not own it; the two collapse to one status on purpose, so an id cannot be enumerated by a caller who does not own it."
      },
      "QuotaExceeded": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "quota_exceeded",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`402 quota_exceeded`: The team's monthly verified-connection allowance is exhausted (enforced at session creation on the Free plan)."
      },
      "RateLimited": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "rate_limited",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`429 rate_limited`: Rate limited. `Retry-After` (seconds) is set and `details.retryAfterSeconds` repeats it. Branch on `details.reason`: `request_rate` means the caller is calling too fast (`details.limit` carries the cap), `recently_checked` means this one connection was DNS-checked inside its cooldown.",
        "headers": {
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimitPolicy"
          },
          "Retry-After": {
            "description": "Whole seconds to wait before retrying. Always present on this response.",
            "required": true,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/XRateLimitLimit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/XRateLimitRemaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/XRateLimitReset"
          }
        }
      },
      "Unauthorized": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "details": {},
                "docs": {
                  "type": "string"
                },
                "error": {
                  "const": "unauthorized",
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "next": {
                  "properties": {
                    "args": {
                      "additionalProperties": {},
                      "propertyNames": {
                        "type": "string"
                      },
                      "type": "object"
                    },
                    "tool": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "tool"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "error"
              ],
              "type": "object"
            }
          }
        },
        "description": "`401 unauthorized`: No `Authorization: Bearer` header, or the credential is malformed, unknown, or (for OAuth tokens) fails verification."
      }
    },
    "schemas": {
      "CheckDomainInput": {
        "properties": {
          "domain": {
            "maxLength": 253,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "domain"
        ],
        "type": "object"
      },
      "CheckDomainResponse": {
        "properties": {
          "confidence": {
            "enum": [
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "domainConnect": {
            "properties": {
              "discovered": {
                "type": "boolean"
              },
              "providerId": {
                "type": "string"
              },
              "providerName": {
                "type": "string"
              }
            },
            "required": [
              "discovered"
            ],
            "type": "object"
          },
          "guide": {
            "properties": {
              "apexToken": {
                "enum": [
                  "@",
                  "(blank)",
                  "%domain%"
                ],
                "type": "string"
              },
              "dashboardUrl": {
                "type": "string"
              },
              "hostFormat": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "notes": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "provider": {
                "type": "string"
              },
              "steps": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "provider",
              "label",
              "hostFormat",
              "apexToken",
              "steps"
            ],
            "type": "object"
          },
          "label": {
            "type": "string"
          },
          "method": {
            "enum": [
              "oauth",
              "domain-connect",
              "guided"
            ],
            "type": "string"
          },
          "nameServers": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "oneClickAvailable": {
            "type": "boolean"
          },
          "provider": {
            "type": "string"
          },
          "tier": {
            "anyOf": [
              {
                "const": 1,
                "type": "number"
              },
              {
                "const": 2,
                "type": "number"
              },
              {
                "const": 3,
                "type": "number"
              }
            ]
          },
          "zone": {
            "type": "string"
          }
        },
        "required": [
          "domain",
          "zone",
          "provider",
          "label",
          "tier",
          "method",
          "confidence",
          "nameServers",
          "domainConnect",
          "guide",
          "oneClickAvailable"
        ],
        "type": "object"
      },
      "ConnectionSummary": {
        "properties": {
          "appId": {
            "type": "string"
          },
          "brokenAt": {
            "anyOf": [
              {
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
            "type": "string"
          },
          "disconnectedAt": {
            "anyOf": [
              {
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "domain": {
            "type": "string"
          },
          "fqdn": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "lastCheckedAt": {
            "anyOf": [
              {
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "recordFqdns": {
            "items": {
              "minLength": 1,
              "type": "string"
            },
            "type": "array"
          },
          "sessionId": {
            "type": "string"
          },
          "status": {
            "enum": [
              "active",
              "broken"
            ],
            "type": "string"
          },
          "verifiedAt": {
            "anyOf": [
              {
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "appId",
          "sessionId",
          "domain",
          "fqdn",
          "recordFqdns",
          "status",
          "verifiedAt",
          "lastCheckedAt",
          "brokenAt",
          "disconnectedAt",
          "createdAt"
        ],
        "type": "object"
      },
      "CreateAppInput": {
        "properties": {
          "name": {
            "maxLength": 80,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CreateAppResponse": {
        "properties": {
          "brandColor": {
            "type": [
              "string",
              "null"
            ]
          },
          "connectFontPreset": {
            "anyOf": [
              {
                "enum": [
                  "system",
                  "humanist",
                  "serif",
                  "rounded"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "connectHeadline": {
            "type": [
              "string",
              "null"
            ]
          },
          "connectSubheadline": {
            "type": [
              "string",
              "null"
            ]
          },
          "connectSuccessCtaLabel": {
            "type": [
              "string",
              "null"
            ]
          },
          "connectSuccessRedirectUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "createdAt": {
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
            "type": "string"
          },
          "hideConnectFooterHelp": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "logoUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "publicKey": {
            "type": "string"
          },
          "sandbox": {
            "type": "boolean"
          },
          "tlsIssuerCa": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "publicKey",
          "sandbox",
          "logoUrl",
          "brandColor",
          "connectHeadline",
          "connectSubheadline",
          "connectSuccessCtaLabel",
          "connectSuccessRedirectUrl",
          "connectFontPreset",
          "hideConnectFooterHelp",
          "tlsIssuerCa",
          "createdAt"
        ],
        "type": "object"
      },
      "CreateSessionInput": {
        "properties": {
          "appId": {
            "minLength": 1,
            "type": "string"
          },
          "domain": {
            "maxLength": 253,
            "pattern": "^(?!-)[a-z0-9-]{1,63}(?<!-)(\\.(?!-)[a-z0-9-]{1,63}(?<!-))+$",
            "type": "string"
          },
          "recipe": {
            "type": "string"
          },
          "records": {
            "items": {
              "properties": {
                "host": {
                  "minLength": 1,
                  "type": "string"
                },
                "priority": {
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991,
                  "type": "integer"
                },
                "ttl": {
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991,
                  "type": "integer"
                },
                "type": {
                  "enum": [
                    "A",
                    "AAAA",
                    "CNAME",
                    "TXT",
                    "MX"
                  ],
                  "type": "string"
                },
                "value": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "type",
                "host",
                "value"
              ],
              "type": "object"
            },
            "maxItems": 50,
            "type": "array"
          },
          "returnUrl": {
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          }
        },
        "required": [
          "domain",
          "records"
        ],
        "type": "object"
      },
      "CreateSessionResponse": {
        "properties": {
          "connectUrl": {
            "minLength": 1,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "records": {
            "items": {
              "properties": {
                "fqdn": {
                  "minLength": 1,
                  "type": "string"
                },
                "host": {
                  "minLength": 1,
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "A",
                    "AAAA",
                    "CNAME",
                    "TXT",
                    "MX"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "host",
                "fqdn"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "token": {
            "minLength": 1,
            "type": "string"
          },
          "warnings": {
            "items": {
              "properties": {
                "code": {
                  "enum": [
                    "duplicate_host_label"
                  ],
                  "type": "string"
                },
                "fqdn": {
                  "minLength": 1,
                  "type": "string"
                },
                "host": {
                  "type": "string"
                },
                "message": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "code",
                "message",
                "host",
                "fqdn"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "token",
          "expiresAt",
          "connectUrl",
          "records"
        ],
        "type": "object"
      },
      "DeleteWebhookEndpointResponse": {
        "properties": {
          "deleted": {
            "const": true,
            "type": "boolean"
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "deleted"
        ],
        "type": "object"
      },
      "DetectSessionResponse": {
        "properties": {
          "confidence": {
            "enum": [
              "high",
              "medium",
              "low"
            ],
            "type": "string"
          },
          "domainConnect": {
            "anyOf": [
              {
                "properties": {
                  "providerId": {
                    "type": "string"
                  },
                  "providerName": {
                    "type": "string"
                  }
                },
                "required": [
                

# --- truncated at 32 KB (152 KB total) ---
# Full source: https://artifacts.apis.io/dodomain-io/openapi/_original/dodomain-io-api-openapi.json