> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nomad.media/llms.txt
> Use this file to discover all available pages before exploring further.

# Event-Driven Workflows

Build event-driven media processing pipelines with AWS EventBridge and Nomad Media.

# Event-Driven Workflows

## Outbound Notifications to External Systems

Nomad Media does not include a built-in webhook or push notification system for sending real-time events to external systems. Outbound integration — for example, notifying a third-party platform when a new asset is ingested or a record is updated — requires a custom connector built on top of Nomad Media's internal event infrastructure.

### Recommended Architecture

A lightweight AWS Lambda function acts as a bridge between Nomad Media's internal event bus and your external system:

1. The Lambda subscribes to the relevant Nomad Media internal events
2. On each event, it reads the relevant record data from the Nomad Media API
3. It then forwards the payload to your external system via whatever mechanism it supports — HTTP webhook callback, Kafka message, SQS queue, or similar

This pattern keeps the integration decoupled from Nomad Media's internals and allows you to transform the payload into whatever shape your external system expects.

Contact Nomad Media to discuss the specific internal events available for your environment and to get help setting up a custom outbound connector.

***

## Nomad Media-to-Customer Sync via Webhook

Nomad Media supports bidirectional synchronization with external systems using Lambda functions and a configuration-driven attribute mapping schema. The same `attributes`, `compliance`, and `sdkMapping` configuration is used across integrations (Monday.com, Smartsheet, etc.).

For full configuration reference, see [Third-Party Integrations — Configuration Variables](../Integrations/third-party.md#configuration-variables-shared-mondaycom--smartsheet).

## Custom Lambda with Nomad Media Authorizer

API Gateways in your AWS account can use the existing Nomad Media Authorizer Lambda to secure custom routes. This gives your Lambda the same authentication and authorization layer as the Nomad Media API itself, using the same bearer token or API key that clients already use.

The authorizer passes 4 Nomad Media-specific attributes to your Lambda:

| Attribute | Type    | Value                                                                 |
| --------- | ------- | --------------------------------------------------------------------- |
| `isAuthd` | Boolean | `true` if the user passed authorization; otherwise `false`            |
| `userId`  | GUID    | The unique Nomad Media user ID (never changes, even if email changes) |
| `name`    | string  | First and last name of the user                                       |
| `email`   | string  | Email address of the user                                             |

### Setting Up the Authorizer

To add the Nomad Media Authorizer to your own API Gateway, see [Setup Nomad Media Authorizer in API Gateway](./nomad-authorizer-setup.md).

### HTTP API Gateway — Sample Lambda

```javascript
exports.handler = async (event, context) => {
    console.log("event:", JSON.stringify(event));
    console.log("context:", JSON.stringify(context));

    try {
        const requestContextObject = event.requestContext;

        const isAuthd = requestContextObject.authorizer.lambda.isAuthd;
        const userId = requestContextObject.authorizer.lambda.userId;
        const name = requestContextObject.authorizer.lambda.name;
        const email = requestContextObject.authorizer.lambda.email;

        console.log(`isAuthd: ${isAuthd}`);
        console.log(`userId: ${userId}`);
        console.log(`name: ${name}`);
        console.log(`email: ${email}`);

        return "OK";
    } catch (error) {
        console.log(`Error: ${error}`);
    }
};
```

**Example output:**

```
INFO isAuthd Parameter: true
INFO userId Parameter: 83f15ca3-7e5c-4232-b4c9-57f5333d618a
INFO name Parameter: Test Account
INFO email Parameter: test@nomad.media
```

### REST API Gateway — Sample Lambda

If you are using a REST API Gateway, the context object is structured differently:

```javascript
exports.handler = async (event) => {
    const requestContextObject = event.requestContext;

    const isAuthd = requestContextObject.authorizer.isAuthd;
    const userId = requestContextObject.authorizer.userId;
    const name = requestContextObject.authorizer.name;
    const email = requestContextObject.authorizer.email;

    console.log(`isAuthd: ${isAuthd}`);
    console.log(`userId: ${userId}`);
    console.log(`name: ${name}`);
    console.log(`email: ${email}`);

    return {
        statusCode: 200,
        body: JSON.stringify({ message: "OK" })
    };
};
```