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

# Introduction to dynamic forms

> Dynamic forms are server-driven JSON Schema and UI Schema definitions that adapt data collection (KYC, compliance) without you shipping app code changes.

Dynamic forms are server-driven forms that enable flexible and adaptive data collection. They allow the Enterprise API Suite to evolve form requirements — such as adding new fields for regulatory compliance — without requiring you to update your application code.

## What are dynamic forms?

Dynamic forms are defined by API responses rather than hardcoded in your application. They consist of two parts:

* **JSON Schema**: Defines the data structure and validation rules
* **UI Schema**: Defines the layout, controls, and conditional behavior

This approach is powered by [JSON Forms](https://jsonforms.io/), an open standard for describing forms in a platform-agnostic way.

## Why dynamic forms?

<CardGroup cols={2}>
  <Card title="Regulatory Adaptability" icon="scale-balanced">
    Forms automatically adapt to changing compliance requirements without app updates.
  </Card>

  <Card title="Progressive Disclosure" icon="layer-group">
    Questions are revealed based on previous answers, creating a guided experience.
  </Card>

  <Card title="Consistent Experience" icon="equals">
    Standardized form definitions ensure consistent behavior across platforms.
  </Card>

  <Card title="Future-Proof Integration" icon="shield-check">
    Your integration remains compliant as form requirements are updated.
  </Card>
</CardGroup>

## How dynamic forms work

When an API response includes a dynamic form, you receive a `schema` and a `uiSchema`. Your application uses these to render the form dynamically.

### Progressive disclosure

Forms support **progressive disclosure** — the ability to reveal additional fields based on previous answers. When you submit partial data, the API may return an updated `schema` and `uiSchema` with new questions influenced by your submission.

This creates a conversational flow where users only see relevant questions, improving the experience and data quality.

### Prefilled forms

Some forms can be rendered with previously submitted data, allowing users to review and update their information. In these cases, you receive the `schema` and `uiSchema` alongside the existing data, which you can use to prefill the form.

## Where you can find dynamic forms

<AccordionGroup>
  <Accordion title="KYC Processes" icon="user-check">
    Several KYC processes use dynamic forms to collect user information. The specific fields required may vary based on the user's country of residence.

    | Process                                                                                       | Description                                               |
    | --------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
    | [Customer due diligence](/rest-apis/core-api/kyc/update-customer-due-diligence)               | Financial information and risk assessment                 |
    | [Tax details](/rest-apis/core-api/kyc/update-tax-details)                                     | Tax residency and identification numbers                  |
    | [Crypto risk assessment](/rest-apis/core-api/kyc/update-crypto-risk-assessment)               | Knowledge assessment for crypto risks (GB residents only) |
    | [Self-categorization statement](/rest-apis/core-api/kyc/update-self-categorization-statement) | Investor profile classification (GB residents only)       |

    For more details on KYC processes, see the [KYC Introduction](/rest-apis/core-api/kyc/introduction).
  </Accordion>
</AccordionGroup>

## Implementation approaches

You can implement dynamic form rendering using an official JSON Forms library or by building your own custom renderer. See [Rendering](./rendering) for detailed guidance on both approaches.

## Next steps

<CardGroup cols={2}>
  <Card title="Schema Reference" icon="database" href="./schema">
    Learn about JSON Schema types and validation.
  </Card>

  <Card title="UI Schema Reference" icon="table-layout" href="./ui-schema">
    Explore layouts, controls, and rules.
  </Card>
</CardGroup>
