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...
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...
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...
Loading...
Loading...
Learn more about how to calculate and track the cost to use Fabricate.
Use these videos to learn more about how to use Tonic Fabricate.
Overview of Fabricate and its features
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.
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.
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:
The first step is to create the database in Fabricate.
You can , or .
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 .
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 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.
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.
To get started, go to .

One option is to tie your Fabricate account to an existing Google, GitHub, or Microsoft account.
To use an existing account:
Click the account type.
Provide the account information.
You can also register with an email address and create a Fabricate password.
In the Name field, provide the name to use for the account.
In the Email field, provide the email address to use for the account.
In the Password field, create your Fabricate password. Fabricate passwords must contain at least 6 characters.
Click Sign Up.
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.
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 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.

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.
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.
This is the flat monthly amount that is charged to Plus and Enterprise accounts.
It provides overall access to the application and its features.
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.
Here is how the billing cycles work for each license 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.
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.
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.
New accounts use the Free plan. Fabricate also provides a Plus plan and an Enterprise plan.
Here is an overview of the available license plans. For more information, go to .
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, .
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:
In the database heading, click Import.
On the Import Data panel, either:
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.



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.
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.
Charged for usage over a set amount per month.
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.
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.
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.
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.
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.
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.
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.
Populates the column with a year.
You can configure a .
You can also configure a to link the column to other columns.
To add a column to a table:
In the table heading, click Add Column.
On the New Column panel:
Set the column name.
Select and configure the column generator.
For information on column configuration, go to .
For information about the available generators, go to .
Before you delete a column, make sure that it is not being used in the configuration of another column.
To delete a column:
In the column heading, click the settings icon.
On the column settings panel, click Delete.
On the confirmation panel, click Delete Column.
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.
Populates the column with the name of an animal. For example, dog or cat.
Uses the General column configuration.
Populates the column with the scientific name of an animal. For example, canis lupus familaris or felis catus.
Uses the .
Populates the column with the name of a plant. For example, dandelion.
Uses the .
Populates the column with the name of a plant family. For example, asteraceae.
Uses the .
Populates the column with the scientific name of a plant. For example, taraxacum officinale.
Uses the .
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.
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.
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.
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.
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.
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.
One option is to enter the mock API definition directly in the definition field.
For information on the API syntax, go to .
The following generators produce values related to movies.
For information about the API data models for these generators, go to in the column attributes.
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.
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 .
Each constraint object can contain the following attributes:
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:
In the table heading, click Attach Data.
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.
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.
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.
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.
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 .
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.
Every chat is independent of the other chats. It does not have access to all of the context from any of the other chats.
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:
Click Update DDL.
The Fabricate API uses the following data model.
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.
Populates the column with the name of a spoken language. For example, French, Spanish, English.
Uses the .
In the Name field, provide the name of the variable.
In the Value field, provide the value of the variable.
Click the save icon.
To edit a variable definition:
Click the edit icon for the variable.
Update the name or value.
Click the save icon.
To remove a variable, click its delete icon.
To refer to a variable in a SQL or row count expression, use $VARIABLE_NAME.
Produces a job title. For example, Senior Security Engineer or Principal Program Manager.
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.
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.
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.
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.
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.
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.
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.
Populates the column with a MAC address. For example, 00:1A:2B:3C:4D:5E.
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.
Populates the column with a URL. For example, https://example.com.
Under Include, check the checkbox for each component to include.
Populates the column with a user agent value. For example, Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0.
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.
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.
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.
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.
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.
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.
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.
Populates the column with the title of a movie. For example, Gone With the Wind.
Uses the General column configuration.
Populates the column with the model of a car. For example, Mustang or Accord.
Uses the General column configuration.
Populates the column with a year.
Uses the General column configuration.
Populates the column with the 2-character code for a spoken language. For example, fr, es, en.
Uses the General column configuration.

{
"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.
}{
"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
}Produces a job title. For example, Senior Security Engineer or Principal Program Manager.
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
}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.
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
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.
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.
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.
To select a Data Agent database to manage:
Click the database dropdown at the top right. For Enterprise users, the list of databases can include both rule-based and Data Agent databases.
In the dropdown list, select the 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.
In the table list, hover over the database name.
Click the copy icon.
On the Clone Database panel:
In the New Database Name field, provide the name for the new database.
To include the chat history from the original database, check the Include chat history checkbox.
Click Clone Database.
Click the edit icon next to the database name above the table list.
To change the name of a Data Agent database:
In the table list, hover over the database name.
Click the edit icon.
In the New Database Name field, provide the new name for the database.
Click Rename Database.
Click the delete icon next to the database name above the table list.
To delete a Data Agent database.
In the table list, hover over the database name.
Click the delete icon.
On the confirmation panel, click Delete 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.
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.
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.
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:
Hover over the prompt that initiated the change.
Click the revert icon.
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.

To use the Fabricate AI to generate the mock API definition:
Click Compose with AI.
On the Compose with API panel, provide a description of the calls to include in the mock API, then click Generate.
To add the generated results to the mock API, click Add to API.
On the API tab, to save the new definition content, click Save.
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.
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.
To revert the mock API definition to a previous version:
In the version list, click the version to revert to.
Click Revert to This Version.

