Generates a brand-new master dataset from the Project's current data types, relationships, and record counts, replacing whatever was previously active. Requires effective Project editor or admin. Generation happens in dependency order (a type with a relationship to another type is generated after its target, e.g. User → Post → Comment) so every generated reference points at a record that actually exists. Supplying seed makes generation reproducible - the same Project definition and seed always produce the same records; omitting it picks and returns a new random seed. Before writing anything, the service computes the Space's resulting template-record usage (across every Project in the Space) and rejects with 409 if it would exceed the Space's plan limit. Replacing the master template never touches existing API-key runtime dataset instances - they keep using their current data until reset.
Request
{
"seed": 424242
}
seed is optional.
Response
{
"projectId": 1,
"seed": 424242,
"recordCounts": {
"User": 10,
"Post": 20
},
"totalRecords": 30,
"generatedAt": "2026-01-01T00:00:00.000Z"
}
Regenerates just one data type's master template records - and every type that depends on it, transitively (a type with a relationship pointing at this one, and anything that in turn depends on that type, and so on down the tree). Every other type in the Project keeps its existing records untouched. This exists because regenerating a type in isolation would otherwise leave its dependents' foreign-key fields pointing at values that no longer exist - cascading down the same dependency tree POST .../template/generate already generates in fixes that. Requires effective Project editor or admin. Subject to the same Space plan record-limit check as a full generation, computed against just the types being replaced. Returns 404 if typeName doesn't match any type in this Project, or 409 if the Project has never generated a template at all.
Request
{
"seed": 999
}
seed is optional, same as full generation.
Response
{
"projectId": 1,
"typeName": "User",
"regeneratedTypes": [
"User",
"Post",
"Comment"
],
"seed": 999,
"recordCounts": {
"User": 10,
"Post": 20,
"Comment": 40
},
"totalRecords": 70,
"generatedAt": "2026-01-01T00:00:00.000Z"
}
Regenerating a leaf type (nothing depends on it) - e.g. Comment above on its own - reports only that one type in regeneratedTypes.
Returns paginated records from the currently-active master dataset for one data type (matched by project_types.name, not routeName). Any effective Project role may view. Returns an empty records array (not 404) if the type exists but nothing has been generated yet; returns 404 only if typeName doesn't match any type in this Project.
Query parameters
page- default1pageSize- default50, max500
Response
{
"records": [
{
"id": 1,
"email": "jane@example.com",
"age": 34
}
],
"pagination": {
"page": 1,
"pageSize": 50,
"total": 10
}
}
Replaces one record in the master template, letting generated data be refined into a specific known test scenario. Requires effective Project editor or admin. The submitted object must satisfy the type's schema (every field's type/enum/min/max, required fields present, no unrecognized fields), its identifier field must match {identifier} in the URL, every other configured unique field must not collide with a different existing record, and every relationship source field must resolve to a real parent record. Changes affect the master template only - existing API-key runtime datasets are left unchanged; resetting a key later picks up the update.
Request
{
"id": 1,
"email": "jane@example.com",
"age": 42
}
Response
{
"id": 1,
"email": "jane@example.com",
"age": 42
}
Returns 422 for a schema violation or an unresolvable relationship value, 409 for a unique-field collision, and 404 if no such record exists in the active generation.
Every format is generated using @faker-js/faker, seeded once per generation so the same seed always reproduces the same dataset. An identifier/unique field is guaranteed distinct across a type's generated records - a numeric id with no format or enum simply uses the record's own position (1, 2, 3, …); any other identifier/unique field retries the generator a bounded number of times before falling back to a deterministic suffix, rather than looping forever or allowing a silent duplicate. A relationship's source field is populated by sampling a real value already generated for its target field on the (already-generated, per the dependency order above) parent type. A self-relationship (a type referencing its own rows, e.g. a Comment's parentId) does not attempt a real self-referential chain - that field is generated like a plain, unrelated field instead.
https://gamenames.magicrunez.com/ was spiked for this engine and turned out to be a realistic person-name generator by country and gender, not the fantasy/game-name generator originally assumed - and it requires an API key this project doesn't have configured. Since @faker-js/faker already covers every current format natively, it is not integrated; only src/generators/*.ts is allowed to call a generation library directly; a gamenamesClient.ts adapter could be added there later without touching any stored Project definition, if a future format ever needs country-specific realistic names.