Create new bundle
Create new bundle. If resolveNameOnConflict is true and the requested name is already taken in the project, the next available variant (<name> 2, <name> 3, …) is used instead of failing.
If enforcePoliciesFor is set (e.g. App), the mandatory policies configured for that target are also attached and cannot later be deactivated. When set, policyId becomes optional: if omitted, the primary policy is derived from the target’s PolicyEnforcer; if supplied, that policyId is always used as the primary.
Returns 400 with "code": "BUNDLE_REQUIRES_POLICY" when no policyId is supplied and the target has no enabled enforcer with a published policy.
curl --request POST \
--url https://mycluster.domino.tech/api/governance/v1/bundles \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"projectId": "<string>",
"additionalPolicyIds": [
"<string>"
],
"attachments": [
{
"identifier": {}
}
],
"enforcePoliciesFor": "App",
"policyId": "<string>",
"resolveNameOnConflict": true
}
'import requests
url = "https://mycluster.domino.tech/api/governance/v1/bundles"
payload = {
"name": "<string>",
"projectId": "<string>",
"additionalPolicyIds": ["<string>"],
"attachments": [{ "identifier": {} }],
"enforcePoliciesFor": "App",
"policyId": "<string>",
"resolveNameOnConflict": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
projectId: '<string>',
additionalPolicyIds: ['<string>'],
attachments: [{identifier: {}}],
enforcePoliciesFor: 'App',
policyId: '<string>',
resolveNameOnConflict: true
})
};
fetch('https://mycluster.domino.tech/api/governance/v1/bundles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mycluster.domino.tech/api/governance/v1/bundles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'projectId' => '<string>',
'additionalPolicyIds' => [
'<string>'
],
'attachments' => [
[
'identifier' => [
]
]
],
'enforcePoliciesFor' => 'App',
'policyId' => '<string>',
'resolveNameOnConflict' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mycluster.domino.tech/api/governance/v1/bundles"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"additionalPolicyIds\": [\n \"<string>\"\n ],\n \"attachments\": [\n {\n \"identifier\": {}\n }\n ],\n \"enforcePoliciesFor\": \"App\",\n \"policyId\": \"<string>\",\n \"resolveNameOnConflict\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mycluster.domino.tech/api/governance/v1/bundles")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"additionalPolicyIds\": [\n \"<string>\"\n ],\n \"attachments\": [\n {\n \"identifier\": {}\n }\n ],\n \"enforcePoliciesFor\": \"App\",\n \"policyId\": \"<string>\",\n \"resolveNameOnConflict\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mycluster.domino.tech/api/governance/v1/bundles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"additionalPolicyIds\": [\n \"<string>\"\n ],\n \"attachments\": [\n {\n \"identifier\": {}\n }\n ],\n \"enforcePoliciesFor\": \"App\",\n \"policyId\": \"<string>\",\n \"resolveNameOnConflict\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"state": "Active",
"attachments": [
{
"approvalTimelineMap": {},
"createdAt": "<string>",
"createdBy": {},
"id": "<string>",
"identifier": {},
"source": "AUTO",
"type": "ModelVersion"
}
],
"classificationValue": "<string>",
"commentsCount": 123,
"createdAt": "<string>",
"createdBy": {},
"currentStageInfo": {
"openFindingsCount": 123,
"pendingApprovalsCount": 123,
"status": "NotStarted"
},
"enforcedPolicyIds": [
"<string>"
],
"evidenceRestricted": true,
"gates": [
{
"approvals": [
{
"id": "<string>",
"name": "<string>",
"stageApprovalId": "<string>",
"status": "PendingSubmission"
}
],
"bundleId": "<string>",
"id": "<string>",
"isOpen": true,
"name": "<string>",
"policyGateId": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"reason": "<string>",
"resources": [
{
"action": "Deploy",
"failOpen": true,
"parameters": {}
}
]
}
],
"hasRevalidationSchedule": true,
"name": "<string>",
"policies": [
{
"allowProjectApprovers": true,
"bundleId": "<string>",
"classificationValue": "<string>",
"compliantToCurrentStage": true,
"createdAt": "<string>",
"deactivatedAt": "<string>",
"enforceSequentialOrder": true,
"hasRevalidationSchedule": true,
"isLatestVersion": true,
"isPolicyArchived": true,
"policyId": "<string>",
"policyName": "<string>",
"policyVersion": "<string>",
"policyVersionId": "<string>",
"stage": "<string>",
"stageAssignee": {
"id": "<string>",
"name": "<string>"
},
"upgradeRequired": true
}
],
"policyId": "<string>",
"policyName": "<string>",
"policyVersion": "<string>",
"policyVersionId": "<string>",
"projectId": "<string>",
"projectName": "<string>",
"projectOwner": "<string>",
"stage": "<string>",
"stageApprovals": [
{
"approvers": [
{
"editable": true,
"id": "<string>",
"name": "<string>",
"showByDefault": true,
"fromOrganizationUserId": "<string>",
"isOrganizationUser": true
}
],
"evidence": {
"artifacts": [
{
"artifactType": "input",
"details": {},
"id": "<string>",
"policyEntityId": "<string>",
"required": true,
"visibilityRule": "<string>",
"visible": true
}
],
"createdAt": "<string>",
"description": "<string>",
"externalId": "<string>",
"id": "<string>",
"name": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"scope": "Global",
"visible": true
},
"id": "<string>",
"name": "<string>",
"policyEntityId": "<string>",
"revalidationConfig": {
"openWindowDaysBefore": 2,
"recurring": {
"every": 2,
"unit": "month",
"startDate": "<string>"
},
"type": "absolute"
}
}
],
"stageAssignee": {
"id": "<string>",
"name": "<string>"
},
"stages": [
{
"assignedAt": "<string>",
"assignee": {
"id": "<string>",
"name": "<string>"
},
"bundleId": "<string>",
"stage": {
"approvals": [
{
"approvers": [
{
"editable": true,
"id": "<string>",
"name": "<string>",
"showByDefault": true,
"fromOrganizationUserId": "<string>",
"isOrganizationUser": true
}
],
"evidence": {
"artifacts": [
{
"artifactType": "input",
"details": {},
"id": "<string>",
"policyEntityId": "<string>",
"required": true,
"visibilityRule": "<string>",
"visible": true
}
],
"createdAt": "<string>",
"description": "<string>",
"externalId": "<string>",
"id": "<string>",
"name": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"scope": "Global",
"visible": true
},
"id": "<string>",
"name": "<string>",
"policyEntityId": "<string>",
"revalidationConfig": {
"openWindowDaysBefore": 2,
"recurring": {
"every": 2,
"unit": "month",
"startDate": "<string>"
},
"type": "absolute"
}
}
],
"evidenceSet": [
{
"artifacts": [
{
"artifactType": "input",
"details": {},
"id": "<string>",
"policyEntityId": "<string>",
"required": true,
"visibilityRule": "<string>",
"visible": true
}
],
"createdAt": "<string>",
"description": "<string>",
"externalId": "<string>",
"id": "<string>",
"name": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"scope": "Global",
"visible": true
}
],
"id": "<string>",
"name": "<string>",
"notifyOnTransition": true,
"policyEntityId": "<string>",
"policyVersionId": "<string>"
},
"stageId": "<string>"
}
]
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}Body
Bundle to create
Optional, for additional policies to be included in the bundle
Show child attributes
Show child attributes
If set (e.g. "App"), also attach the mandatory policies of that target's PolicyEnforcer
App Optional when enforcePoliciesFor is set; if omitted, the primary is derived from that target's enforcer. A supplied policyId is always used as the primary.
If true, append " 2", " 3", ... when the requested name is already taken in the project
Response
OK
Active, Archived, Complete Show child attributes
Show child attributes
The classification value of the primary policy
Show child attributes
Show child attributes
Policy IDs mandated by a PolicyEnforcer; these cannot be deactivated
Show child attributes
Show child attributes
Whether the bundle has an active revalidation schedule
Show child attributes
Show child attributes
The ID of the primary policy
The version of the primary policy
The version ID of the primary policy
The stage of the primary policy
Show child attributes
Show child attributes
The assignee to the stage of the primary policy
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Related topics
Create new attachmentCreate new findingClone a bundle into a new, standalone bundleWork with bundlesWas this page helpful?
curl --request POST \
--url https://mycluster.domino.tech/api/governance/v1/bundles \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"projectId": "<string>",
"additionalPolicyIds": [
"<string>"
],
"attachments": [
{
"identifier": {}
}
],
"enforcePoliciesFor": "App",
"policyId": "<string>",
"resolveNameOnConflict": true
}
'import requests
url = "https://mycluster.domino.tech/api/governance/v1/bundles"
payload = {
"name": "<string>",
"projectId": "<string>",
"additionalPolicyIds": ["<string>"],
"attachments": [{ "identifier": {} }],
"enforcePoliciesFor": "App",
"policyId": "<string>",
"resolveNameOnConflict": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
projectId: '<string>',
additionalPolicyIds: ['<string>'],
attachments: [{identifier: {}}],
enforcePoliciesFor: 'App',
policyId: '<string>',
resolveNameOnConflict: true
})
};
fetch('https://mycluster.domino.tech/api/governance/v1/bundles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mycluster.domino.tech/api/governance/v1/bundles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'projectId' => '<string>',
'additionalPolicyIds' => [
'<string>'
],
'attachments' => [
[
'identifier' => [
]
]
],
'enforcePoliciesFor' => 'App',
'policyId' => '<string>',
'resolveNameOnConflict' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mycluster.domino.tech/api/governance/v1/bundles"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"additionalPolicyIds\": [\n \"<string>\"\n ],\n \"attachments\": [\n {\n \"identifier\": {}\n }\n ],\n \"enforcePoliciesFor\": \"App\",\n \"policyId\": \"<string>\",\n \"resolveNameOnConflict\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mycluster.domino.tech/api/governance/v1/bundles")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"additionalPolicyIds\": [\n \"<string>\"\n ],\n \"attachments\": [\n {\n \"identifier\": {}\n }\n ],\n \"enforcePoliciesFor\": \"App\",\n \"policyId\": \"<string>\",\n \"resolveNameOnConflict\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mycluster.domino.tech/api/governance/v1/bundles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"additionalPolicyIds\": [\n \"<string>\"\n ],\n \"attachments\": [\n {\n \"identifier\": {}\n }\n ],\n \"enforcePoliciesFor\": \"App\",\n \"policyId\": \"<string>\",\n \"resolveNameOnConflict\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"state": "Active",
"attachments": [
{
"approvalTimelineMap": {},
"createdAt": "<string>",
"createdBy": {},
"id": "<string>",
"identifier": {},
"source": "AUTO",
"type": "ModelVersion"
}
],
"classificationValue": "<string>",
"commentsCount": 123,
"createdAt": "<string>",
"createdBy": {},
"currentStageInfo": {
"openFindingsCount": 123,
"pendingApprovalsCount": 123,
"status": "NotStarted"
},
"enforcedPolicyIds": [
"<string>"
],
"evidenceRestricted": true,
"gates": [
{
"approvals": [
{
"id": "<string>",
"name": "<string>",
"stageApprovalId": "<string>",
"status": "PendingSubmission"
}
],
"bundleId": "<string>",
"id": "<string>",
"isOpen": true,
"name": "<string>",
"policyGateId": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"reason": "<string>",
"resources": [
{
"action": "Deploy",
"failOpen": true,
"parameters": {}
}
]
}
],
"hasRevalidationSchedule": true,
"name": "<string>",
"policies": [
{
"allowProjectApprovers": true,
"bundleId": "<string>",
"classificationValue": "<string>",
"compliantToCurrentStage": true,
"createdAt": "<string>",
"deactivatedAt": "<string>",
"enforceSequentialOrder": true,
"hasRevalidationSchedule": true,
"isLatestVersion": true,
"isPolicyArchived": true,
"policyId": "<string>",
"policyName": "<string>",
"policyVersion": "<string>",
"policyVersionId": "<string>",
"stage": "<string>",
"stageAssignee": {
"id": "<string>",
"name": "<string>"
},
"upgradeRequired": true
}
],
"policyId": "<string>",
"policyName": "<string>",
"policyVersion": "<string>",
"policyVersionId": "<string>",
"projectId": "<string>",
"projectName": "<string>",
"projectOwner": "<string>",
"stage": "<string>",
"stageApprovals": [
{
"approvers": [
{
"editable": true,
"id": "<string>",
"name": "<string>",
"showByDefault": true,
"fromOrganizationUserId": "<string>",
"isOrganizationUser": true
}
],
"evidence": {
"artifacts": [
{
"artifactType": "input",
"details": {},
"id": "<string>",
"policyEntityId": "<string>",
"required": true,
"visibilityRule": "<string>",
"visible": true
}
],
"createdAt": "<string>",
"description": "<string>",
"externalId": "<string>",
"id": "<string>",
"name": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"scope": "Global",
"visible": true
},
"id": "<string>",
"name": "<string>",
"policyEntityId": "<string>",
"revalidationConfig": {
"openWindowDaysBefore": 2,
"recurring": {
"every": 2,
"unit": "month",
"startDate": "<string>"
},
"type": "absolute"
}
}
],
"stageAssignee": {
"id": "<string>",
"name": "<string>"
},
"stages": [
{
"assignedAt": "<string>",
"assignee": {
"id": "<string>",
"name": "<string>"
},
"bundleId": "<string>",
"stage": {
"approvals": [
{
"approvers": [
{
"editable": true,
"id": "<string>",
"name": "<string>",
"showByDefault": true,
"fromOrganizationUserId": "<string>",
"isOrganizationUser": true
}
],
"evidence": {
"artifacts": [
{
"artifactType": "input",
"details": {},
"id": "<string>",
"policyEntityId": "<string>",
"required": true,
"visibilityRule": "<string>",
"visible": true
}
],
"createdAt": "<string>",
"description": "<string>",
"externalId": "<string>",
"id": "<string>",
"name": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"scope": "Global",
"visible": true
},
"id": "<string>",
"name": "<string>",
"policyEntityId": "<string>",
"revalidationConfig": {
"openWindowDaysBefore": 2,
"recurring": {
"every": 2,
"unit": "month",
"startDate": "<string>"
},
"type": "absolute"
}
}
],
"evidenceSet": [
{
"artifacts": [
{
"artifactType": "input",
"details": {},
"id": "<string>",
"policyEntityId": "<string>",
"required": true,
"visibilityRule": "<string>",
"visible": true
}
],
"createdAt": "<string>",
"description": "<string>",
"externalId": "<string>",
"id": "<string>",
"name": "<string>",
"policyId": "<string>",
"policyVersionId": "<string>",
"scope": "Global",
"visible": true
}
],
"id": "<string>",
"name": "<string>",
"notifyOnTransition": true,
"policyEntityId": "<string>",
"policyVersionId": "<string>"
},
"stageId": "<string>"
}
]
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}{
"code": "BUNDLE_REQUIRES_POLICY",
"message": "<string>"
}