DocsAPI reference

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.

PlanCalls / month
Free— (not available)
Pro10,000
Team100,000
Enterpriseunlimited

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

DatasetSizeDescription
identities~540People — name, email, bio, job, company, location, industry, interests, locale.
companies~580Companies — name, industry, size band, HQ, description.
posts~300Blog posts — title, body (markdown), excerpt, tags, author, published_at.
products~220Products — name, category, price, description, company.
reviews~500Product 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 paramDefaultDescription
count25Items to return, 1–100.
seedAny string. Same seed + same filters → same items, same order.
domainTag match against identities.domains / companies.domains (e.g. tech, design, fintech).
industryExact canonical industry (e.g. healthcare, legal, science).
localeBCP-47 locale (e.g. en-US, de-DE).
author_idFilter posts by author.
reviewer_idFilter reviews by reviewer.
product_idFilter reviews by product.
company_idFilter 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

HTTPerrorWhen
401unauthorizedNo Authorization header.
403pat_requiredThe header was a session cookie or wrong token type — Data API requires sk_live_*.
403plan_requiredFree org. Response includes required: "pro".
400invalid_countcount is not an integer 1–100.
402quota_exceededPlan's monthly quota is used up. Response includes used and limit.
404unknown_datasetPath segment isn't one of the supported datasets. Response includes supported.
404not_foundSingle-item endpoint with no matching id.

See the full envelope on the Errors page.

See also