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

# Build for other workspaces

> Applications, providers, modules and embed blocks: what each one is, and which one your integration needs.

Custral has three things you can register, and they answer different questions. Pick the row that matches what you are building before you create anything.

## Which one do you need?

| You want to                                                            | Register                                                                                                | Reviewed by                         |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------------------------- |
| Read or write **your own** workspace from your code                    | An [application and an API key](/dev/applications)                                                      | Nobody                              |
| Show a tool your team already uses (Grafana, Metabase, Loom) on a page | Nothing. Paste the URL into the [Embed block](/blocks/embedded/embed)                                   | Nobody                              |
| Connect Claude, Cursor or another MCP client                           | Nothing. The client registers itself through [MCP](/dev/mcp/overview)                                   | The admin who approves it           |
| Ship UI that **other** workspaces install, with access to their data   | A [provider](/dev/providers/become-a-provider), then an [embed block](/dev/providers/register-an-embed) | Custral, then each installing admin |

<Note>
  Most integrations are the first row. A provider is only needed when a workspace you do not belong to will install what you build.
</Note>

## The pieces

<ResponseField name="Application" type="your workspace">
  A container for API keys, created in **Settings → Applications**. Its keys act on the workspace that created it and nowhere else. See [Applications & API keys](/dev/applications).
</ResponseField>

<ResponseField name="Provider" type="your account">
  The name your integration is listed under, like GitHub or Stripe. It belongs to your Custral **account** across every workspace you are in, and you get one by [applying for developer access](/dev/providers/become-a-provider).
</ResponseField>

<ResponseField name="Block" type="your provider">
  One thing a provider ships. An **embed block** frames a page you host inside a customer's workspace. Workflow and task blocks exist too, but only an embed can be submitted for review from the portal today.
</ResponseField>

<ResponseField name="Module" type="your provider">
  A group of blocks a workspace installs together. Installing a module is where the workspace admin is shown what your blocks can read.
</ResponseField>

<ResponseField name="Installation" type="the customer's workspace">
  A workspace's record that it installed your module. Uninstalling it stops every token your blocks were handed, immediately.
</ResponseField>

## How a provider's embed reaches a workspace

<Steps>
  <Step title="Apply for developer access">
    At [app.custral.com/developers](https://app.custral.com/developers). Custral approves the application and creates your provider.
  </Step>

  <Step title="Create an embed block and declare it">
    In the provider portal, give the block an origin, a URL template and the scopes it needs. Saving the declaration submits it.
  </Step>

  <Step title="Custral reviews the declaration">
    A reviewer checks the origin belongs to you, the scopes fit what the block does, and the template cannot resolve anywhere else.
  </Step>

  <Step title="A workspace admin installs your module">
    They are shown the scopes your blocks ask for and decide whether to accept them. A module whose blocks ask for no scopes installs without a prompt.
  </Step>

  <Step title="Members add the block to a page">
    Your page is framed in a sandbox and receives a short-lived token over `postMessage`. See [Embed blocks](/dev/embeds/overview) for the protocol.
  </Step>
</Steps>

## Two kinds of embed, two levels of trust

|                    | Authored by                           | Reviewed by                        | Asks for scopes | Gets a token |
| ------------------ | ------------------------------------- | ---------------------------------- | --------------- | ------------ |
| **Pasted URL**     | Anyone who can edit the page          | Nobody                             | No              | No           |
| **Provider embed** | A developer with an approved provider | Custral, then the installing admin | Yes             | Yes          |

Both gates on a provider embed are needed. Custral can check that `embed.acme.com` belongs to Acme, but it cannot know whether a given workspace is comfortable handing Acme its conversations. The admin can make that call, but cannot audit Acme's origin and URL template.

## Limits today

* **Your code runs on your servers.** Custral frames your page and calls your URLs. It never executes code you upload.
* **One provider per account.** A second provider is set up by Custral on request.
* **Only embed blocks go through the review queue.** A workflow or task block is created private, and Custral lists one by hand.
* **Being approved does not list you.** A new provider, and every module it creates, is hidden from workspaces until Custral lists it.
* **An unlisted embed still works.** A block Custral approves as unlisted stays out of the catalog, and a workspace that installs its module can still add it to a page.

## Next steps

<CardGroup cols={2}>
  <Card title="Become a provider" icon="id-badge" href="/dev/providers/become-a-provider">
    Apply for developer access and open the provider portal.
  </Card>

  <Card title="Register an embed block" icon="window-maximize" href="/dev/providers/register-an-embed">
    Declare what your block frames, submit it, and get it installed.
  </Card>

  <Card title="Embed protocol" icon="code" href="/dev/embeds/overview">
    The `postMessage` handshake, the token, and reading your block's rows.
  </Card>

  <Card title="Applications & API keys" icon="key" href="/dev/applications">
    For code that acts on your own workspace.
  </Card>
</CardGroup>


## Related topics

- [Developer Overview](/dev/overview.md)
- [Become a provider](/dev/providers/become-a-provider.md)
- [Register an embed block](/dev/providers/register-an-embed.md)
- [Applications & API keys](/dev/applications.md)
- [What the assistant can do](/ai/tools/library.md)
