---
title: "Update a Tailscale Subnet Router"
method: PATCH
path: "/tailscale_subnet_routers/{id}"
tags: ["Tailscale Subnet Routers"]
---

# Update a Tailscale Subnet Router

`PATCH /tailscale_subnet_routers/{id}`

## Request

- Base URL: `https://api.telnyx.com/v2`
- URL: `https://api.telnyx.com/v2/tailscale_subnet_routers/{id}`
- Auth: HTTP bearer

Renames the router, changes its advertised routes, or retries a failed enrollment. Any change queues a new provisioning run and returns the router with `status` `provisioning`. The router keeps its machine identity on the tailnet. Send an empty object to retry a `failed` router with its stored auth key. Include a new `auth_key` only while the router has never enrolled. The router's Network and region cannot change: create a new router instead.

## Path parameters

- `id` string, uuid, required

## Request body

- TailscaleSubnetRouterUpdate: Every field is optional. A change queues a new provisioning run and returns the router with `status` `provisioning`. An empty object retries a `failed` router.
  - `name` string: A user specified name for the router.
  - `advertised_routes` string[]: IPv4 subnets of the Network that the router advertises to the tailnet. Each entry is a canonical CIDR that the Network routes. Default, loopback, link-local, multicast, and Tailscale (`100.64.0.0/10`) ranges are rejected. So are ranges that overlap the router's own, `172.27.254.0/24` and `198.18.0.0/20`.
  - `auth_key` string, password: A replacement Tailscale auth key. Accepted only while the router has never enrolled, for example after a `failed` enrollment. Never returned.

## Response `200`

Successful response. The change is queued and provisioning has started.

- object
  - `data` TailscaleSubnetRouter
    - `id` string, uuid: Identifies the resource.
    - `record_type` string: Identifies the type of the resource.
    - `name` string: A user specified name for the router.
    - `network_id` string, uuid: The id of the Network the router is attached to.
    - `region_code` string: The code of the region the router is created in. `GET /network_coverage` lists the regions whose `available_services` include `tailscale_subnet_router`.
    - `advertised_routes` string[]: IPv4 subnets of the Network that the router advertises to the tailnet. Each entry is a canonical CIDR that the Network routes. Default, loopback, link-local, multicast, and Tailscale (`100.64.0.0/10`) ranges are rejected. So are ranges that overlap the router's own, `172.27.254.0/24` and `198.18.0.0/20`.
    - `status` 'provisioning' | 'provisioned' | 'failed' | 'deleting': `provisioning`: Telnyx is creating the router or applying a change. `provisioned`: the router is on the tailnet and advertises its routes; the tailnet still approves them. `failed`: enrollment did not complete, and `PATCH` retries it. `deleting`: the router is being removed.
    - `customer_address` string: The router's address on the Network, from `172.27.254.0/24`. Tailnet traffic enters the Network from this address.
    - `device_id` string, nullable: The router's node id on the tailnet. Set once the router has enrolled.
    - `tailnet_name` string, nullable: The name of the tailnet the router is enrolled in. Set once the router has enrolled.
    - `tailscale_ips` string[]: The router's addresses on the tailnet. Empty until the router has enrolled.
    - `created_at` string, date-time: ISO 8601 formatted date-time indicating when the resource was created.
    - `updated_at` string, date-time: ISO 8601 formatted date-time indicating when the resource was updated.

## Other responses

- `400`: Bad request: the body failed validation. `detail` says what failed, for example `Routes must exclude default, local, and Tailscale ranges.` or `The request contains unknown or read-only fields.`; a missing parameter or an unknown `network_id` or `region_code` names the field in `source.pointer`.
- `404`: Resource not found
- `409`: Conflict: the router is `provisioning` or `deleting`, or another operation holds it. Wait for the current operation to finish. The body carries the generic bad-request error.
- `422`: Unprocessable entity: an advertised route overlaps the reserved ranges, the body carries an unknown or read-only field such as `network_id`, or `auth_key` is sent for a router that has already enrolled. The body is the generic error.
- `default`: Unexpected error

## Changes

> 152 revisions in range; 1 not diffed.

- **2026-10-21** `b90f73c590c5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/changes/tailscale_subnet_routers/:id/patch.md)

---

[API](https://skmtc.dev/team-telnyx/apis/telnyx-api-2.md) - [All operations](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/llms.txt) - [OpenAPI document](https://skmtc.dev/team-telnyx/apis/telnyx-api-2/revisions/f82938f53ff4?raw)
