Datumly API

Deterministic sample data over a simple REST API. No SDK required — if you can make an HTTP request, you can generate JSON, CSV, or SQL data with repeatable seeds.

Quickstart

Every dataset is one GET away. Anonymous requests need no key and return up to 1,000 rows.

curl "https://datumly.ashusevim.dev/api/datasets?dataset=ecommerce-orders&rows=25&seed=acme-demo"

Authentication

Create a key at /account and send it as a bearer header (or ?api_key=). Keys unlock higher limits and monthly quota tracking; a raw key is shown once at creation and only its hash is stored.

curl -H "Authorization: Bearer dl_live_…" \
  "https://datumly.ashusevim.dev/api/datasets?dataset=saas-users&rows=5000&format=csv"

Invalid or revoked keys return 401 — anonymous limits are never silently applied.

Endpoint

GET /api/datasets

ParamTypeDefaultDescription
datasetstringecommerce-ordersDataset slug, custom for Pro schemas, see the list below
rowsint 1–plan cap10Number of rows to generate (leaf rows for relational bundles)
seedstringdatumlyDeterministic seed — same seed, same data
formatstringjsonjson, csv, or sql
bundleboolfalseFor relational datasets + JSON: return linked tables instead of denormalized rows
fieldsJSON—Pro only with dataset=custom: array of { key, type }
date_fromISO daterolling windowLower bound of generated dates (inclusive)
date_toISO daterolling windowUpper bound of generated dates (inclusive-ish)

Every response includes x-datumly-plan and x-datumly-rows-remaining headers so you can track your quota without an extra call. Custom schemas also accept POST /api/datasets with a JSON body.

Datasets

SlugCategoryDescription
ecommerce-ordersCommerceRealistic purchases with customers, products, payment states, and order totals.
saas-usersSaaSUser accounts with plans, engagement, subscription state, and signup details.
product-catalogCommerceInventory-ready products with SKUs, prices, stock levels, and categories.
financial-transactionsFinanceAccount activity with merchants, transaction types, currencies, and balances.
support-ticketsOperationsCustomer support cases with priorities, agents, categories, and resolution status.
web-analyticsAnalyticsPage-view events with sessions, devices, traffic sources, and conversions.
crm-pipelineSales · relationalLinked companies, contacts, and deals — shared IDs stay consistent across rows and bundle tables.
project-tasksOperations · relationalProjects, assignees, and tasks with stable foreign keys — ideal for multi-table fixtures.

Custom schemas (Pro)

Send your own field list — the same seven types as the schema builder — and get deterministic rows through the API. Requires a Pro API key. Prefer POST for larger schemas; GET with a URL-encoded fields param works for small ones.

curl -X POST "https://datumly.ashusevim.dev/api/datasets" \
  -H "Authorization: Bearer dl_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "leads",
    "rows": 50,
    "seed": "acme-demo",
    "fields": [
      { "key": "id", "type": "uuid" },
      { "key": "email", "type": "email" },
      { "key": "company", "type": "string" },
      { "key": "score", "type": "integer" }
    ]
  }'

Relational bundles

Relational datasets keep foreign keys stable across rows. Add bundle=1 with format=json to receive separate linked tables (for example companies, contacts, and deals) instead of a single denormalized list. CSV and SQL always export the denormalized leaf rows.

curl "https://datumly.ashusevim.dev/api/datasets?dataset=crm-pipeline&rows=25&seed=acme-demo&bundle=1"

Determinism

Generation is seeded, not random. By default dates come from a rolling trailing-18-months window that advances monthly — your demo data stays fresh. For byte-identical output forever, pin the window:

# Byte-identical output, forever
curl "https://datumly.ashusevim.dev/api/datasets?dataset=ecommerce-orders&rows=100&seed=acme-demo&date_from=2026-01-01&date_to=2026-09-01" \
  | md5sum   # d0f1c6…  — same value on every machine, every run

Plans & limits

No account? Every endpoint works anonymously at 1,000 rows per request.

PlanMax rows / requestRows / monthPrice
Hobby1,000500,000$0/mo
Pro10,0002,000,000$9/mo

Errors

StatusMeaning
401API key is invalid or revoked
403Custom schemas requested without a Pro plan
404Unknown dataset slug
429Monthly row quota exhausted — upgrade or wait for the next period
{
  "error": "Monthly row quota exceeded",
  "limit": 500000,
  "used": 500000
}