CustomDomain · Schema
MonitorView
CompanyCustom DomainsDNSSSLEdge ProxySaaS InfrastructureWhite LabelMCP
Properties
| Name | Type | Description |
|---|---|---|
| connection_id | string | |
| domain | string | |
| watched | boolean | |
| active | boolean | |
| every | string | How often the domain is checked (hour). |
| last_checked_at | stringnull | |
| next_check_at | string | |
| result | string | The last check. `drift` is only reported after a second, independent look at the zone's own nameservers confirmed it; `inconclusive` means the lookup did not answer and the previous finding stands; `u |
| reason | string | Set when `result` is `unconfirmed`, why the nameservers could not confirm. |
| unconfirmed_checks | integer | Set when `result` is `unconfirmed`, how many checks in a row. At 3 the workspace gets one inbox entry. |
| drift_since | string | |
| drift | array | |
| checked | integer | Records compared in the last check. |
| error | string | |
| action | object | What was done about the drift: `auto_fixed` (put back), `fix_failed` (the repair failed, did not hold, or the records were put back 3 times in 24 hours and disappeared again) or `action_required` (lef |
| attention | string | Set while drift needs the tenant (action_required, fix_failed) or is being repaired (drift). |
| repair | object | |
| alerts | object | |
| watching | array | The records the domain is held to. |
| history | array |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/customdomain-ai/json-schema/customdomain-ai-monitor-view-schema.json",
"title": "MonitorView",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/customdomain-ai-monitor-api-openapi.yml#/components/schemas/MonitorView",
"type": "object",
"required": [
"connection_id",
"domain",
"watched",
"active",
"every",
"last_checked_at",
"result",
"drift",
"checked",
"repair",
"alerts"
],
"properties": {
"connection_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"watched": {
"type": "boolean"
},
"active": {
"type": "boolean"
},
"every": {
"type": "string",
"description": "How often the domain is checked (hour)."
},
"last_checked_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"next_check_at": {
"type": "string",
"format": "date-time"
},
"result": {
"type": "string",
"enum": [
"ok",
"drift",
"inconclusive",
"unconfirmed",
"not_checked",
"not_watched"
],
"description": "The last check. `drift` is only reported after a second, independent look at the zone's own nameservers confirmed it; `inconclusive` means the lookup did not answer and the previous finding stands; `unconfirmed` means the first lookup saw a change the zone's own nameservers could not be asked to confirm (see `reason`): earlier drift stands and nothing is restored."
},
"reason": {
"type": "string",
"enum": [
"ns_lookup_failed",
"timeout",
"all_servers_refused",
"no_server_answered",
"delegated",
"unsupported_type"
],
"description": "Set when `result` is `unconfirmed`, why the nameservers could not confirm."
},
"unconfirmed_checks": {
"type": "integer",
"description": "Set when `result` is `unconfirmed`, how many checks in a row. At 3 the workspace gets one inbox entry."
},
"drift_since": {
"type": "string",
"format": "date-time"
},
"drift": {
"type": "array",
"items": {
"$ref": "#/$defs/DriftRecord"
}
},
"checked": {
"type": "integer",
"description": "Records compared in the last check."
},
"error": {
"type": "string"
},
"action": {
"type": "object",
"description": "What was done about the drift: `auto_fixed` (put back), `fix_failed` (the repair failed, did not hold, or the records were put back 3 times in 24 hours and disappeared again) or `action_required` (left for the tenant).",
"properties": {
"kind": {
"type": "string",
"enum": [
"auto_fixed",
"fix_failed",
"action_required"
]
},
"at": {
"type": "string",
"format": "date-time"
},
"description": {
"type": "string"
}
}
},
"attention": {
"type": "string",
"enum": [
"action_required",
"fix_failed",
"drift"
],
"description": "Set while drift needs the tenant (action_required, fix_failed) or is being repaired (drift)."
},
"repair": {
"type": "object",
"required": [
"automatic",
"detail"
],
"properties": {
"automatic": {
"type": "boolean",
"description": "True when CustomDomain™ holds continuous access and puts disappeared records back itself."
},
"paused": {
"type": "boolean",
"description": "True when CustomDomain™ holds the access (`via`) but this deployment has automatic repair switched off (`MONITOR_AUTO_REPAIR`): missing records are reported, not put back. Omitted otherwise."
},
"via": {
"type": "string",
"enum": [
"managed_dns",
"sign_in",
"domain_connect",
"provider_account"
]
},
"detail": {
"type": "string"
}
}
},
"alerts": {
"type": "object",
"properties": {
"webhooks": {
"type": "boolean"
},
"email": {
"type": "boolean"
}
}
},
"watching": {
"type": "array",
"description": "The records the domain is held to.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/DomainEvent"
}
}
},
"$defs": {
"DomainEvent": {
"type": "object",
"required": [
"id",
"domain",
"kind",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"application_id": {
"type": "string"
},
"connection_id": {
"type": "string"
},
"domain": {
"type": "string"
},
"kind": {
"type": "string",
"description": "One of connection.created, connection.applied, connection.live, connection.failed, connection.records.updated, connection.reapply.failed, connection.records_outdated, connection.disconnected, records.removed, records.rewritten, certificate.issued, certificate.renewed, certificate.failed, certificate.expiring, certificate.removed, drift.found, drift.fixed, drift.fix_failed, drift.action_required, drift.restored, access.granted, access.revoked, access.needs_reconnect, nameservers.started, nameservers.dnssec_cleared, nameservers.changed, nameservers.active, nameservers.failed, nameservers.rolled_back, nameservers.drifted. A connection or certificate kind that is also a webhook event type is written with the webhook, so the timeline and an integrator see the same history."
},
"detail": {
"type": "object",
"additionalProperties": true
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
},
"DriftRecord": {
"type": "object",
"required": [
"subdomain",
"type",
"verdict",
"expected"
],
"properties": {
"subdomain": {
"type": "string",
"description": "The record's name relative to the domain (\"@\" for the domain itself)."
},
"type": {
"type": "string"
},
"verdict": {
"type": "string",
"enum": [
"record_missing",
"record_changed"
]
},
"expected": {
"type": "array",
"items": {
"type": "string"
}
},
"observed": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
Work with this as data
Every JSON Schema 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 schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.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.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/customdomain-ai-monitor-view"
All schemas
curl "https://apis.io/api/v1/json-schemas?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.