/ API

API

Deterministic user data API for vlist demos. Every request generates data on-the-fly using seeded hashing — same index always returns the same user. Supports 1M+ items with zero storage.

v0.1.0 CORS enabled Zero storage Configurable latency
Base URL https://vlist.dev/api
Endpoints
GET /api/users Paginated user list
Parameters
Name Type Default Description
offset number 0 Start index (0 – 10M)
limit number 50 Page size (1 – 200)
delay number 0 Simulated latency in ms (0 – 5000)
total number 1000000 Dataset size (1 – 10M)
Response
Example Open ↗
{
  "items": [
    {
      "id": 1,
      "firstName": "Mary",
      "lastName": "Baker",
      "email": "mary.baker@gmail.com",
      "avatar": "MB",
      "avatarColor": "#5e35b1",
      "role": "Senior PM",
      "department": "Security",
      "company": "Soylent Corp",
      "city": "Portland",
      "country": "United States",
      "status": "active",
      "joinedYear": 2023
    },
    // ... more items
  ],
  "total": 1000000,
  "hasMore": true
}
Try It

                        
GET /api/users/:id Single user by ID (1-based)
Parameters
Name Type Default Description
:id number User ID (1-based) (path param)
delay number 0 Simulated latency in ms (0 – 5000)
total number 1000000 Dataset size for bounds checking (1 – 10M)
Response
Example Open ↗
{
  "id": 42,
  "firstName": "Ronald",
  "lastName": "Hughes",
  "email": "ronald.hughes1g@fastmail.com",
  "avatar": "RH",
  "avatarColor": "#fb8c00",
  "role": "Mobile Developer",
  "department": "Support",
  "company": "Morley & Associates",
  "city": "Philadelphia",
  "country": "United States",
  "status": "active",
  "joinedYear": 2016
}
Try It

                        
GET /api/info API metadata

Returns API version, available endpoints, parameter definitions, and defaults. Machine-readable.

JSON Open ↗
{
  "name": "vlist.dev API",
  "version": "0.1.0",
  "description": "Deterministic user data API for vlist demos",
  "endpoints": { ... },
  "defaults": { "total": 1000000, "limit": 50, "maxLimit": 200 }
}
User
Generated deterministically from the user's index using FNV-1a hashing. Same ID always produces the same user — no database, no randomness.
TypeScript
interface User {
  id: number          // 1-based unique identifier
  firstName: string   // From 200 common first names
  lastName: string    // From 128 common last names
  email: string       // first.last[suffix]@domain
  avatar: string      // Two-letter initials ("MB")
  avatarColor: string // Hex color for avatar background
  role: string        // Job title (32 roles)
  department: string  // Team name (20 departments)
  company: string     // Company name (47 companies)
  city: string        // City name (40 cities)
  country: string     // Country name (mapped from city)
  status: string      // "active" | "inactive" | "pending" | "suspended"
  joinedYear: number  // 2015 – 2025
}
With vlist
Infinite scroll adapter
import { createVList } from "vlist"

const list = createVList({
  container: document.getElementById("list"),
  item: {
    height: 56,
    template: (user) => {
      const el = document.createElement("div")
      el.textContent = `${user.firstName} ${user.lastName}`
      return el
    }
  },
  adapter: {
    read: async ({ offset, limit }) => {
      const res = await fetch(
        `https://vlist.dev/api/users?offset=${offset}&limit=${limit}`
      )
      return res.json()  // { items, total, hasMore }
    }
  }
})
Simulated latency (for testing loading states)
// Add 500ms delay to simulate real network conditions
const res = await fetch(
  `https://vlist.dev/api/users?offset=${offset}&limit=${limit}&delay=500`
)
Notes