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

# Deploy workflows with the Novu CLI

> Use the Novu CLI sync command to push Framework workflows to Novu Cloud, connect a bridge endpoint, and understand sync output messages.

The Novu CLI provides a mechanism for you to synchronize your workflows into Novu Cloud so that non-technical Novu users can control the workflow and Step-level controls and enable your workflows to be triggered via Novu API.

<Tabs>
  <Tab title="US Region">
    ```bash theme={null}
    npx novu@latest sync \
      --bridge-url <YOUR_DEPLOYED_URL_WITH_BRIDGE_ENDPOINT> \
      --secret-key <NOVU_SECRET_KEY> \
      --api-url https://api.novu.co
    ```
  </Tab>

  <Tab title="EU Region">
    ```bash theme={null}
    npx novu@latest sync \
      --bridge-url <YOUR_DEPLOYED_URL_WITH_BRIDGE_ENDPOINT> \
      --secret-key <NOVU_SECRET_KEY> \
      --api-url https://eu.api.novu.co
    ```
  </Tab>
</Tabs>

* If your application api server is running at URL **[https://api.domain.com](https://api.domain.com)** and **/api/novu** endpoint is serving Novu workflows created using Novu Framework, then `<YOUR_DEPLOYED_URL>`in above command will be `https://api.domain.com/api/novu`

* If your application is running on your local machine during local development (`npx novu dev`), the tunnel URL can be used as `<YOUR_DEPLOYED_URL>`. The tunnel URL follows the format of `https://<UUID>.novu.sh/api/novu`, and example is `https://041e553c-0dbf-47e0-8ffa-c4536f390145.novu.sh/api/novu`. In this example `041e553c-0dbf-47e0-8ffa-c4536f390145` is the unique tunnel identifier which is generated for each Novu user when starting a tunnel via `npx novu@latest dev`. The tunnel identifier is persisted to your local machine to guarantee the same tunnel URL each time you invoke `npx novu@latest dev`.

## Understanding sync output

A successful sync prints the number of workflows and steps that were discovered from your bridge endpoint, for example:

```json theme={null}
{"status":"ok","sdkVersion":"2.10.0","frameworkVersion":"2024-06-26","discovered":{"workflows":14,"steps":30}}
```

You may also see the following message printed alongside a successful sync:

```
Could not discover agents for bridge URL sync (bridge may not expose agents yet).
```

This is an informational notice, not an error. It only indicates that your bridge does not expose any [Agents](/agents/get-started/what-is-aci) at the sync endpoint. If you are only syncing workflows, you can safely ignore this message — your workflows and steps have still been synced.

## Using vercel preview url

In free tier, vercel preview urls for non production deployments are not publicly accessible. You will need to enable [Protection Bypass for Automation](https://vercel.com/docs/security/deployment-protection/methods-to-bypass-deployment-protection/protection-bypass-automation#protection-bypass-for-automation) from settings to make the preview url publicly accessible. Use vercel generated secret key in query params with bridge url to make the bridge url accessible to novu.

Example: `https://my-app-preview-url.vercel.app/api/novu?x-vercel-protection-bypass=BYPASS_SECRET_KEY`
