About Tailscale
Tailscale is a mesh VPN built on WireGuard that connects your organization’s devices, servers, and services into a private network called a tailnet. The Serval Tailscale integration connects to the Tailscale API with an OAuth client or an API access token, giving workflows access to device management, user and DNS lookups, ACL policy review, device posture attributes, auth-key inventory, tailnet settings, and configuration audit logs. Serval only ever talks to Tailscale’s official API address (api.tailscale.com), using the credentials you provide. A single connection ships with 15 prebuilt workflows across 3 bundles: Device Management, Network Info, and Security & Compliance.
Authentication: Tailscale OAuth client or API access token. An OAuth client is recommended - it never expires, and Serval uses its client ID and secret to automatically mint short-lived API tokens as needed. An API access token expires after at most 90 days. Either way, Serval stores the credentials securely and attaches a Bearer authorization header to every Tailscale request your workflows make.
Data sync: On-demand only. Serval calls the Tailscale API when a workflow or health check runs - there is no background sync, polling, or webhook ingestion.
What the Tailscale integration enables
Get your credentials
Serval supports two Tailscale credential types. Both must be created by a tailnet Owner, Admin, IT admin, or Network admin. For background, see Tailscale’s key and secret management documentation.- OAuth client (recommended): never expires. Serval uses it to automatically mint short-lived API tokens as needed, so there is no rotation routine to maintain. Its permissions are the scopes you select on the client.
- API access token: expires after 1 to 90 days and can’t be renewed. It inherits the permissions of the user who creates it.
OAuth client
Serval requests tokens without naming specific scopes, so every token carries all the scopes configured on the client. You decide what Serval can do in Tailscale by choosing scopes on the client at creation time.Open the OAuth clients page
Generate an OAuth client
Select scopes
- devices:core (write) for Authorize Device, Expire Device Key, and Set Device Tags
- dns:read for the DNS nameserver and preference workflows
- feature_settings:read for Get Tailnet Settings
- auth_keys:read for the auth-key inventory
Copy the client ID and client secret
API access token
The token inherits the permissions of the user who creates it, so generate it from an account with the access your workflows need - one whose role can manage devices in the Tailscale admin console if you plan to use write actions like Authorize Device, Expire Device Key, or Set Device Tags.Open the Keys page
Generate an access token
Choose an expiry
Copy the token immediately
Connect in Serval
Start the connection
Instance Name
Authentication method
OAuth client: Client ID and Client Secret
API access token: token
Tailnet (optional)
Save
Verifying the connection
After you connect, Serval automatically runs the connection health check. It asks Tailscale for the device list of your configured tailnet (or the credential’s default tailnet when the Tailnet field is blank). A passing check confirms the credentials are valid and can read your tailnet’s devices - for an OAuth client, that requires the devices:core:read scope. Tailscale has no Serval-specific failure messages - if the check fails, you will see the raw error returned by the Tailscale API, including the request URL, status code, and response body. As a rule of thumb:- An error mentioning 401 means the credential is no longer valid: an expired or revoked API access token, or a revoked OAuth client. Generate a new credential and update the connection.
- A failed tailnet-scoped check usually means the Tailnet value is wrong. Use the tailnet ID from General Settings, or leave the field blank.
Prebuilt workflows
Serval ships 15 prebuilt Tailscale workflows grouped into three bundles. Workflows that change state (authorize, expire key, set tags) default to requiring installer approval before they run; the read-only workflows require no approval by default.Device Management
Device Management
- List Tailnet Devices - list all devices, including hostname, OS, IP addresses, and online status
- Get Device - retrieve detailed information about a specific device
- List Device Routes - list the routes advertised and enabled for a device
- Get Device Posture Attributes - retrieve a device’s posture attributes (custom and provider-managed) used for compliance and access policy evaluation
- Authorize Device - authorize a device, or revoke its authorization, on a tailnet that requires device authorization
- Expire Device Key - mark a device’s node key as expired, forcing re-authentication
- Set Device Tags - set the tags used in ACL policies for a device (replaces existing tags)
Network Info
Network Info
- List Tailnet Users - list all users with their role, status, and login information
- Get User - retrieve detailed information about a specific user
- List DNS Nameservers - list the global DNS name servers configured for the tailnet
- Get DNS Preferences - retrieve DNS preferences, including MagicDNS status
Security & Compliance
Security & Compliance
- Get ACL Policy - retrieve the tailnet’s ACL policy file (access rules, groups, tag owners, posture conditions, network segmentation)
- List Configuration Audit Logs - time-bounded record of configuration changes for compliance reviews and incident investigation
- List Auth Keys - list auth keys with their capabilities, expiration, and revocation status for credential inventory and rotation audits
- Get Tailnet Settings - retrieve tailnet-wide settings (automatic updates, key duration, user approval, network flow logging, posture identity collection)
Compliance: ACL policy plus device posture
The Get ACL Policy and Get Device Posture Attributes workflows combine to evaluate whether a device meets the posture requirements defined in your ACL:- Retrieve the ACL policy to see which posture conditions are defined and which grants depend on them (for example
posture:highTrustrequiringfalcon:ztaScore >= 80). - Retrieve a device’s posture attributes to see its current values.
- Compare the device’s attributes against the ACL conditions to determine which network grants it qualifies for.
Gotchas and troubleshooting
Editing the connection preserves untouched secrets
Editing the connection preserves untouched secrets
API access tokens expire in 1 to 90 days; OAuth clients never do
API access tokens expire in 1 to 90 days; OAuth clients never do
A blank Tailnet means the credential's default tailnet
A blank Tailnet means the credential's default tailnet
-, which Tailscale resolves to the credential’s default tailnet. The prebuilt tailnet-scoped workflows ask for a tailnet value on each run - entering ”-” targets the credential’s default tailnet, and when you do set a Tailnet on the connection, Serval makes that value available to workflow runs. For most single-tailnet setups, blank is correct. If you do fill it in, prefer the tailnet ID (for example “T1234CNTRL”) from the admin console’s General Settings page - legacy names like “example.com” only work for tailnets created before October 2025.Failures show raw Tailscale API errors
Failures show raw Tailscale API errors
Save-time validation checks presence and prefixes, not validity
Save-time validation checks presence and prefixes, not validity
List results are not paginated
List results are not paginated
Additional resources
Tailscale API Documentation
Manage OAuth Clients
Manage API Access Tokens
Need help? Contact support@serval.com for assistance with your Tailscale integration.

