↗ free · no signup · works in 30 seconds

smart-mock.com

Realistic fake data. Live REST API. Yours instantly.

Create a table, pick your columns, get a URL you can call from any app - curl, Python, JavaScript, whatever. Relational data, error injection, custom value lists. Free forever.

or let your AI build it for you ↓

→ get started free try it out, no signup
LIVE EXAMPLE
PRD-0042 · Wireless Headphones · category: electronics · price: 89.99 · stock: 143 ORD-0019PRD-0042 · qty: 2 · total: 179.98 · status: shipped USR-0007 · plan: pro · created: 2024-11-03 · city: Berlin SES-0291USR-0007 · duration: 847s · device: mobile · events: 12 PLR-0012 · username: dataset(handles) → xShadow99 · level: 34 · score: 88420 RUN-0091AGT-0003 · model: gpt-4o · tokens: 1240 · status: done PRD-0042 · Wireless Headphones · category: electronics · price: 89.99 · stock: 143 ORD-0019PRD-0042 · qty: 2 · total: 179.98 · status: shipped USR-0007 · plan: pro · created: 2024-11-03 · city: Berlin SES-0291USR-0007 · duration: 847s · device: mobile · events: 12 PLR-0012 · username: dataset(handles) → xShadow99 · level: 34 · score: 88420 RUN-0091AGT-0003 · model: gpt-4o · tokens: 1240 · status: done

What gets generated.

first_nameJohnrule:first_name
middle_nameMichaelrule:middle_name
last_nameCarterrule:last_name
email[email protected]rule:email
address742 Market St, San Franciscorule:address
date2025-03-14rule:date
number3,206.39range(1000–8000)
booleantruerule:bool
uuida3f7-…-c12brule:uuid
enumbronze / silver / goldrule:enum(…)
datasetAlice · Daniel · Sofiayour list
composedACC-001 … ACC-999generated IDs
// built-in datasets
first_name middle_name last_name email address city country company job_title
// your custom datasets
dataset(agents) dataset(regions) dataset(statuses) + up to 100 new per user
smart-mock · live table universe
suppliers 12 rows
idSUP-0007
nameTechCorp
countryGermany
products 8 rows
idPRD-0042
nameHeadphones
price89.99
orders 30 rows
qty2
total179.98

// suppliers → products → orders - three levels, two cables

// rule nodes - computed columns at generation time
IF node
if price > 100
"required"
elif price > 20
"optional"
else
"none"
products8 rows
name Headphones
price 89.99
insurance optional
// what it does

Everything you need to fake it.

Schema DSL
Define columns with a simple text format. Types, rules, ranges - all in one line.
→ column definition
"email" : "string, rule:email"
"salary": "number, rule:decimal,
           range(1000-8000)"
"joined": "date, rule:from(2020-01-01)
           :until(2025-12-31)"
"tier"  : "string,
           rule:enum(bronze|silver|gold)"
Bind & Drift
Same entity, same email. Always. Or add drift for controlled inconsistency.
→ consistent entities
// customers table
"email": "string, rule:email,
          bind:cust_email"

// messages table - same email
"email": "string, rule:email,
          bind:cust_email"

// payments - 5% chance different
"email": "string, rule:email,
          bind:cust_email, drift(0.05)"
Error Injection
Simulate null values, wrong types, malformed dates. Set error_rate 0.0 – 1.0.
→ messy data on demand
// clean data
{ "error_rate": 0.0 }

// 10% bad rows
{ "error_rate": 0.1 }

// chaos mode
{ "error_rate": 1.0 }

// what gets injected:
// null · wrong_type · bad_format
// out_of_range · swapped columns
Datasets
Create reusable value lists. Reference them in any table. Max 15 per user.
→ custom value lists
POST /users/marek/datasets
{
  "name": "agents",
  "values": ["Alice","Bob","Fero"]
}

// use in column:
"agent": "string,
          rule:dataset(agents)"

// composed IDs:
{ "values": ["ACC-", 1, 999],
  "composed": true }
→ ACC-1, ACC-2 ... ACC-999
Bounded Generate
Link child records to parent keys. 3 invoices per customer, automatically.
→ relational mock data
POST /users/marek/tables
{
  "table": "invoices",
  "bounded": {
    "ref_table": "customers",
    "ref_key": "",
    "rows": 3
  }
}
// → 3 invoices × each customer
// customers_key auto-populated
Rule Nodes
Computed columns at generation time. Math, sequences, IF conditions - wired into table columns.
→ computed columns
// running balance per account
type: sequence
source: 50, step: 10
group_by: account_id

// conditional status
type: if
if amount > 1000
→ status = "high_value"
else → status = "normal"
Permanent Snapshot
One stable URL per account. SQL query across all tables. Call it like a read-only database.
→ stable API + SQL
// permanent URL
GET /users/{id}/snapshot
    /tables/orders?token=...

// SQL across all tables
POST /snapshot/query
{
  "sql": "SELECT * FROM orders
    JOIN customers
    ON orders.customer_key
       = customers.key"
}
AI Agent Ready
Give an AI agent your smai_ token. It builds your full schema - tables, cables, rule nodes - via API.
→ schema via API
// user generates smai_ token
// AI agent gets token + user_id
// AI calls:

POST /tables       → customers
POST /tables       → orders
POST /table-links  → wire FK
POST /rule-nodes   → compute

// 5 min TTL · create-only
// no read · no delete

Let your AI build it.

Generate an smai_ token and give it to your AI. It can call the API directly - or generate curl commands you run yourself. Either way, your schema is ready in seconds.

Works with any AI that can write HTTP calls - ChatGPT, Claude, Cursor, n8n, LangChain. The token is create-only for row data - it can read schema structure to build on top of it, but cannot read, modify, or delete your generated data.

→ get your smai_ token
AI agent - building schema
// option A: paste token into your AI chat
// → AI generates curl commands, you run them

// option B: give token to an agent with tools
// → agent calls the API directly

// either way, agent calls:

POST /users/{user_id}/tables
Authorization: Bearer smai_xxxxxxxxxxxx
→ "customers" table created

POST /users/{user_id}/table-links
→ orders.customer_id wired to customers.id

// schema ready. start fetching.

// available from token tier (username only, no email) · 5 min TTL · 20 calls · no row data access · no deletes

Try it out.

Jump straight into the workspace - no signup, no username. Guest sessions are temporary. Sign up later to keep your data.

⚠ guest mode - data is not persisted between sessions
As a guest you can:
create tables and generate mock data
use the API with a guest token
export data via curl
~ session lasts 2 hours
no snapshots, no saved datasets
smart-mock api · live
// no setup needed - click open workspace →

// then create a table:
POST /users/{guest_id}/tables

// get live mock data on every call:
GET /users/{guest_id}/tables/{table}/live

// example response:
[
{ "id": "CUS-0001", "name": "Alice" },
{ "id": "CUS-0002", "name": "Bob" }
]

_
// workflow

How it works.

01 //
Open dashboard
no signup needed
02 //
Build schema
columns + rules + canvas
03 //
Generate
click or POST /tables
04 //
Call your API
GET /tables/{name}
Marek Gajdoš
// oh, and there's also a human behind it

Hi, I'm Marek - an engineer who automates the boring parts. I work with production data daily. smart-mock is the tool I built because I needed it - and then decided to ship it.