Update a VSpace's MagicDNS settings
Validates + entitlement-gates + persists MagicDNS settings for the VSpace, then republishes the account's live device maps (MD-D-07). The curated nameserver picker, toggle, default search suffix, and basic override-local-DNS are free; custom resolvers/DoH, split-DNS routes, and static records are paid (HTTP 402 on a non-entitled tier or over quota). Enabling MagicDNS / override-local-DNS with zero resolvers is rejected (never-leak / never-zero, HTTP 400).
Authorization
bearer_auth In: header
Path Parameters
VSpace ID
uuidHeader Parameters
UUID of the project that scopes consumer accounts, devices, sessions, and VSpaces for the request.
uuidRequest Body
application/json
MagicDNS settings patch (PUT semantics: present fields replace, absent fields are unchanged).
TypeScript Definitions
Use the request body type in TypeScript.
The MagicDNS settings PUT body (MD-13). PUT semantics: a present field replaces that knob wholesale; an absent field leaves it unchanged.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/consumer/v1/vspaces/44444444-4444-4444-4444-444444444444/dns" \ -H "X-Project-Id: 11111111-1111-1111-1111-111111111111" \ -H "Content-Type: application/json" \ -d '{ "enabled": true, "extra_records": [ { "name": "printer.mesh.fvpn.net", "rtype": "a", "value": "100.64.0.9" } ], "nameservers": [ { "provider": "cloudflare" } ], "override_local_dns": true, "register_dual_stack": false, "routes": [ { "resolvers": [ { "addr": "10.0.0.53" } ], "suffix": "corp.example.com" } ], "search_domains": [ "corp.example.com" ] }'{ "cert_domains": [], "enabled": true, "extra_records": [ { "name": "printer.mesh.fvpn.net", "rtype": "a", "value": "100.64.0.9" } ], "override_local_dns": true, "register_dual_stack": false, "resolvers": [ { "addr": "1.1.1.1", "use_with_exit_node": false } ], "routes": [ { "resolvers": [ { "addr": "10.0.0.53", "use_with_exit_node": false } ], "suffix": "corp.example.com" } ], "search_domains": [ "corp.example.com" ], "suffix": "mesh.fvpn.net"}{ "detail": "Pool slug must be unique.", "instance": "urn:forestvpn:trace:a1b2c3d4", "title": "Validation Error", "type": "https://fvpn.net/errors/validation"}{ "detail": "Pool slug must be unique.", "instance": "urn:forestvpn:trace:a1b2c3d4", "title": "Validation Error", "type": "https://fvpn.net/errors/validation"}{ "detail": "Pool slug must be unique.", "instance": "urn:forestvpn:trace:a1b2c3d4", "title": "Validation Error", "type": "https://fvpn.net/errors/validation"}{ "detail": "Pool slug must be unique.", "instance": "urn:forestvpn:trace:a1b2c3d4", "title": "Validation Error", "type": "https://fvpn.net/errors/validation"}{ "detail": "Pool slug must be unique.", "instance": "urn:forestvpn:trace:a1b2c3d4", "title": "Validation Error", "type": "https://fvpn.net/errors/validation"}