Example: Connect with an AI service
The Mangovations creative services team is developing graphics to support the “Skyline Summer” seasonal campaign. Custom scripts in the Call external API automation let them explore AI-generated variations of existing graphics without leaving the DAM.

A custom AI-powered image manipulation tool built into the DAM
Here’s how it works:
- A custom tab houses a custom-built AI-powered image manipulation tool.
- A General Information extension displays the fields relevant to AI image generation.
- Users select an image manipulation option (generate background, blur background, erase foreground, or remove background). The value in the Tool Selection field controls which additional fields, if any, appear in the extension, and which custom button appears below.
- Users complete any additional fields related to the image manipulation option they selected. Information from the additional fields is used in the custom Call external API script.
- A custom action button appears based on the selected image manipulation option. Users click this button to trigger a Call external API automation that is specific to the selected option. The script sends the asset to an AI server and then uploads new assets generated by the AI service.
- The new assets appear as derivatives of the original asset.
Here is this custom image manipulation setup in action:
Here are the scripts for each of the image manipulation options shown in this example scenario. These sample scripts create a custom integration with Bria.AI. You would need to write your own custom integration script to create a similar tool in your environment.
Generate background option
const thisRecordID = "[Document.EncryptedRecordID]";
Log.Error("thisRecordID: "+thisRecordID);
const parentRecordID = "[Document.CoreField.Mother]";
const orangeDAMsiteBase = "https://orangedampoc0a.cdm.orangelogic.com/";
const orangeDAMBearer = "[Secret.OrangeDAM-Bearer-token]";
const relationLinkType = "X1QND000000008614";
const containerRecordID = "";
function main() {
var originalUrl = getAssetLink();
var genResult = genBackground(originalUrl);
Log.Error("genResult: "+JSON.stringify(genResult));
for (r=0;r<genResult.length;r++) {
var uploadResult = uploadNew(genResult[r][0]);
Log.Error('uploadResult: '+JSON.stringify(uploadResult));
Log.Error('new SystemIdentifier: '+uploadResult.fileRecordID);
var relationResult = createRelation(uploadResult.fileRecordID);
var newMetadataResult = setNewMetaData(uploadResult.fileRecordID);
}
var originMetadataResult = setOriginMetaData();
}
function uploadNew(downloadURL) {
var uploadResponse = {}
var now = new Date();
var filename = downloadURL.substring(downloadURL.lastIndexOf('/') + 1).split('?')[0];
Log.Error('filename: '+filename);
Utils.ExecuteHttpRequest(orangeDAMsiteBase+'/webapi/mediafile/import/upload/uploadmediawithurl_45L_v1',
{
Method: 'POST',
Headers: {
'Content-Type': 'application/json',
'Authorization': orangeDAMBearer
},
Data:
{
"folderRecordID": parentRecordID,
"fileURL": downloadURL,
"fileName": filename,
"importMode": "ProcessInLine"
},
},
// Success callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Executed successfully: ' + resultText);
uploadResponse = JSON.parse(response.responseText);
},
// Failure callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Execution failed: ' + resultText);
}
);
return uploadResponse
}
function createRelation(newRecordID) {
Utils.CallInternalAPI(
'/api/Relations/v1.0/CreateRelation?Format=JSON&TargetRecordID='+newRecordID+'&RelationType=X1QND000000008614&ReplaceOldRelationIfExist=false&Direction=Parent&ReferencedRecordID='+thisRecordID,
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('createRelation Executed successfully: ' + JSON.stringify(oResp));
},
// Failure callback function
function (_sResp) {
Log.Warn('Execution Failed: '+ _sResp);
}
);
}
function setNewMetaData(newRecordID) {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID='+newRecordID+'&CoreField.Title:=[Document.CoreField.Title] - background generated with Bria.AI',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setNewMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setNewMetaData Execution Failed: '+ _sResp);
}
);
}
function setOriginMetaData() {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID=[Document.EncryptedRecordID]&ai-image-edit.Tool-Selection:=',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setOriginMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setOriginMetaData Execution Failed: '+ _sResp);
}
);
}
function getAssetLink() {
var assetUrl = '';
Utils.CallInternalAPI(
'/webapi/mediafile/storage/signedurl/getpresignedlink_4ar_v1?RecordID='+thisRecordID+'&Format=TRX&GenerateIfNeeded=false&SkipCheckExistence=true',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('Executed sucessfully: '+ _sResp);
assetUrl = oResp.Response.Response.link;
Log.Error('assetUrl: '+ assetUrl);
},
// Failure callback function
function (_sResp) {
Log.Error('Execution Failed: '+ _sResp);
}
);
return assetUrl
}
function genBackground(imageUrl) {
var genResult = {};
var genRequest = {
"bg_prompt": "[Document.ai-image-edit.Input-Prompt]",
"num_results": parseInt("[Document.ai-image-edit.#-to-Generate]"),
"sync": true,
"image_url": imageUrl
};
Log.Error('genRequest: '+JSON.stringify(genRequest));
Utils.ExecuteHttpRequest('https://engine.prod.bria-api.com/v1/background/replace',
{
Method: 'POST',
Headers: { 'Content-Type': 'application/json', api_token: '[Secret.Bria-AI-API-token]' },
Data: genRequest,
},
// Success callback function
function (oHttp) {
Log.Error('Executed Bria.AI successfully: ' + JSON.stringify(oHttp));
var parsedResult = JSON.parse(oHttp.responseText);
Log.Error('Executed Bria.AI successfully parsedResult: ' + JSON.stringify(parsedResult));
genResult = parsedResult.result;
},
// Failure callback function
function (oHttp) {
var oResult = JSON.parse(oHttp.responseText);
Log.Error('Execution failed: ' + oResult)
}
);
return genResult
}
main()
Blur background option
const thisRecordID = "[Document.EncryptedRecordID]";
Log.Error("thisRecordID: "+thisRecordID);
const parentRecordID = "[Document.CoreField.Mother]";
// can we get this dynamically yet?
const orangeDAMsiteBase = "https://orangedampoc0a.cdm.orangelogic.com/";
const orangeDAMBearer = "[Secret.OrangeDAM-Bearer-token]";
// get relation swagger link needed here
const relationLinkType = "X1QND000000008614";
// don't change anything below.
const containerRecordID = "";
function main() {
var originalUrl = getAssetLink();
var blurResult = blurBackground(originalUrl);
Log.Error("blurResult: "+JSON.stringify(blurResult));
var uploadResult = uploadNew(blurResult);
Log.Error('uploadResult: '+JSON.stringify(uploadResult));
Log.Error('new SystemIdentifier: '+uploadResult.fileRecordID);
var relationResult = createRelation(uploadResult.fileRecordID);
var newMetadataResult = setNewMetaData(uploadResult.fileRecordID);
var originMetadataResult = setOriginMetaData();
}
function uploadNew(downloadURL) {
Log.Error('downloadURL: '+downloadURL);
var uploadResponse = {};
var filename = downloadURL.substring(downloadURL.lastIndexOf('/') + 1).split('?')[0];
Log.Error('filename: '+filename);
Utils.ExecuteHttpRequest(orangeDAMsiteBase+'/webapi/mediafile/import/upload/uploadmediawithurl_45L_v1',
{
Method: 'POST',
Headers: {
'Content-Type': 'application/json',
'Authorization': orangeDAMBearer
},
Data:
{
"folderRecordID": parentRecordID,
"fileURL": downloadURL,
"fileName": filename,
"importMode": "ProcessInLine"
},
},
// Success callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Executed successfully: ' + resultText);
uploadResponse = JSON.parse(response.responseText);
},
// Failure callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Execution failed: ' + resultText);
}
);
return uploadResponse
}
function createRelation(newRecordID) {
Utils.CallInternalAPI(
'/api/Relations/v1.0/CreateRelation?Format=JSON&TargetRecordID='+newRecordID+'&RelationType=X1QND000000008614&ReplaceOldRelationIfExist=false&Direction=Parent&ReferencedRecordID='+thisRecordID,
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('createRelation Executed successfully: ' + JSON.stringify(oResp));
},
// Failure callback function
function (_sResp) {
Log.Warn('Execution Failed: '+ _sResp);
}
);
}
function setNewMetaData(newRecordID) {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID='+newRecordID+'&CoreField.Title:=[Document.CoreField.Title] - background blurred with Bria.AI',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setNewMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setNewMetaData Execution Failed: '+ _sResp);
}
);
}
function setOriginMetaData() {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID=[Document.EncryptedRecordID]&ai-image-edit.Tool-Selection:=',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setOriginMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setOriginMetaData Execution Failed: '+ _sResp);
}
);
}
function getAssetLink() {
var assetUrl = '';
Utils.CallInternalAPI(
'/webapi/mediafile/storage/signedurl/getpresignedlink_4ar_v1?RecordID='+thisRecordID+'&Format=TRX&GenerateIfNeeded=false&SkipCheckExistence=true',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('Executed sucessfully: '+ _sResp);
assetUrl = oResp.Response.Response.link;
Log.Error('assetUrl: '+ assetUrl);
},
// Failure callback function
function (_sResp) {
Log.Error('Execution Failed: '+ _sResp);
}
);
return assetUrl
}
function blurBackground(imageUrl) {
var blurResult = {};
Utils.ExecuteHttpRequest('https://engine.prod.bria-api.com/v1/background/blur',
{
Method: 'POST',
Headers: { 'Content-Type': 'application/json', api_token: '[Secret.Bria-AI-API-token]' },
Data: {'image_url': imageUrl},
},
// Success callback function
function (oHttp) {
Log.Error('Executed Bria.AI successfully: ' + JSON.stringify(oHttp));
var parsedResult = JSON.parse(oHttp.responseText);
blurResult = parsedResult.result_url;
},
// Failure callback function
function (oHttp) {
var oResult = JSON.parse(oHttp.responseText);
Log.Error('Execution failed: ' + oResult)
}
);
return blurResult
}
main()
Erase foreground option
const thisRecordID = "[Document.EncryptedRecordID]";
Log.Error("thisRecordID: "+thisRecordID);
const parentRecordID = "[Document.CoreField.Mother]";
const orangeDAMsiteBase = "https://orangedampoc0a.cdm.orangelogic.com/";
const orangeDAMBearer = "[Secret.OrangeDAM-Bearer-token]";
const relationLinkType = "X1QND000000008614";
const briaEndpoint = 'https://engine.prod.bria-api.com/v1/erase_foreground';
const containerRecordID = "";
function main() {
var originalUrl = getAssetLink();
var genResult = callBria(originalUrl);
Log.Error("cropResult: "+JSON.stringify(genResult));
var uploadResult = uploadNew(genResult);
Log.Error('uploadResult: '+JSON.stringify(uploadResult));
Log.Error('new SystemIdentifier: '+uploadResult.fileRecordID);
var relationResult = createRelation(uploadResult.fileRecordID);
var newMetadataResult = setNewMetaData(uploadResult.fileRecordID);
var originMetadataResult = setOriginMetaData();
}
function uploadNew(downloadURL) {
Log.Error('downloadURL: '+downloadURL);
var uploadResponse = {};
var filename = downloadURL.substring(downloadURL.lastIndexOf('/') + 1).split('?')[0];
Log.Error('filename: '+filename);
Utils.ExecuteHttpRequest(orangeDAMsiteBase+'/webapi/mediafile/import/upload/uploadmediawithurl_45L_v1',
{
Method: 'POST',
Headers: {
'Content-Type': 'application/json',
'Authorization': orangeDAMBearer
},
Data:
{
"folderRecordID": parentRecordID,
"fileURL": downloadURL,
"fileName": filename,
"importMode": "ProcessInLine"
},
},
// Success callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Executed successfully: ' + resultText);
uploadResponse = JSON.parse(response.responseText);
},
// Failure callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Execution failed: ' + resultText);
}
);
return uploadResponse
}
function createRelation(newRecordID) {
Utils.CallInternalAPI(
'/api/Relations/v1.0/CreateRelation?Format=JSON&TargetRecordID='+newRecordID+'&RelationType=X1QND000000008614&ReplaceOldRelationIfExist=false&Direction=Parent&ReferencedRecordID='+thisRecordID,
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('createRelation Executed successfully: ' + JSON.stringify(oResp));
},
// Failure callback function
function (_sResp) {
Log.Warn('Execution Failed: '+ _sResp);
}
);
}
function setNewMetaData(newRecordID) {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID='+newRecordID+'&CoreField.Title:=[Document.CoreField.Title] - foreground erased with Bria.AI',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setNewMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setNewMetaData Execution Failed: '+ _sResp);
}
);
}
function setOriginMetaData() {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID=[Document.EncryptedRecordID]&ai-image-edit.Tool-Selection:=',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setOriginMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setOriginMetaData Execution Failed: '+ _sResp);
}
);
}
function getAssetLink() {
var assetUrl = '';
Utils.CallInternalAPI(
'/webapi/mediafile/storage/signedurl/getpresignedlink_4ar_v1?RecordID='+thisRecordID+'&Format=TRX&GenerateIfNeeded=false&SkipCheckExistence=true',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('Executed sucessfully: '+ _sResp);
assetUrl = oResp.Response.Response.link;
Log.Error('assetUrl: '+ assetUrl);
},
// Failure callback function
function (_sResp) {
Log.Error('Execution Failed: '+ _sResp);
}
);
return assetUrl
}
function callBria(imageUrl) {
var genResult = {};
Utils.ExecuteHttpRequest(briaEndpoint,
{
Method: 'POST',
Headers: { 'Content-Type': 'application/json', api_token: '[Secret.Bria-AI-API-token]' },
Data: {'image_url': imageUrl},
},
// Success callback function
function (oHttp) {
Log.Error('Executed Bria.AI successfully: ' + JSON.stringify(oHttp));
var parsedResult = JSON.parse(oHttp.responseText);
genResult = parsedResult.result_url;
},
// Failure callback function
function (oHttp) {
var oResult = JSON.parse(oHttp.responseText);
Log.Error('Execution failed: ' + oResult)
}
);
return genResult
}
main()
Remove background option
const thisRecordID = "[Document.EncryptedRecordID]";
Log.Error("thisRecordID: "+thisRecordID);
const parentRecordID = "[Document.CoreField.Mother]";
const orangeDAMsiteBase = "https://orangedampoc0a.cdm.orangelogic.com/";
const orangeDAMBearer = "[Secret.OrangeDAM-Bearer-Token]";
const relationLinkType = "X1QND000000008614";
const containerRecordID = "";
function main() {
var originalUrl = getAssetLink();
var removeResult = removeBackground(originalUrl);
Log.Error("removeResult: "+JSON.stringify(removeResult));
var uploadResult = uploadNew(removeResult);
Log.Error('uploadResult: '+JSON.stringify(uploadResult));
Log.Error('new SystemIdentifier: '+uploadResult.fileRecordID);
var relationResult = createRelation(uploadResult.fileRecordID);
var newMetadataResult = setNewMetaData(uploadResult.fileRecordID);
var originMetadataResult = setOriginMetaData();
}
function uploadNew(downloadURL) {
var uploadResponse = {};
var filename = downloadURL.substring(downloadURL.lastIndexOf('/') + 1).split('?')[0];
Utils.ExecuteHttpRequest(orangeDAMsiteBase+'/webapi/mediafile/import/upload/uploadmediawithurl_45L_v1',
{
Method: 'POST',
Headers: {
'Content-Type': 'application/json',
'Authorization': orangeDAMBearer
},
Data:
{
"folderRecordID": parentRecordID,
"fileURL": downloadURL,
"fileName": filename,
"importMode": "ProcessInLine"
},
},
// Success callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Executed successfully: ' + resultText);
uploadResponse = JSON.parse(response.responseText);
},
// Failure callback function
function (response) {
var resultText = JSON.stringify(response.responseText);
Log.Error('[uploadEncoded] Execution failed: ' + resultText);
}
);
return uploadResponse
}
function createRelation(newRecordID) {
Utils.CallInternalAPI(
'/api/Relations/v1.0/CreateRelation?Format=JSON&TargetRecordID='+newRecordID+'&RelationType=X1QND000000008614&ReplaceOldRelationIfExist=false&Direction=Parent&ReferencedRecordID='+thisRecordID,
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('createRelation Executed successfully: ' + JSON.stringify(oResp));
},
// Failure callback function
function (_sResp) {
Log.Warn('Execution Failed: '+ _sResp);
}
);
}
function setNewMetaData(newRecordID) {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID='+newRecordID+'&CoreField.Title:=[Document.CoreField.Title] - background removed with Bria.AI',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setNewMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setNewMetaData Execution Failed: '+ _sResp);
}
);
}
function setOriginMetaData() {
Utils.CallInternalAPI(
'/API/DataTable/V2.2/Documents.All:Update?RecordID=[Document.EncryptedRecordID]&ai-image-edit.Tool-Selection:=',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('setOriginMetaData Executed sucessfully: '+ _sResp);
},
// Failure callback function
function (_sResp) {
Log.Error('setOriginMetaData Execution Failed: '+ _sResp);
}
);
}
function getAssetLink() {
var assetUrl = '';
Utils.CallInternalAPI(
'/webapi/mediafile/storage/signedurl/getpresignedlink_4ar_v1?RecordID='+thisRecordID+'&Format=TRX&GenerateIfNeeded=false&SkipCheckExistence=true',
// Success callback function
function (_sResp) {
var oResp = JSON.parse(_sResp);
Log.Error('Executed sucessfully: '+ _sResp);
assetUrl = oResp.Response.Response.link;
Log.Error('assetUrl: '+ assetUrl);
},
// Failure callback function
function (_sResp) {
Log.Error('Execution Failed: '+ _sResp);
}
);
return assetUrl
}
function removeBackground(imageUrl) {
var removeResult = {};
Utils.ExecuteHttpRequest('https://engine.prod.bria-api.com/v1/background/remove',
{
Method: 'POST',
Headers: { 'Content-Type': 'multipart/form-data', api_token: '[Secret.Bria-AI-API-Token]' },
Data: {'image_url': imageUrl},
},
// Success callback function
function (oHttp) {
Log.Error('Executed Bria.AI successfully: ' + JSON.stringify(oHttp));
var parsedResult = JSON.parse(oHttp.responseText);
removeResult = parsedResult.result_url;
},
// Failure callback function
function (oHttp) {
var oResult = JSON.parse(oHttp.responseText);
Log.Error('Execution failed: ' + oResult)
}
);
return removeResult
}
main()
Updated 13 days ago