---
title: API reference components
description: Parameters, response fields, badges and tables.
---

Four components for documenting an interface by hand. Pages generated from an OpenAPI
spec use these too — hand-written and generated pages share one vocabulary.

## `ParamField`

<ParamField name="name" type="string" required>
  The parameter's name. **Required** — this is the prop migrated content most often
  lacks.
</ParamField>

<ParamField name="type" type="string">
  The parameter's type, as you want it displayed.
</ParamField>

<ParamField name="in" type='"query" | "path" | "header" | "body" | "cookie"'>
  Where the parameter goes.
</ParamField>

<ParamField name="required" type="boolean" default="false">
  Marks the parameter as required.
</ParamField>

<ParamField name="default" type="string">
  Default value when the parameter is omitted.
</ParamField>

<ParamField name="deprecated" type="boolean" default="false">
  Marks the parameter as deprecated.
</ParamField>

<ParamField name="placeholder" type="string">
  Example value shown in the field.
</ParamField>

<ParamField name="dialect" type='"reed" | "fern" | "mintlify"'>
  Per-element dialect override. Prefer the project-wide `content.dialect` setting.
</ParamField>

```mdx
<ParamField name="limit" type="integer" in="query" default="20">
  Maximum number of results to return.
</ParamField>
```

If migrated MDX fails with `DS-S03` complaining that `name` is missing, the file is
almost certainly written in another platform's dialect where `path` doubles as the name.
Set `content.dialect` rather than rewriting every field.

## `ResponseField`

<ParamField name="name" type="string" required>
  The field's name.
</ParamField>

<ParamField name="type" type="string" required>
  The field's type. Required here, unlike on `ParamField`.
</ParamField>

<ParamField name="default" type="string">
  Default value.
</ParamField>

<ParamField name="required" type="boolean" default="false">
  Marks the field as always present.
</ParamField>

<ParamField name="deprecated" type="boolean" default="false">
  Marks the field as deprecated.
</ParamField>

## `Badge`

<ParamField name="intent" type='"info" | "note" | "tip" | "success" | "warning" | "error" | "launch" | "check"'>
  Colour treatment. Shares its vocabulary with `Callout`.
</ParamField>

<ParamField name="minimal" type="boolean" default="false">
  Renders without a filled background.
</ParamField>

<ParamField name="outlined" type="boolean" default="false">
  Renders with a border.
</ParamField>

Children: inline content — the badge's text. Reed's `Badge` takes its label as children
rather than as a `text` prop, and it accepts `intent`.

## `Table`

<ParamField name="sticky" type="boolean" default="false">
  Keeps the header row visible while scrolling.
</ParamField>

<ParamField name="searchable" type="boolean" default="false">
  Adds a filter input.
</ParamField>

<ParamField name="paginate" type="boolean" default="false">
  Splits rows into pages.
</ParamField>

<ParamField name="pageSize" type="number" default="10">
  Rows per page when pagination is on.
</ParamField>

<ParamField name="expandable" type="boolean" default="false">
  Lets rows expand to reveal detail.
</ParamField>

<ParamField name="placeholder" type="string" default="Search...">
  Placeholder for the filter input.
</ParamField>

One component covers sticky, searchable, paginated and expandable tables through boolean
props, rather than a family of separate components. Plain markdown tables still work and
remain the right choice for a handful of rows.
