openapi: 3.0.0
info:
contact:
email: hey@slide.tech
name: Slide Team
url: https://docs.slide.tech
description: "## Introduction\nThe Slide API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.\n\n## Authentication\nWe use API tokens to authenticate requests. You can view and manage your API tokens in the [Slide Console](https://docs.slide.tech).\nWhen making HTTP requests, you'll need to include the API token in the `Authorization` header, using Bearer auth (e.g. `Authorization: Bearer YOUR_SECRET_TOKEN`).\n\nExample:\n```shell\n$ curl -H 'Authorization: Bearer YOUR_SECRET_TOKEN' 'https://api.slide.tech/v1/device'\n```\n\n## Pagination\nAll list endpoints support pagination. You can use the `limit` and `offset` query parameters to control the number of items returned and the starting index.\nList responses will include a `pagination` key that includes the `next_offset` to use for pagination.\nIf `next_offset` is not present, that indicates there are no more items to fetch.\n\nExample:\n```shell\n$ curl -H 'Authorization: Bearer YOUR_SECRET_TOKEN' \\\n 'https://api.slide.tech/v1/device?offset=0&limit=10'\n{\n \"pagination\": {\n \"next_offset\": 10\n },\n \"data\": [\n ...\n ]\n}\n```\n\n## Rate Limiting\nWe limit the number of requests you can make to the API within a certain time frame.\nEach API token has a pool of `50` requests. We refill this pool at a rate of `10` requests per second.\nIf you exceed the rate limit, you'll receive a response with a `429 Too Many Requests` HTTP code and a `err_rate_limit_exceeded` error code.\nPlease wait before retrying the request. We recommend you implement an exponential backoff strategy to handle rate limits.\n\n## Errors\nSlide uses conventional HTTP response codes to indicate the success or failure of an API request.\nIn general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted), and codes in the 5xx range indicate an error with Slide's servers.\n\nWe also include [error codes and details](#model/error) in the response, which may provide more context about the error.\n\nExample:\n```shell\n$ curl 'https://api.slide.tech/v1/device'\n{\n \"codes\": [\n \"err_missing_authentication\"\n ],\n \"details\": [\n ...\n ],\n \"message\": \"unauthorized\"\n}\n```\n\nSome common error codes are:\n\n| Code | Description |\n|------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `err_endpoint_not_found` | Requested endpoint does not exist. |\n| `err_entity_not_found` | Requested entity does not exist. |\n| `err_validation_error` | Bad request due to validation error. The error `details` will contain any fields that were not valid. |\n| `err_missing_authentication` | Unauthorized due to missing API token. See [authentication](#description/authentication) for more details. |\n| `err_unauthorized` | Unauthorized due to invalid API token. You've provided an invalid API token or the API token does not have permission to access the requested resource. |\n| `err_internal_server_error` | Something went wrong. If you retry the request and it does not succeed, you may contact us at `hey@slide.tech`. |\n| `err_rate_limit_exceeded` | Rate limit exceeded. Please wait before retrying the request. See [rate limiting](#description/rate-limiting) for more details. |\n\n<details>\n <summary>Show more error codes.</summary>\n\n| Code | Description |\n|-------------------------------------|-----------------------------------------------------------------------------------------------------------------------|\n| `err_agent_not_connected_to_device` | Agent is not connected to the device. Ensure the agent is powered on and has network connectivity. |\n| `err_device_not_connected_to_cloud` | Device is not connected to the cloud. Ensure the device is powered on and has network connectivity. |\n| `err_backup_already_running` | A backup is already running for this agent. Please wait for the current backup to complete before starting a new one. |\n| `err_client_not_found` | Client not found. Ensure the client ID is valid and the client exists. |\n\n</details>\n\n## Eventual Consistency\n\nSlide operates an eventual consistency model, where data may not be immediately available after an operation.\nThis is due to the distributed nature of our system and the need for replication and synchronization across multiple\nsystems. Users should expect that operations may take a short period of time to propagate and become visible to all\ncomponents of the system.\n\n## Deprecations and Breaking Changes\n\n### Active Deprecations\n\n`Device.ip_addresses` and `Agent.ip_addresses` will be removed. They have been replaced by `Device.addresses` and `Agent.addresses` respectively.\n"
title: Slide Accounts Agents API
version: 1.34.0
servers:
- url: https://api.slide.tech
security:
- BearerAuth: []
tags:
- description: Everything about [agents](#model/agent)
name: Agents
paths:
/v1/agent:
get:
operationId: Agents
parameters:
- $ref: '#/components/parameters/QueryDeviceID'
- $ref: '#/components/parameters/QueryOffset'
- $ref: '#/components/parameters/QueryLimit'
- description: Sort by a specific field
in: query
name: sort_by
schema:
default: hostname
enum:
- id
- hostname
- name
type: string
- $ref: '#/components/parameters/QuerySortAsc'
- $ref: '#/components/parameters/QueryClientID'
- description: Filter agents to before a specific pairing timestamp (RFC3339 format)
in: query
name: paired_before
schema:
format: date-time
type: string
- description: Filter agents to after a specific pairing timestamp (RFC3339 format)
in: query
name: paired_after
schema:
format: date-time
type: string
- description: Filter agents by type
in: query
name: agent_type
schema:
enum:
- windows
- linux
- nas
type: string
responses:
'200':
content:
application/json:
schema:
description: Paginated response
properties:
data:
description: List of agents
items:
$ref: '#/components/schemas/Agent'
title: Agents
type: array
pagination:
$ref: '#/components/schemas/Pagination'
required:
- pagination
- data
title: Paginated response
type: object
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
summary: List agents
tags:
- Agents
post:
operationId: AgentPrePair
requestBody:
content:
application/json:
example: "{\n \"display_name\": \"My Agent\",\n \"device_id\": \"d_0123456789ab\"\n}"
schema:
properties:
device_id:
$ref: '#/components/schemas/DeviceID'
display_name:
$ref: '#/components/schemas/DisplayName'
required:
- display_name
- device_id
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/AgentPairCode'
description: Created
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Create an agent for an auto-pair installation
tags:
- Agents
/v1/agent/pair:
post:
operationId: AgentPair
requestBody:
content:
application/json:
example: "{\n \"pair_code\": \"ABC123\",\n \"device_id\": \"d_0123456789ab\"\n}"
schema:
properties:
device_id:
$ref: '#/components/schemas/DeviceID'
pair_code:
$ref: '#/components/schemas/PairCode'
required:
- pair_code
- device_id
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Agent'
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Pair agent
tags:
- Agents
/v1/agent/{agent_id}:
get:
operationId: AgentByID
parameters:
- $ref: '#/components/parameters/PathAgentID'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Agent'
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Get agent
tags:
- Agents
patch:
operationId: AgentUpdate
parameters:
- $ref: '#/components/parameters/PathAgentID'
requestBody:
content:
application/json:
example: "{\n \"display_name\": \"<change me or remove the field to keep unchanged>\",\n \"vss_writer_configs\": [{\"writer_id\":\"{76fe1ac4-15f7-4bcd-987e-8e1acb462fb7}\", \"excluded\":true}, {\"writer_id\":\"{A6AD56C2-B509-4E6C-BB19-49D8F43532F0}\", \"excluded\":false}],\n \"sealed\": false,\n \"passphrase\": \"Super Secret Passphrase\",\n \"file-index\": false,\n \"backup_paused_until\": \"2025-10-31T23:59:59Z\",\n \"backup_paused_indefinite\": true,\n \"backup_resume\": true,\n \"comments\": \"Agent for production server\",\n \"backup_schedule\": {\n \"interval_in_minutes\": 60,\n \"start_hour\": 9,\n \"end_hour\": 18,\n \"days\": [0, 1, 2, 3, 4, 5, 6]\n },\n \"timezone\": \"America/New_York\",\n \"local_retention_policy\": {\n \"retention_policy_name\": \"balanced\",\n \"retention_policy_max_age_months\": 84\n },\n \"volumes\": [\n {\n \"volume_id\": \"v_0123456789ab\",\n \"include\": true\n }\n ],\n \"volumes_include_default\": true,\n \"alert_configs\": [\n {\n \"alert_type\": \"device_not_checking_in\",\n \"pause_for_minutes\": 1440\n },\n {\n \"alert_type\": \"device_out_of_date\",\n \"pause_for_minutes\": 1440\n },\n {\n \"alert_type\": \"device_storage_not_healthy\",\n \"pause_for_minutes\": 1440\n },\n {\n \"alert_type\": \"device_storage_space_low\",\n \"pause_for_minutes\": 1440\n },\n {\n \"alert_type\": \"device_storage_space_critical\",\n \"pause_for_minutes\": 1440\n },\n {\n \"alert_type\": \"agent_not_checking_in\",\n \"pause_for_minutes\": 1440\n },\n {\n \"alert_type\": \"agent_not_backing_up\",\n \"pause_for_minutes\": 1440\n },\n {\n \"alert_type\": \"agent_backup_failed\",\n \"pause_for_minutes\": 1440\n }\n ],\n \"default_restore_settings\": {\n \"cpu_count\": 4,\n \"memory_mb\": 8192,\n \"network_model\": \"virtio\",\n \"disk_bus\": \"virtio\"\n }\n}"
schema:
properties:
alert_configs:
description: Array of alert configurations
items:
$ref: '#/components/schemas/AlertConfig'
type: array
backup_paused_indefinite:
description: Set to true to pause backups indefinitely. This takes precedence over backup_paused_until. Backups will remain paused until you explicitly set backup_resume to true. Set to false to clear the indefinite pause (backups will resume, or remain paused until backup_paused_until if that is still in the future).
example: true
type: boolean
backup_paused_until:
description: Pause backups until this timestamp (RFC3339 format). Backups will automatically resume after this time. To pause indefinitely instead, use backup_paused_indefinite. If both backup_paused_until and backup_paused_indefinite are set, backup_paused_indefinite takes precedence and backups remain paused until explicitly resumed via backup_resume.
example: '2025-10-31T23:59:59Z'
format: date-time
type: string
backup_resume:
description: Set to true to immediately resume backups. This clears both backup_paused_until and backup_paused_indefinite, and takes precedence over both if provided in the same request.
example: true
type: boolean
backup_schedule:
$ref: '#/components/schemas/BackupSchedule'
comments:
description: Optional comments for this agent.
example: Agent for production server
maxLength: 4000
type: string
default_restore_settings:
$ref: '#/components/schemas/DefaultRestoreSettings'
display_name:
$ref: '#/components/schemas/DisplayName'
file_index:
deprecated: true
description: This field exists only for backward compatibility. It is a deprecated field. Use file_index_enabled instead.
type: boolean
file_index_enabled:
description: Set to false to leave file indexing off on an agent, true to enable file indexing and searching
type: boolean
local_retention_policy:
$ref: '#/components/schemas/LocalRetentionPolicy'
nas_smb_password:
description: SMB password for the NAS share. Only applicable to NAS agents. Omit to keep the current password. Write-only.
example: secretpassword
type: string
writeOnly: true
nas_smb_username:
description: SMB username for the NAS share. Only applicable to NAS agents.
example: backupuser
type: string
nas_unc_path:
description: UNC path to the NAS SMB share. Only applicable to NAS agents.
example: \\nas01\backups
type: string
passphrase:
$ref: '#/components/schemas/Passphrase'
sealed:
description: Set to false to unseal an agent with a user-managed passphrase. This will allow backups to occur.
type: boolean
timezone:
description: IANA timezone string (e.g., "America/New_York", "Europe/London")
example: America/New_York
type: string
volumes:
description: Array of volume settings (volume_id and include flag)
items:
$ref: '#/components/schemas/VolumeSetting'
type: array
volumes_include_default:
description: Whether new volumes should be included by default
example: true
type: boolean
vss_writer_configs:
items:
$ref: '#/components/schemas/AgentVSSWriterConfig'
type: array
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Agent'
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Update agent
tags:
- Agents
/v1/agent/{agent_id}/file-search:
get:
operationId: FileSearch
parameters:
- $ref: '#/components/parameters/PathAgentID'
- $ref: '#/components/parameters/QueryOffset'
- $ref: '#/components/parameters/QueryLimit'
- description: Sort by a specific field
in: query
name: sort_by
schema:
default: path
enum:
- path
- last_modified
- file_size
type: string
- $ref: '#/components/parameters/QuerySortAsc'
- description: The search for files. Must be URL encoded.
in: query
name: search_term
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
properties:
data:
description: List of file paths that match search criteria
items:
$ref: '#/components/schemas/FileIndexSearch'
title: Paths
type: array
pagination:
$ref: '#/components/schemas/Pagination'
required:
- pagination
- data
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Get the file paths on a system
tags:
- Agents
/v1/agent/{agent_id}/file-search/version:
get:
operationId: PathVersion
parameters:
- $ref: '#/components/parameters/PathAgentID'
- $ref: '#/components/parameters/QueryOffset'
- $ref: '#/components/parameters/QueryLimit'
- description: "Sort by a specific field:\n * `created_time` - the snapshot's creation time\n * `last_modified` - when the file was last modified\n * `file_size` - the file size\n"
in: query
name: sort_by
schema:
default: created_time
enum:
- created_time
- last_modified
- file_size
type: string
- $ref: '#/components/parameters/QuerySortAsc'
- description: The path of the file to get versions for. Must be URL encoded.
in: query
name: path
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
properties:
data:
description: List of versions of the path
items:
$ref: '#/components/schemas/PathVersion'
title: PathVersions
type: array
pagination:
$ref: '#/components/schemas/Pagination'
required:
- pagination
- data
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Get the versions of a path
tags:
- Agents
/v1/agent/{agent_id}/passphrase:
post:
operationId: AgentPassphraseAdd
parameters:
- $ref: '#/components/parameters/PathAgentID'
requestBody:
content:
application/json:
example: "{\n \"name\": \"ABC123\",\n \"passphrase\": \"Super Secret Passphrase\"\n}"
schema:
properties:
name:
type: string
passphrase:
minLength: 10
type: string
required:
- name
- passphrase
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AgentPassphrase'
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Add agent passphrase
tags:
- Agents
/v1/agent/{agent_id}/passphrase/{agent_passphrase_id}:
delete:
operationId: AgentPassphraseDelete
parameters:
- $ref: '#/components/parameters/PathAgentID'
- $ref: '#/components/parameters/PathAgentPassphraseID'
requestBody:
content:
application/json:
example: "{\n \"passphrase\": \"Super Secret Passphrase\",\n}"
schema:
properties:
passphrase:
description: The current passphrase for the agent.
type: string
required:
- passphrase
required: true
responses:
'204':
description: No Content
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Delete agent passphrase
tags:
- Agents
/v1/agent/{agent_id}/service:
get:
operationId: AgentServices
parameters:
- $ref: '#/components/parameters/PathAgentID'
responses:
'200':
content:
application/json:
schema:
description: Agent services response
properties:
data:
description: List of services for the agent
items:
$ref: '#/components/schemas/AgentService'
title: Agent services
type: array
required:
- data
title: Agent services response
type: object
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Get agent services
tags:
- Agents
patch:
operationId: AgentServiceUpdate
parameters:
- $ref: '#/components/parameters/PathAgentID'
requestBody:
content:
application/json:
example: "{\n \"services\": [\n {\n \"service_id\": \"svc_abc123\",\n \"verify_on_boot\": true\n }\n ]\n}"
schema:
properties:
services:
description: List of service configuration updates.
items:
$ref: '#/components/schemas/AgentServiceUpdateItem'
type: array
required:
- services
required: true
responses:
'200':
content:
application/json:
schema:
description: List of services that were updated
properties:
data:
items:
$ref: '#/components/schemas/AgentServiceUpdateItem'
type: array
required:
- data
title: Agent service update response
type: object
description: OK
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Update agent services
tags:
- Agents
/v1/agent/{agent_id}/service/reset:
post:
operationId: AgentServiceReset
parameters:
- $ref: '#/components/parameters/PathAgentID'
responses:
'200':
description: OK
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Reset all of an agent's service verification settings to system defaults
tags:
- Agents
/v1/nas-agent:
post:
description: Creates a NAS agent that backs up files from an SMB share. Tests SMB credentials against the specified device before creating the agent.
operationId: NASAgentCreate
requestBody:
content:
application/json:
example:
device_id: d_abc123def456
display_name: NAS Backup - Finance Share
nas_smb_password: secretpassword
nas_smb_username: backupuser
nas_unc_path: \\nas01\finance
timezone: America/New_York
schema:
properties:
device_id:
$ref: '#/components/schemas/DeviceID'
display_name:
$ref: '#/components/schemas/DisplayName'
nas_smb_password:
description: SMB password for the NAS share. Omit (along with nas_smb_username) to access an anonymous share. Write-only.
example: secretpassword
type: string
writeOnly: true
nas_smb_username:
description: SMB username for the NAS share. Omit (along with nas_smb_password) to access an anonymous share.
example: backupuser
type: string
nas_unc_path:
description: UNC path to the NAS SMB share.
example: \\nas01\backups
type: string
timezone:
$ref: '#/components/schemas/Timezone'
required:
- device_id
- display_name
- nas_unc_path
- timezone
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Agent'
description: Created
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
summary: Create a NAS agent
tags:
- Agents
components:
schemas:
AgentService:
description: Agent service object representing a Windows service monitored by service verification.
properties:
description:
description: Description of the Windows service.
example: Enables the detection, download, and installation of updates for Windows.
type: string
display_name:
description: Display name of the Windows service.
example: Windows Update
type: string
name:
description: Internal name of the Windows service.
example: wuauserv
type: string
service_id:
description: Unique identifier of the service.
example: svc_abc123
type: string
startup:
description: Startup type of the service.
enum:
- Automatic
- AutomaticDelayedStart
- Manual
- Disabled
example: Automatic
type: string
state:
description: Current state of the service.
enum:
- Stopped
- Running
- StartPending
- StopPending
- ContinuePending
- PausePending
- Paused
example: Running
type: string
verify_on_boot:
description: Whether this service is checked during boot verification.
example: true
type: boolean
required:
- service_id
- name
- display_name
- description
- state
- startup
- verify_on_boot
type: object
ClientID:
description: ID of a client
example: c_0123456789ab
pattern: ^c_[a-z0-9]{12}$
type: string
DefaultRestoreSettings:
description: Default restore VM settings
properties:
cpu_count:
description: Number of CPUs
enum:
- 1
- 2
- 4
- 8
- 16
example: 4
type: integer
disk_bus:
description: Disk bus type
enum:
- sata
- virtio
example: virtio
type: string
memory_mb:
description: Memory in MB
enum:
- 4096
- 6144
- 8192
- 12288
- 16384
- 24576
- 28672
- 32768
- 49152
- 65536
- 98304
- 131072
- 163840
- 196608
- 229376
- 262144
example: 8192
type: integer
network_model:
description: Network model
enum:
- virtio
- hypervisor_default
- e1000
- rtl8139
example: virtio
type: string
type: object
Passphrase:
description: User passphrase. If the agent has a user passphrase, you must provide it here.
example: Super Secret Passphrase
minLength: 10
type: string
DeviceID:
description: ID of a device
example: d_0123456789ab
pattern: ^d_[a-z0-9]{12}$
type: string
SnapshotID:
description: ID of a snapshot
example: s_0123456789ab
pattern: ^s_[a-z0-9]{12}$
type: string
Timezone:
description: Timezone of the agent
example: America/New_York
pattern: ^[a-zA-Z0-9/_-]+$
type: string
Volumes:
description: Volumes to include in the backup
items:
properties:
include:
description: Whether the volume is included in the backup
example: true
type: boolean
mount_points:
description: Mount points for this volume (e.g., ["C:", "D:"]) - present in responses only
example:
- 'C:'
items:
type: string
type: array
volume_id:
$ref: '#/components/schemas/VolumeID'
required:
- volume_id
- include
type: object
type: array
VolumeSetting:
description: Volume setting configuration
properties:
include:
description: Whether to include this volume in backups
example: true
ty
# --- truncated at 32 KB (51 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/slide/refs/heads/main/openapi/slide-agents-api-openapi.yml