YndigoBlue · Synthetic Data API

Realistic synthetic data, generated on demand

Generate complete, related tables of realistic data with a single API call. People, addresses, places, flights and calculated values, ready to load into any database.

Prepaid credit that never expires · no monthly fee
POST /v1/generate-dataset
{
  "tables": [{
    "name": "customer",
    "rowCount": 10000,
    "fields": [
      { "type": "Number", "mode": "Sequential", "start": 1,
        "map": { "value": { "column": "id", "dataType": "Integer" } } },
      { "type": "Person", "countries": [{ "country": "us" }],
        "map": {
          "firstName": { "column": "first_name", "dataType": "VarChar" },
          "lastName":  { "column": "last_name",  "dataType": "VarChar" },
          "dob":       { "column": "dob",        "dataType": "Date" } } },
      { "type": "Address", "boundingLocation": { "country": "us", "state": "az" },
        "map": {
          "addressLine1": { "column": "address", "dataType": "VarChar" },
          "city":         { "column": "city",    "dataType": "VarChar" },
          "zip":          { "column": "zip",     "dataType": "VarChar" },
          "location":     { "column": "home",    "dataType": "Geometry" } } },
      { "type": "Calculated",
        "calculation": {
          "operation": "Age",
          "inputs": [{ "column": "dob" }, { "literal": "2026-01-01" }] },
        "map": { "value": { "column": "age", "dataType": "Integer" } } }
    ]
  }]
}

Realistic by Design

Addresses, places, airports and airlines come from real reference data, so every row holds together.

Related Tables

Build parent and child tables in one request, with foreign keys that always match.

Ready to Load

Typed CSV with a schema, ready to import with Velocity, Foundry or any database tool.

Prepaid Credit

No subscription and no monthly fee. Credit you buy never expires.

Why Alchemy

Consistent data in every row

When every value is picked on its own, you get house numbers that don't exist on the street, ZIP codes in the wrong city and flights that arrive before they leave. Alchemy generates related values together from real reference data, so an address, a person or a flight is consistent across every column it fills.

Real US Address Generation

Real, deliverable US addresses

Every Address row is a real US street address. The house number, street, unit, city, county, state and ZIP all come from the same address, and the coordinates point to where it actually is. Your test data passes the same address checks your production data does.

  • Official county names, such as Orleans Parish and Anchorage Municipality
  • Filter by state or county, a WKT polygon, or a radius around a point
  • Coordinates as WKT for a Geometry column, or as separate X and Y values
  • Unique addresses on request, checked before any data is generated
Address field
{
  "type": "Address",
  "boundingLocation": { "country": "us", "state": "az" },
  "map": {
    "addressLine1": { "column": "street",    "dataType": "VarChar" },
    "city":         { "column": "city",      "dataType": "VarChar" },
    "state":        { "column": "state",     "dataType": "VarChar" },
    "zip":          { "column": "zip",       "dataType": "VarChar" },
    "coordinateY":  { "column": "latitude",  "dataType": "Double" },
    "coordinateX":  { "column": "longitude", "dataType": "Double" }
  }
}
Sample output
streetcitystateziplatitudelongitude
5020 West Peoria AvenueGlendaleAZ8530233.5820-112.1668
17460 West Willow AvenueSurpriseAZ8538833.6083-112.4342
1500 East Cedar AvenueFlagstaffAZ8600435.2181-111.6208
Geospatial & Location

Spatial data within any boundary

Generate points, lines and polygons for Geometry and Geography columns inside a city, county or state, around a point, or within your own polygon. The Location field returns real cities, counties, states and ZIP areas with their published boundaries.

  • Points, lines, polygons and multi-part shapes as WKT
  • Points as WKT or as separate X and Y values
  • Keep generated geometry on land with withinCountries
  • Polygons with holes
Bounding generated geometry
Named place inside a named state, county or city radius Radius within a distance of a point Custom polygon inside a polygon you supply
Names for Multiple Countries

Names from around the world

