Synthetic data, five lines from here.
Train on your own data without sending it anywhere — the SDK encodes locally, and only embeddings reach the API.
- pip install dataxid
- 100K rows/month free
- Apache-2.0 SDK
import dataxid
import pandas as pd
dataxid.api_key = "dx_..."
df = pd.read_csv("data.csv")
synthetic = dataxid.synthesize(data=df, n_samples=1000)Steer the distribution, not just the row count.
Generation is a starting point, not the whole job. Rebalance a skewed category, correct for bias, hold known values fixed, or fill the gaps in what you already have.
Rebalance a category
Override the natural distribution of any categorical column.
distribution = dataxid.Distribution(
column="gender",
probabilities={"M": 0.5, "F": 0.5},
)
synthetic = model.generate(
n_samples=1000,
distribution=distribution,
)Correct for bias
Reduce statistical parity gaps across sensitive attributes.
bias = dataxid.Bias(
target="income",
sensitive=["gender", "race"],
)
synthetic = model.generate(
n_samples=1000,
bias=bias,
)Condition on known values
Fix the columns you already know and let the model complete the rest.
conditions = pd.DataFrame({
"income": [">50K"] * 1000,
})
synthetic = model.generate(
conditions=conditions,
)Impute missing cells
Fill nulls with model predictions while every non-null cell stays put.
model = dataxid.Model.create(data=df)
filled = model.impute(
df,
trials=3,
pick="mode",
)Your raw data never leaves your machine.
The SDK encodes and decodes locally. Only abstract embeddings — 64 floats per row — cross the API boundary, so the service never sees a single real value.
Your machine · raw rows
| tenure | MonthlyCharges | TotalCharges | InternetService | Contract | Churn |
|---|---|---|---|---|---|
| 41 | 70.35 | 2,884.35 | DSL | One year | No |
| 3 | 48.20 | 144.60 | DSL | Month-to-month | Yes |
| 58 | 101.90 | 5,910.20 | Fiber optic | Two year | No |
| 16 | 84.75 | 1,356.00 | Fiber optic | Month-to-month | Yes |
encode() — locally, in the SDK
The wire · float32[64] per row
out → DataXID · fit(embeddings)
back ← DataXID · sample(n=7,043)
No values, no identifiers. The model trains and generates on embeddings alone.
Your machine · synthetic rows
| tenure | MonthlyCharges | TotalCharges | InternetService | Contract | Churn |
|---|---|---|---|---|---|
| 34 | 56.95 | 1,889.50 | DSL | One year | No |
| 2 | 53.85 | 108.15 | DSL | Month-to-month | Yes |
| 66 | 105.65 | 6,844.50 | Fiber optic | Two year | No |
| 22 | 89.10 | 1,980.20 | Fiber optic | Month-to-month | No |
decode() — locally, in the SDK
Noise when you want it
Optional Gaussian noise on embeddings is one flag away, and rare categorical values are protected by default.
Same split, every shape
Single-table, multi-table, and time series all cross the same boundary.
One engine. Three ways in.
Agentic Synthetic Data is itself an MCP client. The tools you hand your own agent are the same tools that run our product.
Dashboard
Describe what you need in plain language and watch the agent build it.
Profile, generate, and evaluate in one connected loop.
Python SDK
Drop generation into a pipeline or a CI job.
pip install dataxid
MCP server
Point Cursor or Claude at the API and let your own agent drive it.
Streamable HTTP, authenticated with your API key.
{
"mcpServers": {
"dataxid": {
"url": "https://api.dataxid.com/mcp",
"headers": {
"Authorization": "Bearer dx_live_..."
}
}
}
}Built like an API you'd want to depend on.
The boring parts are the ones you notice at 3am. They are all here, documented, and consistent across every endpoint.
- Response envelope
- Every response is { object, data, metadata }. Lists add has_more.
- Idempotency
- Idempotency-Key on all writes. Replays return the cached response for 24 hours.
- Pagination
- Cursor-based with limit and starting_after. No offset drift.
- Rate limits
- X-RateLimit-Limit, -Remaining, -Reset, plus Retry-After on 429.
- Errors
- Typed hierarchy with code, doc_url, param, and a request_id on every failure.
- Retries
- The SDK retries with exponential backoff and honours Retry-After.
- Environments
- dx_test_ keys hit a free sandbox. dx_live_ keys are metered.
Start with your own dataset.
Generate your first synthetic rows on the free tier.