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

  1. Go to the Monday board you want to connect
  2. Click Integrate in the top right
  3. Scroll to Webhooks and click it
  4. Select the webhook event you want to use (e.g. "When a column changes, send a webhook")
  5. Enter your Lambda’s invoke URL under Webhook URL and click Connect
  6. 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}"
    }
}
KeyDescription
boardIdThe ID of the Monday board
secretKeyPath to the AWS Secrets Manager secret containing Monday credentials
serviceAccountSecretKeyPath 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 → DevelopersMy access tokensShowCopy:

{
  "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

  1. Create a Lambda function (Node.js or Python runtime) in the AWS Lambda console
  2. Go to Amazon EventBridge → RulesCreate rule
  3. Enter a name and click Next
  4. Under Creation Pattern, select Custom pattern (JSON editor)
  5. 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"]
  }
}
  1. Set the target to your Lambda function
  2. Click Create rule

Step 2: Set Up API Gateway Route for the Webhook

  1. Go to API Gateway → RoutesCreate
  2. Enter POST as the method and define the path (e.g. /smartsheet-webhook)
  3. Click Create
  4. Click on the route → Attach integrationCreate and attach an integration
  5. 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 IntegrationsAPI AccessGenerate 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}"
    }
}
KeyDescription
sheetIdThe ID of the Smartsheet sheet
secretKeyPath to the AWS Secrets Manager secret for Smartsheet credentials
serviceAccountSecretKeyPath 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:

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):

  1. Download and install the ZXP installer from https://aescripts.com/learn/zxp-installer/
  2. Obtain the Nomad Media Explorer .ZXP file from Nomad Media support
  3. 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
  • 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

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

TypeRequiredDescription
nomadIdYesStores the Nomad Media asset ID to the customer system. Set nomad to null (nomadId is a general property, not a custom attribute)
customerIdYesStores the customer record ID
syncYesTells the Lambda when to run
errorMessageYesStores error messages from the Lambda
shareUrlNoCreates a share URL for the asset
booleanNoBoolean attribute mapping
dateNoDate attribute mapping
stringNoString attribute mapping
objectNoObject/linked-record attribute mapping

Attribute Properties

PropertyTypeRequiredDescription
nomadstringIf no customerThe field name in Nomad Media
customerstringIf no nomadThe field name in the customer system
typestringYesThe attribute type (see above)
syncTypestringYesDirection: nomadToCustomer, customerToNomad, or both
contentDefinitionIdstringIf type is objectNomad Media content definition ID for linked records
createRowbooleanNoCreate a new row in customer system when value updates in Nomad Media
createNewNomadRecordbooleanNoCreate a new Nomad Media content definition entry if not found when syncing from customer
createNewCustomerRecordbooleanNoCreate a new customer record if not found when syncing from Nomad Media
updateConditionsarrayNoConditions that filter when the sync runs

Update Conditions

PropertyTypeDescription
matchValuesstring/arrayValue(s) that trigger the sync when matched
propertyToUpdatestringThe property to update when the condition is met
updateValuesstring/boolean/objectThe new value(s) for the property
syncTypestring/nullOverride 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"
          }
        ]
      }
    ]
  }
]
FieldRequiredDescription
propertyYesThe attribute name that is conditionally or unconditionally required
rulesYesThe rules the compliance must follow
rule.typeYesRule type — currently required
rule.dependenciesNoIf present, the rule only applies when dependencies are met
dependency.propertyIf dependenciesThe dependent attribute name
dependency.valueIf dependenciesThe value the dependent attribute must have

SDK Mapping

sdkMapping stores the conversion mappings for the getRow method.

FieldDescription
titleThe column header key name in the customer system
dataThe data key name in the response

Example — if getRow returns { "title": "Name", "value": "Test" }:

{
  "title": "title",
  "data": "value"
}