Feature Profiles - Transport
Overview
Section titled “Overview”In Cisco SD-WAN Manager (vManage) UX 2.0, configuration is modular:
| Concept | Description |
|---|---|
| Transport Feature Profile | A container (envelope) that groups all transport/WAN-level settings for a device (VPN 0, WAN interfaces, routing, cellular, etc.). |
| Feature Parcel | An individual, typed block of configuration (WAN VPN, Ethernet Interface, BGP, etc.) that lives inside a Transport Feature Profile. |
You must create the profile first, then attach one or more parcels to it. Some parcels are nested — for example, Ethernet Interface parcels live inside a WAN VPN parcel.
Workflow Overview
Section titled “Workflow Overview”STEP 1: Create a Transport Feature Profile:
POST /v1/feature-profile/sdwan/transport- Returns a Transport Profile Identifier (
profileId)
STEP 2: Create top-level parcels (e.g., WAN VPN, Cellular Controller, Management VPN) using the returned profileId:
POST /v1/feature-profile/sdwan/transport/<profileId>/<parcel-type>- Returns a Parcel Identifier (
parcelId)
STEP 3: For nested parcels (e.g., Ethernet Interface under WAN VPN), create them using both profileId and the parent parcelId:
POST /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/<sub-parcel-type>- Returns a Sub-Parcel Identifier
Then the newly created Transport Feature Profile can be used in a Configuration Group.
Create Transport Feature Profile
Section titled “Create Transport Feature Profile”POST /v1/feature-profile/sdwan/transport
Request Body
{ "name": "TF_SPOKE_TRANSPORT", "description": "Terraform - Transport Profile"}Response (HTTP 200)
{ "id": "aaaa-bbbb-cccc-dddd"}Save the returned UUID — this is referred to as
<profileId>in every subsequent parcel call.
Parcel Hierarchy
Section titled “Parcel Hierarchy”The Transport Feature Profile has a multi-level hierarchy. Some parcels are top-level while others are nested under a parent VPN or controller parcel:
Transport Feature Profile (<profileId>)│├── WAN VPN (VPN 0) ────────────────────────── /wan/vpn│ ├── Interface Ethernet ──────────────────── /interface/ethernet│ ├── Interface Cellular ──────────────────── /interface/cellular│ ├── Interface GRE ──────────────────────── /interface/gre│ ├── Interface IPSec ────────────────────── /interface/ipsec│ ├── Interface Serial ───────────────────── /interface/serial│ ├── Raw Socket ─────────────────────────── /raw-socket│ ├── Routing BGP ────────────────────────── /routing/bgp│ ├── Routing OSPF ───────────────────────── /routing/ospf│ ├── Routing OSPFv3 IPv4 ────────────────── /routing/ospfv3/ipv4│ ├── Routing OSPFv3 IPv6 ────────────────── /routing/ospfv3/ipv6│ └── (Tracker associations on interfaces — see below)│├── Management VPN (VPN 512) ───────────────── /management/vpn│ └── Interface Ethernet ──────────────────── /interface/ethernet│├── Cellular Controller ────────────────────── /cellular-controller│ ├── Cellular Band Select ───────────────── /cellular-bandselect│ ├── Cellular Profile ───────────────────── /cellular-profile│ └── GPS ────────────────────────────────── /gps│├── Cellular Band Select (standalone) ──────── /cellular-bandselect├── Cellular Profile (standalone) ──────────── /cellular-profile├── eSIM Cellular Controller ───────────────── /esimcellular-controller├── eSIM Cellular Profile ──────────────────── /esimcellular-profile├── GPS (standalone) ───────────────────────── /gps├── Routing BGP ────────────────────────────── /routing/bgp├── Routing OSPF ───────────────────────────── /routing/ospf├── Routing OSPFv3 IPv4 ────────────────────── /routing/ospfv3/ipv4├── Routing OSPFv3 IPv6 ────────────────────── /routing/ospfv3/ipv6├── T1/E1 Controller ──────────────────────── /t1-e1-controller├── Tracker ────────────────────────────────── /tracker├── Tracker Group ──────────────────────────── /trackergroup├── IPv6 Tracker ───────────────────────────── /ipv6-tracker└── IPv6 Tracker Group ─────────────────────── /ipv6-trackergroupTop-Level Parcels
Section titled “Top-Level Parcels”With the profileId in hand, create each top-level parcel you need.
| Item | Value |
|---|---|
| Method | POST |
| Endpoint pattern | /v1/feature-profile/sdwan/transport/<profileId>/<parcel-type> |
| Content-Type | application/json |
Order does not matter. Parcels are independent of one another and can be created in any sequence.
Top-Level Parcel Quick-Reference Table:
| # | Parcel Type | Endpoint Suffix | Description / Key Fields |
|---|---|---|---|
| 1 | WAN VPN | /wan/vpn |
VPN 0 — primary & secondary DNS, ECMP keying, NAT pools |
| 2 | Management VPN | /management/vpn |
VPN 512 — management-plane connectivity |
| 3 | Cellular Controller | /cellular-controller |
Cellular modem/controller settings |
| 4 | Cellular Band Select | /cellular-bandselect |
Cellular band selection (LTE, UMTS, all RATs, custom) |
| 5 | Cellular Profile | /cellular-profile |
Cellular profile settings (APN, authentication) |
| 6 | eSIM Cellular Controller | /esimcellular-controller |
Embedded-SIM cellular controller settings |
| 7 | eSIM Cellular Profile | /esimcellular-profile |
Embedded-SIM cellular profile settings |
| 8 | GPS | /gps |
GPS receiver settings |
| 9 | Routing BGP | /routing/bgp |
BGP AS number, neighbors, address families |
| 10 | Routing OSPF | /routing/ospf |
OSPF areas, interfaces, redistribution |
| 11 | Routing OSPFv3 IPv4 | /routing/ospfv3/ipv4 |
OSPFv3 for IPv4 address family |
| 12 | Routing OSPFv3 IPv6 | /routing/ospfv3/ipv6 |
OSPFv3 for IPv6 address family |
| 13 | T1/E1 Controller | /t1-e1-controller |
T1/E1 controller settings |
| 14 | Tracker | /tracker |
Endpoint tracker for interface failover |
| 15 | Tracker Group | /trackergroup |
Group of trackers with boolean logic |
| 16 | IPv6 Tracker | /ipv6-tracker |
IPv6 endpoint tracker |
| 17 | IPv6 Tracker Group | /ipv6-trackergroup |
Group of IPv6 trackers |
WAN VPN Sub-Parcels (Nested)
Section titled “WAN VPN Sub-Parcels (Nested)”These parcels are created inside a WAN VPN parcel and require both the profileId and the parent vpnParcelId.
| Item | Value |
|---|---|
| Method | POST |
| Endpoint pattern | /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/<sub-parcel-type> |
| Content-Type | application/json |
WAN VPN Sub-Parcel Quick-Reference Table:
| # | Sub-Parcel Type | Endpoint Suffix | Description / Key Fields |
|---|---|---|---|
| 1 | Ethernet Interface | /interface/ethernet |
WAN-facing interfaces — IP address, NAT, tunnel interface (color, restrict, IPSec encapsulation, preference) |
| 2 | Cellular Interface | /interface/cellular |
Cellular WAN interface settings |
| 3 | GRE Interface | /interface/gre |
GRE tunnel interface configuration |
| 4 | IPSec Interface | /interface/ipsec |
IPSec tunnel interface configuration |
| 5 | Serial Interface | /interface/serial |
Serial interface configuration (T1/E1 connected) |
| 6 | Raw Socket | /raw-socket |
Raw socket configuration |
| 7 | Routing BGP | /routing/bgp |
BGP settings scoped to WAN VPN |
| 8 | Routing OSPF | /routing/ospf |
OSPF settings scoped to WAN VPN |
| 9 | Routing OSPFv3 IPv4 | /routing/ospfv3/ipv4 |
OSPFv3 IPv4 settings scoped to WAN VPN |
| 10 | Routing OSPFv3 IPv6 | /routing/ospfv3/ipv6 |
OSPFv3 IPv6 settings scoped to WAN VPN |
Tracker on WAN VPN Interfaces
Section titled “Tracker on WAN VPN Interfaces”Trackers can be associated directly to WAN VPN interfaces. These are third-level nested parcels:
Endpoint pattern:
/v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/<interfaceType>/<interfaceId>/<tracker-type>
| # | Tracker Association | Applicable Interface Types | Endpoint Suffix (on interface) |
|---|---|---|---|
| 1 | Tracker | ethernet, cellular, gre, ipsec | /tracker |
| 2 | Tracker Group | ethernet, cellular | /trackergroup |
| 3 | IPv6 Tracker | ethernet, cellular | /ipv6-tracker |
| 4 | IPv6 Tracker Group | ethernet, cellular | /ipv6-trackergroup |
For example, to associate a tracker to an Ethernet interface under WAN VPN:
POST /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/ethernet/<ethernetId>/trackerManagement VPN Sub-Parcels (Nested)
Section titled “Management VPN Sub-Parcels (Nested)”These parcels are created inside a Management VPN parcel and require both the profileId and the parent mgmtVpnParcelId.
| Item | Value |
|---|---|
| Method | POST |
| Endpoint pattern | /v1/feature-profile/sdwan/transport/<profileId>/management/vpn/<mgmtVpnParcelId>/<sub-parcel-type> |
| Content-Type | application/json |
Management VPN Sub-Parcel Quick-Reference Table
Section titled “Management VPN Sub-Parcel Quick-Reference Table”| # | Sub-Parcel Type | Endpoint Suffix | Description / Key Fields |
|---|---|---|---|
| 1 | Ethernet Interface | /interface/ethernet |
Management interface — IP address, DHCP, shutdown state |
Cellular Controller Sub-Parcels (Nested)
Section titled “Cellular Controller Sub-Parcels (Nested)”These parcels are created inside a Cellular Controller parcel and require both the profileId and the parent cellularControllerId.
| Item | Value |
|---|---|
| Method | POST |
| Endpoint pattern | /v1/feature-profile/sdwan/transport/<profileId>/cellular-controller/<cellularControllerId>/<sub-parcel-type> |
| Content-Type | application/json |
Cellular Controller Sub-Parcel Quick-Reference Table
Section titled “Cellular Controller Sub-Parcel Quick-Reference Table”| # | Sub-Parcel Type | Endpoint Suffix | Description / Key Fields |
|---|---|---|---|
| 1 | Cellular Band Select | /cellular-bandselect |
Band selection associated to a cellular controller |
| 2 | Cellular Profile | /cellular-profile |
Cellular profile associated to a cellular controller |
| 3 | GPS | /gps |
GPS associated to a cellular controller |
Examples
Section titled “Examples”Example — Create a WAN VPN Parcel
Section titled “Example — Create a WAN VPN Parcel”POST /dataservice/v1/feature-profile/sdwan/transport/<profileId>/wan/vpnContent-Type: application/json{ "name": "wan_vpn", "description": "WAN VPN for spoke transport", "data": { "vpnId": { "optionType": "global", "value": 0 }, "enhanceEcmpKeying": { "optionType": "global", "value": true }, "primaryDnsAddressIpv4": { "optionType": "global", "value": "172.16.1.254" }, "secondaryDnsAddressIpv4": { "optionType": "global", "value": "172.16.2.254" } }}Response (HTTP 200)
{ "parcelId": "1111-2222-3333-4444"}Save the returned
parcelId— this is the<vpnParcelId>required for creating sub-parcels (interfaces, routes, etc.).
Example — Create an Ethernet Interface Sub-Parcel (under WAN VPN)
Section titled “Example — Create an Ethernet Interface Sub-Parcel (under WAN VPN)”POST /dataservice/v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/ethernetContent-Type: application/json{ "name": "inet_tloc", "description": "INET", "data": { "interfaceName": { "optionType": "variable", "value": "<vpn0_inet_name>" }, "shutdown": { "optionType": "variable", "value": "<vpn0_inet_shutdown>" }, "ipv4": { "addressConfig": { "optionType": "global", "value": "static" }, "address": { "optionType": "variable", "value": "<vpn0_inet_ipv4_address>" }, "subnetMask": { "optionType": "global", "value": "255.255.255.0" } }, "ipv6ConfigurationType": { "optionType": "global", "value": "none" }, "nat": { "optionType": "global", "value": true }, "tunnel": { "color": { "optionType": "global", "value": "biz-internet" }, "restrict": { "optionType": "global", "value": true }, "ipsecEncapsulation": { "optionType": "global", "value": true }, "ipsecPreference": { "optionType": "variable", "value": "<vpn0_inet_preference>" } } }}Response (HTTP 200)
{ "parcelId": "aaaa-bbbb-1111-2222"}Example — Create a Static Route Sub-Parcel (under WAN VPN)
Section titled “Example — Create a Static Route Sub-Parcel (under WAN VPN)”POST /dataservice/v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/routeContent-Type: application/json{ "name": "default_route", "description": "Default static route with variable next-hops", "data": { "ipv4Route": { "optionType": "global", "value": [ { "networkAddress": { "optionType": "global", "value": "0.0.0.0" }, "subnetMask": { "optionType": "global", "value": "0.0.0.0" }, "nextHop": { "optionType": "global", "value": [ { "address": { "optionType": "variable", "value": "<vpn0_default_gw1>" } }, { "address": { "optionType": "variable", "value": "<vpn0_default_gw2>" } } ] } } ] } }}Response (HTTP 200)
{ "parcelId": "5555-6666-7777-8888"}The optionType Pattern
Section titled “The optionType Pattern”Almost every field in a parcel body uses a discriminated value wrapper:
optionType |
Meaning | Example |
|---|---|---|
global |
Explicitly set by the administrator. | { "optionType": "global", "value": "biz-internet" } |
variable |
Bound to a template variable; resolved at device attach. | { "optionType": "variable", "value": "<vpn0_inet_name>" } |
default |
Use the system-defined default. Value may be present but is informational. | { "optionType": "default", "value": 4 } |
Manage Top-Level Parcels
Section titled “Manage Top-Level Parcels”| Action | Method & Endpoint |
|---|---|
| Read All Parcels of a Given Type | GET /v1/feature-profile/sdwan/transport/<profileId>/<parcel-type> |
| Read a Single Parcel | GET /v1/feature-profile/sdwan/transport/<profileId>/<parcel-type>/{parcelId} |
| Update a Parcel (send full payload) | PUT /v1/feature-profile/sdwan/transport/<profileId>/<parcel-type>/{parcelId} |
| Delete a Parcel | DELETE /v1/feature-profile/sdwan/transport/<profileId>/<parcel-type>/{parcelId} |
Manage WAN VPN Sub-Parcels
Section titled “Manage WAN VPN Sub-Parcels”| Action | Method & Endpoint |
|---|---|
| Read All Sub-Parcels of a Given Type | GET /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/<sub-parcel-type> |
| Read a Single Sub-Parcel | GET /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/<sub-parcel-type>/{subParcelId} |
| Update a Sub-Parcel | PUT /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/<sub-parcel-type>/{subParcelId} |
| Delete a Sub-Parcel | DELETE /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/<sub-parcel-type>/{subParcelId} |
Manage Management VPN Sub-Parcels
Section titled “Manage Management VPN Sub-Parcels”| Action | Method & Endpoint |
|---|---|
| Read All Sub-Parcels of a Given Type | GET /v1/feature-profile/sdwan/transport/<profileId>/management/vpn/<mgmtVpnParcelId>/<sub-parcel-type> |
| Read a Single Sub-Parcel | GET /v1/feature-profile/sdwan/transport/<profileId>/management/vpn/<mgmtVpnParcelId>/<sub-parcel-type>/{subParcelId} |
| Update a Sub-Parcel | PUT /v1/feature-profile/sdwan/transport/<profileId>/management/vpn/<mgmtVpnParcelId>/<sub-parcel-type>/{subParcelId} |
| Delete a Sub-Parcel | DELETE /v1/feature-profile/sdwan/transport/<profileId>/management/vpn/<mgmtVpnParcelId>/<sub-parcel-type>/{subParcelId} |
Manage Cellular Controller Sub-Parcels
Section titled “Manage Cellular Controller Sub-Parcels”| Action | Method & Endpoint |
|---|---|
| Read All Sub-Parcels of a Given Type | GET /v1/feature-profile/sdwan/transport/<profileId>/cellular-controller/<cellularControllerId>/<sub-parcel-type> |
| Read a Single Sub-Parcel | GET /v1/feature-profile/sdwan/transport/<profileId>/cellular-controller/<cellularControllerId>/<sub-parcel-type>/{subParcelId} |
| Update a Sub-Parcel | PUT /v1/feature-profile/sdwan/transport/<profileId>/cellular-controller/<cellularControllerId>/<sub-parcel-type>/{subParcelId} |
| Delete a Sub-Parcel | DELETE /v1/feature-profile/sdwan/transport/<profileId>/cellular-controller/<cellularControllerId>/<sub-parcel-type>/{subParcelId} |
Manage Tracker Associations on WAN VPN Interfaces
Section titled “Manage Tracker Associations on WAN VPN Interfaces”| Action | Method & Endpoint |
|---|---|
| Read All Tracker Associations | GET /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/<type>/<interfaceId>/<tracker-type> |
| Read a Single Tracker Association | GET /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/<type>/<interfaceId>/<tracker-type>/{trackerId} |
| Create a Tracker Association | POST /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/<type>/<interfaceId>/<tracker-type> |
| Update a Tracker Association | PUT /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/<type>/<interfaceId>/<tracker-type>/{trackerId} |
| Delete a Tracker Association | DELETE /v1/feature-profile/sdwan/transport/<profileId>/wan/vpn/<vpnParcelId>/interface/<type>/<interfaceId>/<tracker-type>/{trackerId} |
Where <type> is the interface type (ethernet, cellular, gre, or ipsec) and <tracker-type> is one of tracker, trackergroup, ipv6-tracker, or ipv6-trackergroup.
Manage Profile
Section titled “Manage Profile”| Action | Method & Endpoint |
|---|---|
| List all Transport Profiles | GET /v1/feature-profile/sdwan/transport |
| Get one profile | GET /v1/feature-profile/sdwan/transport/<profileId> |
| Update profile metadata | PUT /v1/feature-profile/sdwan/transport/<profileId> |
| Delete a profile | DELETE /v1/feature-profile/sdwan/transport/<profileId> |
HTTP Response Codes
Section titled “HTTP Response Codes”| Code | Meaning |
|---|---|
200 |
Success — resource created / retrieved / updated / deleted |
400 |
Bad request — invalid or missing fields |
401 |
Unauthorised — missing or expired session |
403 |
Forbidden — insufficient RBAC privileges |
404 |
Not found — invalid {profileId} or {parcelId} |
500 |
Internal server error |
Practice with Bruno
Section titled “Practice with Bruno”Open Bruno and load the collection “Catalyst SD-WAN Sandbox” located in the bruno/sdwan-sandbox folder of this repository. The collection is already structured with all the requests needed for this lab, grouped into subfolders by workflow (e.g. Authentication, Create transport profile).
Bruno uses environments to manage sets of variables (base URL, credentials, token values, IDs, etc.) that are shared across all requests in a collection. Each request references variables with the {{variable_name}} syntax — for example, {{vmanage}} for the Manager hostname, or {{transportProfileId}} for the profile ID returned after the first API call. This means you only need to set a value once in the environment and every request that uses it is automatically updated.
Before running any request, select the sandbox environment from the environment picker (top-right dropdown). This loads all the pre-configured variables for the lab sandbox.
As you work through the steps below, you will occasionally need to copy a value from a response (such as a profileId) and paste it into the environment so that subsequent requests can use it automatically. To edit environment variables: click the environment name → Configure.
Step1: Make sure you are authenticated with SD-WAN Manager:
- go to
Authenticationfolder - use
01 - Get Auth Tokenrequest, hit send
Step2: Create Transport Profile
- Go to
Create transport profilefolder - use
01 - Create Transport Profileand hit send - This creates a Transport Profile
- Response payload contains the profile-id
- The post-response script automatically saves the value to the environment variable
transportProfileId
Step3: Create VPN0 parcel
- Go to
Create transport profilefolder - use
02 - Create Transport Parcel - WAN VPNand hit send - This creates the VPN0 parcel in the transport profile
- Response payload contains the parcel-id
- The post-response script automatically saves the value to the environment variable
wanVpnParcelId
Step3 - Create wan interfaces parcels
- Go to
Create transport profilefolder - create Internet WAN interface using
03 - Create Transport Parcel - WAN VPN Interface INET - create Internet WAN interface using
04 - Create Transport Parcel - WAN VPN Interface MPLS - Requires the
transportProfileIdandwanVpnParcelIdfrom above
Step4: List existing Transport Profiles
- Go to
List profilesfolder - use
List all Transport Profiles, hit send - read the response payload, it contains all transport profiles created on Manager
Step5: Get newly created Transport Profile details
- Go to
List profilesfolder - use
Get Transport Profile details, hit send - read the response payload, it contains all parcels for the newly created transport profile.
Notes & Best Practices
Section titled “Notes & Best Practices”- Create the profile before any parcel. Every parcel endpoint requires
<profileId>as a path parameter. - Create parent parcels before nested parcels. WAN VPN must exist before you can create Ethernet Interface sub-parcels under it. Cellular Controller must exist before you can associate Band Select, Profile, or GPS sub-parcels.
- Use variables for values that differ per device (e.g., interface name, IP address, default gateway) to keep the profile reusable across sites.
- Idempotent updates: Use
PUTwith the full parcel body; partial patches are not supported. - Schema validation: Use the schema endpoints to validate payloads before sending —
GET /v1/feature-profile/sdwan/transport/<parcel-type>/schema?schemaType=postreturns the JSON schema for the POST body of a given parcel type. - Version compatibility: This specification targets SD-WAN Manager 20.18. Endpoint availability may differ on earlier releases.