Names come from each country's own name data, weighted by how common they are, so a generated customer list looks like a real one. The Person field generates first, middle and last names, sex, date of birth and US race and ethnicity together, so everything in the row agrees. Polish, Czech, Greek and Irish surnames take the masculine or feminine form that matches the person.

  • Blend countries with relative weights, such as two US rows for every UK row
  • Japanese in Romaji, Kanji or Hiragana, Korean in Hangul, and Greek in the Greek alphabet
  • Filter by popularity, first letter and length
  • Dates of birth spread across a range or clustered around an average age
  • IDs built from the person, such as X-1994-1103-MCCAL-4820
Person field
{
  "type": "Person",
  "countries": [{ "country": "pl" }],
  "dobStart": "1960-01-01",
  "dobEnd": "2005-12-31",
  "map": {
    "firstName": { "column": "first_name",    "dataType": "VarChar" },
    "lastName":  { "column": "last_name",     "dataType": "VarChar" },
    "dob":       { "column": "date_of_birth", "dataType": "Date" },
    "sex":       { "column": "sex",           "dataType": "VarChar" }
  }
}
Sample output: surname agrees with sex
first_namelast_namedate_of_birthsex
ArinaSzwiec1994-01-10Female
JaroslawKmieciński1994-09-10Male
JaninaKuchar1969-02-03Female
ZenMatuszczyk1960-02-01Male
Japanese, in Kanji
last_name
勝木
諏訪
駒井
正広
Calculated Fields

Columns calculated from the rest of the row

Derive a value from other columns in the same row: a line total from quantity and price, an age band from a date of birth, or the distance between two generated points. Operations nest inside each other, so complex expressions need no special syntax, and hidden columns let you calculate from inputs you don't want in the output.

  • Arithmetic: addition, subtraction, multiplication, division and rounding
  • Text: templates, slugs, hashes, casing, trimming and slicing
  • Dates: age, date parts, date arithmetic and truncation
  • Geometry: distance, bearing, area, buffer, centroid, within, intersects, GeoJSON and geohash
  • Logic: compare, if, case, and/or/not, coalesce and map
Number field + two Calculated fields
[
  { "type": "Number", "mode": "Real", "min": 50, "max": 2500, "scale": 2,
    "map": { "value": { "column": "total", "dataType": "Decimal" } } },
  { "type": "Calculated",
    "calculation": {
      "operation": "If",
      "when": { "operation": "Compare", "comparison": "GreaterThan",
                "inputs": [{ "column": "total" }, { "literal": 1000 }] },
      "then": { "literal": "Review" },
      "else": { "literal": "Auto" } },
    "map": { "value": { "column": "approval_path", "dataType": "VarChar" } } },
  { "type": "Calculated",
    "calculation": {
      "operation": "Case",
      "cases": [
        { "when": { "operation": "Compare", "comparison": "LessThan",
                    "inputs": [{ "column": "total" }, { "literal": 200 }] },
          "then": { "literal": "Bronze" } },
        { "when": { "operation": "Compare", "comparison": "LessThan",
                    "inputs": [{ "column": "total" }, { "literal": 1000 }] },
          "then": { "literal": "Silver" } } ],
      "default": { "literal": "Gold" } },
    "map": { "value": { "column": "tier", "dataType": "VarChar" } } }
]
Sample output
totalapproval_pathtier
697.97AutoSilver
2350.57ReviewGold
351.53AutoSilver
2072.25ReviewGold
Flight & Airport Support

Real airports and flights

The Airport field returns real airports with their IATA, ICAO and local codes, location, elevation and time zone. The Flight field builds a complete journey between two airports: a real airline, a valid flight number, a duration based on the distance flown, and departure and arrival in each airport's local time. Filter each end separately, for example US airports to anywhere in Europe.

  • Adjustable cruising speed and taxi time
  • Route as a WKT line, distance in kilometers or miles, seat class and seat number
  • Filter each end by airport, country, region, continent or airport type
  • Domestic or international scope, and minimum or maximum distance
  • Heliports, seaplane bases and closed airfields when you need them
