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

# Extract

> Turn any public web page into clean Markdown with boilerplate stripped, or into a typed object whose shape you define with a JSON Schema, in one call.

Read a public web page and get back something a program can use: Markdown with
the navigation and boilerplate stripped, or a typed object whose shape you
define. Pages that build themselves in the browser are handled at
`effort: max`.

Both endpoints share the same page option.

| Field    | Type | Notes                                                                                                                                                                                                |
| -------- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `effort` | enum | `min`, `standard`, or `max`. Default `standard`. `min` is fastest and may serve a recent copy of the page; `max` always reads the page live and handles pages that render themselves in the browser. |

## Page as Markdown

`POST /global/extract/markdown/v1`

| Field              | Type    | Notes                                                                                            |
| ------------------ | ------- | ------------------------------------------------------------------------------------------------ |
| `url`              | string  | **Required.** Public http or https URL. Loopback and private addresses are rejected.             |
| `scope`            | enum    | `main` keeps the article body and drops navigation; `full` keeps the whole page. Default `main`. |
| `include_metadata` | boolean | Include the page's title, author, published date and image. Default `false`.                     |

```bash theme={"dark"}
curl https://api.croma.run/global/extract/markdown/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304", "include_metadata": true }'
```

| Field      | Notes                                                                                                                            |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `url`      | The page that was read, after any redirects.                                                                                     |
| `markdown` | The page as Markdown.                                                                                                            |
| `metadata` | Title, author, published date and image; a field the page does not declare is `null`. `null` unless `include_metadata` was true. |

## Page as JSON

`POST /global/extract/json/v1`

Describe the object you want with a JSON Schema and the fields are located on
the page and returned under `result`, already typed. Describe each field: the
description is what the field is matched on.

| Field         | Type   | Notes                                                                                |
| ------------- | ------ | ------------------------------------------------------------------------------------ |
| `url`         | string | **Required.** Public http or https URL. Loopback and private addresses are rejected. |
| `json_schema` | object | **Required.** JSON Schema for the object to return.                                  |

```bash theme={"dark"}
curl https://api.croma.run/global/extract/json/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=304", "json_schema": { "type": "object", "required": ["title"], "properties": { "title": { "type": "string", "description": "Nombre de la norma." }, "issued_on": { "type": "string", "description": "Fecha de expedición." } } } }'
```

| Field    | Notes                                               |
| -------- | --------------------------------------------------- |
| `url`    | The page that was read, after any redirects.        |
| `result` | The object described by the `json_schema` you sent. |

<Note>
  A page with no readable body returns `404` telling you which option to change.
  A `json_schema` that is not valid JSON Schema returns `400` naming the field.
  Fields the page does not carry come back absent or empty rather than invented.
  To produce values that are not on the page — a summary, a classification, a
  translation — use [Generate](/guides/global/generate) instead.
</Note>

<Warning>
  Extract has a tighter quota than most endpoints: **60 requests per hour** per
  organization, and each call also counts against your **100 requests per
  day**. See [Rate limits](/rate-limits).
</Warning>

<Card title="Full reference" icon="code" href="/api-reference/overview">
  Schemas, all response fields, and an interactive playground.
</Card>
