Skip to content

Deploy Configuration Group

Once a Configuration Group has been created (see Create a Configuration Group), you can:

  1. Associate one or more devices to it
  2. Discover the variables expected by the attached Feature Profiles
  3. Assign per-device variable values
  4. Deploy the configuration
  5. Track the deployment task

This page covers all related endpoints and ends with an end-to-end walkthrough that mirrors the deploy-config-group n8n workflow and the matching Bruno collection.


Bind one or more devices to the configuration group.

POST /v1/config-group/{configGroupId}/device/associate
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Request Body:

{
"devices": [
{ "id": "device-uuid-aaaa-1111" },
{ "id": "device-uuid-bbbb-2222" }
]
}

Response — 200 OK: Empty body or acknowledgement.


Remove devices from the configuration group.

DELETE /v1/config-group/{configGroupId}/device/associate
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Request Body:

{
"devices": [
{ "id": "device-uuid-aaaa-1111" }
]
}

Response — 200 OK


GET /v1/config-group/{configGroupId}/device/associate
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Response — 200 OK:

{
"devices": [
{
"id": "device-uuid-aaaa-1111",
"hostname": "branch-router-01",
"status": "associated"
},
{
"id": "device-uuid-bbbb-2222",
"hostname": "branch-router-02",
"status": "associated"
}
]
}

Device Variables — Fetch, Get, Assign, Schema

Section titled “Device Variables — Fetch, Get, Assign, Schema”

Device variables are per-device values that fill in template placeholders (e.g., <system_ip>, <hostname>).

Fetch Variables (Discover What’s Needed)

Section titled “Fetch Variables (Discover What’s Needed)”
POST /v1/config-group/{configGroupId}/device/variables
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Request Body:

{
"devices": [
{ "id": "device-uuid-aaaa-1111" }
]
}

Response — 200 OK: Returns the list of required variables for the associated devices.

GET /v1/config-group/{configGroupId}/device/variables
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Response — 200 OK:

{
"solution": "sdwan",
"devices": [
{
"device-id": "device-uuid-aaaa-1111",
"variables": [
{ "name": "system_ip", "value": "10.0.0.1" },
{ "name": "hostname", "value": "branch-01" },
{ "name": "site_id", "value": "100" }
]
}
],
"groups": []
}
PUT /v1/config-group/{configGroupId}/device/variables
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Request Body:

{
"solution": "sdwan",
"devices": [
{
"device-id": "device-uuid-aaaa-1111",
"variables": [
{ "name": "system_ip", "value": "10.0.0.1" },
{ "name": "hostname", "value": "branch-01" },
{ "name": "site_id", "value": "100" }
]
},
{
"device-id": "device-uuid-bbbb-2222",
"variables": [
{ "name": "system_ip", "value": "10.0.0.2" },
{ "name": "hostname", "value": "branch-02" },
{ "name": "site_id", "value": "200" }
]
}
],
"groups": [
{
"name": "vpn-group-1",
"group-variables": [
{ "name": "vpn_name", "value": "Corporate" }
]
}
]
}

Response — 200 OK

GET /v1/config-group/{configGroupId}/device/variables/schema
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Response — 200 OK: Returns the JSON schema describing all available variable definitions and their types/constraints.


Generate a rendered configuration preview for a specific device before deploying.

POST /v1/config-group/{configGroupId}/device/{deviceId}/preview
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Path Parameters:

Parameter Type Description
configGroupId uuid Configuration group ID
deviceId uuid Target device ID

Request Body: Empty {} or with optional parameters.

Response — 200 OK: Returns the rendered device configuration (CLI or structured).


Push the configuration to all associated devices.

POST /v1/config-group/{configGroupId}/device/deploy
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Request Body: Empty {} or with optional deployment parameters.

Response — 200 OK:

{
"parentTaskId": "task-uuid-xxxx-yyyy-zzzz"
}

📌 Important: Use the parentTaskId to track deployment progress. See Deployment Tracking.


All deploy operations return a parentTaskId. Use existing SD-WAN Manager task APIs to track progress:

GET /dataservice/device/action/status/{parentTaskId}
X-XSRF-TOKEN: <X-XSRF-TOKEN>
Authorization: Bearer <APIKEY>
Content-Type: application/json

Response:

{
"id": "task-uuid-xxxx-yyyy-zzzz",
"status": "in_progress",
"activity": [
{
"deviceId": "device-uuid-aaaa-1111",
"status": "success",
"statusId": "success"
},
{
"deviceId": "device-uuid-bbbb-2222",
"status": "in_progress",
"statusId": "in_progress"
}
]
}

Common status values:

Status Meaning
scheduled Deployment is queued
in_progress Deployment is actively pushing config
success Deployment completed successfully
failure Deployment failed — check activity details

The following walkthrough mirrors the deploy-config-group n8n workflow and the Bruno collection. It assumes a Configuration Group has already been created (see Create a Configuration Group) and that all required Feature Profiles are attached.

Step 1 — Resolve the Config Group ID by name

Section titled “Step 1 — Resolve the Config Group ID by name”
GET /v1/config-group?solution=sdwan

Filter the array client-side and pick the entry whose name matches your group (e.g. bruno_edge_basic). Capture its id as configGroupId.

POST /v1/config-group/{configGroupId}/device/associate
{
"devices": [
{ "id": "C8K-4A88C7BA-BC26-2009-F933-641392D21AB5" }
]
}
GET /v1/config-group/{configGroupId}/device/variables?device-id={deviceId}&suggestions=true

The response lists every deploy-time variable the attached profiles expect for this device (e.g. host_name, system_ip, site_id, pseudo_commit_timer).

Values sent as optionType: "global" when creating parcels, such as the Bruno lab AAA password and interface IP addresses, are already part of the created parcel payloads. Do not include those Bruno environment variable names in this PUT request unless they also appear in the discovery response.

PUT /v1/config-group/{configGroupId}/device/variables
{
"solution": "sdwan",
"devices": [
{
"device-id": "C8K-4A88C7BA-BC26-2009-F933-641392D21AB5",
"variables": [
{ "name": "host_name", "value": "edge-20" },
{ "name": "system_ip", "value": "10.0.0.20" },
{ "name": "site_id", "value": 20 },
{ "name": "pseudo_commit_timer", "value": 300 },
{ "name": "ipv6_strict_control", "value": false }
]
}
]
}

💡 Tip: site_id and pseudo_commit_timer must be sent as numbers, not strings. Booleans (e.g. ipv6_strict_control) must be real JSON booleans.

POST /v1/config-group/{configGroupId}/device/deploy
{
"devices": [
{ "id": "C8K-4A88C7BA-BC26-2009-F933-641392D21AB5" }
]
}

Response:

{ "parentTaskId": "task-uuid-xxxx-yyyy-zzzz" }
GET /dataservice/device/action/status/{parentTaskId}

Poll until status becomes success or failure (see Deployment Tracking).


# Method Endpoint Description
1 POST /v1/config-group/{id}/device/associate Associate devices
2 PUT /v1/config-group/{id}/device/associate Move devices
3 DELETE /v1/config-group/{id}/device/associate Disassociate devices
4 GET /v1/config-group/{id}/device/associate Get associated devices
5 POST /v1/config-group/{id}/device/variables Fetch variables
6 GET /v1/config-group/{id}/device/variables Get variable values
7 PUT /v1/config-group/{id}/device/variables Assign variable values
8 GET /v1/config-group/{id}/device/variables/schema Get variable schema
9 POST /v1/config-group/{id}/device/{deviceId}/preview Preview config
10 POST /v1/config-group/{id}/device/deploy Deploy config group
11 GET /dataservice/device/action/status/{taskId} Track deployment task

HTTP Code Meaning Common Cause
200 Success Operation completed
400 Bad Request Invalid JSON, missing required fields
401 Unauthorized Session expired or missing auth
403 Forbidden Insufficient RBAC permissions
404 Not Found Invalid group ID, profile ID, or device ID
409 Conflict Device already associated elsewhere
412 Precondition Failed Dependency not met
500 Internal Server Error Server-side issue — retry or check logs