Flight field: US to Europe, March 2026
{
  "type": "Flight",
  "departure": { "countries": ["us"], "types": ["LargeAirport"] },
  "arrival":   { "continents": ["EU"], "types": ["LargeAirport"] },
  "scope": "International",
  "minDistanceKilometers": 5000,
  "maxDistanceKilometers": 9000,
  "departureTime": {
    "mode": "Random",
    "min": "2026-03-01T00:00:00",
    "max": "2026-03-31T23:59:59"
  },
  "map": {
    "flightNumber":     { "column": "flight",  "dataType": "VarChar" },
    "airlineName":      { "column": "airline", "dataType": "VarChar" },
    "departureAirport": { "column": "from",    "dataType": "Char" },
    "arrivalAirport":   { "column": "to",      "dataType": "Char" },
    "departureTime":    { "column": "departs", "dataType": "DateTime" },
    "arrivalTime":      { "column": "arrives", "dataType": "DateTime" }
  }
}
Sample output: times are local to each airport
flightairlinefromtodepartsarrives
LM260LoganairJAXLHR2026-03-12 17:05:452026-03-13 05:55:45
TO9Transavia FranceIADCDG2026-03-25 12:38:372026-03-26 01:43:37
AZ14ITA AirwaysBHMTSF2026-03-15 08:39:162026-03-16 00:59:16
N730Nordic Regional AirlinesBWIHEL2026-03-02 09:40:152026-03-03 01:35:15
Credits That Never Run Out

Pay as you go, with credit that never expires

Alchemy runs on prepaid credit. There's no subscription, no monthly row allowance and nothing that resets at the end of the month. Buy credit when you need it, and whatever you don't use stays on your account. Every response tells you exactly what the call cost.

  • No subscription fee, seat count, contract or minimum spend
  • The cost of every call in the response and the X-Alchemy-Cost header
  • Your balance and full call history through the account endpoints
  • Optional auto top-up, within limits you set
See API Pricing
Alchemy credit
Monthly feeNone
SeatsNone
Monthly resetNone
Credit expiresNever
HTTP/1.1 200 OK
X-Alchemy-Cost: 0.0001
Also Included

Everything your test data needs

Valid identifiers, typed output and a browser test bench for building requests.

Valid Identifiers

Credit card numbers, IBANs, VINs, routing numbers, ISINs, CUSIPs, LEIs, barcodes and ISBNs that pass check-digit validation.

Typed Columns and a Schema

Every column keeps the data type you declare, and every response includes a schema. Get inline JSON, plain CSV or a packaged .csvx file.

No Production Data

You send a description of the data, not the data itself. Nothing to copy, mask or scrub out of a live system.

Crucible Test Bench

Build and run requests in the browser, inspect the rows, types and schema, and see spatial columns on a map. Download the results as CSV.

Use Cases

Where teams use Alchemy

Anywhere you need a database full of data that looks and behaves like your own.

Development and QA

Fill development and test databases with data that behaves like production, without copying production.

Demos and Training

Give sales demos and training environments customers, addresses and orders that look like the real thing.

Location and Mapping

Test geofencing, routing and map displays with addresses and shapes in the right places.

Travel and Logistics

Load booking, itinerary and scheduling systems with flights between real airports on real airlines.

How It Works

From request to data set

Alchemy is a hosted HTTPS API. There's nothing to install, and any language with an HTTP client can call it.

1
Define your tables

List your tables, their row counts and a field for each column. Each field's map sets the column name and data type.

2
Call the API

Post the request to /v1/generate-dataset with your API key in the X-Api-Key header, or try it first in Crucible.

3
Load the data

Import the CSV into any supported database with Velocity or Foundry, or into any other tool that reads CSV.

Try Alchemy in Crucible

Build a request in the browser and see the generated data straight away. Crucible is available to every registered account and runs on your own API key.

Crucible, showing a request on the left, the generated table top right, and its spatial column drawn on a map below.