Update a redirect rule
const url = 'https://api.nsin.ir/domains/example.com/rules/redirect/1';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"record_id":1,"record_ids":[1],"enabled":true,"priority":100,"host_pattern":"example","host_match_type":"","action_mode":"enforce","path_match_type":"wildcard","path_includes":["example"],"path_excludes":["example"],"target":"example","status_code":301,"preserve_query":true,"preserve_path":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://api.nsin.ir/domains/example.com/rules/redirect/1 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "record_id": 1, "record_ids": [ 1 ], "enabled": true, "priority": 100, "host_pattern": "example", "host_match_type": "", "action_mode": "enforce", "path_match_type": "wildcard", "path_includes": [ "example" ], "path_excludes": [ "example" ], "target": "example", "status_code": 301, "preserve_query": true, "preserve_path": true }'Partial update — omitted fields keep their current value. Requires
rules.edit.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The domain name (for example example.com) — not a numeric id.
Example
example.comNumeric id of the rule.
Request Body required
Section titled “Request Body required ”object
Deprecated single-record scope. Prefer record_ids.
Scope the rule to these proxied records. Omit or send an empty array for a zone-wide rule. Every id must belong to this domain.
How host_pattern is matched. The empty string means “no host filter”,
and is the only valid value when host_pattern is empty — the two
fields are set and cleared together.
enforce— the rule acts (block, redirect, challenge, …).dry_run— the rule matches and is logged as “would have acted”, but the request reaches the origin unchanged. Use it to test a rule safely.
Not every rule type honours this; cache ignores it.
How path_includes and path_excludes are interpreted.
Paths the rule applies to. Defaults to ["/*"] — everything.
Paths carved back out of path_includes.
Where to send the visitor. Absolute URL, or a path when redirecting within the site.
The redirect status. 301/308 are permanent and cached hard by
browsers — verify the rule with 302 first.
Append the original query string to target.
Append the original path to target.
Responses
Section titled “ Responses ”The updated rule.
object
Deprecated single-record scope. Prefer record_ids. Absent for
zone-wide rules.
The proxied DNS records this rule applies to. Empty or absent means zone-wide — every proxied record of the domain.
Evaluation order; lower runs first. Defaults to 100.
Optional hostname filter. Empty means the rule is not host-scoped.
How host_pattern is matched. The empty string means “no host filter”,
and is the only valid value when host_pattern is empty — the two
fields are set and cleared together.
enforce— the rule acts (block, redirect, challenge, …).dry_run— the rule matches and is logged as “would have acted”, but the request reaches the origin unchanged. Use it to test a rule safely.
Not every rule type honours this; cache ignores it.
How path_includes and path_excludes are interpreted.
Paths the rule applies to. Defaults to ["/*"] — everything.
Paths carved back out of path_includes.
Where to send the visitor. Absolute URL, or a path when redirecting within the site.
The redirect status. 301/308 are permanent and cached hard by
browsers — verify the rule with 302 first.
Append the original query string to target.
Append the original path to target.
Only present when creating the canonical www.<domain> →
apex (or apex → www.<domain>) redirect. Those rules are inert
without a proxied DNS record for www — the edge evaluates
rules only for hostnames it holds a record for — so the record
is provisioned alongside the rule and this reports what
happened: created (a proxied www record mirroring the apex
was added), created_external (added, but the zone is hosted
elsewhere so the owner must still point www at us),
covered (one already existed), unproxied (a www
record exists but bypasses the edge, so the redirect will not
run), no_apex (no apex address record to mirror), limit
(the plan is out of record slots), failed (the DNS write
failed). The rule itself is created in every case.
Example
{ "type": "cache", "host_match_type": "", "action_mode": "enforce", "path_match_type": "wildcard", "status_code": 301, "preserve_query": true, "www_record": "covered"}Malformed body, an invalid field value, or record_ids containing a
record that does not belong to this domain.
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Examples
{ "error": "record_ids do not belong to this domain"}Missing, malformed, revoked or expired API key — or the owning account is inactive.
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Examples
{ "error": "invalid API key"}The domain or the rule does not exist, the rule belongs to another domain or another rule type, or your role does not permit this operation.
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Example
{ "error": "read-only API key"}The key exceeded its request budget (300 requests per minute by default).
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Examples
{ "error": "rate limit exceeded"}