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

# Payload

Workflow payload is the data passed during the `novu.trigger` method. This is useful for ensuring that the payload is correctly formatted and that the data is valid.

## Payload Schema

Payload schema is defining the payload passed during the `novu.trigger` method. This is useful for ensuring that the payload is correctly formatted and that the data is valid.

```tsx theme={null}
workflow('comment-on-post', async ({ step, payload }) => {
    await step.email(
      'send-email',
      async () => {
          return {
            subject: `You have a new comment from: ${payload.author_name}.`,
            body: render(<ReactEmailContent comment={payload.comment} />),
        }
      });
  },
  {
    payloadSchema: {
            // Always `object`
          type: 'object',
          // Specify the properties to validate. Supports deep nesting.
          properties: {
            post_id: { type: 'number' },
            author_name: { type: 'string' },
            comment: { type: 'string', maxLength: 200 },
          },
          // Specify the array of which properties are required.
          required: ['post_id', 'comment'],
          // Used to enforce full type strictness, with no rogue properties.
          additionalProperties: false,
		      // The `as const` is important to let Typescript know that this
		      // type won't change, enabling strong typing on `inputs` via type
		      // inference of the provided JSON Schema.
        } as const,
  },
);
```

## Passing Payload

Here is an example of the validated payload during trigger:

```tsx theme={null}
novu.trigger('comment-on-post', {
    to: 'subscriber_id',
    payload: {
        post_id: 1234,
        author_name: 'John Doe',
        comment: 'Looks good!'
    }
});
```
