When there is an ongoing issue with VCF Management Services, it is possible customer will be unable to generate support bundle using standard mechanism of triggering from the Fleet Lifecycle UI or API. In such cases, we need a mechanism to trigger and download a support bundle for the VCF management services programmatically using the VCF Services Runtime API.
VCF 9.1
Support bundle collection is only available through the UI by default. In environments where UI access is unavailable or automation is required, the API can be used directly.
The support bundle can be generated and downloaded using the following steps. At a high level, the steps involve submitting a generate request, receiving a bundle ID, then polling until overall Status reaches a terminal state, and then downloading using the URL provided in the response.
export PLATFORM_HOST="https://<VCF Management Services FQDN>"
export ADMIN_USERNAME="admin@vsp.local"
export ADMIN_PASSWORD="<your-password>"
export TOKEN=$(curl -ks --request POST \
--url "${PLATFORM_HOST}/api/v1/identity/token" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=password" \
--data-urlencode "username=${ADMIN_USERNAME}" \
--data-urlencode "password=${ADMIN_PASSWORD}" \
| jq -r '.access_token')
To collect logs for the entire platform, specify "type": "vsp". To also include a specific managed component (e.g. VIDB), add a second entry with its component ID obtained from GET /api/v1/components.
export BUNDLE_ID=$(curl -ks -X POST \
"${PLATFORM_HOST}/api/v1/system/support-bundles?action=generate" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"components": [
{ "type": "vsp" }
],
"lookBackWindow": "2d",
"timeout": "12h",
"ttl": "4h"
}' | jq -r '.id')
echo "Bundle ID: ${BUNDLE_ID}"
| components | array | — | Required. Each entry must specify either type (e.g. vsp) or id (component UUID). At least one entry is required. |
| lookBackWindow | string | 2d | How far back to retrieve collected log data. Format: Nh (hours) or Nd (days). Maximum 14d. |
| timeWindow | object | — | Absolute time range using startTime and endTime (RFC 3339 format). Takes precedence over lookBackWindow when both are specified. |
| dataTypes | array | all | Restrict collection to specific data types. Omit this field to include all types. |
| timeout | string | 12h | Maximum wall-clock time to allow for bundle generation. Maximum 24h. |
| ttl | string | 4h | How long the download link remains valid after the bundle is generated. Minimum 1h, maximum 8h. |
| skipCache | boolean | false | If true, skips cached cluster dump data and re-collects from scratch. |
The request returns immediately with overallStatus: Progressing. Repeat the following call every 30 seconds until overallStatus reaches a terminal state.
curl -ks \
"${PLATFORM_HOST}/api/v1/system/support-bundles/${BUNDLE_ID}" \
-H "Authorization: Bearer ${TOKEN}" \
| jq '{overallStatus, result}'
overallStatus valuesPending | No | Request accepted, collection not yet started |
Progressing | No | Collection actively in progress |
Successful | Yes | All components collected successfully |
PartialSuccess | Yes | Collection completed but one or more components failed; the bundle is still available for download |
Failed | Yes | Generation failed entirely; no bundle was produced |
When overallStatus is Successful or PartialSuccess, retrieve result.downloadUrl from the status response and download using the same Bearer token.
export SIGNED_DOWNLOAD_URL=$(curl -ks \
"${PLATFORM_HOST}/api/v1/system/support-bundles/${BUNDLE_ID}" \
-H "Authorization: Bearer ${TOKEN}" \
| jq -r '.result.downloadUrl')
curl -ks -o "support-bundle-${BUNDLE_ID}.tgz"
"${SIGNED_DOWNLOAD_URL}"
echo "Saved: support-bundle-${BUNDLE_ID}.tgz"Note: The download link expires after the ttl duration (default 4 hours from generation time). After expiry the bundle is permanently deleted and cannot be recovered. Submit a new generate request if needed.{
"id": "BUNDLE_ID", "success": null, "messages": [], "input": { "components": [{ "type": "vsp" }], "lookBackWindow": "2d", "timeout": "12h", "ttl": "4h" }, "result": null, "overallStatus": "Progressing", "createdAt": "2026-05-12T20:00:00Z" } { "id": "/api/v1/signed-support-bundles/vcf-bundle-BUNDLE_ID", "success": true, "messages": [], "overallStatus": "Successful", "result": { "downloadUrl": "https://<platform_fqdn><.tgz?expires=<Expiry_date_&_time>&sig=<MD5 Checksum>BUNDLE_ID>y", "bundleSize": 524288000, "generationTime": "2026-05-12T20:11:00Z", "expirationTime": "2026-05-13T00:11:00Z", "components": [{ "type": "vsp" }], "timeWindow": { "startTime": "2026-05-10T20:11:00Z", "endTime": "2026-05-12T20:11:00Z" } } }