Overview
Fictix is an API for generating believable synthetic companies and using them to test software products. A Fictix company can include accounting data, banking activity, customer and vendor records, payroll, CRM data, tasks, native-shaped connector records, a simulation clock, webhooks, and planted scenarios for evaluating whether another application catches known business issues.
The most important developer idea is simple:
You create a demo job.
Fictix creates a generated company.
You fetch normalized data, exports, events, or native-shaped records.
You load or test that data in your own product.
Start in the Console
The Console is the front door for customers. Create an account or sign in to projects, then generate a company or select an existing one. Use its Connect to your builder panel or Company settings to obtain the runtime URL and project key for server-side code.
This keeps company creation, organization access, billing, key rotation, and webhook administration in one customer-facing place.
See Start In The Fictix Console before following an API quickstart.
What you can build
Use Fictix when you need to:
- create a realistic demo tenant without exposing real customer data
- populate a B2B SaaS product with believable business activity
- generate repeatable accounting, banking, CRM, payroll, task, and commerce data
- test ingestion pipelines against coherent cross-system records
- run scenario-based QA with planted truth, such as ghost employees, delayed payments, duplicate vendors, or reconciliation issues
- give AI agents or eval harnesses a synthetic company to inspect
- reproduce a customer-like state for demos, onboarding, QA, or sales engineering
The main API surface
Approved server-to-server integrations use this normalized control-plane surface:
/api/v1/demo-jobsPOST /api/v1/demo-jobs
GET /api/v1/demo-jobs/{job_id}
GET /api/v1/demo-jobs/{job_id}/status
GET /api/v1/demo-jobs/{job_id}/bundle
GET /api/v1/demo-jobs/{job_id}/entities/{entity}
GET /api/v1/demo-jobs/{job_id}/entities/{entity}/export
The demo_job resource wraps the lower-level project/runtime implementation and
returns stable links, company metadata, dataset counts, quality status, and
runtime identifiers in one place.
Base URLs
Use the base URL for the environment you are targeting:
Production: https://api.fictix.ai
Staging: https://api-staging.fictix.ai
Runtime handoff: https://staging.fictix.dev/{publish_id}/{service}/...
If your deployment uses a different host, keep the path structure the same and replace only the origin.
Authentication models
Fictix has a public discovery surface, a Console-managed bearer session, and one external credentialed auth layer:
| Layer | Used for | Header |
|---|---|---|
| Project runtime key | Connect an existing company to server-side code | X-API-Key: <project_api_key> |
| Console bearer session | Signed-in Console management flows | WorkOS bearer session managed by the Console; never copy it |
| External management key | Fictix-approved server-to-server control-plane integrations | X-Admin-Key: $FICTIX_ADMIN_API_KEY |
Most customer integrations should use the project runtime key issued in the Console. The signed-in Console can create or control demo jobs with its managed WorkOS bearer session. External integrations may do so only with the Fictix-supplied admin key above. The management surface is not a self-service browser-key flow, and a Console session must never be copied or forwarded.
Response objects
Fictix responses use object names so clients can branch safely:
{
"object": "demo_job",
"contract_version": "2026-07-17",
"id": "8f3a2d11",
"status": "ready"
}
Common object names:
demo_jobdemo_job_statusdemo_job_qualitydemo_bundledemo_entity_pagedemo_entity_exportcatalog_collectiontest_matrixtest_run
Environment expectations
For a production-grade integration, plan for:
- idempotent demo job creation
- retries around network failures and
5xxresponses - handling
413bundle-size responses by paging entities - storing
job_id,runtime.project_id, andruntime.slug - never storing plaintext runtime API keys unless you need lower-level runtime access
- validating
quality.summarybefore presenting generated data as clean - using reserved synthetic domains in generated counterparty data
First integration decision
Before writing code, choose one of these integration modes:
| Mode | Use when | Main endpoints |
|---|---|---|
| Console runtime | You need an existing Console-created company in your app | runtime data, exports, native routes |
| Static data | You have approved control-plane access and need a generated company once | create job, status, bundle, entity exports |
| Data loader | You need to map Fictix into your own schema | catalog, entities, exports |
| Runtime demo | You need ongoing simulated activity | simulation start/status/advance/events |
| Eval harness | You need planted truth and scoring | scenarios, manifest, test matrices, test runs |
| Native parity | You need API-shaped connector behavior | runtime/native routes after creating a job |