Subsetting
JSON objects and arrays
When you export a rule-based database, SQL tables are exported as concrete tables.
To add a SQL table to a rule-based database:
In the database heading, click Add Table(s), then click From SQL query.
On the Add Table From SQL Query panel, in the Name field, provide a name for the SQL table.
Click Create Table.
The SQL table is added to the tables list for the database.
The details page for the SQL table is displayed.
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.
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.
To regenerate the SQL table data based on the current SQL table definition, in the SQL table heading, click the regenerate icon.
To delete a SQL table, in the SQL table header, click the delete icon.
From the dropdown list:
To add the data to the existing data, select append to the generated data.
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.
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.
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.
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.
To start a new chat, at the top of the Data Agent, click the + icon.
To delete a chat:
Hover over the chat name.
Click the delete icon.

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.
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.
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:
Under Account Info, in the Account Name field, provide the new account name.
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 .
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.
On the My Profile page, under My Details:
In the Name field, provide an updated name for your profile.
In the Email field, provide an updated email address for your profile.
Click Save Changes.
On the My Profile page, under Reset Password:
In the Current Password field, type your current Fabricate password.
In the Password field, type the new password.
In the Confirm Password field, type the password again.
Click Save Changes.
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:
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.
Click Delete Account.
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 .
To create a table:
Click Add Table(s), then click From schema definition.
On the Add Table(s) panel, in the Name field, provide a name for the table.
Optionally, in the Schema Definition text area, provide one of the following to define the table schema:
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:
Display the table that you want to clone.
Click Clone Table.
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.
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:
In the database header, click Add Table(s), then click From a CSV or JSON file.
In the Name field, provide the name of the table.
To search for and select a file, click Choose File.
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.
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:
In the database header, click Add Table(s), then click Generate static data using AI.
In the Table Name field, provide the name of the table. The table name is also used as the name of the CSV file.
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.
To make adjustments to the data, update the prompt, then click Regenerate.
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.
For license plans other than the Free plan, account owners can add users to an account. Each user is assigned an account role.
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.
To add users to your account:
Click Invite Users.
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.
To immediately grant access to all of the current account workspaces:
Check the
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.
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.
To remove a user from your account:
Click the Remove option for the user.
On the confirmation panel, click Remove User.
You cannot remove the only account owner for an account.
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.
To start a completely new database:
Click the database dropdown at the top right, then click New Database.
On the database creation page, click Rule-based database.
On the Create a New Database panel, in the Database Name field, provide a name for the database.
From the Type dropdown list, select the .
Optionally, in the Schema Definition
Fabricate displays the database details page for the database.
To select a database to manage:
Click the database dropdown at the top right.
In the dropdown list, select the 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:
Select the database to clone.
On the Settings tab, click Clone.
From the database Settings tab, you can change the database name and type.
In the Name field, provide the new database name.
From the Type dropdown list, select the new database type.
Click Save Changes.
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.
To delete a database, on the database Settings tab:
Click Delete.
On the confirmation panel, click Delete Database.
To change the name of a table:
Click the table name.
In the name field, provide the new name.
Click the save icon.
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:
From the Type dropdown list, select the type of constraint.
For a uniqueness constraint, select Unique.
For a not equal constraint, select Not Equal.
For each column to add to the constraint, click Add column
To remove a constraint, click the delete icon.
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.
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.
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.
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:
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:
From the comparison dropdown, select exactly.
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.
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.
From the value type dropdown list, select the value to use.
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.
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.
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.
Populates the column with a country telephone code from anywhere around the world.
Uses the General column configuration.
Populates the column with the country telephone code for the United States.
Uses the .
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 .
Populates the column with a telephone number from anywhere in the world.
Populates the column with a telephone number from the United States.
To use the Fabricate API and CLI, you must have a Fabricate API key.
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.
To create an API key:
Click Create New API Key.
On the Create New API Key panel, in the Name field, provide a name for the API key.
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.
To copy an API key to the clipboard, click the copy icon next to the key.
To delete an API key, click Delete.
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.
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.
Populates the column with the 2-character country code for the university location. For example, ES, FR, US.
Uses the General column configuration.
Populates the column with the name of a university. For example, Harvard.
Uses the .
Populates the column with the URL for the university website. For example, harvard.edu.
Uses the .
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.
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
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.
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.
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 .
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.
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.
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.
Populates the column with a datetime value.
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
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.
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.
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.
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.
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.
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.
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.
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.
Populates the column with a credit card number.
You can configure a group key to link the column to other columns.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.


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.



To remove a column from the constraint, click its delete icon.




Click Create API Key.
















