Smartsheet Integration

How to connect Smartsheet to Nomad Media using webhooks, EventBridge, and Lambda functions.

This guide covers the full setup for integrating Smartsheet with Nomad Media, including Lambda creation, EventBridge rule configuration, webhook setup, and secrets management.

Step 1 — Create the Lambda

  1. Go to the AWS Lambda homepage and click Create function.
  2. Enter the function name under Function name and choose your language under Runtime.
  3. Optionally, select an existing execution role under Change default execution roleUse an existing role. Otherwise leave Create a new role with basic Lambda permissions selected (the role can be changed later in ConfigurationExecution role).
  4. Click Create function.

Step 2 — Create the EventBridge Rule

Configure EventBridge to trigger the Lambda on Nomad Media asset events.

  1. Go to the Amazon EventBridge homepage → BusesRulesCreate rule.
  2. Enter a name for the rule and click Next.
  3. Under Creation Pattern, select Custom pattern (JSON editor). Enter your event pattern and click Next.

Example pattern for asset custom property updates:

{
  "source": ["nomad.dev-05"],
  "detail-type": ["Content Change"],
  "detail": {
    "event": ["Asset Custom Properties Updated"]
  }
}

For a full list of available Nomad Media events, see Nomad Media Events.

  1. Under Select a target, choose Lambda function and select your Lambda. Click Skip to Review and create.
  2. Review all details and click Create rule.

Step 3 — Set Up the API Gateway Webhook

Smartsheet requires an HTTP endpoint to deliver webhook payloads.

Create the Route

  1. Go to API GatewayRoutesCreate.
  2. Enter POST for the method and the desired path, then click Create.
  3. Click the route you created and click Attach integration.
  4. Click Create and attach an integration, choose Lambda function, select your Lambda, and click Create.

Get the Authentication Token

  1. In Smartsheet, click the user icon in the bottom left.
  2. Select Apps and Integrations....
  3. Select API Access, then click Generate new access token.
  4. Copy the token and use it in the Authorization header for webhook API calls:
{
  "Authorization": "{TOKEN}"
}

Create the Webhook

Request:

POST https://api.smartsheet.com/2.0/webhooks
{
  "name": "your-webhook-name",
  "callbackUrl": "https://your-api-gateway-url/your-route",
  "scope": "sheet",
  "scopeObjectId": "{SHEET_ID}",
  "events": ["*.*"],
  "version": 1
}

Successful response:

{
  "message": "SUCCESS",
  "resultCode": 0,
  "result": {
    "id": 1234567890123456,
    "name": "your-webhook-name",
    "scope": "sheet",
    "scopeObjectId": 1234567890123456,
    "events": ["*.*"],
    "callbackUrl": "https://your-api-gateway-url/your-route",
    "enabled": true,
    "status": "NEW_NOT_VERIFIED",
    "version": 1,
    "createdAt": "2024-11-18T12:00:00Z",
    "modifiedAt": "2024-11-18T12:00:00Z"
  }
}

Verify the Webhook

The webhook will be in NEW_NOT_VERIFIED status until verified. Send the following request (replace {webhookId} with the ID from the create response):

PUT https://api.smartsheet.com/2.0/webhooks/{webhookId}
{
  "enabled": true
}

The status will change to ENABLED in the response.

Step 4 — Nomad Media Configuration

Locate your Nomad Media configuration file at /configuration/{environment}.json in your system S3 bucket. Add the following section:

"application/nbc": {
    "sheetId": "{SHEET_ID}",
    "secretKey": "{SMARTSHEET_SECRET_KEY}",
    "serviceAccountSecretKey": "{SERVICE_ACCOUNT_SECRET_KEY}",
    "attributes": "{ATTRIBUTES}",
    "compliance": "{COMPLIANCE}",
    "sdkMapping": "{SDK_MAPPING}"
}
KeyDescription
sheetIdThe ID of the sheet to use for your Lambda.
secretKeyThe path of the AWS secret where your Smartsheet credentials are stored.
serviceAccountSecretKeyThe path of the AWS secret where your Nomad Media credentials are stored.

For details on configuring attributes, compliance, and sdkMapping, see Asset Webhook Sync Configuration.

Step 5 — Secrets

Nomad Media Secret

{
  "username": "{USERNAME}",
  "password": "{PASSWORD}"
}

Smartsheet Secret

{
  "accessToken": "{ACCESS_TOKEN}"
}