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

# Block types

> The 17 block types agents can create, and how they map to the visual app.

A block is a single node in the canvas DAG. The `blocks` field on [`POST /v1/run`](/api-reference/endpoints/create-run) accepts a JSON array of block-type strings that constrains what the agents are allowed to create — overriding whatever [template](/api-reference/concepts/templates) you passed.

```bash theme={"theme":{"light":"github-light","dark":"tokyo-night"}}
curl -X POST https://api.getspine.ai/v1/run \
  -H "X-API-KEY: sk_spine_..." \
  -F "prompt=Create a Q1 performance report with charts" \
  -F 'blocks=["document-block", "table-block", "image-block", "web-block"]'
```

## Valid block types

Each API block type maps 1:1 to a block in the visual app. Follow the link to see what the block produces, its inputs, and example use cases.

| Block type            | Creates                       | App docs                                                     |
| --------------------- | ----------------------------- | ------------------------------------------------------------ |
| `prompt-block`        | AI prompt / analysis          | [Prompt Block](/app/blocks/prompt-block)                     |
| `list-block`          | Expandable list               | [List Block](/app/blocks/list-block)                         |
| `memo-block`          | Memo document (.docx)         | [Memo Block](/app/blocks/memo-block)                         |
| `document-block`      | Report document (.docx)       | [Document Block](/app/blocks/document-block)                 |
| `excel-block`         | Spreadsheet (.xlsx)           | [Excel Block](/app/blocks/excel-block)                       |
| `deep-research-block` | Deep research report          | [Deep Research Block](/app/blocks/deep-research-block)       |
| `image-block`         | AI-generated image (.png)     | [Image Generation Block](/app/blocks/image-generation-block) |
| `presentation-block`  | Slide deck (.pptx)            | [Slides Block](/app/blocks/slides-block)                     |
| `app-block`           | Web application (.html)       | [App Block](/app/blocks/app-block)                           |
| `table-block`         | Structured data table         | [Table Block](/app/blocks/table-block)                       |
| `prototype-block`     | Interactive prototype (.html) | [App Block](/app/blocks/app-block)                           |
| `landing-page-block`  | Landing page (.html)          | [App Block](/app/blocks/app-block)                           |
| `text-block`          | Static markdown / text note   | [Notes Block](/app/blocks/notes-block)                       |
| `web-block`           | Web URL reference             | [Web Page](/app/blocks/web-page)                             |
| `yt-block`            | YouTube video reference       | [YouTube Block](/app/blocks/youtube-block)                   |
| `web-research-block`  | Browser navigation / scraping | [BrowserUse Block](/app/blocks/browseruse-block)             |
| `file-block`          | File upload reference         | [File Upload](/app/blocks/file-upload)                       |

## When to use `blocks` vs `template`

* **Use a template** when you want an opinionated output — the template was tuned for that shape.
* **Use `blocks`** when you need to add or remove a specific block type, e.g. forcing a `table-block` into a research run, or excluding `image-block` for cost reasons.

See [Templates](/api-reference/concepts/templates) for the full template matrix.