Populates the column with the name of a time zone from anywhere in the world. For example, Europe/Paris.
Uses the General column configuration.
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.
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:
Create an orders_base table with the order data.
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:
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
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.
To create a JSON object that pulls the user's first and last names from the users_base table:
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.idSELECT json_object( 'first', first_name, 'last', last_name ) as name FROM users_baseSELECT
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.idOn 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.
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:
From the Target Database dropdown list, select create new target.
On the New Target Database Connection panel, provide the connection information.
To test the connection, click Test Connection.
To save the target database, click Create Target.
The target database is then available to use whenever you export the database.
On the New Target Database Connection panel, for database types other than Databricks:
In the Name field, provide the name of the database.
In the Host field, provide the host where the database is located.
In the Port field, specify the host to use to connect to the database.
In the Username field, provide the username to use to connect to the database.
In the Password field, provide the password to use for authentication.
In the Database field, set the Fabricate database that can populate the target database.
The field is pre-populated with the current database.
On the New Target Database Connection panel, for a Databricks database:
In the Name field, provide the name of the database.
In the Host field, provide the host where the database is located.
From the Credential Type dropdown list, select the type of authentication to use. The options are:
Service Principal
Personal Access Token
For Service Principal authentication:
In the Client ID field, provide the client identifier.
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.
For Personal Access Token authentication, in the Access Token field, provide the access token to authenticate to the database.
In the Warehouse ID field, provide the data warehouse for the data.
In the Catalog field, provide the data catalog for the data.
In the Schema field, provide the schema for the data.
When Fabricate exports data to Databricks, it:
Creates a volume called /Volumes///fabricate.
Creates a directory in that volume that is named with a UUID.
Uploads a CSV file for each table into that directory.
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.
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.
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>.
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.
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.
In the user menu, click Switch Workspaces.
On the Switch Workspaces panel, click New Workspace.
In the name field, provide the name of the workspace.
Click Save.
To change the name of a workspace:
In the user menu, click Switch Workspaces.
On the Switch Workspaces panel, hover over the workspace to configure, then click the settings icon.
On the Settings page, in the Name field, provide the new name for the workspace.
Click Save Changes.
From the Permissions section of the workspace Settings page, you manage workspace access to organization users and to API keys.
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.
The user must already be added to your account.
To add an account user to the workspace:
Click Add User.
From the dropdown list, select the user to add.
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.
The API key must already be added to your account.
To add an API key to the workspace:
Click Add API Key.
From the dropdown list, select the API key to add.
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.
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.
To remove a user or API key from the workspace:
Click the Remove option for the user or API key.
On the confirmation panel, click Remove User or Remove API Key.
Note that each workspace must have at least one workspace owner.
From the workspace Settings page, to delete the workspace:
Click Delete Workspace.
On the confirmation panel, click Delete Workspace.
When you delete a workspace, Fabricate also deletes all of the databases in that workspace.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Populates the column with a hospital street address.
You can configure a .
You can also configure a to link the column to other columns.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Populates the column with an airport code. For example, SFO or CDG.
Uses the General column configuration.
Populates the column with the name of a continent.
Uses the .
Populates the column with a 2-character country code.
Uses the .
Populates the column with a number intended to represent the elevation where an airport is located.
Uses the .
Populates the column with an airport code from the International Civil Aviation Organization (ICAO) code. For example, LFPG or KJFK.
Uses the .
Populates the column with a latitude value.
Uses the .
Populates the column with a longitude value.
Uses the .
Populates the column with the name of a city or metropolitan area where an airport is located.
Uses the .
Populates the column with the name of an airport. For example, John F Kennedy Airport or Heathrow Airport.
Uses the .
Populates the column with a 2-character code to represent the region where the airport is located.
Uses the .
Populates the column with the name of a commercial airline. For example, Delta Airlines or Lufthansa.
Uses the .
Populates the column with the name of an airport.
Uses the .
Populates the column with a 3-character airport code.
Uses the .
Populates the column with the name of a city.
Uses the .
Populates the column with the name of a country.
Uses the .
Populates the column with the name of an airport.
Uses the .
Populates the column with a 3-character airport code.
Uses the .
Populates the column with the name of a city.
Uses the .
Populates the column with the name of a country.
Uses the .
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 .
Populates the column with a decimal number to indicate the number of hours in a flight. For example, 2.5.
Uses the .
Populates the column with a value representing a flight number. For example, LH1234.
Uses the .
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.
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.
On the cloud application, you must provide an access token for the LLM provider that you plan to use. By default, Fabricate uses OpenAI.
In the Access Token field, provide the token.
Click Save Changes.
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.
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.
In the Model for Free Text field, provide the model to use for free text.
In the Model for Conversations field, provide the model to use for conversations.
In the Model for JSON field, provide the model to use for JSON.
To verify that Fabricate can connect to the models, click Test Settings.
On the column details panel, you select the format of the generated content and provide prompts to describe it.
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.
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}.
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}.
In the Persona 1 field, provide a description of the first persona.
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}."
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:
Click Derive JSON schema from an example.
On the panel, in the Example JSON field, provide an example of a JSON object that reflects the schema. For example:
Click Derive JSON Schema.
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.
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.
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.
For a column that uses the Unstructured Data generator, to display the content, click the content icon.
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.
Populates the column with the name of a city from anywhere in the world.
Uses the .
Populates the column with the name of a city from within the United States.
Uses the .
Populates the column with the name of a country from anywhere in the world.
Uses the .
Populates the column with the United States.
Uses the .
Populates the column with a for a country from anywhere in the world. For example, FRA, ESP, USA.
Uses the .
Populates the column with a for a country from anywhere in the world. For example, FR, ES, US.
Uses the .
Populates the column with the 2-character country code for the United States - US.
Uses the .
Populates the column with a full mailing address from anywhere in the world.
Uses the .
Populates the column with a full mailing address from within the United States.
Uses the .
Populates the column with a latitude value from anywhere in the world.
Uses the .
Populates the column with a latitude value from within the United States.
Uses the .
Populates the column with a longitude value from anywhere in the world.
Uses the .
Populates the column with a longitude value from within the United States.
Uses the .
Populates the column with a postal code from anywhere in the world.
Uses the .
Populates the column with a 5-digit postal code from within the United States.
Uses the .
Populates the column with the name of a state or province from any country in the world. For example, Normandy or Ontario.
Uses the .
Populates the column with the name of a state in the United States. For example, Montana or New York.
Uses the .
Populates the column with the postal abbreviation of a state or province from anywhere in the world. For example, NOR or ONT.
Uses the .
Populates the column with the postal abbreviation of a state in the United States. For example, MN or NY.
Uses the .
Populates the column with a street address from anywhere in the world. For example, 10 Rue Morgue.
Uses the .
Populates the column with a street address from within the United States. For example, 15 Main Street.
Uses the .
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.
Populates the column with the name of a city.
Uses the General column configuration.
Populates the column with a 2-character country code. For example, ES, FR, US.
Uses the .
Populates the column with a legal entity identifier (LEI) for a bank.
Uses the .
Populates the column with the name of a bank in the United States.
Uses the .
Populates the column with a bank Register of Institutions and Affiliates Data (RIAD) code.
Uses the .
Populates the column with a United States bank routing number.
Uses the .
Populates the column with the name of a US state.
Uses the .
Populates the column with a street address.
Uses the .
Populates the column with a bank Swift code.
Uses the .
Populates the column with a credit card number.
Populates the column with a credit card type. For example, Visa, MasterCard, American Express.
Populates the column with a 3-character currency code for a currency from anywhere in the world. For example, EUR, AUD, JPY.
Uses the .
Populates the column with the 3-character currency code for the United States, USD.
Uses the .
Populates the column with the name of a currency from anywhere in the world. For example, Euro, Mexican Peso, Yen.
Uses the .
Populates the column with Dollar.
Uses the .
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.
Produces a given name, such as John or Mary.
Uses the General column configuration.
Produces a full name (given name and family name), such as John Smith and Mary Jones.
Uses the .
Produces a family name, such as Smith or Jones.
Uses the .
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 .
Produces a common nickname for the person, such as Bobby or Lefty.
Uses the .
Produces a random passport number that matches the country name or code that is in another column of the table.
Uses the .
Produces a random United States passport number.
Uses the .
Produces a name suffix. The possible suffixes are Jr., Sr., and III.
The suffix is applied to 2% of male names.
Uses the .
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 .
Populates a column with either Male or Female.
Uses the .
Populates a column with valid United States Social Security numbers (SSNs).
Populates a column with a username. For example, johndoe.
Uses the .
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.
Populates the column with a file extension. For example, .txt or .docx.
Uses the General column configuration.
Populates the column with a file MIME type. For example, text/plain or image/jpeg.
Uses the .
Populates the column with an IP address. For example, 192.168.1.100 or 2001:0db8:0000:0000:0000:0000:1a2b:3c4d.
Populates the column with a MAC address. For example, 00:1A:2B:3C:4D:5E.
Populates the column with the name of a project.
Populates the column with a URL. For example, https://example.com.
Populates the column with a user agent value. For example, Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0.
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.
Populates the column with the domain name for a company. For example, apple.com or tonic.ai.
Uses the General column configuration.
Populates the column with a company industry. For example, Consumer Electronics or Computer Software.
Uses the .
Populates the column with a year to represent when the company IPO occurred.
Uses the .
Populates the column with a monetary value to represent the amount of the company's most recent sale. For example 150.25.
Uses the .
Populates the column with the stock exchange where the company stock is traded. For example, NASDAQ or NYSE.
Uses the .
Populates the column with the market cap for the company. For example, 1.5B.
Uses the .
Populates the column with the name of a company.
Uses the .
Populates the column with the sector that the company belongs to. For example, Technology.
Uses the .
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 .
Populates the column with the ticker symbol for the company. For example, aapl.
Uses the .
Populates the column with valid United States employer identification number (EIN).
Populates the column with a category of product. For example, Health or Electronics.
Uses the .
Populates the column with a description of a product.
Uses the .
Populates the column with the name of a product.
Uses the .
Populates the column with the price of the product.
Uses the .
Populates the column with the subcategory that the product belongs to. For example, Oral Care and Hygiene.
Uses the .
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.
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.
An entity is equivalent to a database table.
Each entity object can contain the following attributes:
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.
Populates the column with the name of a pharmaceutical company. For example, Pfizer.
Uses the .
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Populates the column with a generic name of a drug.
Uses the General column configuration.
Populates the column with the brand name of a drug.
Uses the General column configuration.
Populates the column with a code from the National Drug Code directory.
Uses the General column configuration.
Populates the column with a code from the Healthcare Common Procedure Coding System.
Uses the General column configuration.
Populates the column with a name from the Healthcare Common Procedure Coding System.
Uses the General column configuration.
Populates the column with the city for a hospital address.
Uses the General column configuration.
Populates the column with the name of a hospital organization.
Uses the General column configuration.
Populates the column with the National Provider Identifier for a hospital.
Uses the General column configuration.
Populates the column with a postal code for a hospital address.
Uses the General column configuration.
Populates the column with a US state for a hospital address.
Uses the General column configuration.
Populates the column with a hospital street address.
Uses the General column configuration.
Populates the column with a diagnosis code from ICD-10.
Uses the General column configuration.
Populates the column with a long description of a diagnosis from ICD-10.
Uses the General column configuration.
Populates the column with a short description of a diagnosis from ICD-10.
Uses the General column configuration.
Populates the column with a procedure code from ICD-10.
Uses the General column configuration.
Populates the column with the long description of a procedure from ICD-10.
Uses the General column configuration.
Populates the column with the short description of a procedure from ICD-10.
Uses the General column configuration.
Populates the column with a diagnosis code from ICD-9.
Uses the General column configuration.
Populates the column with the long description of a diagnosis from ICD-9.
Uses the General column configuration.
Populates the column with the short description of a diagnosis from ICD-9.
Uses the General column configuration.
Populates the column with the code for a procedure in ICD-9.
Uses the General column configuration.
Populates the column with the long description of a procedure in ICD-9.
Uses the General column configuration.
Populates the column with the short description of a procedure in ICD-9.
Uses the General column configuration.





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.
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.
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.
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.
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_namePOST /api/v1/workspaces/:workspace_name/databasesDELETE /api/v1/workspaces/:workspace_name/databases/:database_namePOST /api/v1/workspaces/:workspace_name/databases/:database_name/entities/:table_name/sourceWhen 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.
A generator can have settings that are specific to the generator. For information about generator-specific settings, go to the generator reference.
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:
To add a weight:
Click Add Weight.
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.
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.
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].
In the Weight field, provide the weight to apply.
To delete a weight, click its delete icon.
In the default weight field, provide the weight to apply for values that do not match a configured weight entry.
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.
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.
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.
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.
On the column configuration panel, to display the advanced settings, click Show Advanced.
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 improves the performance of views that filter, join, or order by the column.
To index the column, check Index This Column.
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.
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.
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.
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
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.
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.
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.
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.
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.
For this conversation:
For this conversation:
For this conversation:
For this conversation:
For this conversation:
For this conversation:
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.
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.
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.
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.
Populates the column with the United States.
You can configure a .
You can also configure a to link the column to other columns.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
Click SQL.
On the SQL Editor panel, in the SQL field, provide the SQL query.
The SQL can include SELECT, INSERT, UPDATE, and DELETE.
Click Execute Query.
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:
Click the cell value.
On the edit panel, enter the new value.
Click Save.
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:
In the table heading, click the delete icon.
On the confirmation panel, click Delete Table.
To provide data for the mock API to query, you create database snapshots. Fabricate stores the snapshot data internally.
To create a database snapshot of the current rule-based database data:
If no snapshots are currently configured, click Create a DB Snapshot.
If there are existing snapshots, then:
Click the snapshot dropdown.
In the dropdown, click Create New Snapshot.
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.
Click Create Snapshot. Fabricate generates the snapshot and adds it to the dropdown list.
To verify the snapshot data works as expected, you can run queries against the snapshot.
To query a snapshot:
Click the snapshot dropdown.
In the dropdown list, select the snapshot to query against.
Click SQL.
On the SQL Editor panel, enter the query, then either:
You can download a snapshot. The snapshot is downloaded to a file named <database name>.sqlite.
To download a snapshot:
Click the snapshot dropdown.
In the dropdown list, click the download icon for the snapshot.
To remove a snapshot:
Click the snapshot dropdown.
In the dropdown list, click the delete icon for the snapshot.
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.
Populates the column with a datetime value.
From the Type dropdown, select the type of datetime value to generate:
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.
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.
{
"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.






Press Enter.
Click Run Query.





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



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.
For an absolute datetime value:
From the Distribution dropdown list, select how to distribute the datetimes across the data. The available options are Normal and Uniform.
For a uniform distribution:
Under Start, select the earliest datetime to use.
Under End, select the latest datetime to use.
For a normal distribution:
Under Centered on, select the datetime to use as the basis for the distribution.
Under Min, select the minimum gap between the datetimes. The gap uses the value selected from Units.
Under Mean, select the mean gap between the datetimes. The gap uses the value selected from
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:
Set the minimum and maximum amount of time difference from the base datetime column.
Select the unit of time to use for the time difference.
Select whether the datetime for the current column occurs before or after the base datetime column.
Select the datetime column to use as the base column.
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.
First, select the starting point for the series.
To use a specific datetime as the starting point:
From the Start At dropdown list, select Fixed.
Set the start date and time.
To use the value of another datetime column as the starting point:
From the Start At dropdown list, select from column.
Select the datetime column to use. If the table does not contain another datetime column, then you cannot use the from column option.
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:
From the Partition By dropdown list, select the column to use to partition the data.
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.
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:
In the Minimum field, set the minimum amount of time between values.
In the Mean field, set the mean amount of time between values.
In the Standard Deviation field, set the standard deviation for the amount of time between values.
In the Maximum field, set the maximum amount of time between values.
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.
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.
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.
To export the full Data Agent database:
In the database heading, click Export.
In the Export menu, select the format to use.
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.
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.
To back up the database, click Backup, then select Back up to JSON.
On the JSON configuration panel, to copy the JSON, click Copy to Clipboard.
To restore the database configuration from a JSON file:
Click Backup, then select Restore from JSON.
On the JSON configuration panel, paste the JSON configuration.
Click Restore.
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.
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.
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.

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.
To support this use case, you can define a mock API.
For more information, view the video tutorial.
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.
The Blank generator inserts a null value.
Inserts a random boolean value - either true or false.
Inserts the same value into all of the rows.
Produces a JPEG image in binary format.
Populates the column with filler text.
Populates the column with a MongoDB object identifier.
Intended for document identifier columns in a MongoDB database.
Inserts a numeric value.
Populates the field with a JSON object.
Generates a random universally unique identifier (UUID).
{
"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
}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.
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.
If you choose Anthropic, then in the Anthropic API Key field, provide your Anthropic key.
If you choose Amazon Bedrock, then:
In the Amazon Bedrock API Key field, provide your Amazon Bedrock key.
In the AWS Region field, specify the AWS Region where your account is located.
To test the provided key, click Test Credentials.
To save the configuration, click Save Changes.
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.
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:
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.
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)
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)
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)
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)
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)
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)
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)
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')
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')
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
To return the hexadecimal representation of an input string:
hex(input)
For example, to return the hexadecimal representation of the string 'hello':
hex('hello')
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')
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')
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 also provides a set of interpolation variables.
To use a variable, enclose it in double curly braces: {{variable}}.
Fabricate supports the following interpolation variables.
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.
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.
Fabricate's Mock API syntax is inspired by Express.
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.
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
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 .
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:
To send a JSON response, use the res.json method:
To send a plain text response, use the res.send method:
To set response headers, use the res.setHeader method:
To set multiple headers, use the res.set method:
To query your database snapshot, use the db.query method:
To modify your database snapshot, use the db.run method:
The db.run method returns an object with:
To generate a new UUID, use the fab_uuid() function. For example:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Populates the column with valid United States employer identification number (EIN).
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.
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.
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.
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.
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.
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 }) => {
// ...
})
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 objectpath - the request path (excluding the base URL /api/v1/databases/<database_name>/api)
query - the request query parameters as an object
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.
Populates the column with values from a column in a different table.
Makes the column a foreign key to another table.
Populates the column from a provided list of values. You can optionally provide a weight for each value.
Sets the column value based on a configured list of allowed transitions between values.
Assigns a rank value based on the values in 2 other columns.
Produces a value that matches a regular expression that you provide. It uses the Peri-compatible regular expression syntax.
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.
Uses a SQL expression to generate the value. The expression can refer to other columns and other tables.
Populates a column with the sum of column values from rows in another table. To identify the rows to include, you provide join criteria.
Adds together the values of a specified numeric column in rows that are before the current row.
Populates a column with a value or values from another column in the previous row or rows.
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=1with 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_valueapi.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
}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.
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:
Under Items, click the generator name.
On the Item Settings panel, from the Generator dropdown list, select the generator to use.
Configure the generator. For information about the configuration options for specific generators, go to and the .
Click Apply Changes
For a fixed distribution, in the Exactly field, specify the exact number of values in the array.
For a uniform distribution, to configure the distribution:
In the Minimum field, set the minimum number of values.
In the Maximum field, set the maximum number of values.
For a normal distribution, to configure the distribution:
In the Minimum field, set the minimum number of values.
In the Mean field, set the mean number of values.
In the Standard Deviation field, set the standard deviation from the mean for the number of values.
In the Maximum field, set the maximum number of values.
The Blank generator inserts a null value.
Inserts a random boolean value - either true or false.
Inserts the same value into all of the rows.
In the Value field, provide the value to use.
Produces a JPEG image in binary format.
Populates the column with filler text.
To configure the generator:
From the Generate dropdown list, select whether to generate:
Words - In other words, a single phrase
Sentences
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.
For a Fixed distribution, in the Exactly field, specify the length to use for each value.
For a Uniform distribution, to configure the distribution:
In the Minimum field, set the minimum length.
In the Maximum field, set the maximum length.
For a normal distribution, to configure the distribution:
In the Minimum field, set the minimum length.
In the Mean field, set the mean length.
In the Standard Deviation field, set the standard deviation from the mean for the lengths.
In the Maximum field, set the maximum length.
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.
For an Autoincrement distribution, in the Start at field, provide the number to start with.
For a Uniform distribution, to configure the default distribution:
In the Minimum field, set the minimum value.
In the Maximum field, set the maximum value.
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:
Click Add Variant.
To make the condition based on a SQL expression:
From the condition type dropdown list, select SQL expression.
In the condition field, provide the expression to use to identify when to use the variant.
To remove a variant, click Remove.
For a Binomial distribution, to configure the default distribution:
In the Trials field, set the number of tests to run.
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:
Click Add Variant.
To make the condition based on a SQL expression:
From the condition type dropdown list, select SQL expression.
In the condition field, provide the expression to use to identify when to use the variant.
To remove a variant, click Remove.
For an exponential distribution, to configure the default increment:
In the Minimum field, set the minimum value.
In the Rate field, set the rate of increase for the values.
In the Maximum field, set the maximum value.
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:
Click Add Variant.
To make the condition based on a SQL expression:
From the condition type dropdown list, select SQL expression.
In the condition field, provide the expression to use to identify when to use the variant.
To remove a variant, click Remove.
For a geometric distribution, to configure the default distribution:
In the Minimum field, set the minimum value.
In the Success Probability field, set the success probability for the generated values.
In the Maximum field, set the maximum value.
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:
Click Add Variant.
To make the condition based on a SQL expression:
From the condition type dropdown list, select SQL expression.
In the condition field, provide the expression to use to identify when to use the variant.
To remove a variant, click Remove.
For a normal distribution, to configure the default distribution:
In the Minimum field, set the minimum value.
In the Mean field, set the mean value.
In the Standard Deviation field, set the standard deviation from the mean for the values.
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:
Click Add Variant.
In the Condition field, provide the expression to use to identify when to use the variant.
Configure the distribution values to use for the variant.
To remove a variant, click Remove.
For a Poisson distribution, to configure the default distribution:
In the Minimum field, set the minimum value.
In the Mean field, set the mean value.
In the Maximum field, set the maximum value.
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:
Click Add Variant.
To make the condition based on a SQL expression:
From the condition type dropdown list, select SQL expression.
In the condition field, provide the expression to use to identify when to use the variant.
To remove a variant, click Remove.
For a series of values, to configure the default series:
You can base the start and end values on other numeric columns in the table.
From the Start At dropdown list, select the numeric column to use as the starting value.
From the End At dropdown list, select the numeric column to use as the ending value.
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:
From the Partition By dropdown list, select the column to use for the partition.
From the Order By dropdown list, select the column to use to sort the rows in each partition.
In the Decimals field, specify the number of decimal places to use for the values.
From the Curve Type dropdown list, select the type of curve to use.
To generate the series along a linear curve, select linear. This is the default
To generate the series along an exponential curve:
Select exponential.
In the Rate field, set the rate of increase.
Volatility determines the deviation from the curve.
To use a fixed percentage volatility:
From the Volatility dropdown list, select fixed.
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:
From the Volatility dropdown list, select from column.
From the column dropdown list, select the column 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:
Click Add Variant.
To make the condition based on a SQL expression:
From the condition type dropdown list, select SQL expression.
In the condition field, provide the expression to use to identify when to use the variant.
To remove a variant, click Remove.
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.
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
To import a JSON schema or JSON example value:
Click Import JSON Schema or Example.
On the panel, in the text area, paste the JSON schema or an example of the JSON object.
Click Apply.
Fabricate uses the provided schema or JSON to set up the initial list of fields and assign generators to those fields.
To add an object field:
Click Add Field.
On the field settings panel, in the Name field, provide the field name.
From the Generator dropdown list, select the generator to use to populate the field value.
Configure the generator. For information about the configuration options for specific generators, go to and the .
To change the field configuration:
Hover over the field name.
Click the settings icon.
On the field settings panel, update the configuration.
Click Save and Close.
To remove an object field:
Hover over the field name.
Click the settings icon.
On the field settings panel, click Delete.
Generates a random universally unique identifier (UUID).
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.
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.
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:
From the condition type dropdown list, select percentage.
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:
From the condition type dropdown list, select percentage.
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:
From the condition type dropdown list, select percentage.
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:
From the condition type dropdown list, select percentage.
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:
From the condition type dropdown list, select percentage.
In the percentage field, type the percentage.
Configure the distribution values to use for the variant.
To generate the series along a logarithmic curve:
Select logarithmic.
In the Rate field, set the rate of increase.
To match the curve to values from another column in the table:
Select from column.
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:
From the condition type dropdown list, select percentage.
In the percentage field, type the percentage.
Configure the distribution values to use for the variant.
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.
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.
###-##-####
232-66-7439
***-##
A0c-34
^@@@-##:###
Cght-87:485
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:
From the Source Table dropdown list, select the table that contains the column to get the values from.
From the Source Column dropdown list, select the source table column to get the values from.
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.
To configure the criteria:
From the source table column dropdown list, select the source table column.
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.
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.
At a minimum, for a foreign key column, you configure where to find the value to use to populate the column.
From the References Table dropdown list, select the table that the column references.
From the References Column dropdown list, select the column in the reference table to use to populate the value in the current column.
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.
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:
To configure a cardinality distribution:
Check Base the number of rows in this table on this foreign key relationship.
From the Distribution dropdown list, select the method to use to distribute the values among the rows.
Configure the options for that distribution method.
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 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.
For a normal distribution:
In the Minimum field, set the minimum number of times to use each row.
In the Mean field, set the mean number of times to use each row.
In the Standard Deviation field, set the standard deviation from the mean for the number of times to use each row.
In the Maximum field, set the maximum number of times to use each row.
For a uniform distribution:
In the Minimum field, set the minimum number of times to use each row.
In the Maximum field, set the maximum number of times to use each row.
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:
From the column dropdown, select the column that contains the remaining amount to consume.
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.
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.
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.
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.
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:
Click Generate with AI.
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."
Click Generate.
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:
Click Import from CSV.
In the field, paste the CSV content.
Click Import.
Fabricate uses the CSV to populate the transitions list. You can then add, edit, and remove transitions.
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.
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:
From the Partition By dropdown list, select the column to use to partition the data.
From the Order By dropdown list, select the column to use to set the ranking order.
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:
\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
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.
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".
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:
From the Source Table dropdown list, select the table that contains the column to sum the values for.
From the Column To Sum dropdown list, select the column that contains the values to sum.
Under Join based on the following criteria, to indicate how Fabricate identifies the rows to include:
From the first dropdown list, select the column from the source table.
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.
Adds together the values of a specified numeric column in rows that are before the current row.
To configure the generator:
From the Column to Sum dropdown list, select the column for which to add together the values. The column must contain numeric values.
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.
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.
Populates a column with a value or values from another column in the previous row or rows.
To configure the generator:
From the Source Column dropdown list, select the column from which to pull the value.
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.
previous value - Populate the current column with the single value from the previous row.
list of all prior values - Populate the current column with a column-separated list of values from all of the previous rows.
json array of all prior values - Populate the current column with a JSON array of values from all of the previous rows.
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.
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.
previous_value,next_value,probability
,home,50
,products,50
home,products,70
home,products,30Tonic 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.
Generates data values based on a prompt that you provide.
Populates the column with an airport code. For example, SFO or CDG.
Populates the column with the name of a continent.
Populates the column with a 2-character country code.
Populates the column with a number intended to represent the elevation where an airport is located.
Populates the column with an airport code from the International Civil Aviation Organization (ICAO) code. For example, LFPG or KJFK.
Populates the column with a latitude value.
Populates the column with a longitude value.
Populates the column with the name of a city or metropolitan area where an airport is located.
Populates the column with the name of an airport. For example, John F Kennedy Airport or Heathrow Airport.
Populates the column with a 2-character code to represent the region where the airport is located.
Populates the column with the name of an animal. For example, dog or cat.
Populates the column with the scientific name of an animal. For example, canis lupus familaris or felis catus.
Populates the column with an array.
Populates the column with the name of a city.
Populates the column with a 2-character country code. For example, ES, FR, US.
Populates the column with a legal entity identifier (LEI) for a bank.
Populates the column with the name of a bank in the United States.
Populates the column with a bank Register of Institutions and Affiliates Data (RIAD) code.
Populates the column with a United States bank routing number.
Populates the column with the name of a US state.
Populates the column with a street address.
Populates the column with a bank Swift code.
Inserts a random boolean value - either true or false.
Populates the column with the make of a car. For example, Ford or Honda.
Populates the column with the model of a car. For example, Mustang or Accord.
Populates the column with a year.
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.
Populates the column with the name of a city from anywhere in the world.
Populates the column with the name of a city from within the United States.
Populates the column with values from a column in a different table.
Populates the column with the domain name for a company. For example, apple.com or tonic.ai.
Populates the column with a company industry. For example, Consumer Electronics or Computer Software.
Populates the column with a year to represent when the company IPO occurred.
Populates the column with a monetary value to represent the amount of the company's most recent sale. For example 150.25.
Populates the column with the stock exchange where the company stock is traded. For example, NASDAQ or NYSE.
Populates the column with the market cap for the company. For example, 1.5B.
Populates the column with the name of a company.
Populates the column with the sector that the company belongs to. For example, Technology.
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.
Populates the column with the ticker symbol for the company. For example, aapl.
Inserts the same value into all of the rows.
Populates the column with the name of a country from anywhere in the world.
Populates the column with the United States.
Populates the column with a 3-character country code for a country from anywhere in the world. For example, FRA, ESP, USA.
Populates the column with a 2-character country code for a country from anywhere in the world. For example, FR, ES, US.
Populates the column with the 2-character country code for the United States - US.
Populates the column with a country telephone code from anywhere around the world.
Populates the column with the country telephone code for the United States.
Populates the column with a credit card number.
Populates the column with a credit card type. For example, Visa, MasterCard, American Express.
Populates the column with a 3-character currency code for a currency from anywhere in the world. For example, EUR, AUD, JPY.
Populates the column with the 3-character currency code for the United States, USD.
Populates the column with the name of a currency from anywhere in the world. For example, Euro, Mexican Peso, Yen.
Populates the column with Dollar.
Populates the column with a datetime value.
Populates the column with the name of a pharmaceutical company. For example, Pfizer.
Populates the column with a generic name of a drug.
Populates the column with the brand name of a drug.
Populates the column with a code from the National Drug Code directory.
Populates the column with valid United States employer identification number (EIN).
Populates the column with an email address.
Populates the column with a file extension. For example, .txt or .docx.
Populates the column with a file MIME type. For example, text/plain or image/jpeg.
Produces a given name, such as John or Mary.
Populates the column with the name of a commercial airline. For example, Delta Airlines or Lufthansa.
Populates the column with the name of an airport.
Populates the column with a 3-character airport code.
Populates the column with the name of a city.
Populates the column with the name of a country.
Populates the column with the name of an airport.
Populates the column with a 3-character airport code.
Populates the column with the name of a city.
Populates the column with the name of a country.
Populates the column with a timestamp in 24-hour format. For example, for 1:15 PM, the generated value would be 13:15.
Populates the column with a decimal number to indicate the number of hours in a flight. For example, 2.5.
Populates the column with a value representing a flight number. For example, LH1234.
Makes the column a foreign key to another table.
For example, a product-id column might be a foreign key to a products table.
Populates the column with a full mailing address from anywhere in the world.
Populates the column with a full mailing address from within the United States.
Produces a full name (given name and family name), such as John Smith and Mary Jones.
Populates the column with a code from the Healthcare Common Procedure Coding System.
Populates the column with a name from the Healthcare Common Procedure Coding System.
Populates the column with the city for a hospital address.
Populates the column with the name of a hospital organization.
Populates the column with the National Provider Identifier for a hospital.
Populates the column with a postal code for a hospital address.
Populates the column with a US state for a hospital address.
Populates the column with a hospital street address.
Populates the column with a diagnosis code from ICD-10.
Populates the column with a long description of a diagnosis from ICD-10.
Populates the column with a short description of a diagnosis from ICD-10.
Populates the column with a procedure code from ICD-10.
Populates the column with the long description of a procedure from ICD-10.
Populates the column with the short description of a procedure from ICD-10.
Populates the column with a diagnosis code from ICD-9.
Populates the column with the long description of a diagnosis from ICD-9.
Populates the column with the short description of a diagnosis from ICD-9.
Populates the column with the code for a procedure in ICD-9.
Populates the column with the long description of a procedure in ICD-9.
Populates the column with the short description of a procedure in ICD-9.
Produces a JPEG image in binary format.
Populates the column with an IP address. For example, 192.168.1.100 or 2001:0db8:0000:0000:0000:0000:1a2b:3c4d.
Produces a value that describes the area of expertise for a job. For example, Security or Quality.
Produces a value that describes a general descriptor of the job hierarchy level. For example, Senior or Lead.
Produces a job title. For example, Senior Security Engineer or Principal Program Manager.
Produces a value that describes the type of job or type of work that the job entails. For example, Engineer or Manager.
Populates the column with the name of a spoken language. For example, French, Spanish, English.
Populates the column with the 2-character code for a spoken language. For example, fr, es, en.
Produces a family name, such as Smith or Jones.
Populates the column with a latitude value from anywhere in the world.
Populates the column with a latitude value from within the United States.
Populates the column from a provided list of values.
Populates the column with a longitude value from anywhere in the world.
Populates the column with a longitude value from within the United States.
Populates the column with filler text.
Populates the column with a MAC address. For example, 00:1A:2B:3C:4D:5E.
Defines the column values based on an allowed flow between values.
Produces a name from the same set as the First Name generator. The middle name is always different from the first name.
Populates the column with a MongoDB object identifier. Intended for document identifier columns in a MongoDB database.
Populates the column with a movie genre. For example, Horror, Romantic Comedy.
Populates the column with the title of a movie. For example, Gone With the Wind.
Produces a common nickname for the person, such as Bobby or Lefty.
Inserts a numeric value.
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.
Produces a random passport number that matches the country name or code that is in another column of the table.
Produces a random United States passport number.
Produces a name suffix. The possible suffixes are Jr., Sr., and III.
Produces a name title. The possible titles are Mr., Mrs., Ms., and Dr..
Populates the column with a telephone number from anywhere in the world.
Populates the column with a telephone number from the United States.
Populates the column with the name of a plant. For example, dandelion.
Populates the column with the name of a plant family. For example, asteraceae.
Populates the column with the scientific name of a plant. For example, taraxacum officinale.
Populates the column with a postal code from anywhere in the world.
Populates the column with a 5-digit postal code from within the United States.
Populates the column with a category of product. For example, Health or Electronics.
Populates the column with a description of a product.
Populates the column with the name of a product.
Populates the column with the price of the product.
Populates the column with the subcategory that the product belongs to. For example, Oral Care and Hygiene.
Populates the column with the name of a project.
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.
Produces a value that matches a regular expression that you provide. It uses the Peri-compatible regular expression syntax.
Assigns a row number based on the value in another column.
Populates a column with either Male or Female.
Premium feature. Uses a SQL expression to generate the value. The expression can refer to other columns and other tables.
Populates a column with valid United States Social Security numbers (SSNs).
Populates the column with the name of a state or province from any country in the world. For example, Normandy or Ontario.
Populates the column with the name of a state in the United States. For example, Montana or New York.
Populates the column with the postal abbreviation of a state or province from anywhere in the world. For example, NOR or ONT.
Populates the column with the postal abbreviation of a state in the United States. For example, MN or NY.
Populates the column with a street address from anywhere in the world. For example, 10 Rue Morgue.
Populates the column with a street address from within the United States. For example, 15 Main Street.
Populates a column with the sum of column values from rows in another table. To identify the rows to include, you provide join criteria.
Adds together the values of a specified numeric column in rows that are before the current row.
Populates the column with the name of a time zone from anywhere in the world. For example, Europe/Paris.
Populates the column with the name of a time zone that occurs in the United States. For example, US/Central.
Populates the column with the 2-character country code for the university location. For example, ES, FR, US.
Populates the column with the name of a university. For example, Harvard.
Populates the column with the URL for the university website. For example, harvard.edu.
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.
Populates the column with a URL. For example, https://example.com.
Populates the column with a user agent value. For example, Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0.
Populates a column with a username. For example, johndoe.
Generates a random universally unique identifier (UUID).
Populates a column with a value or values from another column in the previous row or rows.