Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 104 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Tonic Fabricate

Loading...

Loading...

Loading...

Fabricate account

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Data Agent databases

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Rule-based databases

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Rule-based tables and columns

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

SQL tables

Loading...

Loading...

Workspaces

Loading...

Loading...

Database mock API

Loading...

Loading...

Loading...

Loading...

Fabricate API and CLI

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Fabricate pricing and AI usage

Learn more about how to calculate and track the cost to use Fabricate.

Fabricate cost calculation and billing How Fabricate costs are calculated, and how accounts are billed.

AI usage cost calculation Overview and examples of how Fabricate calculates AI usage cost.

Monitor AI cost Track the cost for a Data Agent conversation and for the current billing cycle.

Tutorial videos

Use these videos to learn more about how to use Tonic Fabricate.

Getting started with Fabricate

Fabricate overview

Overview of Fabricate and its features

Foreign key relationships

Deriving a column from another column

Using the AI generator

Creating JSON data

Using the Markov Chain generator

Create a mock API for a database

Fabricate workflows

Fabricate provides the following options to define and configure a database.

  • Use the Data Agent to create a one-time set of data. Free and Plus users must always use the Data Agent.

  • Enterprise users can also create a rule-based database to define a repeatable set of rules to generate sets of data.

Data Agent databases

The Fabricate Data Agent is essentially an AI chat interface that you use to define a set of data.

When you create a Data Agent database, the initial definition, as well as changes to the database structure and data, are accomplished through the chat.

You can tell the chat to add tables and columns, and provide guidance for the data values and table relationships.

You can also use the chat to answer questions about the data.

When you're ready to use the data, you can export it to a database or file format.

Rule-based databases

Requires an Enterprise license.

For a rule-based database, you manually create and configure the tables and columns, with some AI assistance. A rule-based database defines rules to generate a set of data.

Where a Data Agent database focuses on creating the data itself, a rule-based database is more about configuring the rules to use to generate the data.

At a high level, the workflow for a rule-based database is:

Create a database

The first step is to create the database in Fabricate.

You can , or .

Define the database

Next, you define the structure of the database, which includes:

  • The tables in the database.

  • The columns in each table.

  • Relationships between the tables.

When you create a database, you can provide a SQL script that sets up the database schema.

You can also . When you add a table, to define the table columns, you can:

  • Provide example data

  • Provide a description for the Fabricate AI to use to create it - "A users table with names, addresses, email addresses, and telephone numbers"

  • Provide a SQL script with the table definition

For each table, you . When you create a table, Fabricate makes a first pass at assigning generators.

You can then adjust the column settings as needed.

As you change the configuration, Fabricate automatically updates the generated data. You can also .

Export the data

Finally, when you're ready to use the data, you can .

You can export the data to a set of files, or use it to populate an existing database.

Tonic Fabricate User Guide

Tonic Fabricate allows you to create data from scratch.

For example, maybe you are working on a new feature or product where there is no existing data that uses the new schema. Or you need data for testing or development, but don't have any access to data that you can use.

In Fabricate, you can use the AI-based Data Agent chat to quickly define and refine a set of data.

Enterprise customers can also create rule-based databases, where they define and configure the structure of a database, its tables, and the table columns.

Fabricate can produce a range of value types across multiple categories and industries. You can even enhance the generated data with real data that you upload.

And when you're ready to use the data, you can export it in a variety of formats, including unstructured files that are populated from the data.

Getting started with Fabricate

To create an account, can use Google, GitHub, or Microsoft Office, or specify an email address and configure a password.

Your Fabricate account is initially created under the free license plan. You can then upgrade to a paid plan. For more information, go to .

You are also prompted to create your first database.

Creating your account

To get started, go to .

start a completely new database
clone an existing database
add tables manually
configure how to generate the data in each column
provide a set of static data to include
export it from the database
Using an existing account

One option is to tie your Fabricate account to an existing Google, GitHub, or Microsoft account.

To use an existing account:

  1. Click the account type.

  2. Provide the account information.

Registering with an email address and password

You can also register with an email address and create a Fabricate password.

  1. In the Name field, provide the name to use for the account.

  2. In the Email field, provide the email address to use for the account.

  3. In the Password field, create your Fabricate password. Fabricate passwords must contain at least 6 characters.

  4. Click Sign Up.

  5. Fabricate sends you an email message for you to confirm your email address. After you confirm your email address, you can log in to Fabricate.

Creating your first database

When you create a Fabricate account, Fabricate automatically creates your first workspace. The workspace uses your account name.

You can then view or skip the Fabricate walkthrough. The walkthrough steps through the Fabricate features and options.

Fabricate creates a Data Agent database called Default. You can then use the Data Agent to start to populate and configure the database.

Fabricate license plans
https://fabricate.tonic.ai/
Create My Account page to create a Fabricate account

Fabricate workflows Overviews of the flows for Data Agent and rule-based databases.

Get started Create a Fabricate account and start your first database.

Use the Fabricate API Use the API to manage databases and generate data.

About Data Agent databases

The Fabricate Data Agent provides an AI chat interface to create and configure a database. It allows you to quickly create a single set of data that you can export to a database or files.

With a Data Agent database, the database creation as well as all changes to the database definition and data go through the Data Agent.

You can, for example, to start, you might tell the Data Agent to Create a database of transaction records that are linked to customer and product records.

The Data Agent asks questions to clarify the data to create. For example, it can ask for the number of customers or products, or how many orders to create for each customer.

Based on the initial results, you can provide additional prompts to adjust the data to fit your needs.

In response to the prompts, the Data Agent generates code to implement the requested change, whether it's to add a missing column or to adjust the types of values used to populate a column.

Data Agent databases have additional viewing and editing options for the generated data. You can manually edit specific values.

How cost is calculated and billed

The cost for a customer to use Tonic Fabricate combines the basic access fee with the cost to make the LLM calls that are needed for AI features.

Elements of the Fabricate cost

Basic access

This is the flat monthly amount that is charged to Plus and Enterprise accounts.

It provides overall access to the application and its features.

AI usage and billing

Fabricate's AI features, such as the Data Agent, require calls to a large language model (LLM).

Fabricate uses Anthropic as its LLM provider for the Data Agent. Anthropic charges Tonic.ai for these calls to the Anthropic API.

The incurred cost is based on the volume and complexity of the processed data.

While the technical AI usage is measured in tokens, Tonic.ai tracks and bills usage in dollars.

Each account is granted a monthly AI usage allowance to cover standard AI activity.

If an account exceeds the monthly allowance:

  • Free accounts - Fabricate pauses access to AI features until the allowance resets at the start of the next month.

  • Plus accounts - Access to AI features is not interrupted. At the end of the month, Tonic.ai bills for the AI usage that exceeded the allowance.

  • Enterprise accounts - Access to AI features is not interrupted. Tonic.ai bills calculates and bills quarterly for the AI usage that exceeded the allowance. Alternatively, Enterprise accounts can . If they provide their own key, then Tonic.ai does not charge them for AI usage overages.

The base charge for the additional AI usage is calculated as follows:

(Anthropic cost per token) x (Number of tokens)

The cost per token is based on the publicly listed API prices for .

Tonic.ai also charges a token processing fee of $0.50 for each 1 million tokens.

How the billing cycles work

Here is how the billing cycles work for each license plan.

Free plan

The Free plan does not allow any AI usage overages. Each month, Fabricate resets the AI usage allowance based on the account start date.

For example, a Free account starts on October 14.

If the account uses up its monthly allowance before November 13th, then AI features are paused until November 14, when the AI usage allowance is reset. Fabricate resets the AI usage allowance every month on the 14th.

Plus plan

For the Plus plan, the billing cycle is one month. Every month, the AI usage allowance is reset and the account is billed based on the account start date.

For example, a Plus account starts on November 15. On December 15, the AI usage allowance is reset, and the account is charged for the access fee and for any AI usage overage for between November 15 and December 14.

Every month on the 15th, the AI usage allowance is reset and the account is billed for the previous month.

Enterprise plan

For the Enterprise plan, the platform fee is billed annually. The billing cycle for the AI usage overage is quarterly, and is based on calendar quarters. The monthly AI usage allowance is lined up to the calendar month.

For example, an account starts on October 21st.

On November 1, December 1, and January 1, Fabricate resets the monthly AI usage allowance.

Shortly after January 1, the account is charged for the AI usage overage for October through December.

The next AI usage bill is sent after March 31, and covers the AI usage overage for January through March.

Fabricate license plans

New accounts use the Free plan. Fabricate also provides a Plus plan and an Enterprise plan.

As of November 12, 2025, new accounts on the Free or Plus plan are limited to Data Agent databases. They cannot create rule-based databases.

Existing Free and Plus plan users continue to have access to create and manage rule-based databases, using the previous limitations:

  • Tables per account: 10 for Free, 20 for Plus

  • Databases per account: 10 for Free, 20 for Plus

  • Rows per largest table: 5,000 for Free, 15,000 for Plus

  • API calls per day per account: 10,000 for Free and Plus

Overview of the license plans

Here is an overview of the available license plans. For more information, go to .

Free
Plus
Enterprise

Upgrading from the Free plan

To upgrade from the Free license plan to the Plus plan, click the Upgrade Now option at the bottom of the Fabricate application. You are prompted to provide a credit card for payment.

To upgrade from the Free license plan to the Enterprise plan, .

Importing static data as a new table

You can import a CSV, JSON, or JSONL file as a new table in a Data Agent database.

For example, you might use this option to provide data for the Data Agent to use as a guide:

Create a table that uses the same fields as ExampleStaticData. Generate a new set of values for the names and addresses.

To import a file:

  1. In the database heading, click Import.

  2. On the Import Data panel, either:

Generating unstructured files from a Data Agent database

