/api/v2/domains/{id}/dns/diagnostics/origin-compare Run a scoped HTTPS origin comparison for one owned domain host.
The endpoint resolves current public DNS, probes the current public answer using the requested Host header and SNI, probes the current HostUp web-hosting origin from the DNS zone when available, and probes previous web origins from the latest pre-HostUp DNS snapshot.
Use this before telling a customer that Cloudflare/CDN is the root cause: CDN edge IPs are traffic-path evidence, while origin HTTP status shows whether the HostUp origin has website content.
read:dnsread:domains
Use Authorization: Bearer <token> for API keys. Dashboard sessions may also use hostup_session.
id string required
Example: dom_01hxa3b4c5d6e7f8g9h0j1k2m3 Public domain ID from GET /api/v2/domains. Do not invent this value; use the exact ID returned by the referenced API response.
host string
· Example: example.se Domain host to compare. Defaults to the domain apex. Must be the domain itself or one of its subdomains, for example example.se or www.example.se.
Authorization Bearer <token> Accept application/json host string required asciiHost string required checkedAt string required currentPublic object required currentPublic.a array<string> required currentPublic.aaaa array<string> required currentPublic.cname array<string> required currentPublic.probedIp string · nullable required Nullable: may be null when not applicable.
currentPublic.appearsCdnEdge boolean required currentPublic.edgeProvider string · nullable required
· Example: cloudflare Nullable: may be null when not applicable.
currentPublic.httpStatus integer · nullable required Nullable: may be null when not applicable.
currentPublic.server string · nullable required Nullable: may be null when not applicable.
currentPublic.bodyBytes integer required currentPublic.title string · nullable required Nullable: may be null when not applicable.
currentPublic.responseMs integer required currentPublic.errorReason string · nullable required Nullable: may be null when not applicable.
hostupOrigin null required hostupOriginReason string · nullable required previousOrigins array<object> required previousOrigins[].ip string required
· Example: 185.113.11.10 previousOrigins[].recordName string · nullable required
· Example: @ Nullable: may be null when not applicable.
previousOrigins[].recordType string · enum required
· Example: A A AAAA CNAME ALIAS previousOrigins[].target string · nullable required
· Example: null CNAME/ALIAS target hostname when the probed IP came from resolving an alias.
previousOrigins[].source string required
· Example: current_hostup_dns_record Origin source, for example current_hostup_dns_record or the DNS snapshot source such as pre_nameserver_change.
previousOrigins[].snapshotId string
· Example: dnss_01hxa3b4c5d6e7f8g9h0j1k2m3 Snapshot public ID when this origin came from DNS history.
previousOrigins[].capturedAt string
· Example: 2026-05-19T09:55:00.000Z Snapshot capture time when this origin came from DNS history.
previousOrigins[].providerHint string · nullable
· Example: ns1.old-provider.example (203.0.113.10) Snapshot provider hint, usually the old authoritative nameserver.
previousOrigins[].httpStatus integer · nullable required
· Example: 404 Nullable: may be null when not applicable.
previousOrigins[].server string · nullable required
· Example: LiteSpeed Nullable: may be null when not applicable.
previousOrigins[].bodyBytes integer required
· Example: 1251 previousOrigins[].title string · nullable required
· Example: 404 Not Found Nullable: may be null when not applicable.
previousOrigins[].responseMs integer required
· Example: 142 previousOrigins[].errorReason string · nullable required
· Example: null Nullable: may be null when not applicable.
previousOriginsReason string · nullable required diagnosis object required diagnosis.summary string required diagnosis.confidence string · enum required high medium low diagnosis.evidence array<string> required type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object Retry-After seconds plus X-RateLimit-* headers. 10 fields type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object type string
· Example: https://developer.hostup.se/errors/invalid_request title string
· Example: Validation failed status integer
· Example: 400 detail string
· Example: The request body failed validation. code string
· Example: invalid_request Stable machine-readable code. Branch on this field, not on detail.
instance string
· Example: /api/v2/orders requestId string
· Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3 timestamp string
· Example: 2026-04-27T12:34:56.000Z errors array<object> Field-level validation errors when code is invalid_request.
errors[].pointer string required
· Example: /items/0/eppCode errors[].detail string required
· Example: `eppCode` is required for this transfer. errors[].code string required
· Example: missing_required extensions object https://cloud.hostup.se/api/v2/domains/{id}/dns/diagnostics/origin-compare curl -X GET "https://cloud.hostup.se/api/v2/domains/dom_01hxa3b4c5d6e7f8g9h0j1k2m3/dns/diagnostics/origin-compare" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json" {
"host": "example.se",
"asciiHost": "example.se",
"checkedAt": "2026-05-19T10:30:00.000Z",
"currentPublic": {
"a": [
"104.21.82.230",
"172.67.207.236"
],
"aaaa": [],
"cname": [],
"probedIp": "104.21.82.230",
"appearsCdnEdge": true,
"edgeProvider": "cloudflare",
"httpStatus": 404,
"server": "cloudflare",
"bodyBytes": 1251,
"title": "404 Not Found",
"responseMs": 188,
"errorReason": null
},
"hostupOrigin": {
"ip": "185.113.11.10",
"recordName": "@",
"recordType": "A",
"target": null,
"source": "current_hostup_dns_record",
"httpStatus": 404,
"server": "LiteSpeed",
"bodyBytes": 1251,
"title": "404 Not Found",
"responseMs": 142,
"errorReason": null
},
"hostupOriginReason": null,
"previousOrigins": [
{
"ip": "18.208.88.157",
"recordName": "@",
"recordType": "A",
"target": null,
"source": "pre_nameserver_change",
"snapshotId": "dnss_01hxa3b4c5d6e7f8g9h0j1k2m3",
"capturedAt": "2026-05-19T09:55:00.000Z",
"providerHint": "ns1.old-provider.example (203.0.113.10)",
"httpStatus": 200,
"server": "Netlify",
"bodyBytes": 56057,
"title": "Example website",
"responseMs": 210,
"errorReason": null
}
],
"previousOriginsReason": null,
"diagnosis": {
"summary": "Public DNS appears to use a CDN edge, but the stronger signal is that the HostUp origin returns 404 while a previous origin still returns a working site.",
"confidence": "high",
"evidence": [
"Current public HTTPS response appears to be served through cloudflare.",
"HostUp origin 185.113.11.10 returned HTTP 404.",
"Previous origin 18.208.88.157 returned HTTP 200."
]
}
}