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

# Key concepts

> Core terminology and concepts on Outcrawl.

export const OutcrawlStyles = () => {
  if (typeof document !== 'undefined' && !document.getElementById('outcrawl-overrides')) {
    const s = document.createElement('style');
    s.id = 'outcrawl-overrides';
    s.textContent = `
      /* Match the product's radius grid (4 / 6 / 8 / 9999), not Mintlify's default. */
      .rounded-sm { border-radius: 0.375rem !important; } /* 6px, --r-ctl */
      .rounded-md { border-radius: 0.375rem !important; } /* 6px, --r-ctl */
      .rounded-lg { border-radius: 0.5rem !important; }   /* 8px, --r-panel */
      .rounded-l-sm { border-top-left-radius: 0.375rem !important; border-bottom-left-radius: 0.375rem !important; }
      .rounded-r-sm { border-top-right-radius: 0.375rem !important; border-bottom-right-radius: 0.375rem !important; }
      .rounded-l-md { border-top-left-radius: 0.375rem !important; border-bottom-left-radius: 0.375rem !important; }
      .rounded-r-md { border-top-right-radius: 0.375rem !important; border-bottom-right-radius: 0.375rem !important; }
      .rounded-l-lg { border-top-left-radius: 0.5rem !important; border-bottom-left-radius: 0.5rem !important; }
      .rounded-r-lg { border-top-right-radius: 0.5rem !important; border-bottom-right-radius: 0.5rem !important; }

      /* Cards: never pure white in light mode, matching the one-big-card surface tone. */
      .card { background-color: #fcfcfc !important; border-radius: 0.5rem !important; }
      html.dark .card { background-color: #141311 !important; }

      /* Docs hero box */
      .oc-hero { background-color: #fcfcfc; border: 1px solid #e5e2dc; }
      html.dark .oc-hero { background-color: #141311; border-color: #26241f; }
      html.dark .oc-hero h1 { color: #edeae4; }

      /* Thin, transparent-track, hide-until-hover scrollbar. */
      ::-webkit-scrollbar { width: 6px; height: 6px; background-color: transparent; }
      ::-webkit-scrollbar-track { background-color: transparent; }
      ::-webkit-scrollbar-thumb { background-color: rgba(155, 155, 155, 0.5); border-radius: 10px; transition: opacity 0.3s ease; opacity: 0; }
      ::-webkit-scrollbar-thumb:hover { background-color: rgba(155, 155, 155, 0.7); }
      *:hover::-webkit-scrollbar-thumb,
      *:focus::-webkit-scrollbar-thumb,
      *:active::-webkit-scrollbar-thumb { opacity: 1; }
      * { scrollbar-width: thin; scrollbar-color: rgba(155, 155, 155, 0.5) transparent; }
    `;
    document.head.appendChild(s);
  }
  return null;
};

<OutcrawlStyles />

## The five things

Everything is one account, one API, one credit balance, five capabilities.

| Capability | What it is | Endpoint |
| - | - | - |
| **Scrape** | One URL, clean structured content instead of markup. | `POST /v1/scrape` |
| **Crawl** | Walk a site from a seed URL, stream every page as it is fetched. | `POST /v1/crawl` |
| **Search** | Web search, optionally with every hit rendered through the scrape pipeline. | `POST /v1/search` |
| **Browsers** | A real browser your agent drives directly, over plain CDP. TypeScript SDK only. | No REST route, SDK only |
| **Agents** | Hand over a natural-language task, it finishes in a real browser. | `POST /v1/agent` |

Alongside them, **monitors** watch a page on a schedule and notify on real change, and a handful of platform primitives (profiles, secrets, rules, integrations, sessions) support all five without being one of them.

## Jobs, and the shape they share

Three capabilities (crawl, agent, and a monitor's schedule) do not answer in one round trip. `crawl` and `agent` both follow the same shape: `POST` returns an id in milliseconds, and the work continues after the call returns.

```
submit  ->  { id, status: "running" }
              |
              |-- GET  .../{id}            status, spend, progress
              |-- GET  .../{id}/results    what it produced so far, paginated
              |-- POST .../{id}/cancel     stop it, keep what was already billed
```

`crawl` streams as newline-delimited JSON while it runs; `agent` answers plain JSON with the id and returns at once, and you follow the run with the calls above. Either way, the id you get first is what every later call about that job needs, store it.

## Workspaces and organizations

A workspace is a billing and access boundary: its own credit balance, its own members, its own plan and its own payment method. Signing up gives you one, and **+ New workspace** in the console switcher opens another, up to five per person.

Three roles: **owner** (one at a time, though ownership can hand to someone else), **admin**, and **member**. All three can use the five capabilities; owner and admin can invite, remove, change a plan and see what it costs.

A workspace starts as a **personal workspace**: invoices name the person who opened it. **Switch to organization** in Settings moves invoicing to a company instead, its own legal name, address and tax ID, without moving anything else. The credits, the members and the plan stay exactly where they were.

Only a person's very first workspace ever starts on the Free plan's monthly credits. Every workspace after that starts with none: the Free allowance is a monthly ceiling, not a one-time gift, and starting a second workspace on it would mint a second free allowance out of the same verification check the first one already used. A later workspace works the moment it has a paid plan.

A workspace can be deleted by its owner once nothing paid is still active on it and it is not the account's only one; see [Settings](/docs/account/settings#danger-zone) for exactly what that takes and what it costs.

## Credits

One prepaid-style balance, shared across every capability. Every response carries a `usage` object stating exactly what that call cost, so nothing on a bill is a surprise from a number you could not already see. See [pricing](/docs/billing/pricing) for the exact rate per kind.

## Profiles

A pinned exit and persistent storage (cookies, logins) that survives across sessions. Pass a profile to a browser session or an agent run to keep a login rather than signing in fresh every time. A profile is leased while it is open, a second concurrent use of the same profile is refused rather than silently forking its state.

## Sessions

Every browser-driven run, whether a live `oc.browser()` session or an agent run, produces a session with a replay. `sessions.get` returns the replay URL, duration, page count and usage, the way a charge gets disputed: watch what it bought. A replay never autoplays, a person presses play.

## Secrets, rules and integrations

Three platform primitives that shape what an agent is allowed to do:

* **Secrets** store a credential under a handle an agent can reference but never read back. No route on any surface returns a stored value.
* **Rules** are plain-language sentences a workspace sets; each one comes back classified as `enforced` (a hard gate) or `guidance` (in the prompt only), so you know which kind you actually have.
* **Integrations** connect an external MCP server (Gmail, Slack, and similar) so a run can call its tools mid-task. Connecting one is a human-only action; a run only reaches an integration it is explicitly given at submit time.

## Authentication

Two bearer credentials, either works everywhere: an API key, `ock_<keyId>.<secret>`, for code you write yourself; or an OAuth access token, `oat_<...>`, from signing in, what `outcrawl login` and an MCP client's first use both give you. See [API authentication](/docs/api/authentication).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.