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

# Trigger Bolt externally

> Run Paradime Bolt schedules from outside Paradime using the Bolt API, Airflow, or Dagster so your dbt™ jobs fit inside an existing orchestration setup.

Fold your dbt™ runs into a pipeline you already orchestrate elsewhere by triggering Bolt schedules from outside Paradime. In this guide you'll prepare a schedule for external control and hand off to the Bolt API, Airflow, or Dagster to run it.

<Note>
  **Prerequisites**

  * A [Bolt schedule](/guides/paradime-101/running-dbt-in-production-with-bolt/creating-bolt-schedules) you can edit.
  * A Paradime [API key](/developers/api-keys) with the **Bolt schedules admin** capability, plus its secret and the API endpoint.
  * For Airflow or Dagster: a working install of that orchestrator.

  Estimated time: 15 minutes.
</Note>

## Steps

<Steps>
  <Step title="Give the schedule the Off trigger">
    So the schedule only runs when you call it, give it the **Off** trigger. Build it either way:

    * **In the UI**: create or edit the schedule and select the [Off trigger type](/products/bolt/creating-schedules/trigger-types#off).
    * **As code**: set `schedule: "OFF"` in the schedule's YAML.

    ```yaml title="paradime_schedules.yml (as-code option)" lineNumbers theme={"system"}
    schedules:
      - name: operations_run
        slug: operations-run-b3c4d5
        schedule: "OFF"
        environment: production
        commands:
          - dbt seed
          - dbt run -m +fact_orders
        owner_email: "fabio@paradime.io"
    ```

    <Info>
      Note the schedule's **slug**, it's the stable identifier your external system uses to trigger the run.
    </Info>
  </Step>

  <Step title="Generate an API key">
    Bolt API calls authenticate with a Paradime API key that has the **Bolt schedules admin** capability. Paradime supports two key types:

    * **Account API keys** (recommended), a Bearer token that can access multiple workspaces.
    * **Workspace API keys** (legacy), an `API Key` and `API Secret` scoped to a single workspace.

    See [API keys](/developers/api-keys) to generate one, and [Authentication](/developers/graphql-api/authentication) for how to pass credentials and the API endpoint.
  </Step>

  <Step title="Pick your trigger method">
    Choose how the schedule gets called, then follow the matching reference page:

    * **Bolt API**: call it directly with GraphQL, cURL, the Python SDK, the CLI, or webhooks. Best when you trigger from a custom system, Prefect, or Azure Data Factory. See the [Bolt API reference](/products/bolt/bolt-api).
    * **Airflow**: use the Paradime dbt provider to trigger the schedule from a DAG, wait for it to finish, and download artifacts. See [Trigger Bolt schedules from Airflow](/products/bolt/external-triggers/airflow).
    * **Dagster**: run the schedule as Dagster assets with Paradime's `dagster-dbt` fork. See [Trigger Bolt schedules from Dagster](/products/bolt/external-triggers/dagster).
  </Step>

  <Step title="Trigger the schedule and poll its status">
    Call the schedule from your orchestrator, then poll the run's status so downstream steps wait for it to finish.

    For Airflow, the provider gives you an operator to run the schedule and a sensor to wait on it:

    ```python theme={"system"}
    from paradime_dbt_provider.operators.paradime import ParadimeBoltDbtScheduleRunOperator
    from paradime_dbt_provider.sensors.paradime import ParadimeBoltDbtScheduleRunSensor

    # Run the schedule and return the run id as the xcom return value
    task_run_schedule = ParadimeBoltDbtScheduleRunOperator(task_id="run_schedule", slug=BOLT_SCHEDULE_SLUG)

    run_id = "{{ task_instance.xcom_pull(task_ids='run_schedule') }}"

    # Wait for the schedule to complete before continuing
    task_wait_for_schedule = ParadimeBoltDbtScheduleRunSensor(task_id="wait_for_schedule", run_id=run_id)
    ```

    For Dagster, `load_assets_from_paradime_schedule` executes the schedule and retrieves its artifacts through the Dagster asset model:

    ```python theme={"system"}
    from dagster_dbt import ParadimeClientResource, load_assets_from_paradime_schedule

    paradime_assets = load_assets_from_paradime_schedule(
        paradime=paradime,
        schedule_name="daily_run",  # the Bolt schedule name (no spaces)
    )
    ```

    <Info>
      `ParadimeBoltDbtScheduleRunOperator` identifies the schedule with either `slug` (stable) or `schedule_name`, and also accepts `commands`, `branch`, and `retry_from_failure`, so you can override the dbt™ commands at runtime.
    </Info>
  </Step>
</Steps>

<Check>
  Trigger the schedule from your external system and confirm the run appears in Bolt with a run id. Your orchestrator should block on the run's status until it completes. If the call is rejected, check that the API key has the **Bolt schedules admin** capability and that the schedule slug matches.
</Check>

## Next steps

<CardGroup cols={2}>
  <Card title="Bolt API reference" href="/products/bolt/bolt-api" icon="terminal">
    Trigger, monitor, retry, and cancel runs via API, SDK, CLI, or webhooks.
  </Card>

  <Card title="Airflow reference" href="/products/bolt/external-triggers/airflow" icon="workflow">
    Trigger schedules from DAGs and download dbt™ artifacts.
  </Card>

  <Card title="Dagster reference" href="/products/bolt/external-triggers/dagster" icon="code">
    Run schedules as Dagster assets with the dagster-dbt fork.
  </Card>

  <Card title="Bolt reference" href="/products/bolt/index" icon="rocket">
    Every schedule, trigger type, and run setting.
  </Card>
</CardGroup>


## Related topics

- [Bolt Trigger Integrations](/products/bolt/creating-schedules/trigger-integrations/index.md)
- [Trigger Bolt schedules from Airflow](/products/bolt/external-triggers/airflow.md)
- [Trigger Bolt schedules from Dagster](/products/bolt/external-triggers/dagster.md)
- [Bolt API and schedule trigger errors](/get-help/error-list/bolt-api-and-schedule-trigger-errors.md)
- [Bolt CLI](/developers/paradime-cli/bolt-cli.md)
