# JSON (/docs/components/renderings/json)

> The record is its own JSON rendering: served beside each page, with the page schema and one schema per Section type beside it.

A Page record needs no converter to become JSON: it is JSON. This site serves every record beside its render, byte for byte. An agent reads the exact input of the page a person sees.

## What mdxui renders

Harbor's contact page as a person reads it, and as an agent reads it: open the Record tab.

The rendered page: https://next.mdxui.dev/sites/harbor/contact; its record: https://next.mdxui.dev/pages/harbor/contact.json

## Where this site serves it

| Address | Holds |
| --- | --- |
| [`/pages/home.json`](https://next.mdxui.dev/pages/home.json) | The landing's record |
| [`/pages/harbor/contact.json`](https://next.mdxui.dev/pages/harbor/contact.json) | One worked page's record; every worked page has one at `/pages/<site>/<path>.json` |
| [`/schema.json`](https://next.mdxui.dev/schema.json) | `PageSchema` as JSON Schema, for an editor or an agent |
| [`/schema/sections/hero.json`](https://next.mdxui.dev/schema/sections/hero.json) | One Section type's schema; there is one for each of the 27 |
| [`/components/variant/hero/split.json`](https://next.mdxui.dev/components/variant/hero/split.json) | One section record, as a Section type page's Record tab shows it |

## Validate it

JSON Schema carries the shape and the bounds. `PageSchema` carries them and the refinements JSON Schema cannot say, such as a head that needs a title or a lede, so validate with it:

```ts title="validate.ts"
import { PageSchema } from '@mdxui/site';

const record = await (await fetch('https://next.mdxui.dev/pages/harbor/contact.json')).json();
const result = PageSchema.safeParse(record);
if (!result.success) for (const issue of result.error.issues) console.log(issue.path.join('.'), issue.message);
```

Each issue names the path and the bound; [Refusals](https://next.mdxui.dev/docs/reference/refusals) gives the fix for each.

## Related

  - [schema.json](https://next.mdxui.dev/docs/agents/schema): Where JSON Schema stops.
  - [Page fields and bounds](https://next.mdxui.dev/docs/reference/page-schema): Every field, beside the smallest record.
  - [HTML](https://next.mdxui.dev/docs/components/renderings/html): The same record, for people.

