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

# How ProdBreak works

> A faithful model of each API you can point your app at — and what you interact with.

A ProdBreak **sandbox** is a faithful, running model of a real API. You point your app's SDK at it,
and it behaves like the real service — stateful, with a real lifecycle, real webhooks, and real error
shapes — except *you* can control it.

## Packs: one per API

Each API is modeled as a **pack** — Stripe, Twilio, GitHub, Deck, and so on. A pack captures
everything that makes that service *itself*:

<CardGroup cols={2}>
  <Card title="Objects & lifecycle" icon="diagram-project">
    The resources the API exposes and the state machine they move through — `pending → succeeded`,
    `queued → running → completed`, and the transitions between.
  </Card>

  <Card title="Behavior & fidelity" icon="box-check">
    Which transitions emit which webhooks, the real error envelope, magic values, and the values the
    API returns from outside its own control. This is the hand-modeled work that makes a sandbox
    faithful instead of a guess.
  </Card>
</CardGroup>

Adding a new API means writing a new pack — not rebuilding sandbox infrastructure. That's why the
promise is ["any API ever"](/apis/overview): the modeling is per-vendor, everything around it is shared.

## What you interact with

You don't think about internals day to day. You install a **plugin**, point the **vendor's SDK** at
the sandbox, and drive a **control handle**:

```ts theme={null}
const stripe = sandbox.client();    // the pack's vendor SDK, repointed at this world
sandbox.seed(...);                  // start from a known history
sandbox.faults.arm(...);            // force an outcome
sandbox.world.trigger(...);         // fire an external cause (a webhook-producing event)
```

The control surface is **the same for every pack**. Learn it once against Stripe and it's identical
when you point at Twilio, GitHub, or your own pack.

<Note>
  **What's faithful vs what you control** is the throughline of these concepts: the API's own data (ids,
  status, timestamps) is faithful and unfakeable; the values it gets from *outside* its control (a
  balance, a transcript, a score) are yours to set. [Values you control](/concepts/exogenous) is where
  that line gets sharp.
</Note>
