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

# Páginas

> Leia e escreva as páginas que os agentes do Tylon leem antes de trabalhar — convenções, o formato de uma migration, no que não mexer.

As páginas que os agentes de fato leem antes de tocar em qualquer coisa:
convenções, o formato de uma migration, do que não chegar perto.

## Como ler

<ParamField path="GET /v1/docs" type="endpoint" />

Todas as páginas, como resumo — título, slug, `parentId`, posição. Os corpos
não vêm: as páginas de um workspace são uma árvore por onde alguém anda, e
mandar todo corpo para desenhar um menu é um megabyte para responder uma
pergunta sobre títulos.

<ParamField path="GET /v1/docs/{docId}" type="endpoint" />

Uma página, com o corpo dela, o que aponta para ela, o que ela cita e ninguém
escreveu, e os cards que a carregam.

```json theme={null}
{
  "title": "A charge that double-posted",
  "slug": "a-charge-that-double-posted",
  "body": "The intent was retried…",
  "backlinks": [],
  "dangling": ["retry-policy"],
  "tasks": []
}
```

Um id que ninguém escreveu é `404`. `dangling` é a outra metade disso: os
links que esta página faz para páginas que ainda não existem — esses vêm por
slug, porque é isso que um `[[wiki link]]` no corpo carrega.

## Como escrever

Member. Estas são as páginas que os agentes leem antes de trabalhar —
convenções, o formato de uma migration, no que não mexer.

<ParamField path="POST /v1/docs" type="endpoint" />

<ParamField body="title" type="string" required>
  O slug é derivado dele, e o acompanha se o título mudar.
</ParamField>

<ParamField body="body" type="string">
  Markdown. `[[wiki links]]` entre páginas são resolvidos, e os que não apontam
  para lugar nenhum voltam em `dangling`.
</ParamField>

<ParamField body="parentId" type="string">
  Páginas se aninham.
</ParamField>

```json theme={null}
{
  "id": "84842202777391096",
  "title": "Branch naming",
  "slug": "branch-naming",
  "parentId": null,
  "position": 0,
  "body": "Cut from `main`.",
  "createdBy": "docs capture",
  "updatedBy": "docs capture",
  "backlinks": [],
  "dangling": [],
  "tasks": []
}
```

<ParamField path="PATCH /v1/docs/{docId}" type="endpoint" />

<ParamField path="DELETE /v1/docs/{docId}" type="endpoint" />

<Warning>
  **Por id, não por slug.** O slug de uma página é derivado do título e o
  acompanha, e um `PATCH` com um `title` novo é justamente o que o move — um
  endereço que uma escrita bem-sucedida tira de baixo de quem chamou não é um
  endereço. Slug onde vai id é `400`, igual em todo o resto daqui.
</Warning>

<Note>
  Este é o único lugar da API de escrita em que automatizar é obviamente
  certo: uma convenção que já vive num gerador ou numa configuração de lint
  não deveria ser transcrita à mão para o lugar onde os agentes olham, onde
  ela vai desatualizar.
</Note>
