# Four new endpoints for reading and structuring the web

**Published:** August 9, 2026 | **Authors:** Cristian Correa

---

The Croma API no longer answers only from official sources. From today you can hand it a URL or a question and get back content your product can use directly.

Four endpoints, all under `/global`, all sharing the same authentication and error contract as the rest of the API.

## Extract a page as markdown

`POST /global/extract/markdown/v1` returns the readable content of a page, without navigation, banners or scripts.

```bash
curl https://api.croma.run/global/extract/markdown/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.gov.co/resolution-1234",
    "scope": "main"
  }'
```



## Extract fields with a schema

`POST /global/extract/json/v1` takes a JSON Schema and returns exactly those fields. Useful when you already know what you need and would rather not parse text.

```bash
curl https://api.croma.run/global/extract/json/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.gov.co/resolution-1234",
    "json_schema": {
      "type": "object",
      "properties": {
        "number": { "type": "string" },
        "date": { "type": "string" },
        "authority": { "type": "string" }
      },
      "required": ["number", "date"]
    }
  }'
```

If

```json
{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_param",
    "param": "json_schema",
    "message": "`json_schema` was rejected. It must be a valid JSON Schema object describing the fields you want."
  }
}
```



`POST /global/generate/json/v1` needs no URL. Give it an instruction and a schema, and it returns the object. The details are in [generate](https://docs.usecroma.com/guides/global/generate).

## Research with sources

`POST /global/research/v1` takes a question and returns a report with the sources it consulted and how many pages it analysed. It is the slowest endpoint in the API and carries its own limit, explained in [research](https://docs.usecroma.com/guides/global/research).

## Limits

| Endpoint | Per-organization limit |
| --- | --- |
| `/global/extract/markdown/v1` | 60 requests / hour |
| `/global/extract/json/v1` | 60 requests / hour |
| `/global/generate/json/v1` | 60 requests / hour |
| `/global/research/v1` | 10 requests / hour |

All four are also exposed as MCP tools, so your assistant can call them without you writing any code. Full reference lives in the [documentation](https://docs.usecroma.com).

## Why they live in the same API

Looking up a public record is almost never the whole job. You find the ruling, and then you still have to read it, pull three fields out of it, summarise it and reconcile it with what you already had. That part usually ends up handled by a separate vendor: another key, another contract, another error format, another invoice.

We do not think it has to work that way. You already have a key from us, and you already know how we answer when something goes wrong. These four endpoints use exactly that: the same `Authorization`, the same error schema, the same per-organization limits. Adopting them is reading one page of documentation, not opening a vendor evaluation.

That is the real advantage of having built this ourselves. Every capability we add comes through the same door and works for everything you already have connected, instead of being one more piece to maintain.

We are going to keep going this way. If there is something you solve today with a separate service that would make sense to ask this API for, [tell us](/support): that list is what we are using to decide what comes next.

---

**More updates:** [View all changelog entries](/en/changelog/sitemap.md) | [Croma](https://usecroma.com)
