---
title: "Developer foundations"
description: "TL;DR: The building blocks for integrating with Ballet. Authenticate with a workspace API token, run playbooks over the REST API, stream live run and step events over SSE, wake suspended runs with reply/resume, trigger runs from external events with webhooks, or connect Ballet as an MCP server so any MCP client can call your playbooks."
canonical_url: "https://docs.ballet.dev/articles/developer-foundations-l0vvRnLSoH"
md_url: "https://docs.ballet.dev/articles/developer-foundations-l0vvRnLSoH.md"
---
# Developer foundations

**TL;DR:** The building blocks for integrating with Ballet. Authenticate with a workspace API token, run playbooks over the REST API, stream live run and step events over SSE, wake suspended runs with reply/resume, trigger runs from external events with webhooks, or connect Ballet as an MCP server so any MCP client can call your playbooks.

## Who this is for

Developers who want the core primitives before building a framework integration.

## What's covered here

- [Authentication and API tokens](/articles/how-do-i-authenticate-with-the-ballet-api-tWaqCPLyGT) — create a token and send it as a Bearer credential.
- [Run playbooks over the REST API](/articles/how-do-i-run-a-playbook-over-the-rest-api-KQIz0apagm) — execute a playbook and read its run and step results.
- [Stream run events](/articles/how-do-i-stream-playbook-run-events-SsXLWiWt9X) — the SSE envelope, run/step lifecycle, `input_request`, and error types.
- [Wake a suspended run](/articles/how-do-i-wake-a-suspended-run-with-reply-or-resume-EDYuheV1x4) — `POST /reply` and `/resume` for durable pause/continue.
- [Webhooks](/articles/how-do-i-trigger-and-react-to-playbooks-with-webhooks-DYv9XyeU51) — start runs from external events and react to completion.
- [The MCP endpoint](/articles/how-do-i-connect-to-ballets-mcp-endpoint-1ydPKBzHZm) — connect Ballet as an MCP server and the tools it exposes.

## Which approach should I use?

- **Direct control from your backend or CI** — REST API
- **Live progress in a UI or agent loop** — Streaming run events (SSE)
- **Continue a parked HITL / pause** — [Reply / resume](/articles/how-do-i-wake-a-suspended-run-with-reply-or-resume-EDYuheV1x4)
- **React to an external event** — Webhook trigger
- **Let an MCP-aware client/agent drive Ballet** — MCP endpoint

## Related articles

- [How do I create and use API tokens?](/articles/how-do-i-create-and-use-api-tokens-Wp34UyMlMH)
- [How do I pause and resume a playbook run?](/articles/how-do-i-pause-and-resume-a-playbook-run-TK6ueiBF0d)
- [How do I run a playbook?](/articles/how-do-i-run-a-playbook-dChtouCzok)
- [What triggers can start a playbook?](/articles/what-triggers-can-start-a-playbook-manual-schedule-webhook-P4mdwPZDGg)
- [Agent frameworks](/articles/how-do-i-use-ballet-playbooks-in-an-agent-framework-q3PWTx18lY)
