Third-Party Integrations
Integrating Nomad Media with Monday.com, Smartsheet, and Adobe Creative Suite.
Third-Party Integrations
Monday.com
Nomad Media integrates with Monday.com via Lambda functions that respond to Monday webhook events and sync data bidirectionally between Monday boards and Nomad Media assets.
Note: Nomad Media Lambda functions for Monday are part of this integration.
Step 1: Set Up a Monday Webhook
- Go to the Monday board you want to connect
- Click Integrate in the top right
- Scroll to Webhooks and click it
- Select the webhook event you want to use (e.g. "When a column changes, send a webhook")
- Enter your Lambda’s invoke URL under Webhook URL and click Connect
- Select the applicable column values and click Add To Board
Step 2: Nomad Media Configuration
Locate your Nomad Media configuration file at /configuration/{environment}.json in your system S3 bucket. Add the following section:
{
"application/monday": {
"baseUrl": "https://api.monday.com/v2",
"boardId": "{BOARD_ID}",
"secretKey": "{MONDAY_SECRET_KEY}",
"serviceAccountSecretKey": "{SERVICE_ACCOUNT_SECRET_KEY}",
"attributes": "{ATTRIBUTES}",
"compliance": "{COMPLIANCE}",
"sdkMapping": "{SDK_MAPPING}"
}
}| Key | Description |
|---|---|
boardId | The ID of the Monday board |
secretKey | Path to the AWS Secrets Manager secret containing Monday credentials |
serviceAccountSecretKey | Path to the AWS Secrets Manager secret containing Nomad Media credentials |
For attributes, compliance, and sdkMapping configuration, see the Configuration Variables section below.
Step 3: Configure Secrets
Nomad Media secret (key/value):
{
"username": "{USERNAME}",
"password": "{PASSWORD}"
}Monday secret — obtain your OAuth token from Monday: profile icon → Developers → My access tokens → Show → Copy:
{
"oauth-token": "{OAUTH_TOKEN}"
}Smartsheet
Nomad Media integrates with Smartsheet via Lambda functions triggered by Smartsheet webhook events through AWS API Gateway and EventBridge.
Step 1: Create the Lambda and EventBridge Rule
- Create a Lambda function (Node.js or Python runtime) in the AWS Lambda console
- Go to Amazon EventBridge → Rules → Create rule
- Enter a name and click Next
- Under Creation Pattern, select Custom pattern (JSON editor)
- Enter the event pattern for the Nomad Media event you want to handle. Example for asset custom property updates:
{
"source": ["nomad.{environment}"],
"detail-type": ["Content Change"],
"detail": {
"event": ["Asset Custom Properties Updated"]
}
}- Set the target to your Lambda function
- Click Create rule
Step 2: Set Up API Gateway Route for the Webhook
- Go to API Gateway → Routes → Create
- Enter
POSTas the method and define the path (e.g./smartsheet-webhook) - Click Create
- Click on the route → Attach integration → Create and attach an integration
- Select Lambda function as the integration target and choose your Lambda
Step 3: Create the Smartsheet Webhook
Get an API access token from Smartsheet: user icon → Apps and Integrations → API Access → Generate new access token.
Add the token to the Authorization header for webhook API calls:
{ "Authorization": "{{TOKEN}}" }
Create webhook (POST https://api.smartsheet.com/2.0/webhooks):
{
"name": "my-webhook",
"callbackUrl": "YOUR_API_GATEWAY_ENDPOINT_URL",
"scope": "sheet",
"scopeObjectId": "YOUR_SHEET_ID",
"events": ["*.*"],
"version": 1
}Verify webhook (PUT https://api.smartsheet.com/2.0/webhooks/{webhookId}):
{
"enabled": true
}A successful verify response shows "status": "ENABLED".
Step 4: Nomad Media Configuration
Add the following to your Nomad Media configuration JSON:
{
"application/nbc": {
"boardId": "{BOARD_ID}",
"mondaySecretKey": "{MONDAY_SECRET_KEY}",
"serviceAccountSecretKey": "{SERVICE_ACCOUNT_SECRET_KEY}",
"attributes": "{ATTRIBUTES}",
"compliance": "{COMPLIANCE}",
"sdkMapping": "{SDK_MAPPING}"
}
}| Key | Description |
|---|---|
sheetId | The ID of the Smartsheet sheet |
secretKey | Path to the AWS Secrets Manager secret for Smartsheet credentials |
serviceAccountSecretKey | Path to the AWS Secrets Manager secret for Nomad Media credentials |
Nomad Media secret:
{
"username": "{USERNAME}",
"password": "{PASSWORD}"
}Smartsheet secret:
{
"accessToken": "{ACCESS_TOKEN}"
}Adobe Nomad Media Explorer
The Nomad Media Explorer is an Adobe Creative Suite extension that connects Adobe CS applications directly to your Amazon S3-hosted media assets. Products like Adobe Premiere Pro can access media stored in your S3 buckets without separately downloading files, streamlining the media production workflow.
Prerequisites
- AWS account with permissions to create an IAM user with S3 privileges
- Workstation permissions to install software and map network drives
Step 1: Create an IAM User for S3 Access
In the AWS Console, create an IAM user with Access Key permissions and the following IAM policy (replace the resource ARN with your actual content bucket name):
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:HeadBucket", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::nomad-{project}-system-content-ABCDEF"],
"Effect": "Allow"
},
{
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::nomad-{project}-system-content-ABCDEF/*"],
"Effect": "Allow"
}
]
}Save the Access Key ID and Secret Access Key — you’ll need them to configure the drive mapping software.
Step 2: Install Network Drive Mapping Software
Install an Amazon S3-capable drive mapping client to mount your S3 bucket as a network drive:
- Windows: TntDrive
- Mac: Mountain Duck
Configure the client with:
- Amazon S3 bucket name (e.g.
nomad-{project}-system-content-ABCDEF) - IAM user Access Key ID
- IAM user Secret Access Key
Map the bucket to a drive letter (e.g. Z:) for ease of access.
Note: Purchase the full license (~0/user). The free version runs significantly slower.
Step 3: Install the Adobe Panel
Via Creative Cloud Desktop (recommended): Install the official Adobe Nomad Media Explorer extension from Adobe Exchange: https://exchange.adobe.com/creativecloud.details.105665.html
Manual installation (for interim releases):
- Download and install the ZXP installer from https://aescripts.com/learn/zxp-installer/
- Obtain the Nomad Media Explorer
.ZXPfile from Nomad Media support - Run the ZXP installer and drag/drop the ZXP file onto the install location
Step 4: Configure the Panel
The first time the panel launches, enter your projectId (obtained from your Nomad Media administrator).
Then configure:
- Working folder — local directory for temporary files and project outputs
- PC: e.g.
C:\temp - Mac: e.g.
/Desktop/temp
- PC: e.g.
- Mapped folder — the network drive connected to your S3 bucket
- PC: e.g.
Z:\ - Mac: find the path via Finder → Go → Home → right-click on the bucket → New Terminal At Folder, then run
pwd
- PC: e.g.
Sign in using your Nomad Media credentials, Azure, or Okta SSO.
Note: The Mapped Folder connection can drop during periods of inactivity. If the import cloud icon turns grey, reopen the mapped drive in TntDrive or Mountain Duck to reestablish the connection.
Mapped Folder Path Exclusion (optional): If your working folder is F:\ and asset URLs are bucket::Content/FolderA/File.mp4, you need to map to F:\FolderA\File.mp4 instead of F:\Content\FolderA\File.mp4. Set the Mapped Folder Path Exclusion to Content/ to strip that prefix automatically.
Multiple Bucket Support
To access content spread across multiple AWS S3 buckets in Adobe Premiere, Photoshop, and After Effects, add the following to the panel.json file:
"temporaryDirectory": {
"windows": "F:\\",
"linux": "mappedDrive/path"
},
"pathMapping": [
{
"bucketName": "nomad-dev-05-system-content-qp64ewhdgjb6",
"localDriveMap": {
"windows": "F:\\",
"linux": "mappedDrive/path"
},
"contentFolderExcludePrefix": "content/"
},
{
"bucketName": "nomad-dev-05-system-metadata-1jyo5b0ok2n99",
"localDriveMap": {
"windows": "G:\\",
"linux": "mappedDrive2/path2"
}
}
]Diagnostics
If the Adobe panel configuration file needs to be viewed or removed, on Windows it is located at: C:\Users\{username}\.config\configstore
Configuration Variables (Shared: Monday.com / Smartsheet)
These configuration schemas apply to both the Monday.com and Smartsheet integrations.
Attributes
The attributes object defines the mapping and synchronization rules between Nomad Media and the customer system.
Attribute Types
| Type | Required | Description |
|---|---|---|
nomadId | Yes | Stores the Nomad Media asset ID to the customer system. Set nomad to null (nomadId is a general property, not a custom attribute) |
customerId | Yes | Stores the customer record ID |
sync | Yes | Tells the Lambda when to run |
errorMessage | Yes | Stores error messages from the Lambda |
shareUrl | No | Creates a share URL for the asset |
boolean | No | Boolean attribute mapping |
date | No | Date attribute mapping |
string | No | String attribute mapping |
object | No | Object/linked-record attribute mapping |
Attribute Properties
| Property | Type | Required | Description |
|---|---|---|---|
nomad | string | If no customer | The field name in Nomad Media |
customer | string | If no nomad | The field name in the customer system |
type | string | Yes | The attribute type (see above) |
syncType | string | Yes | Direction: nomadToCustomer, customerToNomad, or both |
contentDefinitionId | string | If type is object | Nomad Media content definition ID for linked records |
createRow | boolean | No | Create a new row in customer system when value updates in Nomad Media |
createNewNomadRecord | boolean | No | Create a new Nomad Media content definition entry if not found when syncing from customer |
createNewCustomerRecord | boolean | No | Create a new customer record if not found when syncing from Nomad Media |
updateConditions | array | No | Conditions that filter when the sync runs |
Update Conditions
| Property | Type | Description |
|---|---|---|
matchValues | string/array | Value(s) that trigger the sync when matched |
propertyToUpdate | string | The property to update when the condition is met |
updateValues | string/boolean/object | The new value(s) for the property |
syncType | string/null | Override sync direction for this condition. If null, uses the attribute’s syncType |
Example
{
"attributes": {
"assetId": {
"nomad": null,
"customer": "Asset Id",
"type": "nomadId"
},
"customerId": {
"nomad": "customerId",
"customer": "id",
"type": "customerId"
},
"sync": {
"nomad": "syncToCustomer",
"customer": null,
"type": "sync"
},
"assetUrl": {
"nomad": null,
"customer": "assetUrl",
"type": "shareUrl"
},
"errorMessage": {
"nomad": "customerErrorMessage",
"customer": null,
"type": "errorMessage"
},
"contact": {
"nomad": "contact",
"customer": "contact",
"type": "object",
"contentDefinitionId": "{{ContactContentDefinitionId}}",
"syncType": "nomadToCustomer",
"createNewCustomerRecord": true
},
"approvalStatus": {
"nomad": "approvalStatus",
"customer": "approvalStatus",
"type": "object",
"contentDefinitionId": "{{ApprovalStatusContentDefinitionId}}",
"createRow": true,
"syncType": "customerToNomad",
"updateConditions": [
{
"matchValues": ["Approved", "Rejected"],
"propertyToUpdate": "approvalStatus",
"updateValues": true
}
]
}
}
}Compliance
The compliance array stores rules for when an attribute is required.
[
{
"property": "attributeName",
"rules": [
{
"type": "required",
"dependencies": [
{
"property": "dependentAttributeName",
"value": "condition"
}
]
}
]
}
]| Field | Required | Description |
|---|---|---|
property | Yes | The attribute name that is conditionally or unconditionally required |
rules | Yes | The rules the compliance must follow |
rule.type | Yes | Rule type — currently required |
rule.dependencies | No | If present, the rule only applies when dependencies are met |
dependency.property | If dependencies | The dependent attribute name |
dependency.value | If dependencies | The value the dependent attribute must have |
SDK Mapping
sdkMapping stores the conversion mappings for the getRow method.
| Field | Description |
|---|---|
title | The column header key name in the customer system |
data | The data key name in the response |
Example — if getRow returns { "title": "Name", "value": "Test" }:
{
"title": "title",
"data": "value"
}