The Data Agent is also able to use values from a database to populate unstructured files that you can use elsewhere. It can generate:

  • PDFs

  • Word files (.docx)

  • PowerPoint files (.pptx)

  • Drag and drop the file on the panel.

  • Click Choose File, then search for and select the file.

  • Click Import Data.

  • provide their own Anthropic or Amazon Bedrock LLM key
    Claude Sonnet 4.5 and Haiku 4.5
    Example billing cycle for a Free account
    Example billing cycle for a Plus account
    Example billing cycle for an Enterprise account

    Supported database types

    Fabricate can generate rule-based databases of the following types:

    • MySQL

    • PostgreSQL

    • Databricks

    • Oracle (Enterprise plan only)

    • Microsoft SQL Server (Enterprise plan only)

    • MongoDB

    • SQLite

    • CSV - Produces a set of CSV files.

    • JSON - Produces a set of JSON files.

    • XML - Produces a set of XML files.

    Authentication for the API

    To use the Fabricate API, you must have a Fabricate API key.

    All requests to the Fabricate API must include an authorization header with the value:

    Bearer <your_api_key>

    Workspaces per account

    1

    1

    Unlimited

    Users per account

    1

    1

    Unlimited

    Role-based access

    No

    No

    Yes

    Limited

    Limited

    Unlimited

    Database creation method

    Data Agent

    Data Agent

    Data Agent Rule-based

    Pricing

    Free

    Flat fee per month

    Custom

    AI usage

    Limited to a set amount per month.

    Charged for usage over a set amount per month.

    Fabricate pricing and AI usage
    contact Tonic.ai sales

    Charged for usage over a set amount per month.

    Email messages (.eml)

    For example, you use the Data Agent to create a database of online retail transactions. You can prompt the Data Agent to create example order confirmation email messages from that data.

    Or from a database of business-to-business transactions, you can prompt the Data Agent to generate a set of example invoices in PDF format.

    In addition to the general format, you can also provide guidance as to the file size.

    As always, the Data Agent can ask you for any additional details it needs to produce the requested output.

    When it finishes, it provides a link to download the files.

    Prompt and results to generate a PDF file that uses data from the database

    Managing table columns

    You can add columns to and remove columns from a rule-based database table. You configure how Fabricate populates the column data.

    Languages

    The following generators produce values related to spoken languages.

    For information about the API data models for these generators, go to Languages in the column attributes.

    Language

    Populates the column with the name of a spoken language. For example, French, Spanish, English.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Language Code

    Populates the column with the 2-character code for a spoken language. For example, fr, es, en.

    You can configure a .

    You can also configure a to link the column to other columns.

    Vehicles

    The following generators produce values related to motor vehicles.

    For information about the API data models for these generators, go to Vehicles in the column attributes.

    Car Make

    Populates the column with the make of a car. For example, Ford or Honda.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Car Model

    Populates the column with the model of a car. For example, Mustang or Accord.

    You can configure a .

    You can also configure a to link the column to other columns.

    Car Year

    Populates the column with a year.

    You can configure a .

    You can also configure a to link the column to other columns.

    Adding and removing columns

    Adding a column to a table

    To add a column to a table:

    1. In the table heading, click Add Column.

    2. On the New Column panel:

      1. Set the column name.

      2. Select and configure the column generator.

    For information on column configuration, go to .

    For information about the available generators, go to .

    Removing a column from a table

    Before you delete a column, make sure that it is not being used in the configuration of another column.

    To delete a column:

    1. In the column heading, click the settings icon.

    2. On the column settings panel, click Delete.

    3. On the confirmation panel, click Delete Column.

    Natural science

    The following generators produce values related to natural science.

    For more information about these generators and how to configure them in the application, go to Natural science in the generator reference.

    Animal Common Name

    Populates the column with the name of an animal. For example, dog or cat.

    Uses the General column configuration.

    Animal Scientific Name

    Populates the column with the scientific name of an animal. For example, canis lupus familaris or felis catus.

    Uses the .

    Plant Common Name

    Populates the column with the name of a plant. For example, dandelion.

    Uses the .

    Plant Family

    Populates the column with the name of a plant family. For example, asteraceae.

    Uses the .

    Plant Scientific Name

    Populates the column with the scientific name of a plant. For example, taraxacum officinale.

    Uses the .

    Creating and managing Data Agent databases

    Creating a Data Agent database

    To create a Data Agent database:

    1. Click the database dropdown at the top right, then click New Database.

    Using the Data Agent to configure the database

    Viewing the SQL or JavaScript for a Data Agent action

    From the chat, flags SQL and JavaScript that it creates. Can view the content.

    To complete an action to the database, the Data Agent generates either SQL or JavaScript.

    In the chat window, the Data Agent uses icons to identify actions that generated SQL or JavaScript.

    To view the content of the SQL or JavaScript, click the dropdown icon for the action. To copy the SQL or JavaScript, click the copy icon.

    Telephone numbers and email addresses

    The following generators produce values for telephone numbers and email addresses.

    For information about the API data models for these generators, go to in the column attributes.

    Country Phone Code (Global)

    Populates the column with a country telephone code from anywhere around the world.

    You can configure a .

    You can also configure a to link the column to other columns.

    Networks and files

    The following generators produce values related to network locations and files.

    For information about the API data models for these generators, go to in the column attributes.

    File Type Extension

    Populates the column with a file extension. For example, .txt or .docx.

    You can configure a .

    You can also configure a to link the column to other columns.

    Defining a mock API

    For a rule-based database, you define the mock API on the database API tab.

    By default, the API tab contains a commented-out example mock API definition.

    Populating the mock API definition directly

    One option is to enter the mock API definition directly in the definition field.

    For information on the API syntax, go to .

    Creating and managing SQL tables

    About SQL tables

    Fabricate SQL tables allow you compose virtual tables from data in other tables. They are particularly useful for:

    • Denormalization

    Movies

    The following generators produce values related to movies.

    For information about the API data models for these generators, go to in the column attributes.

    Movie Genres

    Populates the column with a movie genre. For example, Horror, Romantic Comedy.

    You can configure a .

    You can also configure a to link the column to other columns.

    General column configuration

    The following general column configuration properties apply to most generators.

    For information on about the general properties and how they are set in the application, go to .

    Constraint attributes

    Each constraint object can contain the following attributes:

    Job-related values

    Job Area

    Produces a value that describes the area of expertise for a job. For example, Security or Quality.

    Job Descriptor

    Attaching static data to a table

    For each table, you can upload a .csv file that contains data for the table. The uploaded data can either replace the current data or be added to the current data.

    You can also .

    The uploaded data remains permanently in place. It is not affected when you regenerate the table data.

    For example, having static data can be useful when you want to run tests and want to be able to use specific values.

    To attach static data to a table:

    1. In the table heading, click Attach Data.

    Natural science

    The following generators produce values related to natural science.

    For information about the API data models for these generators, go to in the column attributes.

    Animal Common Name

    Populates the column with the name of an animal. For example, dog or cat.

    You can configure a .

    You can also configure a to link the column to other columns.

    Education

    The following generators produce values related to schools and education.

    For information about the API data models for these generators, go to in the column attributes.

    University Country Code

    Populates the column with the 2-character country code for the university location. For example, ES, FR, US.

    You can configure a .

    You can also configure a to link the column to other columns.

    Configuring database variables

    You can define variables to use in SQL and row count expressions

    You configure variables from the Settings tab of a rule-based database. To display the Settings tab, click the database name.

    Adding a variable

    To add a variable:

    1. Click

    Unstructured Data

    The Unstructured Data generator is a premium feature. Free plan users have limited .

    Uses an LLM to populate a column with unstructured data, such as text or JSON, that can include values from other columns in the table.

    For more information about the Unstructured Data generator and how to configure it in the application, go to .

    Managing Data Agent chats and shared reference

    Data Agent chats have a size limit. As you interact with the Data Agent, Fabricate updates the percentage of the size limit that you have used.

    As you get closer to the limit, the response time can slow down.

    You can create multiple chats. For example, for a more complex database, you might use different chats to manage different areas of the data.

    Viewing and updating the shared reference for Data Agent chats

    Every chat is independent of the other chats. It does not have access to all of the context from any of the other chats.

    Viewing and updating the database DDL

    When you create a rule-based database for a database type other than XML or JSON, the database details include a DDL tab. If you used a SQL DDL script to create the database, then Fabricate populates the DDL tab with that script.

    From the DDL tab, you can update the DDL.

    When you update the DDL, you also choose whether Fabricate automatically changes the database schema to match the new DDL. When Fabricate updates the database, it adds and removes tables and columns. It does not touch columns and tables that you exclude from the database export. For more information, go to and .

    To change the DDL:

    1. Click Update DDL.

    Movies

    The following generators produce values related to movies.

    For more information about these generators and how to configure them in the application, go to in the generator reference.

    Movie Genres

    Populates the column with a movie genre. For example, Horror, Romantic Comedy.

    Uses the .

    Data model

    The Fabricate API uses the following data model.

    Job-related values

    Job Area

    Produces a value that describes the area of expertise for a job. For example, Security or Quality.

    Job Descriptor

    Produces a value that describes a general descriptor of the job hierarchy level. For example, Senior or Lead.

    Vehicles

    The following generators produce values related to motor vehicles.

    For more information about these generators and how to configure them in the application, go to in the generator reference.

    Car Make

    Populates the column with the make of a car. For example, Ford or Honda.

    Uses the .

    Languages

    The following generators produce values related to spoken languages.

    For more information about these generators and how to configure them in the application, go to in the generator reference.

    Language

    Populates the column with the name of a spoken language. For example, French, Spanish, English.

    Uses the .

    Add Variable
    .
  • In the Name field, provide the name of the variable.

  • In the Value field, provide the value of the variable.

  • Click the save icon.

  • Editing a variable definition

    To edit a variable definition:

    1. Click the edit icon for the variable.

    2. Update the name or value.

    3. Click the save icon.

    Removing a variable

    To remove a variable, click its delete icon.

    Referring to a variable

    To refer to a variable in a SQL or row count expression, use $VARIABLE_NAME.

    Job Title

    Produces a job title. For example, Senior Security Engineer or Principal Program Manager.

    Job Type

    Produces a value that describes the type of job or type of work that the job entails. For example, Engineer or Manager.

    Add and remove columns Add columns to and remove columns from a table.

    Configure a column Select a generator and provide details about how to populate the column.

    Generator summary Alphabetical list of the available generators, linked to the generator reference and the API data model.

    Generator reference Information about the available generators to use to populate column date. The generators are grouped into categories.

    Fabricate custom SQLite functions Use these functions to generate data.

    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    Configuring a column
    Generator reference
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    Supported data export formats
    Country Phone Code (US)

    Populates the column with the country telephone code for the United States.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Email Address

    Populates the column with an email address.

    If the table includes first name and last name columns, then the email address is automatically derived from the those columns. For example, [email protected].

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Phone Number (Global)

    Populates the column with a telephone number from anywhere in the world.

    From the Format dropdown list, select the format to use for the generated values.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Phone Number (US)

    Populates the column with a telephone number from the United States.

    From the Format dropdown list, select the format to use for the generated values.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Telephone numbers and email addresses
    weighted distribution of the values
    group key
    File Type MIME Type

    Populates the column with a file MIME type. For example, text/plain or image/jpeg.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    IP Address

    Populates the column with an IP address. For example, 192.168.1.100 or 2001:0db8:0000:0000:0000:0000:1a2b:3c4d.

    From the Version dropdown list, select whether to generate IPv4 or IPv6 addresses.

    MAC Address

    Populates the column with a MAC address. For example, 00:1A:2B:3C:4D:5E.

    Project Name

    Populates the column with the name of a project.

    To append a random number to the end of the name, check the Append a random number to the project name checkbox.

    URL

    Populates the column with a URL. For example, https://example.com.

    Under Include, check the checkbox for each component to include.

    User Agent

    Populates the column with a user agent value. For example, Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0.

    Networks and files
    weighted distribution of the values
    group key
    Movie Title

    Populates the column with the title of a movie. For example, Gone With the Wind.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Movies
    weighted distribution of the values
    group key
    Animal Scientific Name

    Populates the column with the scientific name of an animal. For example, canis lupus familaris or felis catus.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Plant Common Name

    Populates the column with the name of a plant. For example, dandelion.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Plant Family

    Populates the column with the name of a plant family. For example, asteraceae.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Plant Scientific Name

    Populates the column with the scientific name of a plant. For example, taraxacum officinale.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Natural science
    weighted distribution of the values
    group key
    University Name

    Populates the column with the name of a university. For example, Harvard.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    University URL

    Populates the column with the URL for the university website. For example, harvard.edu.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Education
    weighted distribution of the values
    group key
    Movie Title

    Populates the column with the title of a movie. For example, Gone With the Wind.

    Uses the General column configuration.

    Movies
    General column configuration
    Car Model

    Populates the column with the model of a car. For example, Mustang or Accord.

    Uses the General column configuration.

    Car Year

    Populates the column with a year.

    Uses the General column configuration.

    Vehicles
    General column configuration
    Language Code

    Populates the column with the 2-character code for a spoken language. For example, fr, es, en.

    Uses the General column configuration.

    Languages
    General column configuration

    Database attributes

    Entity (table) attributes

    Constraint attributes

    Column attributes

    {
      "name": string, // Name of the column.
      "data_type": string,  // Database data type of the column values.
      "generator": string, // The name of the generator.
      "conditions": [  // Weighted distribution configuration.
                       // Available for a smaller set of generators
        {
          "subset_field": string, // Field for the weight condition
          "operator": "is_one_of"|"is_not_one_of"|"is_not_null",
                      // Comparison operator for the weight condition
          "subset_value": string  // Comparison value for the weight condition
          "weight": integer // The weight value
        }
      ],
      "default_weight": integer // Default weight if conditions aren't met
      "group_key": string,  // Group key to link related columns.
      "percent_null": integer,  // Percent of records to be null.
      "virtual": boolean,  // Whether to exclude the column from exported data.
      // Advanced options
      "primary_key": boolean, //Whether the column is a primary key.
      "index": boolean,  // Whether to index the column.
      "seed": string,  // The seed for random value generation.
                       // Setting this freezes the column until the seed changes.
      "postprocessing_sql": string, // SQL script to run after data generation.
    }
    Configuring a column
    {
      "constraint_type": "unique" | "not-equal",
      "fields": string[]
    }

    constraint_type

    The type of constraint. Either unique or not-equal.

    fields

    The names of the fields that the constraint applies to.

    For the list of field attributes, go to Constraint attributes.

    { 
      "name": string,
      "data_type": string,
      "generator": "Unstructured Data",
      // Generator-specific fields
      "unstructured_data_type": "free_text"|"conversation"|"json", // Content type
      "unstructured_data_prompt": text, // Describes the content to generate
      // -------------------------------------------------------------------------
      // Conversation configuration
      "unstructured_data_persona_1": text, // Description of the first persona
      "unstructured_data_persona_2": text, // Description of the second persona
      // --------------------------------------------------------------------------
      // JSON configuration
      "unstructured_data_schema": text, // The JSON schema to use when        
                                        // unstructured_data_format is "json"
      // ------------------------------------------------------------------------
      "unstructured_data_temperature": decimal // Randomness factor for the output
      "unstructured_data_format": "plain_text"|"json", // Output format
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    access to premium features
    Unstructured Data
    Produces a value that describes a general descriptor of the job hierarchy level. For example, Senior or Lead.

    Job Title

    Produces a job title. For example, Senior Security Engineer or Principal Program Manager.

    Job Type

    Produces a value that describes the type of job or type of work that the job entails. For example, Engineer or Manager.

    { 
      "name": string,
      "data_type": string,
      "generator": "Job Area",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Job Descriptor",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Job Title",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Job Type",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    For Enterprise users, on the database creation page, click Data Agent database. Free and Plus users go directly to the new database panel.
  • On the new database panel, in the Database Name field, provide a name for the database, then click Create Database. Fabricate displays a field for you to get started.

  • Database details for a new Data Agent database
    1. Provide an initial prompt to tell the Data Agent about the data to create. The prompt might be a simple instruction. For example: Create a database of consumer transactions. The database includes transactions, customers, and products. You might also paste in a specific schema for the Data Agent to use. For example: Create a database of consumer transactions that uses the following schema. You can also upload files to provide information for the Data Agent to use. For example, instead of pasting in the schema, you can upload a file, drag and drop the file to the Data Agent, or click the attachment icon. Examples of schema files include:

      • SQL DDL scripts

      • prisma.schema scripts

      • Swagger YAML API definitions

    2. The Data Agent analyzes the request, and if needed asks clarifying questions about the data values, the volume of data, and the relationships between the tables. When you send the initial prompt, the Data Agent chat moves to the right side of the page.

    3. You can provide answers to further shape the data, and optionally tell the Data Agent to use its own judgment for some elements of the data. For example: Create 70 customers. Each customer has 1-3 orders. Each order has 1-5 products. You can choose the distribution of the customers throughout the United States.

    4. When it has enough information to work from, the Data Agent creates the database structure and then populates the database. It also provides a summary of the results.

    Selecting a Data Agent database to manage

    To select a Data Agent database to manage:

    1. Click the database dropdown at the top right. For Enterprise users, the list of databases can include both rule-based and Data Agent databases.

    Database dropdown list to select a database to manage
    1. In the dropdown list, select the database.

    Cloning a Data Agent database

    You can create a new database as a clone of an existing database. For example, you might want a similar set of data that uses international names and addresses.

    When you clone a Data Agent database, you choose whether to preserve the chat history from the original database. By default, the history is not preserved.

    To clone a Data Agent database.

    1. In the table list, hover over the database name.

    Edit, clone, and delete icons for a Data Agent database
    1. Click the copy icon.

    2. On the Clone Database panel:

      1. In the New Database Name field, provide the name for the new database.

      2. To include the chat history from the original database, check the Include chat history checkbox.

      3. Click Clone Database.

    Renaming a Data Agent database

    Click the edit icon next to the database name above the table list.

    To change the name of a Data Agent database:

    1. In the table list, hover over the database name.

    Edit, clone, and delete icons for a Data Agent database
    1. Click the edit icon.

    2. In the New Database Name field, provide the new name for the database.

    3. Click Rename Database.

    Deleting a Data Agent database

    Click the delete icon next to the database name above the table list.

    To delete a Data Agent database.

    1. In the table list, hover over the database name.

    Edit, clone, and delete icons for a Data Agent database
    1. Click the delete icon.

    2. On the confirmation panel, click Delete Database.

    Displaying the generated JavaScript for a step

    Prompting the Data Agent to change the database

    After you create the initial version of a Data Agent database, you use the Data Agent to make adjustments to the database structure and the data values.

    For example, the Data Agent might create email addresses that all use a single fake email domain. For more realistic data, you can prompt the Data Agent to change the email addresses to use real personal and commercial email domains.

    Or you might ask the Data Agent to add new columns or tables.

    Uploading files to the Data Agent

    To provide information for the Data Agent to work from, you can upload files.

    A file might, for example, contain the schema to use (Add a table that uses the attached schema). Examples of schema files include:

    • SQL DDL scripts

    • prisma.schema scripts

    • Swagger YAML API definitions

    Or it might contain a set of example values (Add a job title column that uses the attached list of values).

    You can also upload .jpg and .png images. For example, you might upload an image to show the structure of an invoice form that the Data Agent populates from the data.

    To upload files to the Data Agent, either:

    • Drag and drop the files to the Data Agent.

    • Click the attachment icon, then search for and select the files.

    Data Agent chat prompt with the attachment icon highlighted

    Copy the text of a Data Agent response

    You can copy the content of any Data Agent response. For example, you might want to use the Data Agent summary of its actions in another document.

    To copy any response, hover over the response text, then click the copy icon at the bottom right of the response.

    Copy option for a Data Agent response

    Reverting a change

    If a change produces unexpected results, you can provide another prompt to fix the issue.

    You can also revert a change and then try again.

    To revert a change, in the Data Agent chat:

    1. Hover over the prompt that initiated the change.

    Revert option for an action to a Data Agent database
    1. Click the revert icon.

    2. Confirm that you want to revert the change. The Data Agent reverts the change. It redisplays the prompt so that you can make adjustments to it.

    Displaying the generated SQL for a step
    After you populate the definition, to save it, click Save.

    Using Fabricate AI to generate the mock API definition

    To use the Fabricate AI to generate the mock API definition:

    1. Click Compose with AI.

    2. On the Compose with API panel, provide a description of the calls to include in the mock API, then click Generate.

    3. To add the generated results to the mock API, click Add to API.

    Compose with API panel with calls generated by AI based on descriptions
    1. On the API tab, to save the new definition content, click Save.

    Tracking the change history for the mock API definition

    Every time to save the mock API definition, Fabricate adds an entry to the definition history.

    You can view the changes for each saved version, and revert to a previous version.

    Displaying the change history

    On the API tab, to display the change history, click History.

    The History panel lists the versions in reverse chronological order, with the current version at the top.

    When you click a version, Fabricate shows the differences from the previous version, including new and removed content.

    Change history for a mock API definition

    Reverting to a previous version

    To revert the mock API definition to a previous version:

    1. In the version list, click the version to revert to.

    2. Click Revert to This Version.

    Mock API reference
    Default view of the API tab for a database
    Aggregation
  • Subsetting

  • JSON objects and arrays

  • When you export a rule-based database, SQL tables are exported as concrete tables.

    Adding a SQL table

    To add a SQL table to a rule-based database:

    1. In the database heading, click Add Table(s), then click From SQL query.

    2. On the Add Table From SQL Query panel, in the Name field, provide a name for the SQL table.

    3. Click Create Table.

    The SQL table is added to the tables list for the database.

    Table list with a SQL table

    The details page for the SQL table is displayed.

    Configuring a SQL table

    Defining the SQL table

    To define the SQL table, in the query text area, provide the SQLite query to use. The SQL table definition accepts any valid SQLite query.

    Configuring other SQL table settings

    To display the settings panel for the SQL table, in the SQL table heading, click the settings icon.

    The SQL table settings contain most of the same options as regular tables, including:

    • Constraints - For more information, go to Configuring constraints for the table.

    • Whether to include the SQL table in the export - For more information, go to Indicating whether to include the table in the export.

    • A seed to use for the SQL table - For more information, go to Setting a table-wide seed value.

    Regenerating data for a SQL table

    To regenerate the SQL table data based on the current SQL table definition, in the SQL table heading, click the regenerate icon.

    Deleting a SQL table

    To delete a SQL table, in the SQL table header, click the delete icon.

    On the Attach Data panel, to search for and select the file, click Choose File. Make sure that the file uses the same column names and contains data in the appropriate formats.
  • From the dropdown list:

    1. To add the data to the existing data, select append to the generated data.

    2. To replace the current data, select replace the existing data.

  • Click Attach Data.

  • When you append the data, Fabricate indicates that the appended data is included when you export the data.

    Table with appended data

    When you replace the data, Fabricate indicates that the table data came from a file, and marks all of the columns as having come from the file. It also updates any foreign keys to the table to use the replacement records.

    Table with replaced records
    use an AI prompt to generate a table of static data
    However, all of the chats have access to a shared reference for the database. To display the shared reference information, in the database heading, click Memory.

    The Memory panel displays a summary of the rules that the Data Agent used to generate the data. All chats refer to these rules as they perform actions. For example, if the shared reference indicates that all of the addresses are in the United States, the Data Agent won't generate addresses outside of that.

    Memory panel for a Data Agent database

    To affect how the Data Agent performs future actions, you can adjust the shared reference.

    For example, the shared reference might indicate that the data contains orders from the previous 3 months. You might expand that to 4 months. The next time it generates new data, the Data Agent produces data for the past 4 months.

    After you change the shared reference, click Save Memory.

    Creating a new chat

    To start a new chat, at the top of the Data Agent, click the + icon.

    + icon to create a new Data Agent chat

    Deleting a chat

    To delete a chat:

    1. Hover over the chat name.

    2. Click the delete icon.

    Delete icon for a Data Agent chat
    Data Agent usage tooltip with the percentage of the remaining size limit
    On the Update DDL panel, paste the new DDL into the text area.
  • By default, when you update the DDL, Fabricate updates the database to match it. To only save the new DDL, but not use it to update the database, check the Don't make any changes to my database checkbox.

  • Optionally, under More options, in the AI Hints field, provide additional hints about how to use the revised DDL to update the database. For example, you might suggest generators to use for new columns or limits on column values.

  • Click Apply.

  • Note that Fabricate does not automatically update the DDL to reflect manual changes to the database schema. For example, when you add or remove tables or columns, Fabricate does not update the DDL.

    Indicating whether to include the table in the export

    Managing your Fabricate account and profile

    Managing your account

    When you sign up for Fabricate, it creates a Fabricate account and makes you the owner of the account.

    To manage your account, click the user menu, then click My Account.

    User menu

    From the My Account page,

    By default, the account name is set to the name of the person who created it.

    To use a different name for the account:

    1. Under Account Info, in the Account Name field, provide the new account name.

    2. Click Save Changes.

    Account owners can do the following:

    • Change the current license plan. For more information, go to .

    • Manage account users. Having multiple users in an account requires a license plan other than the free plan. For more information, go to .

    • Create and manage API keys to use to authenticate API requests. For more information, go to .

    • For the cloud application, configure the access token and models to use for the .

    Managing your personal profile

    Your personal profile contains specific information about you as a user.

    To view your profile information, click the user menu, then click My Profile.

    From the My Profile page, you can:

    • Update your name and email address.

    • Change your Fabricate password.

    Changing your profile name and email address

    On the My Profile page, under My Details:

    1. In the Name field, provide an updated name for your profile.

    2. In the Email field, provide an updated email address for your profile.

    3. Click Save Changes.

    Changing your Fabricate password

    On the My Profile page, under Reset Password:

    1. In the Current Password field, type your current Fabricate password.

    2. In the Password field, type the new password.

    3. In the Confirm Password field, type the password again.

    4. Click Save Changes.

    Deleting your account

    When you delete your account, Fabricate deletes all of the users, workspaces, databases, and data that are associated with the account.

    From the My Account page, to delete your Fabricate account:

    1. Under Delete Account, check the checkbox to confirm that you understand that you cannot undo the deletion. Until you check the checkbox, the Delete Account button remains disabled.

    1. Click Delete Account.

    Adding a table to a database

    To add a table to a rule-based database, you can:

    • Create a table from a schema definition

    • Clone an existing table

    • Import data from a .csv file

    • Generate a table of static data based on an AI prompt

    • Create a SQL table based on data in other tables. For more information, go to .

    Creating a table from a schema definition

    To create a table:

    1. Click Add Table(s), then click From schema definition.

    2. On the Add Table(s) panel, in the Name field, provide a name for the table.

    3. Optionally, in the Schema Definition text area, provide one of the following to define the table schema:

    Cloning an existing table

    You can also create a clone of an existing table. The clone is created with the same columns and data as the original table. You can then adjust the table configuration.

    To add a table that is a clone of an existing table:

    1. Display the table that you want to clone.

    2. Click Clone Table.

    3. On the clone panel, in the New Table Name field, provide the name for the new table. By default, the table name is <table_name>_COPY. For example, if you clone the users table, the default name is users_COPY.

    Creating a table from imported data

    You can create a table from an imported CSV, JSON, or JSONL file. Fabricate uses the file to determine the table columns and data types, and to populate the table data.

    To add a table based on an imported CSV file:

    1. In the database header, click Add Table(s), then click From a CSV or JSON file.

    2. In the Name field, provide the name of the table.

    3. To search for and select a file, click Choose File.

    4. Click Import Table.

    On the table details, Fabricate indicates that the table data came from a file. It marks the columns as having come from the source file.

    Generating static data from an AI prompt

    You can create a table of static data from an AI prompt. Fabricate also generates a CSV file of the table data.

    To generate static data from an AI prompt:

    1. In the database header, click Add Table(s), then click Generate static data using AI.

    2. In the Table Name field, provide the name of the table. The table name is also used as the name of the CSV file.

    3. In the Prompt field, provide an AI prompt that describes the data. For example: List of states in the United States, the state abbreviations, and the year that the state joined the United States.

    1. To make adjustments to the data, update the prompt, then click Regenerate.

    2. When you are satisfied with the generated data:

      • To download the data as a CSV file, click Download.

      • To copy the CSV to the clipboard, click Copy to Clipboard.

    Managing users in your account

    For license plans other than the Free plan, account owners can add users to an account. Each user is assigned an account role.

    Displaying the list of account users

    The list of users is in the Users section of the My Account page.

    To display the My Account page, in the user menu, click My Account.

    For each user, the list contains the following information:

    • The user name and email address.

    • The user's account role.

    • The user's workspace access. For each workspace that the user has access to, lists the workspace name and the access role.

    Adding users to an account

    To add users to your account:

    1. Click Invite Users.

    2. On the Invite Users panel, in the Emails field, provide the email addresses of the users to add. Put each email address on a separate line.

    3. To immediately grant access to all of the current account workspaces:

      1. Check the

    Changing the account role for a user

    About account roles

    Fabricate supports the following account roles:

    • Owner - Every account must have at least one owner. The first user in the account is automatically an owner. Other users can be assigned as owners. Account owners have full access to manage the account. They can:

      • Create and manage workspaces.

      • Add and remove account users.

      • Change assigned account roles.

    Assigning account roles to users

    By default, when you add a user to your organization, they are granted the Member account role.

    To change the account role for a user, from the Account Role dropdown list, select the role to assign.

    Removing an account user

    To remove a user from your account:

    1. Click the Remove option for the user.

    2. On the confirmation panel, click Remove User.

    You cannot remove the only account owner for an account.

    Creating and managing databases

    If you have multiple workspaces, then before you create or edit a rule-based database, make sure that you are in the correct workspace.

    To change to a different workspace, in the user menu, click Switch Workspaces, then select the workspace.

    Starting a new database

    To start a completely new database:

    1. Click the database dropdown at the top right, then click New Database.

    1. On the database creation page, click Rule-based database.

    2. On the Create a New Database panel, in the Database Name field, provide a name for the database.

    3. From the Type dropdown list, select the .

    4. Optionally, in the Schema Definition

    Fabricate displays the database details page for the database.

    Selecting a database to manage

    To select a database to manage:

    1. Click the database dropdown at the top right.

    2. In the dropdown list, select the database.

    Cloning an existing database

    From the database Settings tab, you can create a new database based on an existing database. The new database inherits all of the configuration from the original database.

    To clone a database:

    1. Select the database to clone.

    2. On the Settings tab, click Clone.

    Changing the database name and type

    From the database Settings tab, you can change the database name and type.

    1. In the Name field, provide the new database name.

    2. From the Type dropdown list, select the new database type.

    3. Click Save Changes.

    Setting the schema name for PostgreSQL and SQL Server databases

    For PostgreSQL and SQL Server databases, you can optionally provide a schema name to use when you export data.

    On the Settings tab, in the Schema Name field, provide the name of the schema.

    Deleting a database

    To delete a database, on the database Settings tab:

    1. Click Delete.

    2. On the confirmation panel, click Delete Database.

    Configuring table settings

    Changing the table name

    To change the name of a table:

    1. Click the table name.

    2. In the name field, provide the new name.

    3. Click the save icon.

    Configuring constraints for the table

    Within a table, you can configure constraints to either:

    • Guarantee that the value of a column is unique.

    • Guarantee that a specified list of columns does not have the same value. For example, for an airline flight, the origin city and destination city should be different values.

    The constraints list is on the table settings panel. To display the settings panel, in the table heading, click the settings icon.

    To add a constraint, click Add Constraint.

    To configure a constraint:

    1. From the Type dropdown list, select the type of constraint.

      • For a uniqueness constraint, select Unique.

      • For a not equal constraint, select Not Equal.

    2. For each column to add to the constraint, click Add column

    To remove a constraint, click the delete icon.

    Indicating whether to include the table in the export

    By default, each table is included in the exported data.

    From the settings panel, you can configure a table to be excluded from the exported data.

    To exclude the table, check Hide this table when exporting.

    Setting a table-wide seed value

    By default, every time you generate data, Fabricate generates a completely different set of values.

    To generate the same set of data across the table, you can set a seed value for the table.

    On the settings panel, in the Seed field, provide the seed value to use.

    To have Fabricate generate a new seed value, click the generate icon next to the field.

    Note that you can also . A column-level value overrides the table-level value.

    Determining the number of rows in the table

    By default, for a new table, Fabricate generates 100 rows. The row count is displayed above the table.

    The free tier is limited to maximum of 100 rows per table.

    Row count when the number of rows is derived

    In some cases, the row count is derived based on column configuration. For example, when you configure a , you can configure the number of rows to generate for each primary key value.

    When the row count is derived, then the row count does not display as a number of fields. Instead, Fabricate displays how the number of rows is calculated.

    For example, the following indicates that the table contains 5 rows for each value of customer_id:

    Changing the row count configuration

    If the row count is not derived, then you can configure the number of rows in the table.

    To configure a specific number of rows:

    1. From the comparison dropdown, select exactly.

    2. In the field, either provide a number or an expression that evaluates to a number.

    Alternatively, you can set the number of rows based on the number of unique values of a specific type in the table. For example, for a list of orders, you can set the number of rows to be equal to the number of possible payment types or the number of locations.

    1. From the comparison dropdown, select unique values of. Note that if there is not an appropriate value to use, then the unique values of option is not available.

    2. From the value type dropdown list, select the value to use.

    About workspaces

    Every database belongs to a specific workspace.

    You can use workspaces to group and manage access to sets of databases. Each workspace can be assigned a different set of users and API keys. The users and API keys are assigned a workspace role that controls their access to workspace functions.

    Diagram showing the relationships among workspaces, users, and API keys

    When you create your Fabricate account, Fabricate automatically creates a workspace with your name. If you don't create other workspaces, then all of your databases are in that workspace.

    Telephone numbers and email addresses

    The following generators produce values for telephone numbers and email addresses.

    For more information about these generators and how to configure them in the application, go to Telephone numbers and email addresses in the generator reference.

    Country Phone Code (Global)

    Populates the column with a country telephone code from anywhere around the world.

    Uses the General column configuration.

    Country Phone Code (US)

    Populates the column with the country telephone code for the United States.

    Uses the .

    Email Address

    Populates the column with an email address.

    If the table includes first name and last name columns, then the email address is automatically derived from the those columns. For example, [email protected].

    Uses the .

    Phone Number (Global)

    Populates the column with a telephone number from anywhere in the world.

    Phone Number (US)

    Populates the column with a telephone number from the United States.

    Managing Fabricate API keys

    To use the Fabricate API and CLI, you must have a Fabricate API key.

    Displaying the list of API keys

    To display the list of API keys, click the user icon at the bottom left of Fabricate, then select My Account.

    The API Keys section contains your list of API keys.

    Creating an API key

    To create an API key:

    1. Click Create New API Key.

    2. On the Create New API Key panel, in the Name field, provide a name for the API key.

    3. By default, new API keys are granted Editor access to all of the current account workspaces. For information about workspace roles, go to . To grant a different workspace role, select the role from the dropdown list. To not grant any access to the account workspaces, uncheck the Grant access to all workspaces checkbox. You can then add the API key as needed to specific workspaces. Note that this only applies to workspaces that exist when you create the API key. The API key is not automatically granted access to any future workspaces.

    Copying an API key

    To copy an API key to the clipboard, click the copy icon next to the key.

    Deleting an API key

    To delete an API key, click Delete.

    Using the Fabricate API

    You can use the Fabricate API to manage databases and generate data. Except for generating data, most API calls are designed for rule-based databases.

    The API is at https://fabricate.tonic.ai/api/v1. You make requests to the API endpoints within the API. Each request requires authentication with an API key.

    For examples of how to use the Fabricate API, go to the fabricate-api-examples repository on GitHub.

    Fabricate also provides a Python library that you can use to make calls to the Fabricate API. The Python library is at https://github.com/TonicAI/tonic-fabricate-python.

    There is also a client NPM package at https://www.npmjs.com/package/@fabricate-tools/client.

    Education

    The following generators produce values related to schools and education.

    For more information about these generators and how to configure them in the application, go to Education in the generator reference.

    University Country Code

    Populates the column with the 2-character country code for the university location. For example, ES, FR, US.

    Uses the General column configuration.

    University Name

    Populates the column with the name of a university. For example, Harvard.

    Uses the .

    University URL

    Populates the column with the URL for the university website. For example, harvard.edu.

    Uses the .

    Column attributes

    Individual columns include common properties, as well as properties that are specific to the assigned generator.

    For an alphabetical list of generators, go to Generator summary.

    For details about how to configure each generator on the application, go to Generator reference.

    Database attributes

    Each database object can contain the following attributes:

    {
      "id": uuid,
      "name": "my_store",
      "created_at": datetime,
      "updated_at": datetime,
      "last_generated": datetime,
      "data_url": string,
      "platform": string,
      "variables": {
        "<variable_name>": string
      },
      "entities": entity[]
      "workspace": {
        "id": uuid,
        "name": string
      }
    }

    id

    The UUID of the database

    name

    The name of the database

    created_at

    The date and time the database was created.

    updated_at

    The date and time the database was last updated.

    last_generated

    The date and time the data was last generated.

    data_url

    Exporting data from a rules-based database

    You can export the most recently generated rule-based database data to files or to a database.

    Note that views are exported as tables. They do not create or replace the views in the target database.

    Starting the export

    To start an export, in the database header, click Export Data.

    Banking and finance

    The following generators produce values related to banks and credit cards.

    For information about the API data models for these generators, go to in the column attributes.

    Bank City

    Populates the column with the name of a city.

    You can configure a .

    You can also configure a to link the column to other columns.

    Generator reference

    Tonic Fabricate offers generators to create the following categories of column values.

    For an alphabetical list of the generators, go to .

    For information on how to configure columns in the API, go to .

    Names and other identifying information

    The following generators produce names and other identifying values for an individual.

    Fabricate automatically correlates name and gender columns within a table.

    For information about the API data models for these generators, go to in the column attributes.

    First Name

    Produces a given name, such as John or Mary.

    You can configure a .

    You can also configure a to link the column to other columns.

    Creating and managing workspaces

    The Free and Plus plans only allow one workspace per account.

    When you create your Fabricate account, Fabricate automatically creates a workspace with your name.

    If you do not create other workspaces, then all of your databases are created in that workspace.

    Adding a workspace

    Dates and times

    The following generators produce datetime values. Note that there are also category-specific generators that produce datetime values, such as a car model year or an IPO date.

    For more information about these generators and how to configure them in the application, go to in the generator reference.

    Datetime

    Populates the column with a datetime value.

    SQL table reference

    Using SQL tables to denormalize data

    Though not required, it's a common practice to:

    1. Generate the raw data you need in normalized tables

    Grant access to all workspaces
    check box.
  • From the role dropdown list, select the workspace role to grant.

  • Note that this access is only granted to workspaces that exist when you add the users. Access is not automatically granted to future workspaces. After you add the users, you can also manage their access to workspaces.

  • Click Send Invitations.

  • Add and remove API keys.

  • Member - An account member can only create and manage workspaces in the account. They do not have other access to manage the account.

  • After data is generated, download it from this URL.

    platform

    The type of the target database.

    variables

    The default variable values assigned to the database.

    entities

    List of entities and their attributes. For the list of entity attributes, go to Entity (table) attributes.

    workspace

    The workspace that the database belongs to. Determined by the workspace name in the request path. You do not provide this when you create or update a database.

    API authentication How to authenticate an API request.

    Data model Structure of database, constraint, entity, and field objects.

    Manage databases Retrieve database information. Create and update databases.

    Generate data Send and track generation requests. Load generated data into your database.

    General column configuration

    Calculated or related values

    Unstructured Data

    Data type and specific values

    Names and other identifying information

    Telephone numbers and email addresses

    Geographic locations

    Job-related values

    Air travel

    Natural science

    Networks and files

    Banking and finance

    Dates and times

    Vehicles

    Companies and products

    Healthcare and health insurance

    Languages

    Movies

    Education

    General column configuration
    General column configuration
    Bank Country Code

    Populates the column with a 2-character country code. For example, ES, FR, US.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Bank LEI

    Populates the column with a legal entity identifier (LEI) for a bank.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Bank Name

    Populates the column with the name of a bank in the United States.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Bank RIAD Code

    Populates the column with a bank Register of Institutions and Affiliates Data (RIAD) code.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Bank Routing Number

    Populates the column with a United States bank routing number.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Bank State

    Populates the column with the name of a US state.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Bank Street Address

    Populates the column with a street address.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Bank Swift Code

    Populates the column with a bank Swift code.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Credit Card Number

    Populates the column with a credit card number.

    You can configure a group key to link the column to other columns.

    Credit Card Type

    Populates the column with a credit card type. For example, Visa, MasterCard, American Express.

    You can configure a group key to link the column to other columns.

    Currency Code (Global)

    Populates the column with a 3-character currency code for a currency from anywhere in the world. For example, EUR, AUD, JPY.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Currency Code (US)

    Populates the column with the 3-character currency code for the United States, USD.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Currency Name (Global)

    Populates the column with the name of a currency from anywhere in the world. For example, Euro, Mexican Peso, Yen.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Currency Name (US)

    Populates the column with Dollar.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Banking and finance
    weighted distribution of the values
    group key
    Full Name

    Produces a full name (given name and family name), such as John Smith and Mary Jones.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Last Name

    Produces a family name, such as Smith or Jones.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Middle Name

    Produces a name from the same set as the First Name generator. The middle name is always different from the first name.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Nickname

    Produces a common nickname for the person, such as Bobby or Lefty.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Passport Number (Global)

    Produces a random passport number that matches the country name or code that is in another column of the table.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Passport Number (US)

    Produces a random United States passport number.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Person Name Suffix

    Produces a name suffix. The possible suffixes are Jr., Sr., and III.

    The suffix is applied to 2% of male names.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Person Name Title

    Produces a name title. The possible titles are Mr., Mrs., Ms., and Dr..

    The Dr. prefix is applied to 1% of all records.

    The remaining titles are distributed evenly among the records, and correspond to the gender of the name columns.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Sex

    Populates a column with either Male or Female.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    SSN

    Populates a column with valid United States Social Security numbers (SSNs).

    To include the dashes in the values (for example, 123-45-6789), check Include Dashes.

    Username

    Populates a column with a username. For example, johndoe.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Names and other identifying information
    weighted distribution of the values
    group key
    SQL DDL script
  • OpenAPI spec

  • Content from another type of script or definition file, such as a JSON or XML schema or a DTD. The Fabricate AI then attempts to interpret the information and then use it to set up the table.

  • A prompt that describes the table. For example, "Create a table that tracks customers, including the mailing address, email address, and telephone number". The Fabricate AI uses that as the basis to set up an initial version of the table.

  • Optionally, expand More options, and in the AI Hints field, provide an additional prompt to help further define the table columns. For example, you might indicate specific generators to use, or provide limits on specific values.

  • Click Add Table.

  • Click Clone Table.

    Click Generate Data. Fabricate displays the generated data.

  • To create a table from the data, click Create Table. In the table header, the table is marked as imported from the CSV file.

  • Creating and managing SQL tables
    Fabricate table that is imported from a file
    Table data generated from an AI prompt
    text area, provide one of the following to define the database schema:
    • SQL DDL script

    • prisma.schema script

    • Swagger YAML API definition. Fabricate uses the API endpoint request and response information to derive the database tables and columns.

    • A prompt that describes the database. For example: "Create a database that tracks orders, including customer and product details." The Fabricate AI uses that as the basis to set up an initial version of the relevant tables.

    • Content from a different type of script or definition file, such as a JSON or XML schema or a DTD. The Fabricate AI then attempts to interpret the information and then use it to set up the database.

  • Optionally, expand More options, and in the AI Hints field, provide an additional prompt to help further define the database. For example, you might indicate specific generators to use, or provide limits on specific values.

  • Click Create Database.

  • database type
    Database dropdown with the New Database option
    Data Settings tab with Name and Type
    Database Settings tab with the Schema Name field
    , then select the column to add.
  • To remove a column from the constraint, click its delete icon.

  • configure column-level seed values
    foreign key
    Renaming a table
    Settings icon for a table
    Initial count of 100 rows for a new table
    Example of a row count formula
    Generator summary
    Column attributes

    Calculated or related values

    Unstructured data

    Data type and specific values

    Names and other identifying information

    Telephone numbers and email addresses

    Geographic locations

    Job-related values

    Air travel

    Natural science

    Networks and files

    Banking and finance

    Dates and times

    Vehicles

    Companies and products

    Healthcare and health insurance

    Languages

    Movies

    Education

    Click Create API Key.

    About workspace roles
    Fabricate license plans
    Managing users in your account
    Managing Fabricate API keys
    Unstructured Data generator
    Delete Account section of the My Account page
    Excluding the column from exported data
    General column configuration
    General column configuration
    Timezone (Global)

    Populates the column with the name of a time zone from anywhere in the world. For example, Europe/Paris.

    Uses the General column configuration.

    Timezone (US)

    Populates the column with the name of a time zone that occurs in the United States. For example, US/Central.

    Uses the General column configuration.

    Dates and times
    Mark those tables as hidden.
  • Create views to to model the denormalized tables.

  • For example, an ecommerce database contains orders and order_items tables. The orders table includes the total order amount, which is based on the sum of the prices and quantities of the order items.

    In this case, you can:

    1. Create an orders_base table with the order data.

    2. Create a SQL table orders that joins the orders_base table with the order_items table, and then calculates the total amount for each order:

    Using variables in SQL tables

    To get access to a variable, use the $ prefix. For example, to use the user_id variable to create a SQL table that selects a subset of records from an events table:

    SELECT * FROM events WHERE user_id = $user_id

    Functions for working with JSON

    SQLite provides some helpful functions to compose JSON objects and arrays.

    For more information about SQLite's support for JSON, go to the SQLite JSON Documentation.

    json_object

    To create a JSON object that pulls the user's first and last names from the users_base table:

    json_group_array

    The json_group_array function creates a JSON array from a set of values.

    For example, to create an array of all roles for each user in the users_base table:

    { 
      "name": string,
      "data_type": string,
      "generator": "Phone Number",
      // Generator-specific fields
      "phone_number_format": string, // The format to use for the telephone number
      // End generator-specific fields
      "conditions": [
        {
          "subset_field": string,
          "operator": "is_one_of"|"is_not_one_of"|"is_not_null",
          "subset_value": string
          "weight": integer
        }
      ],
      "default_weight": integer,
      "group_key": string,
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Phone Number (US)",
      // Generator-specific fields
      "phone_number_format": string, // The format to use for the telephone number
      // End generator-specific fields
      "conditions": [
        {
          "subset_field": string,
          "operator": "is_one_of"|"is_not_one_of"|"is_not_null",
          "subset_value": string
          "weight": integer
        }
      ],
      "default_weight": integer,
      "group_key": string,
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Datetime",
      // Generator-specific fields
      "date_type": string, // Type of date value (absolute, relative, series)
      "date_only": boolean, // Whether to exclude the time portion
      // -----------------------------------------------------------------------
      // Absolute
      "distribution": "normal"|"uniform", // Distribution type
      // Absolute - Uniform distribution
      "start_date": string, // Start date
      "end_date": string, // End date
      // Absolute - Normal distribution
      "start_date": string, // Centered on date
      "min": integer, // Minimum gap between datetimes
      "mean": string, // Mean gap between datetimes
      "date_unit": "milliseconds"|"seconds"|"minutes"|"hours"|"days"|"weeks"|
                   "months"|"years",
                   // Unit for the datetime gap
      "std_dev": string, // Standard deviation
      "max": integer, // Maximum gap between datetimes
      // ------------------------------------------------------------------------
      // Relative
      "time_range_start_hour": string, // Start of range for before or after
      "time_range_end_hour": string, // End of range for before or after
      "date_unit": "milliseconds"|"seconds"|"minutes"|"hours"|"days"|"weeks"|
                   "months"|"years",
                   // Unit for the before or after time range
      "date_operator": string, // Whether range is before or after the base date
      "start_field": string, // Base date column for the range
      // ------------------------------------------------------------------------
      // Series
      "start_date_type": "fixed"|"from_column",
      "start_field": string, //For from column start, the column
      "start_date": string, // For fixed start, the start date
      "partition_by_field": string, // Partition by column
      "order_by_field": string, // Order by column
      // Series - Limiting when the datetimes can occur
      "time_range_start_hour": string, // Start of hour range limit
      "time_range_end_hour": string, // End of hour range limit
      "date_only_weekdays": boolean, // Whether to limit to weekdays
      // Series - Interval configuration
      "distribution": string, // Interval distribution type
      "date_unit": "milliseconds"|"seconds"|"minutes"|"hours"|"days"|"weeks"|
                   "months"|"years",
                   // Interval unit
      // Series - Interval - Fixed
      "exact_value": integer, // Interval value
      // Series - Interval - Uniform
      "min": integer, // Minimum interval
      "max": integer, // Maximum interval
      // Series - Interval - Normal
      "min": integer, // Minimum interval
      "mean": string, // Mean interval
      "std_dev": string, // For normal distribution, standard deviation
      "max": integer, // Maximum interval
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean, //Whether the column is a primary key.
      "index": boolean,  // Whether to index the column.
      "seed": string,  // Statistics seed to freeze the column value.
      "postprocessing_sql": string, // SQL script to run after data generation.
    }
    SELECT *, sum(order_items.price * order_items.quantity) as total_amount FROM orders_base JOIN order_items ON orders_base.id = order_items.order_id GROUP BY orders_base.id
    SELECT json_object( 'first', first_name, 'last', last_name ) as name FROM users_base
    SELECT
     users_base.*,
     json_group_array(roles.name) as roles 
    FROM users_base 
    JOIN users_roles ON users_base.id = users_roles.user_id 
    JOIN roles ON users_roles.role_id = roles.id 
    GROUP BY users_base.id
    Selecting the output format

    On the Export Database panel, from the Export As dropdown list, select the format for the exported data:

    • SQL - Exports the data to a .zip file called <database name>.zip. The file contains a SQL file to load the exported data, and a readme file that summarizes the export.

    • CSV - Exports the data to a .zip file called <database name>.zip. The file contains a .csv file for each table and view, and a readme file that summarizes the export.

    • JSONL - Exports the data to a .zip file called <database name>.zip. The file contains a .jsonl file for each table and view, and a readme file that summarizes the export.

    • Parquet - Exports the data to a .zip file called <database name>.zip. The file contains a .parquet file for each table and view, and a readme file that summarizes the export.

    • XML - Exports the data to a .zip file called <database name>.zip. The file contains an XML file for each table and view.

    • Push to Database - Available for databases that are created with a specific database type, such as PostgreSQL. Uses the data to populate a database that you specify.

    When you export PostgreSQL or SQL Server databases to SQL or to a database, if you provided a schema name, then Fabricate assigns all of the tables to that schema.

    Adding and selecting a database connection

    When you push the exported data to a database, you are prompted for the target database. The database must already exist.

    Also note that for Fabricate to connect to your database, you must allowlist access from the following IP addresses:

    • 34.224.174.7

    If you previously created a target database for export, then from the Target Database dropdown list, select the database to use.

    To create a new target:

    1. From the Target Database dropdown list, select create new target.

    2. On the New Target Database Connection panel, provide the connection information.

    3. To test the connection, click Test Connection.

    4. To save the target database, click Create Target.

    The target database is then available to use whenever you export the database.

    Connection information for databases other than Databricks

    On the New Target Database Connection panel, for database types other than Databricks:

    1. In the Name field, provide the name of the database.

    2. In the Host field, provide the host where the database is located.

    3. In the Port field, specify the host to use to connect to the database.

    4. In the Username field, provide the username to use to connect to the database.

    5. In the Password field, provide the password to use for authentication.

    6. In the Database field, set the Fabricate database that can populate the target database.

      The field is pre-populated with the current database.

    Connection information for Databricks

    On the New Target Database Connection panel, for a Databricks database:

    1. In the Name field, provide the name of the database.

    2. In the Host field, provide the host where the database is located.

    3. From the Credential Type dropdown list, select the type of authentication to use. The options are:

      • Service Principal

      • Personal Access Token

    4. For Service Principal authentication:

      1. In the Client ID field, provide the client identifier.

      2. In the Secret field, provide the secret that is associated with the client identifier. For a new target, you must always provide the secret. For an existing target, if the secret did not change, then you can leave the Secret field empty.

    5. For Personal Access Token authentication, in the Access Token field, provide the access token to authenticate to the database.

    6. In the Warehouse ID field, provide the data warehouse for the data.

    7. In the Catalog field, provide the data catalog for the data.

    8. In the Schema field, provide the schema for the data.

    When Fabricate exports data to Databricks, it:

    1. Creates a volume called /Volumes///fabricate.

    2. Creates a directory in that volume that is named with a UUID.

    3. Uploads a CSV file for each table into that directory.

    4. Copies the data from each CSV file into the destination tables in the schema.

    The catalog, schema, and tables must already exist. Fabricate creates the volume automatically.

    Including the DDL in the export

    When you export to SQL or push to a database, you can include the DDL in the export.

    To include the DDL, check the Include DDL checkbox.

    Remember that Fabricate does not update the DDL to reflect manual changes to the database schema. Make sure that either the DDL matches the current schema, or that you handle the migration in the destination database.

    Selecting the scope of the data to export

    If you are currently viewing a specific table or a view, then on the Export Database panel:

    • To export the entire database, click All Tables.

    • To only export the current table or view, click Only <table or view name>.

    Completing the export and downloading exported files

    After you configure the export, to complete the export, click Export Database.

    When you export to files, after Fabricate generates the file, it prompts you to download the file.

    Download prompt for export to a file

    If you do not download the file immediately, it is also available on the downloads list.

    To display the list of available downloads, in the Fabricate header, click the download icon.

    Download icon to display the list of available files to download
    To add a workspace:
    1. In the user menu, click Switch Workspaces.

    User menu with the Switch Workspaces option
    1. On the Switch Workspaces panel, click New Workspace.

    2. In the name field, provide the name of the workspace.

    3. Click Save.

    Changing the workspace name

    To change the name of a workspace:

    1. In the user menu, click Switch Workspaces.

    2. On the Switch Workspaces panel, hover over the workspace to configure, then click the settings icon.

    Switch Workspaces panel with the settings option displayed for a workspace
    1. On the Settings page, in the Name field, provide the new name for the workspace.

    2. Click Save Changes.

    Configuring access to the workspace

    From the Permissions section of the workspace Settings page, you manage workspace access to organization users and to API keys.

    About workspace roles

    For each user and API key, the assigned role determines the actions that they can perform within the workspace.

    The available workspace roles are:

    • Owner - Every workspace must have at least one owner. The user who creates the workspace is automatically an owner. Other users and API keys also can be assigned as owners. Owners have full access to the workspace. They can:

      • Create and manage databases.

      • Manage workspace access.

    • Editor - A workspace editor can create and manage databases. They cannot manage access to the workspace.

    • Viewer - A workspace viewer can view the databases in a workspace and generate data. They cannot change any database configuration.

    Adding a user to the workspace

    The user must already be added to your account.

    To add an account user to the workspace:

    1. Click Add User.

    2. From the dropdown list, select the user to add.

    3. By default, the user is granted the Viewer workspace role. To assign a different role, from the Account Role dropdown list, select the new role to assign.

    Adding an API key to the workspace

    The API key must already be added to your account.

    To add an API key to the workspace:

    1. Click Add API Key.

    2. From the dropdown list, select the API key to add.

    3. By default, the API key is granted the Viewer workspace role. To assign a different role, from the Account Role dropdown list, select the new role to assign.

    Changing the role for a user or API key

    To change an assigned workspace role, from the Account Role dropdown list, select the new role.

    Note that each workspace must have at least one workspace owner.

    Removing a user or API key

    To remove a user or API key from the workspace:

    1. Click the Remove option for the user or API key.

    2. On the confirmation panel, click Remove User or Remove API Key.

    Note that each workspace must have at least one workspace owner.

    Deleting a workspace

    From the workspace Settings page, to delete the workspace:

    1. Click Delete Workspace.

    2. On the confirmation panel, click Delete Workspace.

    When you delete a workspace, Fabricate also deletes all of the databases in that workspace.

    Healthcare and health insurance

    The following generators produce values related to healthcare and health insurance.

    For information about the API data models for these generators, go to Healthcare and health insurance in the column attributes.

    Drug Company

    Populates the column with the name of a pharmaceutical company. For example, Pfizer.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Drug Generic Name

    Populates the column with a generic name of a drug.

    You can configure a .

    You can also configure a to link the column to other columns.

    Drug Name

    Populates the column with the brand name of a drug.

    You can configure a .

    You can also configure a to link the column to other columns.

    Drug NDC Code

    Populates the column with a code from the National Drug Code directory.

    You can configure a .

    You can also configure a to link the column to other columns.

    HCPCS Code

    Populates the column with a code from the Healthcare Common Procedure Coding System.

    You can configure a .

    You can also configure a to link the column to other columns.

    HCPCS Name

    Populates the column with a name from the Healthcare Common Procedure Coding System.

    You can configure a .

    You can also configure a to link the column to other columns.

    Hospital City

    Populates the column with the city for a hospital address.

    You can configure a .

    You can also configure a to link the column to other columns.

    Hospital Name

    Populates the column with the name of a hospital organization.

    You can configure a .

    You can also configure a to link the column to other columns.

    Hospital NPI

    Populates the column with the National Provider Identifier for a hospital.

    You can configure a .

    You can also configure a to link the column to other columns.

    Hospital Postal Code

    Populates the column with a postal code for a hospital address.

    You can configure a .

    You can also configure a to link the column to other columns.

    Hospital State

    Populates the column with a US state for a hospital address.

    You can configure a .

    You can also configure a to link the column to other columns.

    Hospital Street Address

    Populates the column with a hospital street address.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-10 Diagnosis Code

    Populates the column with a diagnosis code from ICD-10.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-10 Diagnosis Long Description

    Populates the column with a long description of a diagnosis from ICD-10.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-10 Diagnosis Short Description

    Populates the column with a short description of a diagnosis from ICD-10.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-10 Procedure Code

    Populates the column with a procedure code from ICD-10.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-10 Procedure Long Description

    Populates the column with the long description of a procedure from ICD-10.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-10 Procedure Short Description

    Populates the column with the short description of a procedure from ICD-10.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-9 Diagnosis Code

    Populates the column with a diagnosis code from ICD-9.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-9 Diagnosis Long Description

    Populates the column with the long description of a diagnosis from ICD-9.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-9 Diagnosis Short Description

    Populates the column with the short description of a diagnosis from ICD-9.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-9 Procedure Code

    Populates the column with the code for a procedure in ICD-9.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-9 Procedure Long Description

    Populates the column with the long description of a procedure in ICD-9.

    You can configure a .

    You can also configure a to link the column to other columns.

    ICD-9 Procedure Short Description

    Populates the column with the short description of a procedure in ICD-9.

    You can configure a .

    You can also configure a to link the column to other columns.

    Air travel

    The following generators produce values related to airports and flights.

    For more information about these generators and how to configure them in the application, go to Air travel in the generator reference.

    Airport Code

    Populates the column with an airport code. For example, SFO or CDG.

    Uses the General column configuration.

    Airport Continent

    Populates the column with the name of a continent.

    Uses the .

    Airport Country Code

    Populates the column with a 2-character country code.

    Uses the .

    Airport Elevation (Feet)

    Populates the column with a number intended to represent the elevation where an airport is located.

    Uses the .

    Airport GPS Code

    Populates the column with an airport code from the International Civil Aviation Organization (ICAO) code. For example, LFPG or KJFK.

    Uses the .

    Airport Latitude

    Populates the column with a latitude value.

    Uses the .

    Airport Longitude

    Populates the column with a longitude value.

    Uses the .

    Airport Municipality

    Populates the column with the name of a city or metropolitan area where an airport is located.

    Uses the .

    Airport Name

    Populates the column with the name of an airport. For example, John F Kennedy Airport or Heathrow Airport.

    Uses the .

    Airport Region Code

    Populates the column with a 2-character code to represent the region where the airport is located.

    Uses the .

    Flight Airline

    Populates the column with the name of a commercial airline. For example, Delta Airlines or Lufthansa.

    Uses the .

    Flight Arrival Airport

    Populates the column with the name of an airport.

    Uses the .

    Flight Arrival Airport Code

    Populates the column with a 3-character airport code.

    Uses the .

    Flight Arrival City

    Populates the column with the name of a city.

    Uses the .

    Flight Arrival Country

    Populates the column with the name of a country.

    Uses the .

    Flight Departure Airport

    Populates the column with the name of an airport.

    Uses the .

    Flight Departure Airport Code

    Populates the column with a 3-character airport code.

    Uses the .

    Flight Departure City

    Populates the column with the name of a city.

    Uses the .

    Flight Departure Country

    Populates the column with the name of a country.

    Uses the .

    Flight Departure Time

    Populates the column with a timestamp in 24-hour format. For example, for 1:15 PM, the generated value would be 13:15.

    Uses the .

    Flight Duration Hours

    Populates the column with a decimal number to indicate the number of hours in a flight. For example, 2.5.

    Uses the .

    Flight Number

    Populates the column with a value representing a flight number. For example, LH1234.

    Uses the .

    Unstructured Data

    The Unstructured Data generator uses an LLM to populate a column with unstructured data, such as text or JSON, that can include values from other columns in the table.

    For information about the API data model, go to Unstructured Data in the column attributes.

    For more information about the generator, view the video tutorial.

    Configuring the access token and models

    On the cloud application, on the My Account page, the Unstructured Data Generator section contains settings for the OpenAI access token and the models to use to generate the content.

    To display the My Account page, click the user menu, then click My Account.

    Providing an access token for the LLM provider

    On the cloud application, you must provide an access token for the LLM provider that you plan to use. By default, Fabricate uses OpenAI.

    1. In the Access Token field, provide the token.

    2. Click Save Changes.

    Providing the base URL for the API

    By default, Fabricate uses OpenAI as the LLM provider.

    To use a different API, in the URI base field, provide the base URL for an OpenAI-compatible API such as OpenRouter.

    Selecting the model for each content type

    The Unstructured Data generator can produce either free text, a conversation, or JSON.

    By default, Fabricate uses:

    • For free text and conversations, gpt-4.1-mini

    • For JSON, gpt-4.1

    For each type of content, you can configure the model to use.

    1. In the Model for Free Text field, provide the model to use for free text.

    2. In the Model for Conversations field, provide the model to use for conversations.

    3. In the Model for JSON field, provide the model to use for JSON.

    Testing the model connections

    To verify that Fabricate can connect to the models, click Test Settings.

    Configuring the generator

    On the column details panel, you select the format of the generated content and provide prompts to describe it.

    Selecting the type of content to generate

    From the Type dropdown list, select the type of unstructured content to generate:

    • Free text generates unstructured plain text or Markdown.

    • Conversation generates a transcript of a conversation between two personas. For example, you might use this option to replicate a customer support call.

    • JSON generates data in JSON format.

    Providing a prompt to describe the content

    In the Prompt field, provide an overview description of the content.

    The prompt can include other columns from the table. To include a column, use {column_name}.

    For example:

    • "Generate notes for a patient visit. The patient is named {patient_name}, is {age} years old, and was diagnosed with {diagnosis}."

    • "Generate a conversation between an airline customer named {customer_name} who is trying to get help with a cancelled flight and a support agent named {agent_name}."

    • "Generate a JSON object to summarize the customer information. Include {customer_name}, {mailing_address}, and {telephone_number}.

    Describing personas for a conversation

    For the conversation type of unstructured content, you provide a description of each persona in the conversation.

    The personas can include other columns from the table. To include a column, use {column_name}.

    1. In the Persona 1 field, provide a description of the first persona.

    2. In the Persona 2 field, provide a description of the second persona.

    For example:

    • "An airline customer {customer_name} who is upset about a canceled flight."

    • "A customer support representative who is trying to help the customer {customer_name}."

    Defining the schema for JSON content

    For the JSON type of unstructured content, you provide the JSON schema.

    In the Schema field, provide the JSON schema.

    You can type or paste the schema directly, or you can have Fabricate generate the schema based on an example object.

    To generate the schema from an example:

    1. Click Derive JSON schema from an example.

    2. On the panel, in the Example JSON field, provide an example of a JSON object that reflects the schema. For example:

    1. Click Derive JSON Schema.

    Setting the randomness factor for the content

    In the Temperature field, provide a number to indicate how varied or creative the content is.

    The higher the number, the more creative the output.

    A typical value is between 1.0 and 1.2. A value higher than 1.2 starts to produce garbled or nonsensical values.

    Selecting the output format

    For free text and conversations, you select the format to use for the output.

    From the Format dropdown list:

    • To generate plain text, select Plain Text.

    • To use Markdown format, select Markdown.

    Generating example output

    After you configure the required fields, to verify that the results are what you expect, you can generate an example entry.

    To generate the example, click Generate a sample result.

    After you generate an initial example, to generate a new example, click Regenerate. For example, you might generate a new example after you make adjustments to a prompt or schema.

    Displaying an unstructured column value

    For a column that uses the Unstructured Data generator, to display the content, click the content icon.

    Geographic locations

    The following generators produce values related to geographic locations.

    Fabricate automatically correlates location values. For example, in a given record, the value in a city column is a city located in the state column.

    Note that other generators specific to air travel, healthcare, and finance also produce some geographic values. For example, there are generators that produce city where a bank, airport, or hospital is located.

    For more information about these generators and how to configure them in the application, go to Geographic locations in the generator reference.

    City (Global)

    Populates the column with the name of a city from anywhere in the world.

    Uses the .

    City (US)

    Populates the column with the name of a city from within the United States.

    Uses the .

    Country (Global)

    Populates the column with the name of a country from anywhere in the world.

    Uses the .

    Country (US)

    Populates the column with the United States.

    Uses the .

    Country Code (Global, 3 Character)

    Populates the column with a for a country from anywhere in the world. For example, FRA, ESP, USA.

    Uses the .

    Country Code (Global)

    Populates the column with a for a country from anywhere in the world. For example, FR, ES, US.

    Uses the .

    Country Code (US)

    Populates the column with the 2-character country code for the United States - US.

    Uses the .

    Full Address (Global)

    Populates the column with a full mailing address from anywhere in the world.

    Uses the .

    Full Address (US)

    Populates the column with a full mailing address from within the United States.

    Uses the .

    Latitude (Global)

    Populates the column with a latitude value from anywhere in the world.

    Uses the .

    Latitude (US)

    Populates the column with a latitude value from within the United States.

    Uses the .

    Longitude (Global)

    Populates the column with a longitude value from anywhere in the world.

    Uses the .

    Longitude (US)

    Populates the column with a longitude value from within the United States.

    Uses the .

    Postal Code (Global)

    Populates the column with a postal code from anywhere in the world.

    Uses the .

    Postal Code (US)

    Populates the column with a 5-digit postal code from within the United States.

    Uses the .

    State / Province (Global)

    Populates the column with the name of a state or province from any country in the world. For example, Normandy or Ontario.

    Uses the .

    State / Province (US)

    Populates the column with the name of a state in the United States. For example, Montana or New York.

    Uses the .

    State Abbreviation (Global)

    Populates the column with the postal abbreviation of a state or province from anywhere in the world. For example, NOR or ONT.

    Uses the .

    State Abbreviation (US)

    Populates the column with the postal abbreviation of a state in the United States. For example, MN or NY.

    Uses the .

    Street Address (Global)

    Populates the column with a street address from anywhere in the world. For example, 10 Rue Morgue.

    Uses the .

    Street Address (US)

    Populates the column with a street address from within the United States. For example, 15 Main Street.

    Uses the .

    Banking and finance

    The following generators produce values related to banks and credit cards.

    For more information about these generators and how to configure them in the application, go to Banking and finance in the generator reference.

    Bank City

    Populates the column with the name of a city.

    Uses the General column configuration.

    Bank Country Code

    Populates the column with a 2-character country code. For example, ES, FR, US.

    Uses the .

    Bank LEI

    Populates the column with a legal entity identifier (LEI) for a bank.

    Uses the .

    Bank Name

    Populates the column with the name of a bank in the United States.

    Uses the .

    Bank RIAD Code

    Populates the column with a bank Register of Institutions and Affiliates Data (RIAD) code.

    Uses the .

    Bank Routing Number

    Populates the column with a United States bank routing number.

    Uses the .

    Bank State

    Populates the column with the name of a US state.

    Uses the .

    Bank Street Address

    Populates the column with a street address.

    Uses the .

    Bank Swift Code

    Populates the column with a bank Swift code.

    Uses the .

    Credit Card Number

    Populates the column with a credit card number.

    Credit Card Type

    Populates the column with a credit card type. For example, Visa, MasterCard, American Express.

    Currency Code (Global)

    Populates the column with a 3-character currency code for a currency from anywhere in the world. For example, EUR, AUD, JPY.

    Uses the .

    Currency Code (US)

    Populates the column with the 3-character currency code for the United States, USD.

    Uses the .

    Currency Name (Global)

    Populates the column with the name of a currency from anywhere in the world. For example, Euro, Mexican Peso, Yen.

    Uses the .

    Currency Name (US)

    Populates the column with Dollar.

    Uses the .

    Names and other identifying information

    The following generators produce names and other identifying values for an individual.

    Fabricate automatically correlates name and gender columns within a table.

    For more information about these generators and how they are configured in the application, go to Names and other identifying information in the generator reference.

    First Name

    Produces a given name, such as John or Mary.

    Uses the General column configuration.

    Full Name

    Produces a full name (given name and family name), such as John Smith and Mary Jones.

    Uses the .

    Last Name

    Produces a family name, such as Smith or Jones.

    Uses the .

    Middle Name

    Produces a middle name. Uses the same set of names as the First Name generator. The middle name is always different from the first name.

    Uses the .

    Nickname

    Produces a common nickname for the person, such as Bobby or Lefty.

    Uses the .

    Passport Number (Global)

    Produces a random passport number that matches the country name or code that is in another column of the table.

    Uses the .

    Passport Number (US)

    Produces a random United States passport number.

    Uses the .

    Person Name Suffix

    Produces a name suffix. The possible suffixes are Jr., Sr., and III.

    The suffix is applied to 2% of male names.

    Uses the .

    Person Name Title

    Produces a name title. The possible titles are Mr., Mrs., Ms., and Dr..

    The Dr. prefix is applied to 1% of all records.

    The remaining titles are distributed evenly among the records, and correspond to the gender of the name columns.

    Uses the .

    Sex

    Populates a column with either Male or Female.

    Uses the .

    SSN

    Populates a column with valid United States Social Security numbers (SSNs).

    Username

    Populates a column with a username. For example, johndoe.

    Uses the .

    Networks and files

    The following generators produce values related to network locations and files.

    For more information about these generators and how to configure them in the application, go to Networks and files in the generator reference.

    File Type Extension

    Populates the column with a file extension. For example, .txt or .docx.

    Uses the General column configuration.

    File Type MIME Type

    Populates the column with a file MIME type. For example, text/plain or image/jpeg.

    Uses the .

    IP Address

    Populates the column with an IP address. For example, 192.168.1.100 or 2001:0db8:0000:0000:0000:0000:1a2b:3c4d.

    MAC Address

    Populates the column with a MAC address. For example, 00:1A:2B:3C:4D:5E.

    Project Name

    Populates the column with the name of a project.

    URL

    Populates the column with a URL. For example, https://example.com.

    User Agent

    Populates the column with a user agent value. For example, Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0.

    Companies and products

    The following generators produce values related to business organizations and products.

    For more information about these generators and how to configure them in the application, go to Companies and products in the generator reference.

    Company Domain Name

    Populates the column with the domain name for a company. For example, apple.com or tonic.ai.

    Uses the General column configuration.

    Company Industry

    Populates the column with a company industry. For example, Consumer Electronics or Computer Software.

    Uses the .

    Company IPO Year

    Populates the column with a year to represent when the company IPO occurred.

    Uses the .

    Company Last Sale

    Populates the column with a monetary value to represent the amount of the company's most recent sale. For example 150.25.

    Uses the .

    Company Market

    Populates the column with the stock exchange where the company stock is traded. For example, NASDAQ or NYSE.

    Uses the .

    Company Market Cap

    Populates the column with the market cap for the company. For example, 1.5B.

    Uses the .

    Company Name

    Populates the column with the name of a company.

    Uses the .

    Company Sector

    Populates the column with the sector that the company belongs to. For example, Technology.

    Uses the .

    Company Stock Quote URL

    Populates the column with the URL where the company's stock quote can be found. For example, https://www.nasdaq.com/market-activity/stocks/aapl.

    Uses the .

    Company Stock Ticker Symbol

    Populates the column with the ticker symbol for the company. For example, aapl.

    Uses the .

    EIN

    Populates the column with valid United States employer identification number (EIN).

    Product Category

    Populates the column with a category of product. For example, Health or Electronics.

    Uses the .

    Product Description

    Populates the column with a description of a product.

    Uses the .

    Product Name

    Populates the column with the name of a product.

    Uses the .

    Product Price

    Populates the column with the price of the product.

    Uses the .

    Product Subcategory

    Populates the column with the subcategory that the product belongs to. For example, Oral Care and Hygiene.

    Uses the .

    Video tutorial - Create JSON data in Fabricate
    Video tutorial - Foreign key relationships
    Video tutorial - Deriving one column from another
    Video tutorial - Getting started with Fabricate
    Video tutorial - Fabricate overview
    Video tutorial - Using the AI generator
    Video tutorial - Generating Markov chains in Fabricate

    Air travel

    The following generator produce values related to airports and flights.

    For information about the API data models for these generators, go to in the column attributes.

    Airport Code

    Populates the column with an airport code. For example, SFO or CDG.

    You can configure a .

    You can also configure a to link the column to other columns.

    Configuring a column

    To display the column configuration panel, in the column heading, click the settings icon.

    For information on the data model for configuring these general properties from the API, go to .

    Setting the column name

    In the Name field, set the column name.

    Managing databases from the API

    Getting database information

    Getting all of the databases in a workspace

    To list all of the databases in a specific workspace:

    Entity (table) attributes

    An entity is equivalent to a database table.

    Each entity object can contain the following attributes:

    Healthcare and health insurance

    The following generators produce values related to healthcare and health insurance.

    For more information about these generators and how to configure them in the application, go to in the generator reference.

    Drug Company

    Populates the column with the name of a pharmaceutical company. For example, Pfizer.

    Uses the .

    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    3-character country code
    General column configuration
    2-character country code
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    Airport Continent

    Populates the column with the name of a continent.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport Country Code

    Populates the column with a 2-character country code.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport Elevation (Feet)

    Populates the column with a number intended to represent the elevation where an airport is located.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport GPS Code

    Populates the column with an airport code from the International Civil Aviation Organization (ICAO) code. For example, LFPG or KJFK.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport Latitude

    Populates the column with a latitude value.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport Longitude

    Populates the column with a longitude value.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport Municipality

    Populates the column with the name of a city or metropolitan area where an airport is located.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport Name

    Populates the column with the name of an airport. For example, John F Kennedy Airport or Heathrow Airport.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Airport Region Code

    Populates the column with a 2-character code to represent the region where the airport is located.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Airline

    Populates the column with the name of a commercial airline. For example, Delta Airlines or Lufthansa.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Arrival Airport

    Populates the column with the name of an airport.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Arrival Airport Code

    Populates the column with a 3-character airport code.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Arrival City

    Populates the column with the name of a city.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Arrival Country

    Populates the column with the name of a country.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Departure Airport

    Populates the column with the name of an airport.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Departure Airport Code

    Populates the column with a 3-character airport code.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Departure City

    Populates the column with the name of a city.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Departure Country

    Populates the column with the name of a country.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Departure Time

    Populates the column with a timestamp in 24-hour format. For example, for 1:15 PM, the generated value would be 13:15.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Duration Hours

    Populates the column with a decimal number to indicate the number of hours in a flight. For example, 2.5.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Flight Number

    Populates the column with a value representing a flight number. For example, LH1234.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Air travel
    weighted distribution of the values
    group key
    Drug Generic Name

    Populates the column with a generic name of a drug.

    Uses the General column configuration.

    Drug Name

    Populates the column with the brand name of a drug.

    Uses the General column configuration.

    Drug NDC Code

    Populates the column with a code from the National Drug Code directory.

    Uses the General column configuration.

    HCPCS Code

    Populates the column with a code from the Healthcare Common Procedure Coding System.

    Uses the General column configuration.

    HCPCS Name

    Populates the column with a name from the Healthcare Common Procedure Coding System.

    Uses the General column configuration.

    Hospital City

    Populates the column with the city for a hospital address.

    Uses the General column configuration.

    Hospital Name

    Populates the column with the name of a hospital organization.

    Uses the General column configuration.

    Hospital NPI

    Populates the column with the National Provider Identifier for a hospital.

    Uses the General column configuration.

    Hospital Postal Code

    Populates the column with a postal code for a hospital address.

    Uses the General column configuration.

    Hospital State

    Populates the column with a US state for a hospital address.

    Uses the General column configuration.

    Hospital Street Address

    Populates the column with a hospital street address.

    Uses the General column configuration.

    ICD-10 Diagnosis Code

    Populates the column with a diagnosis code from ICD-10.

    Uses the General column configuration.

    ICD-10 Diagnosis Long Description

    Populates the column with a long description of a diagnosis from ICD-10.

    Uses the General column configuration.

    ICD-10 Diagnosis Short Description

    Populates the column with a short description of a diagnosis from ICD-10.

    Uses the General column configuration.

    ICD-10 Procedure Code

    Populates the column with a procedure code from ICD-10.

    Uses the General column configuration.

    ICD-10 Procedure Long Description

    Populates the column with the long description of a procedure from ICD-10.

    Uses the General column configuration.

    ICD-10 Procedure Short Description

    Populates the column with the short description of a procedure from ICD-10.

    Uses the General column configuration.

    ICD-9 Diagnosis Code

    Populates the column with a diagnosis code from ICD-9.

    Uses the General column configuration.

    ICD-9 Diagnosis Long Description

    Populates the column with the long description of a diagnosis from ICD-9.

    Uses the General column configuration.

    ICD-9 Diagnosis Short Description

    Populates the column with the short description of a diagnosis from ICD-9.

    Uses the General column configuration.

    ICD-9 Procedure Code

    Populates the column with the code for a procedure in ICD-9.

    Uses the General column configuration.

    ICD-9 Procedure Long Description

    Populates the column with the long description of a procedure in ICD-9.

    Uses the General column configuration.

    ICD-9 Procedure Short Description

    Populates the column with the short description of a procedure in ICD-9.

    Uses the General column configuration.

    Healthcare and health insurance
    General column configuration
    Example JSON to derive a JSON schema for the Unstructured Data generator
    Database column that uses the Unstructured Data generator
    Video tutorial - Create a mock API for a database
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    General column configuration
    The response contains an array of database objects. For each database, the database object contains the following fields:

    Where:

    id

    The UUID of the database.

    name

    The name of the database.

    created_at

    The date and time when the database was created.

    updated_at

    The date and time the database configuration was most recently updated.

    last_generated

    The date and time that the database data was most recently generated.

    data_url

    The URL to download the most recently generated data. Until the data is generated, this is null.

    workspace

    The identifier and name of the workspace that the database belongs to.

    For an example, go to list-databases.js in the fabricate-api-examples GitHub repository.

    Getting details for a specific database

    To get the details for a specific database by name:

    The response is a database object with the full details about the database configuration. For information about the database object, go to Data model.

    For an example, go to get-database.js in the fabricate-api-examples GitHub repository.

    Creating and managing database configuration

    Creating or updating a database

    To create a database or update an existing database:

    The request body is a database object with the database configuration.

    The response contains a database object with the new or updated database configuration.

    For information about the database object, go to Data model.

    For an example, go to upsert-database.js in the fabricate-api-examples GitHub repository.

    Deleting a database

    To delete a database:

    Returns an empty response body with a 200 status code.

    For an example, go to delete-database.js in the fabricate-api-examples GitHub repository.

    Adding static data to a table

    In Fabricate, instead of generating the data for a table, you can provide static data in the form of a .csv file. For more information, go to Attaching static data to a table.

    From the API, to update the .csv file content:

    This method expects a multipart/form-data request body with a file parameter that contains the contents of the .csv file to use for the table data.

    The response contains an empty response body with a 200 code.

    For an example, go to update-source-data.js in the fabricate-api-examples GitHub repository.

    { 
      "name": string,
      "data_type": string,
      "generator": "Credit Card Number",
      "percent_null": integer,
      "virtual": boolean,
      "group_key": string,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Credit Card Type",
      "percent_null": integer,
      "group_key": string,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Phone Number",
      // Generator-specific fields
      "include_dash": boolean, // Whether to include dashes
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "IP Address",
      // Generator-specific fields
      "ip_address_version": "ipv4"|"ipv6", // Type of IP address to generate
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "MAC Address",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Project Name",
      // Generator-specific fields
      "include_random_project_number", boolean, // Whether to append a random number
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "URL",
      // Generator-specific fields
      "protocol": boolean, // Whether to include the protocol
      "domain": boolean, // Whether to include the domain
      "path": boolean,  // Whether to include the path
      "filename": boolean,  // Whether to include the filename
      "query": boolean,  // Whether to include a query
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "User Agent",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "EIN",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    GET /api/v1/workspaces/:workspace_name/databases
    [
      {
        "id": "c50db909-6617-40d8-8c81-47de1b2e9806",
        "name": "CREATED_FROM_API",
        "created_at": "2025-03-20T08:44:41Z",
        "updated_at": "2025-03-20T08:44:42Z",
        "last_generated": "2025-03-20T08:44:42Z",
        "data_url": "http://fabricate.tonic.ai/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6IjFjMTg5MjNmLWZkZDAtNDRhZC04Y2U5LTE3Mjk5ZTBkNDEyNCIsInB1ciI6ImJsb2JfaWQifX0=--c9d77fa2a060bfd8c90813f960a901d7ea75c7c1/CREATED_FROM_API.zip",
        "workspace": {
          "id": "7edef645-87a5-46ef-9ea1-cce33cd9a543",
          "name": "Fabricate"
        },
      }
    ]
    GET /api/v1/workspaces/:workspace_name/databases/:database_name
    POST /api/v1/workspaces/:workspace_name/databases
    DELETE /api/v1/workspaces/:workspace_name/databases/:database_name
    POST /api/v1/workspaces/:workspace_name/databases/:database_name/entities/:table_name/source
    Selecting and configuring the generator

    When you create a column, Fabricate assigns a generator based on the column name and any description that you provide.

    You can change the assigned generator, and configure the details for how Fabricate populates the column.

    From the Generator dropdown list, select the generator to use to populate the column.

    To find a specific generator, in the search field, begin to type text in the generator name.

    Using the search field to find a generator

    A generator can have settings that are specific to the generator. For information about generator-specific settings, go to the generator reference.

    Configuring a weighted value distribution for a column

    Many generators allow you to to configure a weighted value distribution.

    The value distribution determines whether to populate the column based on other values. The higher the weight, the more likely that the column is populated.

    Under Distribution:

    1. To add a weight:

      1. Click Add Weight.

      2. From the value type dropdown list, select the type of value to use to set the weight. A value of that type must be present in another column in the table.

        For example, you might configure a weight based on the value of a column that contains email address values.

      3. From the relationship type dropdown list, select the comparison to use for the provided values. You can check that the value is one of a provided list, is not in the provided list, or is not null.

      4. In the value field, provide a comma-separated list of values to use for the comparison. For example, you can set a weight that applies to rows where the email address is either [email protected] or [email protected].

      5. In the Weight field, provide the weight to apply.

    2. To delete a weight, click its delete icon.

    3. In the default weight field, provide the weight to apply for values that do not match a configured weight entry.

    Using a group key to link column values

    Many generators allow you specify a group key.

    A group key allows you to indicate that a set of columns are related.

    Fabricate automatically links columns that use specific generators. For example, columns that contain address fields such as city and state are automatically linked.

    However, you might want to link columns that are not linked automatically.

    In the Group Key field, provide the group key value. Use the same group key value for all of the related columns.

    Setting a percentage of null values

    To make the actual data more realistic, or to address a specific use case, you might want some portion of the data to have null values.

    In the Percentage Null field, provide the percentage of rows for which to populate the column with a null value.

    Setting the database data type for the column

    For database types other than CSV, JSON, or XML, each column includes a <database type> Type field.

    The field contains the data type for the column. The data type must be a valid data type for the database type.

    Fabricate populates the column automatically based on the generator. You can then change the data type if needed.

    Excluding the column from exported data

    You can also exclude a column when you export data from Fabricate. For example, you might want to exclude binary values from the export. Or you might add a column that you use to calculate the value of another column, but that is not part of the actual data.

    To exclude a column, check Hide Column While Exporting.

    The column is grayed out and marked as hidden.

    Hidden columns

    Advanced column settings

    On the column configuration panel, to display the advanced settings, click Show Advanced.

    Marking a column as the primary key

    When you create a table, Fabricate if possible identifies a column as the primary key. You can if needed change the primary key assignment.

    To assign a column as the primary key for the table, check Primary Key.

    Each table can only have one primary key.

    Indexing a column

    Indexing a column improves the performance of views that filter, join, or order by the column.

    To index the column, check Index This Column.

    Setting a seed for consistent values

    Fabricate generates data based on a seed value. By default, the seed is random, meaning that every time you export data, you get a different set of values.

    To essentially freeze the value of a column, you can provide a specific seed for Fabricate to use for every data export.

    One option is to configure a seed for the table. The table columns then use that seed.

    You can also provide a specific seed for a column. The column-level seed overrides any table-level seed value.

    In the column Seed field, provide the seed to use to generate the column values. To have Fabricate generate a seed value, click the generate icon.

    Seed field for a column with the generate icon highlighted

    Note that when you use a seed value to freeze a column value, it also freezes any related columns. For example, when you set a seed to freeze a city column, other address column values are also frozen.

    Until you change the seed, Fabricate generates a consistent set of data.

    Adding SQL for postprocessing

    You might want to make adjustments to the data after it is generated.

    For example, you might want to make text values all lowercase or all uppercase.

    In the Postprocessing SQL text area, enter the SQL. For example, lower(last_name). You can provide any expression that is supported by SQLite. You can also use the Fabricate custom functions and variables.

    If you need help with the SQL, in the AI field, type a description of what you want to happen, then click Generate. For example, Change all of the characters to lowercase.

    General column configuration

    If view is true, the SQL to use to generate the view.

    Otherwise ignored.

    is_static

    true if the entity is backed by a static CSV file.

    Otherwise false.

    source

    Present if the entity is backed by a static CSV file or has an attached CSV file.

    source.data

    The raw data from the CSV file.

    source.filename

    The name of the CSV file.

    constraints

    List of constraints.

    For the list of constraint attributes, go to .

    fields

    List of fields.

    For the list of field attributes. go to .

    For views, this is ignored.

    name

    The name of the entity.

    records

    Use exact to generate an exact number of rows. Use unique to generate one row for each unique value of a field in this entity.

    unique_records_for

    Only applies when records is set to unique. The name of the field that determines the number of unique rows to generate for this entity.

    record_count

    An expression that evaluates to the number of rows to generate for this entity. Only used for entities where the row count is not determined by a foreign key relationship. Ignored if either:

    • records is set to unique

    • The entity has one or more fields that use the Foreign Key generator with a distribution set to something other than none.

    view

    If true, the entity is generated as a view.

    sql

    AI usage cost calculation

    Defining a database is an iterative process that can require multiple rounds of refinement.

    Every Fabricate action that calls an LLM contributes to your AI usage. Different types of actions can cost more or less, depending on their size and complexity.

    Input and output tokens

    Every request from Fabricate to the LLM - such as to create a database, change the data, or download data - incurs input tokens.

    The response from the LLM - such as asking for clarification, creating tables, changing the data, or, creating visualizations - incurs output tokens.

    Incurring input and output tokens for an AI request

    AI usage costs based on request and response "turns"

    Fabricate tracks the token cost for each conversation.

    A conversation starts with an initial prompt and response. Based on the response, you might issue additional prompts to perform tasks such as changing the database structure, changing the data, or generating a visualization of the data.

    Each additional exchange after the initial prompt is called a turn.

    The token cost for an initial prompt or a turn increases with the complexity of the request. For example:

    • A very basic correction or visualization might cost around $0.17. As a rough estimate, the monthly AI usage allowance can cover just over 100 of these smaller tasks.

    • A more complex request, such as modifying a large schema across multiple tables, might cost around $0.37. The monthly AI usage allowance can cover roughly 60 of these larger tasks.

    A highly complex task that contains multiple turns, where you go back and forth 7 times to arrive at the final result that you want, might cost around $2.60. The monthly AI usage allowance can cover roughly 9 of these very large tasks.

    When Fabricate checks the available AI usage allowance

    After each turn, Fabricate checks the remaining AI usage allowance for the current month.

    If your account no longer has a remaining AI usage balance, then:

    • For Free plan accounts, Fabricate pauses access to AI features until the start of the next billing month, when the available AI usage is reset.

    • For Plus and Enterprise accounts, Fabricate begins to track the AI usage overage charges.

    Examples of AI usage costs for different types of requests

    Here are some examples of different types of conversations and their cost.

    Each example shows:

    • The text of the user requests

    • The total input tokens for the conversation

    • The total output tokens for the conversation

    • The total AI usage cost for the conversation. The total cost includes the charge from the LLM as well as the Tonic.ai token fee.

    Note that the token counts and usage cost roughly represent how similar requests might work. The examples are intended to help you to understand how the AI cost is calculated.

    Simple generation

    Step
    Request prompt

    For this conversation:

    Total input tokens
    Total output tokens
    Total cost

    Simple generation with a single iteration

    Step
    Request prompt

    For this conversation:

    Total input tokens
    Total output tokens
    Total cost

    Simple generation with visualization

    Step
    Request prompt

    For this conversation:

    Total input tokens
    Total output tokens
    Total cost

    Complex generation

    Step
    Request prompt

    For this conversation:

    Total input tokens
    Total output tokens
    Total cost

    Complex generation with a few iterations

    Step
    Request prompt

    For this conversation:

    Total input tokens
    Total output tokens
    Total cost

    Complex generation with several iterations

    Step
    Request prompt

    For this conversation:

    Total input tokens
    Total output tokens
    Total cost

    Geographic locations

    The following generators produce values related to geographic locations.

    Note that other generators specific to air travel, healthcare, and finance also produce some geographic values. For example, there are generators that produce city where a bank, airport, or hospital is located.

    Fabricate automatically correlates location values. For example, in a given record, the value in a city column is a city located in the state column.

    For information about the API data models for these generators, go to Geographic locations in the column attributes.

    City (Global)

    Populates the column with the name of a city from anywhere in the world.

    You can configure a .

    You can also configure a to link the column to other columns.

    City (US)

    Populates the column with the name of a city from within the United States.

    You can configure a .

    You can also configure a to link the column to other columns.

    Country (Global)

    Populates the column with the name of a country from anywhere in the world.

    You can configure a .

    You can also configure a to link the column to other columns.

    Country (US)

    Populates the column with the United States.

    You can configure a .

    You can also configure a to link the column to other columns.

    Country Code (Global, 3 Character)

    Populates the column with a for a country from anywhere in the world. For example, FRA, ESP, USA.

    You can configure a .

    You can also configure a to link the column to other columns.

    Country Code (Global)

    Populates the column with a for a country from anywhere in the world. For example, FR, ES, US.

    You can configure a .

    You can also configure a to link the column to other columns.

    Country Code (US)

    Populates the column with the 2-character country code for the United States - US.

    You can configure a .

    You can also configure a to link the column to other columns.

    Full Address (Global)

    Populates the column with a full mailing address from anywhere in the world.

    You can configure a .

    You can also configure a to link the column to other columns.

    Full Address (US)

    Populates the column with a full mailing address from within the United States.

    You can configure a .

    You can also configure a to link the column to other columns.

    Latitude (Global)

    Populates the column with a latitude value from anywhere in the world.

    You can configure a .

    You can also configure a to link the column to other columns.

    Latitude (US)

    Populates the column with a latitude value from within the United States.

    You can configure a .

    You can also configure a to link the column to other columns.

    Longitude (Global)

    Populates the column with a longitude value from anywhere in the world.

    You can configure a .

    You can also configure a to link the column to other columns.

    Longitude (US)

    Populates the column with a longitude value from within the United States.

    You can configure a .

    You can also configure a to link the column to other columns.

    Postal Code (Global)

    Populates the column with a postal code from anywhere in the world.

    You can configure a .

    You can also configure a to link the column to other columns.

    Postal Code (US)

    Populates the column with a 5-digit postal code from within the United States.

    You can configure a .

    You can also configure a to link the column to other columns.

    State / Province (Global)

    Populates the column with the name of a state or province from any country in the world. For example, Normandy or Ontario.

    You can configure a .

    You can also configure a to link the column to other columns.

    State / Province (US)

    Populates the column with the name of a state in the United States. For example, Montana or New York.

    You can configure a .

    You can also configure a to link the column to other columns.

    State Abbreviation (Global)

    Populates the column with the postal abbreviation of a state or province from anywhere in the world. For example, NOR or ONT.

    You can configure a .

    You can also configure a to link the column to other columns.

    State Abbreviation (US)

    Populates the column with the postal abbreviation of a state in the United States. For example, MN or NY.

    You can configure a .

    You can also configure a to link the column to other columns.

    Street Address (Global)

    Populates the column with a street address from anywhere in the world. For example, 10 Rue Morgue.

    You can configure a .

    You can also configure a to link the column to other columns.

    Street Address (US)

    Populates the column with a street address from within the United States. For example, 15 Main Street.

    You can configure a .

    You can also configure a to link the column to other columns.

    Viewing, querying, and editing the data

    Fabricate provides multiple views for a Data Agent database. You can also run queries against the data and make direct updates to values in data cells.

    Available views of a Data Agent database

    For a Data Agent database, you can choose from the following types of views:

    • Table view - The default view. Displays the data for the current table in a table.

    • JSON view - Displays the data for the current table as a set of JSON documents. Each row is a separate document.

    Table view is the default.

    To switch to JSON view, click the JSON view icon.

    Asking the Data Agent about the data

    In addition to using the Data Agent to create and make changes to the data, you can also request information about the data.

    For example, you might ask something like:

    • How many customers have more than 2 items in an order?

    • How many customers are from each state?

    If applicable, the Data Agent generates a pie chart or bar chart to illustrate the results. You can also prompt the Data Agent to generate a specific type of chart.

    Running SQL queries against the data

    You can run SQL queries against a Data Agent database to:

    • Retrieve information about the data

    • Retrieve a subset of the data

    • Add records to the data

    • Update records in the data

    To run a SQL query against the database:

    1. Click SQL.

    1. On the SQL Editor panel, in the SQL field, provide the SQL query. The SQL can include SELECT, INSERT, UPDATE, and DELETE.

    2. Click Execute Query.

    Editing individual cells

    In a Data Agent database, to get the exact value that you want, you can manually edit the values in individual cells.

    To edit an individual cell value:

    1. Click the cell value.

    1. On the edit panel, enter the new value.

    1. Click Save.

    Removing a table from a database

    You can remove a table from a rule-based database.

    Before you remove a table, make sure that the table is not used in the configuration of another table.

    To remove a table:

    1. In the table heading, click the delete icon.

    2. On the confirmation panel, click Delete Table.

    Delete icon to remove a table from the database

    Creating and querying database snapshots

    To provide data for the mock API to query, you create database snapshots. Fabricate stores the snapshot data internally.

    Creating a snapshot

    To create a database snapshot of the current rule-based database data:

    1. If no snapshots are currently configured, click Create a DB Snapshot.

    2. If there are existing snapshots, then:

      1. Click the snapshot dropdown.

      2. In the dropdown, click Create New Snapshot.

    1. On the Create DB Snapshot panel, in the Snapshot Name field, provide a name for the snapshot. Fabricate provides a default value of v<snapshot count>. For example, v1 or v2.

    2. Click Create Snapshot. Fabricate generates the snapshot and adds it to the dropdown list.

    Querying a snapshot

    To verify the snapshot data works as expected, you can run queries against the snapshot.

    To query a snapshot:

    1. Click the snapshot dropdown.

    2. In the dropdown list, select the snapshot to query against.

    3. Click SQL.

    4. On the SQL Editor panel, enter the query, then either:

    Downloading a snapshot

    You can download a snapshot. The snapshot is downloaded to a file named <database name>.sqlite.

    To download a snapshot:

    1. Click the snapshot dropdown.

    2. In the dropdown list, click the download icon for the snapshot.

    Removing a snapshot

    To remove a snapshot:

    1. Click the snapshot dropdown.

    2. In the dropdown list, click the delete icon for the snapshot.

    Managing database tables

    For a rule-based database, you can add and remove tables, change the column configuration, and generate data.

    Dates and times

    The following generators produce datetime values. Note that there are also category-specific generators that produce datetime values, such as a car model year or an IPO date.

    For information about the API data models for these generators, go to in the column attributes.

    Datetime

    Populates the column with a datetime value.

    From the Type dropdown, select the type of datetime value to generate:

    Exporting data from a Data Agent database

    Supported export formats

    When you are ready to use the data, you can export the Data Agent database to one of several formats.

    Each download is in the form of a .zip file, and includes a readme file that contains a summary of the export.

    The following formats are available to all users:

    • CSV -

    Backing up and restoring the database definition

    From the database Settings tab, you can:

    • Back up the rule-based database configuration to a JSON file.

    • Restore the database configuration from a JSON file to restore that.

    The configuration includes the tables, columns, and their settings.

    To display the Settings tab, click the database name.

    Regenerating table data

    As you change the table and column configuration, Fabricate automatically updates the generated data.

    You can also if needed regenerate the data manually. For example, you might want to see more values. Or you might be debugging an issue where the generated data isn't what you expect, and want to see the results of a new regeneration.

    When you regenerate the data, Fabricate does not touch any .

    To regenerate the table data, in the table heading, click the regenerate icon.

    Tracking and limiting AI usage and cost

    Tracking the cost of a Data Agent conversation

    For a Data Agent chat, to track the cost of a conversation, hover over the usage icon.

    The tooltip includes the cost so far of the conversation.

    {
      "name": string,
      "records": string,
      "unique_records_for": string,
      "record_count": string,
      "view": boolean,
      "sql": string,
      "is_static": boolean,
      "source": {
        "data": string,
        "filename": string
      },
      "constraints": constraint[],
      "fields": field[]
    }

    Configure table settings Set constraints, a seed value, and whether to include the table in exported data.

    Add a table to the database Create a table, clone a table, or create a table from imported data.

    Remove a table Delete a table from a database.

    Attach static data Upload a .csv with data that is always present in the table.

    Regenerate table data Populate the table with a new set of data.

    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    3-character country code
    weighted distribution of the values
    group key
    2-character country code
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    Constraint attributes
    Column attributes
    Remove records from the data
    Table view icon
    JSON view for a Data Agent database
    SQL option to run a SQL query against the data
    Clicking a cell value to manually edit it
    Edit Cell Value panel to edit the value in a cell

    Press Enter.

  • Click Run Query.

  • Dropdown list of database snapshots
    static data that you uploaded to the table
    Regenerate icon to regenerate the data in a table

    Turn 6

    Generate a full database export in PostgreSQL SQL format.

    Initial prompt

    Create a CSV of 5,000 fake users. I need 5 columns: user_id (UUID), first_name, last_name, email, and a created_at timestamp from the last 6 months.

    30,494

    3,221

    $0.17

    Initial prompt

    Generate a list of 100 products with product_id, name, category, and price (between $10.00 and $100.00).

    Turn 1

    Actually, can you add a 'SKU' column with a random 8-character alphanumeric string?

    65,637

    4,754

    $0.34

    Initial prompt

    Generate 2,000 customer leads. Include name, email, and a 'country' column (options: USA, Canada, Mexico).

    Turn 1

    Can you visualize the distribution of the 'country' column for me in a bar chart?

    77,851

    3,231

    $0.36

    Initial prompt

    Create a relational dataset for an e-commerce store. I need 3 tables: 'Users' (user_id, name, email), 'Products' (product_id, name, price), and 'Orders' (order_id, user_id, product_id, quantity, order_date). Make sure user_id and product_id in 'Orders' are valid foreign keys.

    91,212

    5,346

    $0.45

    Initial prompt

    Create a relational dataset for an e-commerce store. I need 3 tables: 'Users' (user_id, name, email), 'Products' (product_id, name, price), and 'Orders' (order_id, user_id, product_id, quantity, order_date). Make sure user_id and product_id in 'Orders' are valid foreign keys.

    Turn 1

    This is a good start. Can you add a 'shipping_address' (street, city, zip, state) to the 'Users' table?

    Turn 2

    Also, add a 'category' (e.g., 'electronics', 'clothing') to the 'Products' table.

    Turn 3

    OK, now show me the first 5 rows from the 'Orders' table so I can validate it.

    269,142

    9,562

    $1.23

    Initial prompt

    Create a synthetic patient database. I need patient_id, full_name, DOB, phone_number, and a 'diagnosis_code' in a valid ICD-10 format (e.g., J01.0, K21.9). All PII must be synthetic but look realistic (e.g., valid area codes for phone numbers).

    Turn 1

    The names look too generic. Can you use a wider variety of first and last names?

    Turn 2

    The diagnosis codes are too random. Can you make the distribution weighted? Make 'J01.0' 15% of records, 'K21.9' 10% of records, and the rest 'other'.

    Turn 3

    Please visualize the age distribution of the patient records.

    Turn 4

    Now, add a 'blood_type' column (e.g., A+, O-, B+).

    Turn 5

    Looks perfect. Generate the final Python script for me.

    547,730

    25,665

    $2.60

    Tracking turns in an AI conversation

    Absolute - A datetime or date value.

  • Relative - A datetime or date value that occurs within a specified range of another datetime column.

  • Series - Populates the values as a series. For example, the timestamp for each subsequent row might occur 20 minutes after the previous row.

  • For all of the types, to only populate dates and exclude the times, check Date Only.

    Configuring an absolute datetime value

    For an absolute datetime value:

    1. From the Distribution dropdown list, select how to distribute the datetimes across the data. The available options are Normal and Uniform.

    2. For a uniform distribution:

      1. Under Start, select the earliest datetime to use.

      2. Under End, select the latest datetime to use.

    3. For a normal distribution:

      1. Under Centered on, select the datetime to use as the basis for the distribution.

      2. Under Min, select the minimum gap between the datetimes. The gap uses the value selected from Units.

      3. Under Mean, select the mean gap between the datetimes. The gap uses the value selected from

    Configuring a relative datetime value

    A relative datetime value sets the datetime relative to another datetime column. For example, set the end-date column within 6-12 months after the start-date column.

    If the table does not contain another datetime column to use as the basis for the relative value, then you cannot use the relative datetime option.

    For a relative datetime value, under Range:

    1. Set the minimum and maximum amount of time difference from the base datetime column.

    2. Select the unit of time to use for the time difference.

    3. Select whether the datetime for the current column occurs before or after the base datetime column.

    4. Select the datetime column to use as the base column.

    Configuring a series datetime value

    A series datetime value creates a regular series across the rows. For example, your table might represent a series of jobs that occur at regular intervals.

    Selecting the starting point

    First, select the starting point for the series.

    To use a specific datetime as the starting point:

    1. From the Start At dropdown list, select Fixed.

    2. Set the start date and time.

    To use the value of another datetime column as the starting point:

    1. From the Start At dropdown list, select from column.

    2. Select the datetime column to use. If the table does not contain another datetime column, then you cannot use the from column option.

    Partitioning the data and setting the row order

    You can partition the data. The time series is then within each partition. For example, you might want a separate series of datetimes for different departments or locations.

    The order is used to sort the rows. The first row gets the earliest datetime in the series, the second row gets the next datetime, and so on.

    To set up the partition:

    1. From the Partition By dropdown list, select the column to use to partition the data.

    2. From the Order By dropdown list, select the column to use to order the rows. If you partition the data, then the order is within the partition.

    Setting the series interval

    The Interval configuration determines the gap between the series values.

    From the Distribution dropdown list, select the type of interval.

    • Fixed indicates an exact amount of time between each datetime.

    • Normal indicates a normal distribution of datetime values.

    • Uniform indicates a uniform distribution of the datetime values.

    For all of the distribution types, from the Unit dropdown list, select the unit to use to set the amount of time between the values.

    For a fixed distribution, in the Exactly field, specify the exact amount of time between each value. For example, the series values might be exactly 5 minutes apart.

    For a normal distribution:

    1. In the Minimum field, set the minimum amount of time between values.

    2. In the Mean field, set the mean amount of time between values.

    3. In the Standard Deviation field, set the standard deviation for the amount of time between values.

    4. In the Maximum field, set the maximum amount of time between values.

    Timezone (Global)

    Populates the column with the name of a time zone from anywhere in the world. For example, Europe/Paris.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Timezone (US)

    Populates the column with the name of a time zone that occurs in the United States. For example, US/Central.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Dates and times
    Produces a .csv file for each table.
  • JSON array - Produces a JSON array for each table.

  • JSONL - Produces a .jsonl file for each table.

  • MySQL - Produces a .sql file to create and populate the database.

  • PostgreSQL - Produces a .sql file to create and populate the database.

  • SQLLite - Produces a .db file that contains the database.

  • These formats require an Enterprise license:

    • Avro - Produces an .avro file for each table.

    • Databricks - Produces a .sql file to create and populate the database.

    • Iceberg - Produces a folder structure that contains the data and metadata.

    • Microsoft SQL Server - Produces a .sql file to create and populate the database.

    • MongoDB - Produces a .bson file for each table, and a load.sh file.

    • Oracle - Produces a .sql file to create and populate the database.

    • Parquet - Produces a .parquet file for each table.

    • XML - Produces a folder for each table. Within each table, produces an .xml file for each record.

    You can also choose the Push to database option, which uses the data to populate an existing database that you specify.

    Exporting the full database

    To export the full Data Agent database:

    1. In the database heading, click Export.

    2. In the Export menu, select the format to use.

    Export format options for a Data Agent database

    For options other than Push to database, Fabricate immediately creates and downloads the files.

    For the Push to database option, Fabricate prompts to you configure and select a database connection. For information on how to set up and select the connections, go to Adding and selecting a database connection.

    Prompting the Data Agent to export data

    You can also prompt the Data Agent to export the data. For example: Export the database to CSV files.

    With the Data Agent chat, you can customize the exported data. You might want to export only a subset of the database, or a specific table.

    For example: Download to CSV files all of the records associated with the top 5 orders by value.

    Backing up the database configuration

    To back up the database, click Backup, then select Back up to JSON.

    Backup dropdown list for a database

    On the JSON configuration panel, to copy the JSON, click Copy to Clipboard.

    Restoring database configuration from a JSON file

    To restore the database configuration from a JSON file:

    1. Click Backup, then select Restore from JSON.

    2. On the JSON configuration panel, paste the JSON configuration.

    3. Click Restore.

    Monitoring your AI cost for the current billing cycle

    On the My Account page, the AI Usage section tracks your AI usage costs for the current billing cycle.

    For each day when there was AI usage, the AI Usage chart shows the cost.

    The AI Usage section also displays a summary that includes:

    • The total cost of the AI usage so far.

    • The AI usage allowance for your account.

    • The AI usage overage cost that will be charged at the end of the month or quarter.

    Limiting your AI usage overage

    On the My Account page, in the Current Plan section, the AI Usage Limit field sets the maximum AI usage overage cost per billing cycle for your account.

    Current Plan section with the AI Usage Limit field to set the maximum overage

    The default value is $500. If the field is empty, then there is no limit on the AI usage overage.

    When the usage cost reaches the total of your allowance plus the maximum overage, AI features are paused until the next billing cycle.

    For example, your account is billed each month for the AI overage above the allowance that you receive. Your allowance is $25 for each month. Assuming you use the default $500 overage limit, your account:

    • Can use up to $525 in AI usage cost each month. After that, AI features are paused until the next billing cycle.

    • Can be billed for up to $500 for overage each month.

    Note that this cap on AI usage applies even if you use your own LLM key.

    AI usage tooltip for the Data Agent with the cost of the conversation

    About mock APIs

    The product or feature that you are using Fabricate data for might not be able to interact directly with a database.

    Instead, it interacts with an API that in turn interacts with the database.

    Diagram that shows interaction with a mock API

    To support this use case, you can define a mock API.

    For more information, view the video tutorial.

    Data type and specific values

    The following generators populate a column with a specific value or a random value of a specific type.

    For more information about each generator and how to configure in the application, go to .

    Array

    The Array generator is a premium feature. Free plan users have limited

    Using your own LLM key for AI usage

    Requires an Enterprise license.

    Enterprise accounts can choose to provide an Anthropic or Amazon Bedrock LLM key to use for Fabricate AI features.

    When you provide your own LLM key, Tonic.ai does not charge your for AI usage, only for basic access. However, any still applies.

    Units
    .
  • From the Units dropdown list, select the unit to use for the distribution.

  • Under Std Dev, select the standard deviation for the gap between the datetimes. The gap uses the value selected from Units.

  • Under Max, select the maximum gap between the datetimes. The gap uses the value selected from Units.

  • Define a mock API Define the API directly or use AI.

    Create and query data snapshots Data snapshots provide the data for a mock API to query against.

    Mock API reference Structure and syntax for a mock API.

    .

    Populates the field with an array of values.

    Blank

    The Blank generator inserts a null value.

    Boolean

    Inserts a random boolean value - either true or false.

    Constant

    Inserts the same value into all of the rows.

    Image (binary)

    Produces a JPEG image in binary format.

    Lorem Ipsum

    Populates the column with filler text.

    Mongo ObjectId

    Populates the column with a MongoDB object identifier.

    Intended for document identifier columns in a MongoDB database.

    Number

    Variants are a premium feature. Free plan users have limited access to premium features.

    Inserts a numeric value.

    Object

    The Object generator is a premium feature. Free plan users have limited access to premium features.

    Populates the field with a JSON object.

    UUID

    Generates a random universally unique identifier (UUID).

    Data type and specific values
    access to premium features
    {
       "name": string,
       "generator": "Array",
        // Generator-specific fields
       "items": {
            "generator": string // Generator for the array values
        // Configuration for the selected generator.
        },
       "distribution": "fixed"|"normal"|"uniform", // Distribution to use for the 
                                                   // number of array values
       // Fixed distribution
       "exact_value": number // Exact number of array values
       // Uniform distribution
       "min": number, // Minimum number of array values
       "max": number, // Maximum number of array values
       // Normal distribution
       "min": number, // Minimum number of array valuesl
       "max": number, // Maximum number of array values
       "mean": number, // Mean number of array values
       "stddev": number, // Standard deviation for the number of array values
       //End generator-specific fields
       "percent_null": integer,
       "virtual": boolean,
       // Advanced options
       "primary_key": boolean,
       "index": boolean,
       "seed": string,
       "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Blank",
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Boolean",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Constant",
      // Generator-specific fields
      "constant_value": string, // The value to assign to the column
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Image (binary)",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Lorem Ipsum",
      // Generator-specific fields
      "lorem_ipsum_unit": "words"|"sentences"|"paragraphs", // Content format
      "distribution": "fixed"|"normal"|"uniform", // Type of distribution to use
      // -----------------------------------------------------------------------
      // Fixed distribution
      "exact_value": integer, // The exact length
      // ----------------------------------------------------------------------
      // Uniform distribution
      "min": integer, // Minimum length
      "max": integer, // Maximum length
      // ---------------------------------------------------------------------
      // Normal distribution
      "min": integer, // Minimum length
      "mean": string, // Mean length
      "std_dev": string, // Standard deviation
      "max": integer, // Maximum length
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Mongo ObjectId",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Number",
      // Generator-specific fields
      "distribution": "autoincrement"|"uniform"|"binomial"|"exponential"|
                      "geometric"|"normal"|"poisson"|"series", // Distribution type
      "min": integer // For autoincrement, the increment value
      "variants": [ // Set of variants for non-autoincrement distribution
        {  
          "condition_type": "sql"|”percentage", // The type of condition
          "conditions": string, // For sql, the expression to identify the condition 
                               // that triggers the variant
          "condition_percentage": float, // For percentage, the percentage of records
                                         // that use the variant
          // ---------------------------------------------------------------------
          // Uniform distribution
          "min": integer, // Minimum value
          "max": integer, // Maximum value
          "decimals": integer, // Number of decimal places
          // ---------------------------------------------------------------------
          // Binomial distribution
          "trials": string // Number of tests
          "success_probability": string, // Success probability
          // ---------------------------------------------------------------------
          // Exponential distribution
          "min": integer, // Minimum value
          "rate": string, // Rate of increase
          "max": integer, // Maximum value
          "decimals": integer, // Number of decimal places
          // ----------------------------------------------------------------------
          // Geometric distribution
          "min": integer, // Minimum value
          "success_probability": string, // Success probability
          "max": integer, // Maximum value
          "decimals": integer, // Number of decimal places
          // ---------------------------------------------------------------------
          // Normal distribution
          "min": integer, // Minimum value
          "mean": string, // Mean value
          "std_dev": string, // Standard deviation
          "max": integer, // Maximum value
          "decimals": integer, // Number of decimal places
          // ---------------------------------------------------------------------
          // Poisson distribution
          "min": integer, // Minimum value
          "mean": string, // Mean value
          "max": integer, // Maximum value
          "decimals": integer, // Number of decimal places
          // ---------------------------------------------------------------------
          // Series distribution
          "start_field_id": uuid, // Start field
          "end_field_id": uuid, // End field
          "partition_by_field_id": uuid, // Partition by field
          "order_by_field_id": uuid, // Order by field
          "decimals": integer, // Number of decimal places
          "curve_type": "exponential"|"logarithmic"|"from column", // Curve type
          "rate": string, // Rate of increase for exponential and
                          // logarithmic curve types
          "curve_type_field_id": uuid, // Field for From field curve type
          "volatility_type": "fixed"|"from_column", // Type of volatility
          "volatility": string, // Fixed volatility value
          "volatility_field_id": uuid // From column volatility column
        }
      ],
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
       "name": string,
       "generator": "Object",
       // Generator-specific fields
       "fields": [
       // Entry for each field
          {
             "name": string // Name of the object field
             "generator": string // Generator for the field value
             // Configuration for the selected generator
          }
        ],
       // End generator-specific fields
       "percent_null": integer,
       "virtual": boolean,
       // Advanced options
       "primary_key": boolean,
       "index": boolean,
       "seed": string,
       "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "UUID",
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    Enabling the option to provide your own key

    To enable the option to use your own LLM key, you must contact Tonic.ai.

    After Tonic.ai configures your account to require a custom LLM key, then before you can use any AI features, including Data Agent databases, you must provide the LLM key.

    Selecting the LLM provider

    On the My Account page, under LLM Provider Settings, from the Provider dropdown list, select the LLM provider to use.

    You can use either Anthropic or Amazon Bedrock.

    LLM Provider Settings to configure the LLM key for an Enterprise account

    Providing an Anthropic key

    If you choose Anthropic, then in the Anthropic API Key field, provide your Anthropic key.

    Providing an Amazon Bedrock key

    If you choose Amazon Bedrock, then:

    1. In the Amazon Bedrock API Key field, provide your Amazon Bedrock key.

    2. In the AWS Region field, specify the AWS Region where your account is located.

    Testing and saving the LLM provider key

    To test the provided key, click Test Credentials.

    To save the configuration, click Save Changes.

    configured limit on AI usage cost

    Fabricate custom SQLite functions and variables

    Fabricate uses SQLite. Whenever you provide a SQL expression, you can use any expression that SQLite supports.

    Fabricate also provides some additional functions that you can use to generate data, as well as interpolation variables.

    Adding typos to a string

    To add typos to a string, use the fab_add_typos function:

    fab_add_typos(input, unit, value, operation)

    Where:

    • input is the string to add the typos to.

    • unit is the type of unit to use to configure how the typos are added. The allowed values are distance or rate. The default value is rate. distance indicates to provide a maximum number of characters to insert, delete, or substitute. rate indicates to provide a probability of a typo occurring in a given character. This simulates human typing errors by randomly inserting, deleting, or substituting characters.

    For example:

    Calling a Fabricate generator

    To call a Fabricate generator, use the fab_gen function:

    fab_gen(generator, ...params)

    Where:

    • generator is the name of the generator.

    • params are the generator parameters.

    The fab_gen function currently supports the Number generator. The following examples show how to generate numbers using the different distribution options.

    Auto-increment sequence

    To generate a sequence of numbers, starting at a given number and increasing by a specified type value:

    fab_gen('number', 'auto_increment', start?: integer, step?: integer)

    For example, to generate a sequence that starts at 1 and increments by 1:

    fab_gen('number', 'auto_increment', 1, 1)

    Uniform distribution

    To generate a random number:

    • Between given minimum and maximum values

    • With the specified number of decimal places

    fab_gen('number', 'uniform', min: integer, max: integer, decimals?: integer)

    For example, to generate a random number:

    • Between 1 and 10

    • With 2 decimal places

    fab_gen('number', 'uniform', 1, 10, 2)

    Normal distribution

    To generate a random number from a normal distribution:

    • With the given mean and standard deviation

    • Between given minimum and maximum values

    • With the specified number of decimal places

    fab_gen('number', 'normal', mean: float, std_dev: float, min?: float, max?: float, decimals?: integer)

    For example, to generate a normal distribution:

    • With a mean of 5 and a standard deviation of 1

    • Between 1 and 10

    • With 2 decimal places

    fab_gen('number', 'normal', 5, 1, 1, 10, 2)

    Binomial distribution

    To generate a random number from a binomial distribution:

    • For a specified number of tests

    • With the given probability of success

    fab_gen('number', 'binomial', trials, success_probability)

    For example, to generate a binomial distribution:

    • For 50 tests

    • With 0.5 probability of success

    fab_gen('number', 'binomial', 50, 0.5)

    Geometric distribution

    To generate a random number from a geometric distribution:

    • With the given probability of success

    • Between given minimum and maximum values

    fab_gen('number', 'geometric', p: float, min?: integer, max?: integer)

    For example, to generate a geometric distribution:

    • With 0.3 probability of success

    • Between 1 and 10

    fab_gen('number', 'geometric', 0.3, 1, 10)

    Exponential distribution

    Generates a random number from an exponential distribution:

    • With the given mean

    • Between given minimum and maximum values

    • With the specified number of decimal places

    fab_gen('number', 'exponential', mean: float, min?: float, max?: float, decimals?: integer)

    For example, to generate an exponential distribution:

    • With a mean of 1

    • Between 1 and 10

    • With 2 decimal places

    fab_gen('number', 'exponential', 1, 1, 10, 2)

    Poisson distribution

    To generate a random number from a Poisson distribution:

    • With the given mean

    • Between given minimum and maximum values

    • With the specified number of decimal places

    fab_gen('number', 'poisson', mean: float, min?: integer, max?: integer, decimals?: integer)

    For example, to generate a Poisson distribution:

    • With a mean of 5

    • Between 1 and 10

    fab_gen('number', 'poisson', 5, 1, 10)

    Getting and appending Luhn check digits

    Returning the Luhn check digit

    To return the Luhn check digit for an input string.

    fab_luhn_check_digit(input)

    For example, to return the Luhn check digit for the string '123456':

    fab_luhn_check_digit('123456')

    Appending the Luhn check digit

    To append the Luhn check digit to an input string.

    fab_append_luhn_check_digit(input)

    For example, to return the string '123456' with the Luhn check digit appended:

    fab_append_luhn_check_digit('123456')

    Generating a random integer

    To generate a random 64-bit integer, optionally between a specified minimum and maximum value:

    fab_random(min?, max?)

    You can use this to randomize the order in select statements.

    While SQLite provides a built-in random() function, it only produces a single random value. The fab_random() function produces a different random value for each row.

    For example, for each customer, to pull a random order_id from the Orders table:

    To generate a random number between 1 and 100, and use that value to set the probability for the following conditions:

    • 20% chance of returning null

    • 80% chance of returning the user_id

    Getting the hexadecimal and hash versions of a string

    Getting the hexadecimal representation

    To return the hexadecimal representation of an input string:

    hex(input)

    For example, to return the hexadecimal representation of the string 'hello':

    hex('hello')

    Getting the MDB hash of a string

    To return the MD5 hash of an input string as a hexadecimal string:

    md5_hex(input)

    For example, to return the MD5 hash of the string 'hello':

    md5_hex('hello')

    Getting the SHA-1 hash of a string

    To return the SHA-1 hash of an input string as a hexadecimal string:

    sha1_hex(input)

    For example, to return the SHA-1 hash of the string 'hello':

    sha1_hex('hello')

    Getting the SHA-256 hash of a string

    To return the SHA-256 hash of an input string as a hexadecimal string:

    ha256_hex(input)

    For example, to return the SHA-256 hash of the string 'hello':

    sha256_hex('hello')

    Fabricate variables

    Fabricate also provides a set of interpolation variables.

    To use a variable, enclose it in double curly braces: {{variable}}.

    Fabricate supports the following interpolation variables.

    Referring to a parent object or array

    To reference the nth parent object or array, use:

    {{parent(n)}}

    When (n) is omitted, it references the immediate parent object or array. In other words, {{parent}} is equivalent to {{parent(0)}}.

    For example:

    • {{parent}}.id gets the value of the id field or column from the immediate parent object.

    • {{parent(1)}}.id gets the value of the id field or column from the grandparent object, which is 2 levels up.

    Referring to the root table

    To reference the root table for an object or array, use:

    {{root_table}}

    For example, {{root_table}}.id gets the value of the id field or column from the root table.

    Mock API reference

    Fabricate's Mock API syntax is inspired by Express.

    Routes

    To declare routes, use the api object:

    To create a full API, chain multiple routes together:

    The api object supports the following methods:

    • get

    • post

    • put

    • patch

    • delete

    • all

    Note, however, that database snapshots are currently read-only.

    Calling the API

    Your API is available at:

    https://fabricate.tonic.ai/api/v1/workspaces/<user name>/databases/<database name>/api

    Routes are defined under this route path. So for example, to call the '/users' route, you use the following URL:

    https://fabricate.tonic.ai/api/v1/workspaces/<user name>/databases/<database name>/api/users

    Authentication

    To authenticate your requests, send an Authorization header with the value:

    Bearer <your API key>

    For information on how to create and manage API keys, go to .

    Request format

    The request object contains the following properties:

    • body - the request body as a string

    • headers - the request headers as an object

    • method - the request method

    To access query parameters, use the req.query object. To change the response status, use the res.status(code) method:

    Responses

    JSON response

    To send a JSON response, use the res.json method:

    Plain text response

    To send a plain text response, use the res.send method:

    Set response headers

    To set response headers, use the res.setHeader method:

    Set multiple response headers

    To set multiple headers, use the res.set method:

    Querying your database snapshot

    To query your database snapshot, use the db.query method:

    Modifying your database snapshot

    To modify your database snapshot, use the db.run method:

    The db.run method returns an object with:

    Generating UUIDs

    To generate a new UUID, use the fab_uuid() function. For example:

    Companies and products

    The following generators produce values related to business organizations and products.

    For information about the API data models for these generators, go to Companies and products in the column attributes.

    Company Domain Name

    Populates the column with the domain name for a company. For example, apple.com or tonic.ai.

    You can configure a weighted distribution of the values.

    You can also configure a group key to link the column to other columns.

    Company Industry

    Populates the column with a company industry. For example, Consumer Electronics or Computer Software.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company IPO Year

    Populates the column with a year to represent when the company IPO occurred.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company Last Sale

    Populates the column with a monetary value to represent the amount of the company's most recent sale. For example 150.25.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company Market

    Populates the column with the stock exchange where the company stock is traded. For example, NASDAQ or NYSE.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company Market Cap

    Populates the column with the market cap for the company. For example, 1.5B.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company Name

    Populates the column with the name of a company.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company Sector

    Populates the column with the sector that the company belongs to. For example, Technology.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company Stock Quote URL

    Populates the column with the URL where the company's stock quote can be found. For example, https://www.nasdaq.com/market-activity/stocks/aapl.

    You can configure a .

    You can also configure a to link the column to other columns.

    Company Stock Ticker Symbol

    Populates the column with the ticker symbol for the company. For example, aapl.

    You can configure a .

    You can also configure a to link the column to other columns.

    EIN

    Populates the column with valid United States employer identification number (EIN).

    Product Category

    Populates the column with a category of product. For example, Health or Electronics.

    You can configure a .

    You can also configure a to link the column to other columns.

    Product Description

    Populates the column with a description of a product.

    You can configure a .

    You can also configure a to link the column to other columns.

    Product Name

    Populates the column with the name of a product.

    You can configure a .

    You can also configure a to link the column to other columns.

    Product Price

    Populates the column with the price of the product.

    You can configure a .

    You can also configure a to link the column to other columns.

    Product Subcategory

    Populates the column with the subcategory that the product belongs to. For example, Oral Care and Hygiene.

    You can configure a .

    You can also configure a to link the column to other columns.

    Calculated or related values

    These generators calculate values based on a script, formula, or on other values in the database.

    For details about each generator and how to configure them in the application, go to in the generator reference.

    AI

    Generates data values based on a prompt that you provide.

    api
        .get('/users', (req, res, { db }) => {
            // List the first 10 users
            const users = db.query('SELECT * FROM users limit 10');
            res.json(users)  })
    api
      .get('/users', (req, res, { db }) => {
         // ...
      })
      .get('/users/:id', (req, res, { db }) => {
        // ... 
      })
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
    weighted distribution of the values
    group key
  • value is the distance or rate value.

    • When unit is distance, value is an integer. The default value is 1.

    • When unit is rate, value is a float. The default value is 0.1, which indicates a 10% probability.

  • operation is an optional parameter to determine how the typos are created. If you do not provide the operation parameter, then Fabricate uses all of the operations. Use | to separate multiple operations. The available operations are:

    • insert - To create the typos, Fabricate inserts characters. For example, changes "chart" to "choart".

    • delete - To create the typos, Fabricate deletes characters. For example, changes "chart" to "chrt".

    • replace - To create the typos, Fabricate replaces characters. For example, changes "chart" to "cvart".

  • fab_add_typos(product_description)

    Returns the product_description with typos at the default rate of 10%. For each character, there is a 10% probability that the character is modified. Fabricate uses all of the available operations.

    fab_add_typos(product_description, 'rate', 0.05)

    Returns the product_description with typos. For each character, there is a 5% probability that the character is modified. Fabricate uses all of the available operations.

    fab_add_typos(product_description, 'distance', 3)

    Returns the product_description with typos. The result has a Levenshtein distance of 3 from the original value. Fabricate uses all of the available operations.

    fab_add_typos(product_description, 'distance', 3, 'insert|delete')

    Returns the product_description with typos. The result has a Levenshtein distance of 3 from the original value. To create the typos, Fabricate only inserts and deletes characters. It does not replace characters.

    params - the request path parameters as an object
  • path - the request path (excluding the base URL /api/v1/databases/<database_name>/api)

  • query - the request query parameters as an object

  • Managing Fabricate API keys
    Character Sequence

    Populates a column with a value that uses a specific pattern. The pattern can include both random characters of a specific type and specific characters.

    Column From Another Table

    Populates the column with values from a column in a different table.

    Foreign Key

    Makes the column a foreign key to another table.

    List

    Populates the column from a provided list of values. You can optionally provide a weight for each value.

    Markov Chain

    Sets the column value based on a configured list of allowed transitions between values.

    Rank

    Assigns a rank value based on the values in 2 other columns.

    Regular Expression

    Produces a value that matches a regular expression that you provide. It uses the Peri-compatible regular expression syntax.

    Row Number

    Assigns an incrementing number to each row. Before Fabricate assigns the numbers, it can optionally sort the rows based on another column in the table.

    SQL

    The SQL generator is a premium feature. Free plan users have limited access to premium features.

    Uses a SQL expression to generate the value. The expression can refer to other columns and other tables.

    Sum From Another Table

    Populates a column with the sum of column values from rows in another table. To identify the rows to include, you provide join criteria.

    Sum Of Previous Rows

    Adds together the values of a specified numeric column in rows that are before the current row.

    Value From Previous Row

    Populates a column with a value or values from another column in the previous row or rows.

    Calculated or related values
    update Customers
    set order_id = Orders.order_id from ( 
      select Orders.order_id, customer_id, ROW_NUMBER() OVER (partition by customer_id order by fab_random()) as row_num 
      from Orders ) 
    as Orders where Orders.customer_id = Customers.customer_id and row_num=1
    with random_value as ( select fab_random(0,100) as value ) 
      select 
        case 
          when random_value.value < 20 then null 
          else user_id 
        end 
      from random_value
    api.get('/users/:id', (req, res, { db }) => {
       const id = req.params.id
       
       const user = db.query(
         'SELECT * FROM users where id = ?',
         id
       )[0]
    
      if (!user) {
        res.status(404).json({ error: 'User not found' })
      } else {
        res.json(user)
      }
    })
    api.get('/hello-world', (req, res, { db }) => {
      res.json({ message: 'Hello, world!' })
    })
    api.get('/hello-world', (req, res, { db }) => {
      res.send('Hello, world!')
    })
    api.get('/hello-world', (req, res, { db }) => {
      res.setHeader('Content-Type', 'text/plain')
      res.send('Hello, world!')
    })
    api.get('/hello-world', (req, res, { db }) => {
      res.set({
        'Content-Type': 'text/plain',
        'X-Powered-By': 'Fabricate'
      })
      res.send('Hello, world!')
    })
    api.get('/users/:id', (req, res, { db }) => {
      const id = req.params.id
      const user = db.query('SELECT * FROM users where id = ?', id)[0]
      res.json(user)
    })
    api.patch('/users/:id', (req, res, { db }) => {
      const id = req.params.id
      const { name, email } = req.body // The request body is automatically parsed as
                                       // JSON if the Content-Type request header is 
                                       //"application/json"
      db.run('UPDATE users SET name = ?, email = ? where id = ?', [name, email, id])
      res.status(200)
    })
    {
      changes: number, // The number of rows affected by the operation
      lastID: number // The last inserted row ID (only for insert operations)
    }
    api.get('/users', (req, res, { db }) => {
      const id = db.run('insert into users(id) values (fab_uuid())')[0]
      res.json({ id: id })
    })
    {
      "name": string,
      "data_type": string,
      "generator": "AI",
      //  Generator-specific fields
      "ai_prompt": string, //AI prompt to use to populate the column
      // End generator-specific fields
      "group_key": string,
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Character Sequence",
      // Generator-specific fields
      "character_sequence": string, // The pattern to use for the values.
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Column From Another Table",
      // Generator-specific fields
      "primary_key_entity": string, // Source table
      "primary_key_field": string,  // Source column
      "enable_where": boolean, // Select values based on criteria
      "foreign_key_field": string, // Other table column for criteria
      "value_field": string, // Current table column value for criteria
      // End generator-specific fields
      "group_key": string,
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Foreign Key",
      // Generator-specific fields
      "primary_key_entity": string, // References table
      "primary_key_field": string,  // References column
      "distribution": "none"|"fixed"|"from_column"|"burn-down"|"uniform"|"normal",
                      // The type of distribution to use
                      // None uses relative prevalence instead of cardinality
                      // burn-down is for Until column <= 0
      // -----------------------------------------------------------------------
      // None (relative prevalence)
      "primary_key_cardinality_field": string, // Relative prevalence column
      // -----------------------------------------------------------------------
      // Fixed distribution
      "exact_value": integer, // The number of times to use each row
      // -----------------------------------------------------------------------
      // From column distribution
      "primary_key_cardinality_field": string, // Column that contains the number
                                               // of times to use the row
      // -----------------------------------------------------------------------
      // Until column <= 0 distribution
      "value_field": string, // Column to check the value of
      "include_first_zero_or_less_row": boolean // Whether to create a foreign key
                                                // the first time the selected
                                                // column value is 0 or less.
      // -----------------------------------------------------------------------
      // Uniform distribution
      "min": integer, // Minimum number of times to use each row
      "max": integer, // Maximum number of times to use each row
      // -----------------------------------------------------------------------
      // Normal distribution
      "min": integer, // Minimum number of times to use each row
      "max": integer, // Maximum number of times to use each row
      "mean": string, // Mean number of times to use each row
      "std_dev": string, // Standard deviation
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    
    {
      "name": string,
      "data_type": string,
      "generator": "List",
      // Generator-specific fields
      "values": text, // List of values to use for the column.
      // End generator-specific fields
      "group_key": string,
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string, // Name of the column.
      "data_type": string,  // Database data type of the column values.
      "generator": "Markov Chain",
      "state_transitions": [ // List of allowed transitions.
        {
          "previous_value": string,  // The starting value for a transition.
          "next_value": string,  // The ending value for a transition.
          "probability": integer  // The percentage of times that a transition
                                  // from previous_value goes to next_value.
        }
      ],
      "partition_by_field": string  // Column that determines when to start
                                    // a new flow.
      "percent_null": integer,  // Percent of records to be null.
      "virtual": boolean,  // Whether to exclude the column from exported data.
      // Advanced options
      "primary_key": boolean, //Whether the column is a primary key.
      "index": boolean,  // Whether to index the column.
      "seed": string,  // The seed for random value generation.
                       // Setting this freezes the column until the seed changes.
      "postprocessing_sql": string, // SQL script to run after data generation.
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Rank",
      // Generator-specific fields
      "partition_by_field": string, // Partition by field
      "order_by_field": string,  // Order by field
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Regular Expression",
      // Generator-specific fields
      "regex": string,  // Pattern
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Row Number",
      // Generator-specific fields
      "order_by_field": string,  // The name of the column to use to sort the rows
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "SQL",
      // Generator-specific fields
      "sql": string,  // SQL expression
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Sum From Another Table",
      // Generator-specific fields
      "primary_key_entity": string, // The table that contains the column to sum
      "value_field": string, // The column that contains the values to sum
      "foreign_key_field": string, // Sum table column for the join criteria
      "primary_key_field": string // Current table column for the join criteria
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    { 
      "name": string,
      "data_type": string,
      "generator": "Sum Of Previous Rows",
      // Generator-specific fields
      "value_field": string, // Column to sum
      "partition_by_field": string, // Group by
      "order_by_field": string,  // Order by
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }
    {
      "name": string,
      "data_type": string,
      "generator": "Value From Previous Row",
      // Generator-specific fields
      "value_field": string, // The column to get the value from
      "concat_type": "single"|"list"|"json", // How many previous values to retrieve
      "partition_by_field": string, // Partition by field
      "order_by_field": string,  // Order by field
      // End generator-specific fields
      "percent_null": integer,
      "virtual": boolean,
      // Advanced options
      "primary_key": boolean,
      "index": boolean,
      "seed": string,
      "postprocessing_sql": string
    }

    Data type and specific values

    The following generators populate a column with a specific value or a random value of a specific type.

    For information about the API data models for these generators, go to Data type and specific values in the column attributes.

    Array

    Populates the column with an array.

    To populate the array values, you select a generator. For example, if you select the Number generator, you get an array of numeric values. If you select the Object generator, you get an array of JSON objects.

    The generator configuration includes a distribution option to determine the number of items in the array.

    Note that you cannot use the following generators for array items:

    • AI

    • Rank

    • Sum From Another Table

    • Sum Of Previous Rows

    To configure the generator:

    1. Under Items, click the generator name.

    2. On the Item Settings panel, from the Generator dropdown list, select the generator to use.

    3. Configure the generator. For information about the configuration options for specific generators, go to and the .

    4. Click Apply Changes

    Fixed

    For a fixed distribution, in the Exactly field, specify the exact number of values in the array.

    Uniform

    For a uniform distribution, to configure the distribution:

    1. In the Minimum field, set the minimum number of values.

    2. In the Maximum field, set the maximum number of values.

    Normal

    For a normal distribution, to configure the distribution:

    1. In the Minimum field, set the minimum number of values.

    2. In the Mean field, set the mean number of values.

    3. In the Standard Deviation field, set the standard deviation from the mean for the number of values.

    4. In the Maximum field, set the maximum number of values.

    Blank

    The Blank generator inserts a null value.

    Boolean

    Inserts a random boolean value - either true or false.

    Constant

    Inserts the same value into all of the rows.

    In the Value field, provide the value to use.

    Image (Binary)

    Produces a JPEG image in binary format.

    Lorem Ipsum

    Populates the column with filler text.

    To configure the generator:

    1. From the Generate dropdown list, select whether to generate:

      1. Words - In other words, a single phrase

      2. Sentences

      3. Paragraphs

    The available distributions are:

    • Fixed - Generates a fixed length for each value.

    • Uniform - Generates a uniform distribution of content length.

    • Normal - Generates a normal distribution of content length.

    Fixed

    For a Fixed distribution, in the Exactly field, specify the length to use for each value.

    Uniform

    For a Uniform distribution, to configure the distribution:

    1. In the Minimum field, set the minimum length.

    2. In the Maximum field, set the maximum length.

    Normal

    For a normal distribution, to configure the distribution:

    1. In the Minimum field, set the minimum length.

    2. In the Mean field, set the mean length.

    3. In the Standard Deviation field, set the standard deviation from the mean for the lengths.

    4. In the Maximum field, set the maximum length.

    Number

    Inserts a numeric value.

    To configure the generator, from the Distribution dropdown list, select the method to use to distribute the values among the rows.

    • Autoincrement - Increments the numeric values in each row.

    • Uniform - Generates a uniform distribution of numeric values.

    • Binomial - Generates a binomial distribution of numeric values.

    • Exponential - Increments the numeric values exponentially.

    The distribution type determines the configuration options.

    Autoincrement

    For an Autoincrement distribution, in the Start at field, provide the number to start with.

    Uniform

    For a Uniform distribution, to configure the default distribution:

    1. In the Minimum field, set the minimum value.

    2. In the Maximum field, set the maximum value.

    3. In the Decimals field, set the number of decimal places to use.

    You can also configure variants that are based on a specified condition. For example, you might use the variant when another column contains a specific value, or use the variant in 5% of the records. To add a variant:

    1. Click Add Variant.

    2. To make the condition based on a SQL expression:

      1. From the condition type dropdown list, select SQL expression.

      2. In the condition field, provide the expression to use to identify when to use the variant.

    To remove a variant, click Remove.

    Binomial

    For a Binomial distribution, to configure the default distribution:

    1. In the Trials field, set the number of tests to run.

    2. In the Success Probability field, set the success probability for the generated values.

    You can also configure variants that are based on a specified condition. For example, you might use the variant when another column contains a specific value, or in 5% of the records. To add a variant:

    1. Click Add Variant.

    2. To make the condition based on a SQL expression:

      1. From the condition type dropdown list, select SQL expression.

      2. In the condition field, provide the expression to use to identify when to use the variant.

    To remove a variant, click Remove.

    Exponential

    For an exponential distribution, to configure the default increment:

    1. In the Minimum field, set the minimum value.

    2. In the Rate field, set the rate of increase for the values.

    3. In the Maximum field, set the maximum value.

    4. In the Decimals field, set the number of decimal places to use.

    You can also configure variants that are based on a specified condition. For example, you might increase the value by a different amount when another column contains a specific value, or in 5% of the records. To add a variant:

    1. Click Add Variant.

    2. To make the condition based on a SQL expression:

      1. From the condition type dropdown list, select SQL expression.

      2. In the condition field, provide the expression to use to identify when to use the variant.

    To remove a variant, click Remove.

    Geometric

    For a geometric distribution, to configure the default distribution:

    1. In the Minimum field, set the minimum value.

    2. In the Success Probability field, set the success probability for the generated values.

    3. In the Maximum field, set the maximum value.

    4. In the Decimals field, set the number of decimal places to use.

    You can also configure variants that are based on a specified condition. For example, you might use the variant when another column contains a specific value, or in 5% of the records. To add a variant:

    1. Click Add Variant.

    2. To make the condition based on a SQL expression:

      1. From the condition type dropdown list, select SQL expression.

      2. In the condition field, provide the expression to use to identify when to use the variant.

    To remove a variant, click Remove.

    Normal

    For a normal distribution, to configure the default distribution:

    1. In the Minimum field, set the minimum value.

    2. In the Mean field, set the mean value.

    3. In the Standard Deviation field, set the standard deviation from the mean for the values.

    4. In the Maximum field, set the maximum value.

    You can also configure variants that are based on a specified condition. For example, you might use the variant when another column contains a specific value. To add a variant:

    1. Click Add Variant.

    2. In the Condition field, provide the expression to use to identify when to use the variant.

    3. Configure the distribution values to use for the variant.

    To remove a variant, click Remove.

    Poisson

    For a Poisson distribution, to configure the default distribution:

    1. In the Minimum field, set the minimum value.

    2. In the Mean field, set the mean value.

    3. In the Maximum field, set the maximum value.

    4. In the Decimals field, set the number of decimal places to use.

    You can also configure variants that are based on a specified condition. For example, you might use the variant when another column contains a specific value, or in 5% of the records. To add a variant:

    1. Click Add Variant.

    2. To make the condition based on a SQL expression:

      1. From the condition type dropdown list, select SQL expression.

      2. In the condition field, provide the expression to use to identify when to use the variant.

    To remove a variant, click Remove.

    Series

    For a series of values, to configure the default series:

    Start and end columns

    You can base the start and end values on other numeric columns in the table.

    1. From the Start At dropdown list, select the numeric column to use as the starting value.

    2. From the End At dropdown list, select the numeric column to use as the ending value.

    Partitioning the series

    You can partition the series based on other columns. For example, you can have one series of values for the United States, and another series for France.

    To partition the series:

    1. From the Partition By dropdown list, select the column to use for the partition.

    2. From the Order By dropdown list, select the column to use to sort the rows in each partition.

    Decimal places

    In the Decimals field, specify the number of decimal places to use for the values.

    Curve

    From the Curve Type dropdown list, select the type of curve to use.

    1. To generate the series along a linear curve, select linear. This is the default

    2. To generate the series along an exponential curve:

      1. Select exponential.

      2. In the Rate field, set the rate of increase.

    Volatility

    Volatility determines the deviation from the curve.

    To use a fixed percentage volatility:

    1. From the Volatility dropdown list, select fixed.

    2. In the field, provide the percentage of volatility. The higher the percentage, the bumpier the curve.

    To base the volatility on another column in the table:

    1. From the Volatility dropdown list, select from column.

    2. From the column dropdown list, select the column to use.

    Configuring variants

    You can also configure variants that are based on a specified condition. For example, you might use the variant when another column contains a specific value, or in 5% of the records. To add a variant:

    1. Click Add Variant.

    2. To make the condition based on a SQL expression:

      1. From the condition type dropdown list, select SQL expression.

      2. In the condition field, provide the expression to use to identify when to use the variant.

    To remove a variant, click Remove.

    Mongo ObjectId

    Populates the columns with a MongoDB object identifier.

    For a MongoDB database, all document identifier columns should use the Mongo ObjectId generator. The name of a document identifier column should be id.

    Object

    Populates the column with a JSON object. You configure the list of fields in the object. For each field, you select and configure the generator to use to populate the field.

    You can use the Object and Array generators to set up a nested JSON structure. For example, you can assign the Object generator to a field, or assign the Array generator to a field and use the Object generator to populate the array.

    To define the list of object fields, you can either:

    • Import a JSON schema or sample JSON content. Fabricate then automatically creates the fields and assigns generators.

    • Manually define a list of fields.

    Note that you cannot use the following generators for object fields:

    • AI

    • Rank

    • Sum From Another Table

    • Sum Of Previous Rows

    Importing a JSON schema or example

    To import a JSON schema or JSON example value:

    1. Click Import JSON Schema or Example.

    2. On the panel, in the text area, paste the JSON schema or an example of the JSON object.

    3. Click Apply.

    Fabricate uses the provided schema or JSON to set up the initial list of fields and assign generators to those fields.

    Adding a field manually

    To add an object field:

    1. Click Add Field.

    2. On the field settings panel, in the Name field, provide the field name.

    3. From the Generator dropdown list, select the generator to use to populate the field value.

    4. Configure the generator. For information about the configuration options for specific generators, go to and the .

    Updating the field configuration

    To change the field configuration:

    1. Hover over the field name.

    2. Click the settings icon.

    3. On the field settings panel, update the configuration.

    4. Click Save and Close.

    Removing a field

    To remove an object field:

    1. Hover over the field name.

    2. Click the settings icon.

    On the field settings panel, click Delete.

    UUID

    Generates a random universally unique identifier (UUID).

    Calculated or related values

    These generators calculate values based on a script, formula, or on other values in the database.

    For information about the API data models for these generators, go to in the column attributes.

    AI

    Generates data values based on a prompt that you provide. For more information about the generator, view the .

    In the AI Prompt field, enter the prompt to use to generate the values.

    If you do not provide an AI prompt, then the generator uses the column name as a guide to generate the values.

    Unstructured Data
  • Value From Previous Row

  • .
  • From the Number of Items dropdown list, select the distribution option to determine the number of items in the array. The available distribution options are:

    • Fixed - Generates a fixed number of values in each array.

    • Uniform - Generates a uniform distribution for the number of values in each array.

    • Normal - Generates a normal distribution for the number of values in each array.

  • Configure the selected distribution.

  • From the Distribution dropdown list, select the distribution method for the lengths of the generated values among the rows.

  • Configure the selected distribution.

  • Geometric - Generates a geometric distribution of numeric values.

  • Normal - Generates a normal distribution of numeric values.

  • Poisson - Generates a poisson distribution of numeric values.

  • Series - Generates a series of numeric values.

  • To make the condition based on a percentage of records that should use the variant:

    1. From the condition type dropdown list, select percentage.

    2. In the percentage field, type the percentage.

  • Configure the distribution values to use for the variant.

  • To make the condition based on a percentage of records that should use the variant:

    1. From the condition type dropdown list, select percentage.

    2. In the percentage field, type the percentage.

  • Configure the distribution values to use for the variant.

  • To make the condition based on a percentage of records that should use the variant:

    1. From the condition type dropdown list, select percentage.

    2. In the percentage field, type the percentage.

  • Configure the distribution values to use for the variant.

  • To make the condition based on a percentage of records that should use the variant:

    1. From the condition type dropdown list, select percentage.

    2. In the percentage field, type the percentage.

  • Configure the distribution values to use for the variant.

  • In the Decimals field, set the number of decimal places to use.

    To make the condition based on a percentage of records that should use the variant:

    1. From the condition type dropdown list, select percentage.

    2. In the percentage field, type the percentage.

  • Configure the distribution values to use for the variant.

  • To generate the series along a logarithmic curve:

    1. Select logarithmic.

    2. In the Rate field, set the rate of increase.

  • To match the curve to values from another column in the table:

    1. Select from column.

    2. From the column dropdown list, select the column to use.

  • To make the condition based on a percentage of records that should use the variant:

    1. From the condition type dropdown list, select percentage.

    2. In the percentage field, type the percentage.

  • Configure the distribution values to use for the variant.

  • Unstructured Data
  • Value From Previous Row

  • After you configure the generator:

    • To save the field and close the panel, click Save and Close.

    • To save the field and add another field, click Save and Create Another.

    Configuring a column
    Generator reference
    Configuring a column
    Generator reference
    You can configure a group key to link the column to other columns.

    Character Sequence

    Populates a column with a value that uses a specific pattern. The pattern can include both random characters of a specific type and specific characters.

    For example, you could specify that the column value consists of three random uppercase letters followed by a dash and then 5 random numbers.

    In the Pattern field, provide the pattern to use for the value. For more complex patterns, use the Regular Expression generator.

    The pattern can include the following to indicate specific types of random characters:

    • ﹟ - Random digit.

    • @ - Random lowercase letter.

    • ^ - Random uppercase letter.

    • * - Random digit or letter. The letter can be either uppercase or lowercase.

    • $ - Random digit or lowercase letter.

    • % - Random digit or uppercase letter.

    All other characters are included as entered.

    Here are some example patterns and possible output.

    Pattern
    Example output

    ###-##-####

    232-66-7439

    ***-##

    A0c-34

    ^@@@-##:###

    Cght-87:485

    Column From Another Table

    Populates the column with values from a column in a different table.

    For example, you configure table1.column_1 to be populated with values in table2.column_2.

    To configure the generator:

    1. From the Source Table dropdown list, select the table that contains the column to get the values from.

    2. From the Source Column dropdown list, select the source table column to get the values from.

    3. Optionally, you can provide criteria to determine how to select the value, based on matching column values between the two tables. For example, to populate orders.product_name from products.product_name, use a value from a product row where products.product_id is equal to orders.product_id in the row that is being populated. To enable the criteria fields, check Select values based on the following criteria. If the box is not checked, then Fabricate selects a random value from the source column.

    4. To configure the criteria:

      1. From the source table column dropdown list, select the source table column.

      2. From the current table column dropdown list, select the current table column.

    You can configure a group key to link the column to other columns.

    Foreign Key

    Makes the column a foreign key to another table. For example, a product-id column might be a foreign key to a products table.

    You can optionally configure how often each value from the linked table appears in the current table.

    For more information about configuring foreign keys, view the video tutorial.

    Selecting the referenced table and column

    At a minimum, for a foreign key column, you configure where to find the value to use to populate the column.

    1. From the References Table dropdown list, select the table that the column references.

    2. From the References Column dropdown list, select the column in the reference table to use to populate the value in the current column.

    Configuring the relative prevalence of rows from the referenced table

    To determine how frequently each row from the referenced table is referenced in the current table, one option is to identify a column from the referenced table that sets the relative weight for the row.

    From the Relative Prevalence dropdown list, select the column to use to determine the relative weight. When you use a relative prevalence column, the number of columns does not change.

    The column with the weight information is often a column for which the value is generated using the SQL generator. The column is usually excluded from the data export.

    For example, when you reference customers from the customers table, you might want most customers to be from California, a smaller number of customers to be from New York, and no customers from other states.

    To do that, in the customers table, you might add a weight column that uses the SQL generator, then provide SQL that checks the value of the state where the customer is located:

    • If the state is California, set weight to 10.

    • If the state is New York, set weight to 5.

    • Otherwise, set weight to 0.

    You then select that column from the Relative Prevalence dropdown list.

    Configuring the number of table rows based on the referenced table

    Instead of a relative prevalence of rows from the referenced table, you can instead set a cardinality distribution that determines the number of rows in the current table that reference each row in the referenced table.

    For example, you might configure the current table to include between 1 and 5 rows for each customer in the customers table.

    When you configure a cardinality distribution, the number of rows in the table can vary, and the row count is replaced with information about how the number of rows is determined. For example:

    Example of row count information when the number of rows is calculated

    To configure a cardinality distribution:

    1. Check Base the number of rows in this table on this foreign key relationship.

    2. From the Distribution dropdown list, select the method to use to distribute the values among the rows.

    3. Configure the options for that distribution method.

    Fixed distribution

    In the Exactly field, specify the number of times each row in the referenced column appears in the current table.

    For example, you might indicate to use each product from a products table exactly 5 times in an orders table.

    From column distribution

    From the column dropdown list, select the column from the referenced table that contains the number of rows to generate in the current table.

    For this type of distribution, you might create a SQL column for which the value is calculated based on another column. The column is usually excluded from the data export.

    For example, in a customers table that populates the customer_id for an orders table, you might create an order_count column where:

    • When the customer is located in California, set the value between 1 and 5.

    • When the customer is located in New York, set the value between 1 and 10 rows.

    • For other states, set the value to 0.

    In the orders table, each customer from California appears between 1 and 5 times, based on the value of order_count for that customer. Each customer from New York appears between 1 and 10 times. Customers in other states do not appear.

    Normal distribution

    For a normal distribution:

    1. In the Minimum field, set the minimum number of times to use each row.

    2. In the Mean field, set the mean number of times to use each row.

    3. In the Standard Deviation field, set the standard deviation from the mean for the number of times to use each row.

    4. In the Maximum field, set the maximum number of times to use each row.

    Uniform distribution

    For a uniform distribution:

    1. In the Minimum field, set the minimum number of times to use each row.

    2. In the Maximum field, set the maximum number of times to use each row.

    Until column <= 0

    The until column <= 0 distribution type is used when a referenced record reflects a limited amount that can be consumed. After that amount is consumed, you can no longer refer to that record.

    For example, a loan_payments table includes a foreign key to a loans table. Each loan has multiple payments against it, but the payments cannot continue after the loan is paid off. So in the loan_payments table, you could add a column that calculates the remaining balance on the loan after the most recent payment. When the remaining balance for the loan reaches zero, then the loan is paid off and is no longer used to add records to the loan_payments table.

    You could do something similar for values such as a limited amount of time (add rental payments until the months remaining is 0) or a limited distance (add miles traveled until the distance remaining is 0).

    For an until column <= 0 distribution:

    1. From the column dropdown, select the column that contains the remaining amount to consume.

    2. By default, as soon as the selected column value reaches 0 or less, Fabricate does not add a foreign key. To create a foreign key when the column value first reaches 0 or less, check Include the first value of 0 or less for each key.

    List

    Populates the column from a provided list of values. You can optionally provide a weight for each value.

    To provide specific values, use the Values text area.

    • Provide each value on a separate line.

    • To weight the values, append |<n>, where <n> is the weighting factor. The lower the number, the lower the weight. For example, a value with a weight of 1 appears the least number of times. A value with a weight of 3 appears 3 times as often.

    Instead of providing specific values, in the AI field, you can provide a text description. For example, "All of the colors of the rainbow weighted evenly."

    You can also provide a group key to link the column to other columns.

    Markov Chain

    The Markov Chain generator sets the column value based on a configured list of allowed transitions between values.

    For example, in a table that tracks user browsing histories through a site, a user might start at the home page, browse through product categories, display product details, and then go to the shopping cart page and complete the checkout. They would be unlikely to start browsing in the checkout page.

    You configure the list of allowed transitions. You can either:

    • Configure the list manually

    • Provide an AI prompt to have Fabricate define the initial list

    • Provide a CSV file that contains a list of allowed transitions

    For more information, view the video tutorial.

    Configuring a manual list of transitions

    The State Transitions table contains the list of allowed transitions between the column values:

    Previous Value

    The starting value for the transition. Transitions where Previous Value is empty indicate a possible starting point for a flow.

    For the site browsing flow example, the home page is a likely starting point for a flow.

    Next Value

    The ending value for the transition.

    Transitions where Next Value is empty indicate the end of a flow.

    For the site browsing flow example, the checkout page is a likely ending point for a flow.

    Probability

    The percentage of instances that the flow goes from the starting value to the ending value.

    The probabilities from a given starting value do not need to add to 100. For the remainder, the destination is set to null, meaning that the flow ends.

    For our example, from the home page, the user might go to the product categories page 50% of the time and the contact page 20% of the time. The rest of the time, the flow ends, which means that the user leaves the site.

    To add a transition below an existing row, click the + icon for the existing row.

    To edit a transition, click the row.

    To remove a transition, click its delete icon.

    Providing an AI prompt to define the transitions

    Instead of setting up the transitions manually, you can provide an AI prompt. Fabricate then uses the prompt to set up an initial set of transitions. You can then add, edit, and remove transitions.

    To use an AI prompt to populate the transitions list:

    1. Click Generate with AI.

    2. In the field, provide the prompt. For example: "To start, go to home 80% of the time and products 20% of the time. From home, go to products 50% of the time and contact 20% of the time. From products, go to cart 60% of the time and home 30% of the time. From cart, go to checkout 80% of the time and products 20% of the time. From checkout, the flow always ends."

    3. Click Generate.

    Importing a CSV list of transitions

    You can also import a comma-sparated list of the allowed transitions.

    The list includes a header row (previous_value,next_value,probability), followed by the transition content. For example:

    To import a CSV list of transitions:

    1. Click Import from CSV.

    2. In the field, paste the CSV content.

    3. Click Import.

    Fabricate uses the CSV to populate the transitions list. You can then add, edit, and remove transitions.

    Identifying when to start a new flow

    Optionally, from the Partition By dropdown list, select the column to use to determine when to start a new flow.

    For our site browsing example, each session has an associated session identifier. You would want a new flow for each session. To do this, you set Partition By to the session identifier column.

    If you do not set a column to partition by, then the entire table contains a single flow.

    Rank

    Assigns a rank value based on the values in 2 other columns.

    To determine the ranking, the generator partitions the data by the values in a specified column. It then orders the values based on the value in another column.

    For example, to populate a rank column, the data is partitioned by a product column. For each value of product, it determines how often each value of color occurs.

    For example, for rows that contain the product value product1, in the color column:

    • yellow occurs 20 times

    • red occurs 17 times

    • green occurs 12 times

    For a row that contains product1 and yellow, rank is 1.

    For a row that contains product1 and red, rank is 2.

    For a row that contains product1 and green, rank is 3.

    To configure the generator:

    1. From the Partition By dropdown list, select the column to use to partition the data.

    2. From the Order By dropdown list, select the column to use to set the ranking order.

    Regular Expression

    Produces a value that matches a regular expression that you provide. It uses the Peri-compatible regular expression syntax.

    In the Pattern field, provide the regular expression to use.

    Here are some examples of regular expressions and matching output:

    Pattern
    Example output

    \d{3}-\d{2}-\d{4}

    232-66-7439

    [A-Z]{3}-\d{1,2}

    ABC-34

    [A-Z]{3}-\d{2}:\d{3,5}

    ABC-34:4853

    Row Number

    Assigns an incrementing number to each row. Before Fabricate assigns the numbers, it can optionally sort the rows based on another column in the table. For example, you might sort the rows by a name column, then assign row numbers starting with the first row.

    From the Order By dropdown list, select the column to use to sort the rows.

    SQL

    The SQL generator is a premium feature. Free plan users have limited access to premium features.

    Uses a SQL expression to generate the value. The expression can refer to other columns and other tables.

    In the SQL Expression field, provide the SQL expression. You can provide any expression that is supported by SQLite. You can also use the Fabricate custom functions and variables.

    Alternatively, you can have Fabricate generate the expression for you. In the AI field, provide a text description of how to generate the values, then click Generate. For example, "The value of email-address from the users table where user-id matches user-id in this table".

    Sum From Another Table

    Populates a column with the sum of column values from rows in another table. To identify the rows to include, you provide join criteria.

    To configure the generator:

    1. From the Source Table dropdown list, select the table that contains the column to sum the values for.

    2. From the Column To Sum dropdown list, select the column that contains the values to sum.

    3. Under Join based on the following criteria, to indicate how Fabricate identifies the rows to include:

      1. From the first dropdown list, select the column from the source table.

      2. From the second dropdown list, select the column from the current table that the first column must match.

    For example, an order_items table contains a price column.

    In the orders table, you add an order_amount column. The value of order_amount is the sum of order_items.price where order_items.order_id is equal to orders.order_id.

    Sum Of Previous Rows

    Adds together the values of a specified numeric column in rows that are before the current row.

    To configure the generator:

    1. From the Column to Sum dropdown list, select the column for which to add together the values. The column must contain numeric values.

    2. From the Group By dropdown list, select the column to use the limit the rows that are used. The sum only includes rows for which the grouping column has the same value as the current row.

    3. From the Order by dropdown list, select the column to use to sort the rows. This determines the rows that are included in the sum.

    For example, a previous-total-quantity column sums the value of the quantity column.

    The sum is grouped by the product column, meaning that each sum only includes rows that have the same value of product as the current row. For example, if product for the current row is shirt, then the sum only includes rows where product is shirt.

    The rows are sorted by date, to ensure that the sum only includes rows for entries that occurred before the current row.

    Value From Previous Row

    Populates a column with a value or values from another column in the previous row or rows.

    To configure the generator:

    1. From the Source Column dropdown list, select the column from which to pull the value.

    2. From the Format dropdown list, select whether to use only the value from the previous row, or the values from all of the previous rows.

      1. previous value - Populate the current column with the single value from the previous row.

      2. list of all prior values - Populate the current column with a column-separated list of values from all of the previous rows.

      3. json array of all prior values - Populate the current column with a JSON array of values from all of the previous rows.

    3. You can limit the previous values to rows for which a value for a selected column matches the value in the current row. From the Partition By dropdown list, select the column to use. For example, the previous-product column is populated from the product column in the previous row. When color is the partition column, the value is populated from the closest previous row that has the same value of color as the current row.

    4. From the Order By column, select the column to use to sort the rows. If you selected a partition column, then the sorting is within each partition. The sorting determines which rows are previous to the current row. For example, the rows might be sorted by a datetime column, to ensure that the previous row is the most recent row before the current row.

    Calculated or related values
    video tutorial
    previous_value,next_value,probability
    ,home,50
    ,products,50
    home,products,70
    home,products,30

    Generator summary

    Tonic Fabricate offers generators to create the following categories of column values.

    The following is an alphabetical list of the available generators, with links to the details for configuring the generator from the Fabricate application and from the Fabricate API.

    Generator
    Link to API data model
    Description

    Generates data values based on a prompt that you provide.

    Populates the column with an airport code. For example, SFO or CDG.

    Airport Continent

    API data model

    Populates the column with the name of a continent.

    Airport Country Code

    API data model

    Populates the column with a 2-character country code.

    Airport Elevation (Feet)

    API data model

    Populates the column with a number intended to represent the elevation where an airport is located.

    Airport GPS Code

    API data model

    Populates the column with an airport code from the International Civil Aviation Organization (ICAO) code. For example, LFPG or KJFK.

    Airport Latitude

    API data model

    Populates the column with a latitude value.

    Airport Longitude

    API data model

    Populates the column with a longitude value.

    Airport Municipality

    API data model

    Populates the column with the name of a city or metropolitan area where an airport is located.

    Airport Name

    API data model

    Populates the column with the name of an airport. For example, John F Kennedy Airport or Heathrow Airport.

    Airport Region Code

    API data model

    Populates the column with a 2-character code to represent the region where the airport is located.

    Animal Common Name

    API data model

    Populates the column with the name of an animal. For example, dog or cat.

    Animal Scientific Name

    API data model

    Populates the column with the scientific name of an animal. For example, canis lupus familaris or felis catus.

    Array

    API data model

    Populates the column with an array.

    Bank City

    API data model

    Populates the column with the name of a city.

    Bank Country Code

    API data model

    Populates the column with a 2-character country code. For example, ES, FR, US.

    Bank LEI

    API data model

    Populates the column with a legal entity identifier (LEI) for a bank.

    Bank Name

    API data model

    Populates the column with the name of a bank in the United States.

    Bank RIAD Code

    API data model

    Populates the column with a bank Register of Institutions and Affiliates Data (RIAD) code.

    Bank Routing Number

    API data model

    Populates the column with a United States bank routing number.

    Bank State

    API data model

    Populates the column with the name of a US state.

    Bank Street Address

    API data model

    Populates the column with a street address.

    Bank Swift Code

    API data model

    Populates the column with a bank Swift code.

    Boolean

    API data model

    Inserts a random boolean value - either true or false.

    Car Make

    API data model

    Populates the column with the make of a car. For example, Ford or Honda.

    Car Model

    API data model

    Populates the column with the model of a car. For example, Mustang or Accord.

    Car Year

    API data model

    Populates the column with a year.

    Character Sequence

    API data model

    Populates a column with a value that uses a specific pattern. The pattern can include both random characters of a specific type and specific characters.

    City (Global)

    API data model

    Populates the column with the name of a city from anywhere in the world.

    City (US)

    API data model

    Populates the column with the name of a city from within the United States.

    Column From Another Table

    API data model

    Populates the column with values from a column in a different table.

    Company Domain Name

    API data model

    Populates the column with the domain name for a company. For example, apple.com or tonic.ai.

    Company Industry

    API data model

    Populates the column with a company industry. For example, Consumer Electronics or Computer Software.

    Company IPO Year

    API data model

    Populates the column with a year to represent when the company IPO occurred.

    Company Last Sale

    API data model

    Populates the column with a monetary value to represent the amount of the company's most recent sale. For example 150.25.

    Company Market

    API data model

    Populates the column with the stock exchange where the company stock is traded. For example, NASDAQ or NYSE.

    Company Market Cap

    API data model

    Populates the column with the market cap for the company. For example, 1.5B.

    Company Name

    API data model

    Populates the column with the name of a company.

    Company Sector

    API data model

    Populates the column with the sector that the company belongs to. For example, Technology.

    Company Stock Quote URL

    API data model

    Populates the column with the URL where the company's stock quote can be found. For example, https://www.nasdaq.com/market-activity/stocks/aapl.

    Company Stock Ticker Symbol

    API data model

    Populates the column with the ticker symbol for the company. For example, aapl.

    Constant

    API data model

    Inserts the same value into all of the rows.

    Country (Global)

    API data model

    Populates the column with the name of a country from anywhere in the world.

    Country (US)

    API data model

    Populates the column with the United States.

    Country Code (Global, 3 Character)

    API data model

    Populates the column with a 3-character country code for a country from anywhere in the world. For example, FRA, ESP, USA.

    Country Code (Global)

    API data model

    Populates the column with a 2-character country code for a country from anywhere in the world. For example, FR, ES, US.

    Country Code (US)

    API data model

    Populates the column with the 2-character country code for the United States - US.

    Country Phone Code (Global)

    API data model

    Populates the column with a country telephone code from anywhere around the world.

    Country Phone Code (US)

    API data model

    Populates the column with the country telephone code for the United States.

    Credit Card Number

    API data model

    Populates the column with a credit card number.

    Credit Card Type

    API data model

    Populates the column with a credit card type. For example, Visa, MasterCard, American Express.

    Currency Code (Global)

    API data model

    Populates the column with a 3-character currency code for a currency from anywhere in the world. For example, EUR, AUD, JPY.

    Currency Code (US)

    API data model

    Populates the column with the 3-character currency code for the United States, USD.

    Currency Name (Global)

    API data model

    Populates the column with the name of a currency from anywhere in the world. For example, Euro, Mexican Peso, Yen.

    Currency Name (US)

    API data model

    Populates the column with Dollar.

    Datetime

    API data model

    Populates the column with a datetime value.

    Drug Company

    API data model

    Populates the column with the name of a pharmaceutical company. For example, Pfizer.

    Drug Generic Name

    API data model

    Populates the column with a generic name of a drug.

    Drug Name

    API data model

    Populates the column with the brand name of a drug.

    Drug NDC Code

    API data model

    Populates the column with a code from the National Drug Code directory.

    EIN

    API data model

    Populates the column with valid United States employer identification number (EIN).

    Email Address

    API data model

    Populates the column with an email address.

    File Type Extension

    API data model

    Populates the column with a file extension. For example, .txt or .docx.

    File Type MIME Type

    API data model

    Populates the column with a file MIME type. For example, text/plain or image/jpeg.

    First Name

    API data model

    Produces a given name, such as John or Mary.

    Flight Airline

    API data model

    Populates the column with the name of a commercial airline. For example, Delta Airlines or Lufthansa.

    Flight Arrival Airport

    API data model

    Populates the column with the name of an airport.

    Flight Arrival Airport Code

    API data model

    Populates the column with a 3-character airport code.

    Flight Arrival City

    API data model

    Populates the column with the name of a city.

    Flight Arrival Country

    API data model

    Populates the column with the name of a country.

    Flight Departure Airport

    API data model

    Populates the column with the name of an airport.

    Flight Departure Airport Code

    API data model

    Populates the column with a 3-character airport code.

    Flight Departure City

    API data model

    Populates the column with the name of a city.

    Flight Departure Country

    API data model

    Populates the column with the name of a country.

    Flight Departure Time

    API data model

    Populates the column with a timestamp in 24-hour format. For example, for 1:15 PM, the generated value would be 13:15.

    Flight Duration Hours

    API data model

    Populates the column with a decimal number to indicate the number of hours in a flight. For example, 2.5.

    Flight Number

    API data model

    Populates the column with a value representing a flight number. For example, LH1234.

    Foreign Key

    API data model

    Makes the column a foreign key to another table. For example, a product-id column might be a foreign key to a products table.

    Full Address (Global)

    API data model

    Populates the column with a full mailing address from anywhere in the world.

    Full Address (US)

    API data model

    Populates the column with a full mailing address from within the United States.

    Full Name

    API data model

    Produces a full name (given name and family name), such as John Smith and Mary Jones.

    HCPCS Code

    API data model

    Populates the column with a code from the Healthcare Common Procedure Coding System.

    HCPCS Name

    API data model

    Populates the column with a name from the Healthcare Common Procedure Coding System.

    Hospital City

    API data model

    Populates the column with the city for a hospital address.

    Hospital Name

    API data model

    Populates the column with the name of a hospital organization.

    Hospital NPI

    API data model

    Populates the column with the National Provider Identifier for a hospital.

    Hospital Postal Code

    API data model

    Populates the column with a postal code for a hospital address.

    Hospital State

    API data model

    Populates the column with a US state for a hospital address.

    Hospital Street Address

    API data model

    Populates the column with a hospital street address.

    ICD-10 Diagnosis Code

    API data model

    Populates the column with a diagnosis code from ICD-10.

    ICD-10 Diagnosis Long Description

    API data model

    Populates the column with a long description of a diagnosis from ICD-10.

    ICD-10 Diagnosis Short Description

    API data model

    Populates the column with a short description of a diagnosis from ICD-10.

    ICD-10 Procedure Code

    API data model

    Populates the column with a procedure code from ICD-10.

    ICD-10 Procedure Long Description

    API data model

    Populates the column with the long description of a procedure from ICD-10.

    ICD-10 Procedure Short Description

    API data model

    Populates the column with the short description of a procedure from ICD-10.

    ICD-9 Diagnosis Code

    API data model

    Populates the column with a diagnosis code from ICD-9.

    ICD-9 Diagnosis Long Description

    API data model

    Populates the column with the long description of a diagnosis from ICD-9.

    ICD-9 Diagnosis Short Description

    API data model

    Populates the column with the short description of a diagnosis from ICD-9.

    ICD-9 Procedure Code

    API data model

    Populates the column with the code for a procedure in ICD-9.

    ICD-9 Procedure Long Description

    API data model

    Populates the column with the long description of a procedure in ICD-9.

    ICD-9 Procedure Short Description

    API data model

    Populates the column with the short description of a procedure in ICD-9.

    Image (Binary)

    API data model

    Produces a JPEG image in binary format.

    IP Address

    API data model

    Populates the column with an IP address. For example, 192.168.1.100 or 2001:0db8:0000:0000:0000:0000:1a2b:3c4d.

    Job Area

    API data model

    Produces a value that describes the area of expertise for a job. For example, Security or Quality.

    Job Descriptor

    API data model

    Produces a value that describes a general descriptor of the job hierarchy level. For example, Senior or Lead.

    Job Title

    API data model

    Produces a job title. For example, Senior Security Engineer or Principal Program Manager.

    Job Type

    API data model

    Produces a value that describes the type of job or type of work that the job entails. For example, Engineer or Manager.

    Language

    API data model

    Populates the column with the name of a spoken language. For example, French, Spanish, English.

    Language Code

    API data model

    Populates the column with the 2-character code for a spoken language. For example, fr, es, en.

    Last Name

    API data model

    Produces a family name, such as Smith or Jones.

    Latitude (Global)

    API data model

    Populates the column with a latitude value from anywhere in the world.

    Latitude (US)

    API data model

    Populates the column with a latitude value from within the United States.

    List

    API data model

    Populates the column from a provided list of values.

    Longitude (Global)

    API data model

    Populates the column with a longitude value from anywhere in the world.

    Longitude (US)

    API data model

    Populates the column with a longitude value from within the United States.

    Lorem Ipsum

    API data model

    Populates the column with filler text.

    MAC Address

    API data model

    Populates the column with a MAC address. For example, 00:1A:2B:3C:4D:5E.

    Markov Chain

    API data model

    Defines the column values based on an allowed flow between values.

    Middle Name

    API data model

    Produces a name from the same set as the First Name generator. The middle name is always different from the first name.

    Mongo ObjectId

    API data model

    Populates the column with a MongoDB object identifier. Intended for document identifier columns in a MongoDB database.

    Movie Genres

    API data model

    Populates the column with a movie genre. For example, Horror, Romantic Comedy.

    Movie Title

    API data model

    Populates the column with the title of a movie. For example, Gone With the Wind.

    Nickname

    API data model

    Produces a common nickname for the person, such as Bobby or Lefty.

    Number

    API data model

    Inserts a numeric value.

    Object

    API data model

    Populates the column with a JSON object. You configure the list of fields in the object. For each field, you select and configure the generator to use to populate the field.

    Passport Number (Global)

    API data model

    Produces a random passport number that matches the country name or code that is in another column of the table.

    Passport Number (US)

    API data model

    Produces a random United States passport number.

    Person Name Suffix

    API data model

    Produces a name suffix. The possible suffixes are Jr., Sr., and III.

    Person Name Title

    API data model

    Produces a name title. The possible titles are Mr., Mrs., Ms., and Dr..

    Phone Number (Global)

    API data model

    Populates the column with a telephone number from anywhere in the world.

    Phone Number (US)

    API data model

    Populates the column with a telephone number from the United States.

    Plant Common Name

    API data model

    Populates the column with the name of a plant. For example, dandelion.

    Plant Family

    API data model

    Populates the column with the name of a plant family. For example, asteraceae.

    Plant Scientific Name

    API data model

    Populates the column with the scientific name of a plant. For example, taraxacum officinale.

    Postal Code (Global)

    API data model

    Populates the column with a postal code from anywhere in the world.

    Postal Code (US)

    API data model

    Populates the column with a 5-digit postal code from within the United States.

    Product Category

    API data model

    Populates the column with a category of product. For example, Health or Electronics.

    Product Description

    API data model

    Populates the column with a description of a product.

    Product Name

    API data model

    Populates the column with the name of a product.

    Product Price

    API data model

    Populates the column with the price of the product.

    Product Subcategory

    API data model

    Populates the column with the subcategory that the product belongs to. For example, Oral Care and Hygiene.

    Project Name

    API data model

    Populates the column with the name of a project.

    Rank

    API data model

    Assigns a rank value based on the values in 2 other columns. It partitions the data by the values in one column, then orders the values based on the value in the other column.

    Regular Expression

    API data model

    Produces a value that matches a regular expression that you provide. It uses the Peri-compatible regular expression syntax.

    Row Number

    API data model

    Assigns a row number based on the value in another column.

    Sex

    API data model

    Populates a column with either Male or Female.

    SQL

    API data model

    Premium feature. Uses a SQL expression to generate the value. The expression can refer to other columns and other tables.

    SSN

    API data model

    Populates a column with valid United States Social Security numbers (SSNs).

    State / Province (Global)

    API data model

    Populates the column with the name of a state or province from any country in the world. For example, Normandy or Ontario.

    State / Province (US)

    API data model

    Populates the column with the name of a state in the United States. For example, Montana or New York.

    State Abbreviation (Global)

    API data model

    Populates the column with the postal abbreviation of a state or province from anywhere in the world. For example, NOR or ONT.

    State Abbreviation (US)

    API data model

    Populates the column with the postal abbreviation of a state in the United States. For example, MN or NY.

    Street Address (Global)

    API data model

    Populates the column with a street address from anywhere in the world. For example, 10 Rue Morgue.

    Street Address (US)

    API data model

    Populates the column with a street address from within the United States. For example, 15 Main Street.

    Sum From Another Table

    API data model

    Populates a column with the sum of column values from rows in another table. To identify the rows to include, you provide join criteria.

    Sum Of Previous Rows

    API data model

    Adds together the values of a specified numeric column in rows that are before the current row.

    Timezone (Global)

    API data model

    Populates the column with the name of a time zone from anywhere in the world. For example, Europe/Paris.

    Timezone (US)

    API data model

    Populates the column with the name of a time zone that occurs in the United States. For example, US/Central.

    University Country Code

    API data model

    Populates the column with the 2-character country code for the university location. For example, ES, FR, US.

    University Name

    API data model

    Populates the column with the name of a university. For example, Harvard.

    University URL

    API data model

    Populates the column with the URL for the university website. For example, harvard.edu.

    Unstructured Data

    API data model

    Uses an LLM to populate a column with unstructured data, such as text or JSON, that can include values from other columns in the table.

    URL

    API data model

    Populates the column with a URL. For example, https://example.com.

    User Agent

    API data model

    Populates the column with a user agent value. For example, Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0.

    Username

    API data model

    Populates a column with a username. For example, johndoe.

    UUID

    API data model

    Generates a random universally unique identifier (UUID).

    Value From Previous Row

    API data model

    Populates a column with a value or values from another column in the previous row or rows.

    AI
    API data model
    Airport Code
    API data model