Every API here is available over the APIs.io API and to AI agents over MCP.
{
"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