---
title: Backend overview
sidebarTitle: Overview
description: Using the Trigger.dev realtime API from your backend code
---

import RealtimeExamplesCards from "/snippets/realtime-examples-cards.mdx";

Use these backend functions to subscribe to runs and streams from your server-side code or other tasks.

## Overview

There are three main categories of functionality:

- **[Subscribe functions](/realtime/backend/subscribe)** - Subscribe to run updates using async iterators
- **[Metadata](/realtime/backend/subscribe#subscribe-to-metadata-updates-from-your-tasks)** - Update and subscribe to run metadata in real-time
- **[Streams](/realtime/backend/streams)** - Read and consume real-time streaming data from your tasks

<Note>
  To learn how to emit streams from your tasks, see our [Realtime Streams](/tasks/streams) documentation.
</Note>

## Authentication

All backend functions support both server-side and client-side authentication:

- **Server-side**: Use your API key (automatically handled in tasks)
- **Client-side**: Generate a Public Access Token with appropriate scopes

See our [authentication guide](/realtime/auth) for detailed information on creating and using tokens.

## Quick example

Subscribe to a run:

```ts
import { runs, tasks } from "@trigger.dev/sdk";

// Trigger a task
const handle = await tasks.trigger("my-task", { some: "data" });

// Subscribe to real-time updates
for await (const run of runs.subscribeToRun(handle.id)) {
  console.log(`Run ${run.id} status: ${run.status}`);
}
```
