Data API
Pro+ HTTP endpoint for sampling identities, companies, posts, products, and reviews from seedkit's curated synthetic-data pools.
The Data API exposes seedkit's hand-curated synthetic-data pools as a deterministic JSON service. Use it when you want realistic identity / company / content data outside a database — for fixtures, demos, copy, or as a backend for prototype UIs.
The pool ships with seedkit and grows release over release: ~540 identities, ~580 companies, ~300 posts, ~220 products, ~500 reviews, all internally coherent (every posts.author_id resolves to a real identities.id, every reviews.product_id resolves to a real products.id, and so on).
Plan
The Data API is available on Pro and above. Free orgs receive 403 plan_required on every request.
| Plan | Calls / month |
|---|---|
| Free | — (not available) |
| Pro | 10,000 |
| Team | 100,000 |
| Enterprise | unlimited |
Each request counts as one call regardless of count — fetching 100 items costs the same as fetching one.
Base URL
https://app.seedkit.dev/api/v1/data/<dataset>
Datasets
| Dataset | Size | Description |
|---|---|---|
identities | ~540 | People — name, email, bio, job, company, location, industry, interests, locale. |
companies | ~580 | Companies — name, industry, size band, HQ, description. |
posts | ~300 | Blog posts — title, body (markdown), excerpt, tags, author, published_at. |
products | ~220 | Products — name, category, price, description, company. |
reviews | ~500 | Product reviews — rating, title, body, reviewer, product, verified flag. |
Cross-references resolve: every posts.author_id is a real identities.id, every reviews.product_id is a real products.id, every products.company_id is a real companies.id.
Authentication
Pass a personal access token in the Authorization header:
curl -H "Authorization: Bearer sk_live_..." \
https://app.seedkit.dev/api/v1/data/identities
Mint a token via seedkit login or from the dashboard at Settings → Tokens. Mock-scoped msk_live_* tokens are not accepted by the Data API — only org-scoped sk_live_*.
List endpoint
GET /api/v1/data/<dataset>
Returns a sampled subset. The full pool is filtered first, then count items are sampled deterministically from the filtered set.
| Query param | Default | Description |
|---|---|---|
count | 25 | Items to return, 1–100. |
seed | — | Any string. Same seed + same filters → same items, same order. |
domain | — | Tag match against identities.domains / companies.domains (e.g. tech, design, fintech). |
industry | — | Exact canonical industry (e.g. healthcare, legal, science). |
locale | — | BCP-47 locale (e.g. en-US, de-DE). |
author_id | — | Filter posts by author. |
reviewer_id | — | Filter reviews by reviewer. |
product_id | — | Filter reviews by product. |
company_id | — | Filter products by company. |
Response:
{
"data": [
{
"id": "sarah-chen",
"first_name": "Sarah",
"last_name": "Chen",
"full_name": "Sarah Chen",
"username": "sarah.chen",
"email": "sarah.chen@techmail.com",
"bio": "Product designer focused on developer tools and API ergonomics. Previously at Stripe.",
"job_title": "Senior Product Designer",
"company": "Linear",
"location": "San Francisco, CA",
"avatar_url": "https://app.seedkit.dev/api/avatars/sarah-chen",
"domains": ["tech", "design", "startup"],
"industry": "tech",
"locale": "en-US"
}
],
"count": 1,
"total_available": 42,
"seed": "demo",
"dataset": "identities"
}
total_available is the size of the filtered pool before sampling — useful when you want to know whether to widen your filters.
Single-item endpoint
GET /api/v1/data/<dataset>/<id>
Fetches one record by its stable id. Useful for resolving foreign keys returned by the list endpoint.
curl -H "Authorization: Bearer sk_live_..." \
https://app.seedkit.dev/api/v1/data/identities/sarah-chen
{
"data": { /* the identity */ },
"dataset": "identities"
}
Returns 404 not_found if no record with that id exists.
Determinism
Given the same dataset, filters, count, and seed, the API returns the same items in the same order — across regions, across days, across runs. This makes the API safe to use in tests, snapshot fixtures, and demo recordings.
If you omit seed, the response is still stable for that filter combination (the dataset itself is the seed), but it may shift when the underlying pool grows in a future release. For long-lived fixtures, always pass an explicit seed.
Caching
Responses include Cache-Control: no-store. We don't want CDNs replaying old responses if the pool grows; cache in your own application if you need to.
Examples
Sample 5 healthcare identities for a demo:
curl -H "Authorization: Bearer sk_live_..." \
"https://app.seedkit.dev/api/v1/data/identities?industry=healthcare&count=5&seed=demo"
Find all reviews for a product (drop count if you want everything up to 100):
curl -H "Authorization: Bearer sk_live_..." \
"https://app.seedkit.dev/api/v1/data/reviews?product_id=acme-laptop-stand&count=20"
Pull 25 deterministic posts in de-DE:
curl -H "Authorization: Bearer sk_live_..." \
"https://app.seedkit.dev/api/v1/data/posts?locale=de-DE&seed=marketing-site"
Errors
| HTTP | error | When |
|---|---|---|
401 | unauthorized | No Authorization header. |
403 | pat_required | The header was a session cookie or wrong token type — Data API requires sk_live_*. |
403 | plan_required | Free org. Response includes required: "pro". |
400 | invalid_count | count is not an integer 1–100. |
402 | quota_exceeded | Plan's monthly quota is used up. Response includes used and limit. |
404 | unknown_dataset | Path segment isn't one of the supported datasets. Response includes supported. |
404 | not_found | Single-item endpoint with no matching id. |
See the full envelope on the Errors page.
See also
- Avatar API — companion endpoint for deterministic SVG avatars.
- Authentication
- Errors