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

# Structure chat answers

> Use a response contract so chat always returns the same fields, such as commentary, tables, charts and follow-ups.

export const DocMeta = ({type, applies, owner}) => {
  const LABELS = {
    tutorial: "Tutorial",
    "how-to": "How-to guide",
    explanation: "Explanation",
    reference: "Reference"
  };
  return <div className="e6-meta">
      <span className={type === "how-to" || type === "tutorial" ? "e6-eyebrow" : "e6-eyebrow e6-eyebrow--quiet"}>{LABELS[type] || type}</span>
      {applies ? <span>Applies to: {applies}</span> : null}
      {owner ? <span>Owner: {owner}</span> : null}
    </div>;
};

<DocMeta type="how-to" applies="All deployments" />

A response contract is an optional project setting that constrains chat's final answer to fields you define. Use it when answers feed a report, a dashboard or another system and need a predictable shape.

## Supported fields

A contract supports scalar, list, CSV-table, JSON and nested-object fields, with per-field presence rules and required nested fields. Typical fields are commentary, tables, chart specifications and follow-up questions. Unknown customer-defined fields still render generically.

## Turn it on

Set the contract in the project's **Settings** under **Response format**. See [Project settings](/agentflow/setup/project-settings).

Without an enabled contract, chat answers are free-form Markdown.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.