UtilityForge Mock API Engine

Complete API Reference

The UtilityForge Mock API is a fully-featured, free REST API for frontend developers, testers, and prototypers. No sign-up, no rate limits on basic access, no backend required. Every endpoint returns realistic JSON instantly.

Base URL

https://utilityforges.com/api/mock/

Datasets

8 unique, compliance-safe datasets covering common app domains. All endpoints support GET, POST, PUT/PATCH, and DELETE.

DatasetEndpointRecordsKey Fields
Inventory/api/mock/inventory150id, name, brand, price, category, inStock, quantity, rating
Accounts/api/mock/accounts100id, username, email, firstName, lastName, age, isActive, role
Articles/api/mock/articles200id, title, content, authorId, topic, views, published
Feedback/api/mock/feedback300id, articleId, accountId, body, likes
Tasks/api/mock/tasks100id, title, completed, assigneeId, priority
Citations/api/mock/citations100id, author, text
Restaurants/api/mock/restaurants100id, name, cuisine, rating, isOpen, location
Movies/api/mock/movies150id, title, genre, releaseYear, director, rating

Standard CRUD operations:

bash
# Get all items (returns { [resource]: [...], total, skip, limit })
GET https://utilityforges.com/api/mock/inventory

# Get single item by ID
GET https://utilityforges.com/api/mock/inventory/1

# Search all text fields
GET https://utilityforges.com/api/mock/inventory/search?q=laptop

# Add a new item (stateless — returns what you sent + id)
POST https://utilityforges.com/api/mock/inventory/add
Content-Type: application/json
{ "name": "My Widget", "price": 49.99 }

# Update an item (stateless — returns merged object)
PUT https://utilityforges.com/api/mock/inventory/1
Content-Type: application/json
{ "price": 39.99 }

# Delete an item (stateless — returns confirmation)
DELETE https://utilityforges.com/api/mock/inventory/1

Core Query Parameters

All collection endpoints support the following query parameters. They can be combined freely.

ParameterTypeDescriptionExample
limitnumberMax items to return (default: 30)?limit=10
skipnumberItems to skip for pagination?skip=20
sortBystringField name to sort by?sortBy=price
orderasc|descSort direction (default: asc)?order=desc
qstringFull-text search across all string fields?q=laptop
selectstringComma-separated field projection?select=id,name,price
shufflebooleanRandomize results before limit/skip?shuffle=true
delaynumberAdd artificial latency in ms (max 10000)?delay=2000
statusnumberForce a specific HTTP status code?status=503
rateLimitnumberTrigger 429 after N calls / 60s per IP?rateLimit=5
[key]=[val]anyFilter by exact field value matches?category=Electronics
bash
# Paginate: page 2 with 10 items per page
GET https://utilityforges.com/api/mock/inventory?limit=10&skip=10

# Sort by price, descending
GET https://utilityforges.com/api/mock/inventory?sortBy=price&order=desc

# Filter Electronics items, pick 3 fields only
GET https://utilityforges.com/api/mock/inventory?category=Electronics&select=id,name,price

# Search + paginate + sort together
GET https://utilityforges.com/api/mock/articles?q=technology&sortBy=views&order=desc&limit=5

# Random 3 movies (for a "random picks" feature)
GET https://utilityforges.com/api/mock/movies?shuffle=true&limit=3

Unique Endpoints

These endpoints go beyond standard CRUD and are available completely free — no equivalents exist on DummyJSON or JSONPlaceholder.

🔐 Auth Simulation

POST /api/mock/auth/login

Simulates a login flow returning a mock JWT token and user profile. Useful for testing auth-gated UI without a real backend.

js
const res = await fetch('https://utilityforges.com/api/mock/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ username: 'john', password: 'pass123' })
});
const data = await res.json();
// Returns:
// {
//   token: "eyJhbGciOiJIUzI1NiIsInR5...",
//   user: { id: 1, username: "john", email: "john@example.com", role: "user" },
//   expiresIn: 3600
// }

🖼️ Dynamic SVG Images

GET /api/mock/image

Generates on-the-fly SVG placeholder images with custom dimensions, colors, and text. Drop directly in an <img> tag.

html
<!-- 600x400 grey placeholder -->
<img src="https://utilityforges.com/api/mock/image?w=600&h=400" />

<!-- Custom colors and label -->
<img src="https://utilityforges.com/api/mock/image?w=300&h=200&bg=1a1a2e&text=ffffff&label=Product+Photo" />

// Parameters:
// w      - width in pixels (default: 400)
// h      - height in pixels (default: 300)
// bg     - background hex color (no #, default: cccccc)
// text   - text color hex (no #, default: 666666)
// label  - custom label text (default: WxH)

📊 GraphQL Mock

POST /api/mock/graphql

A lightweight GraphQL endpoint for testing query structures and field selection. Supports the main datasets as root query fields.

js
const res = await fetch('https://utilityforges.com/api/mock/graphql', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    query: `{ inventory { id name price category } }`
  })
});
const { data } = await res.json();
// data.inventory = [ { id: 1, name: "...", price: 299.99, category: "..." }, ... ]

// Supported query fields: inventory, accounts, articles, feedback, tasks, citations, restaurants, movies

🗂️ Schema Generator

POST /api/mock/generate

Accepts a JSON schema and generates realistic mock data matching your structure. Perfect for prototyping custom API shapes.

js
const res = await fetch('https://utilityforges.com/api/mock/generate', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    count: 5,
    schema: {
      id: "number",
      name: "string",
      email: "email",
      active: "boolean",
      score: "number",
      createdAt: "date"
    }
  })
});
const { data } = await res.json();
// Returns 5 objects matching your schema with generated values

📤 File Upload Mock

POST /api/mock/upload

Accepts multipart/form-data file uploads and returns a simulated success response. No files are saved — 100% stateless.

js
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('userId', '42');

const res = await fetch('https://utilityforges.com/api/mock/upload', {
  method: 'POST',
  body: formData  // No Content-Type header needed — browser sets it
});
const data = await res.json();
// Returns:
// {
//   message: "File uploaded successfully (simulated)",
//   file: { name: "photo.jpg", size: 204800, type: "image/jpeg" },
//   url: "https://mock-cdn.utilityforges.com/uploads/photo.jpg",
//   uploadedAt: "2026-02-27T14:00:00.000Z"
// }

🔁 Echo / Mirror

ANY /api/mock/echo

Mirrors the full incoming request back — method, headers, body, query params, and IP address. Invaluable for debugging your client code.

js
const res = await fetch('https://utilityforges.com/api/mock/echo?debug=true&env=production', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'X-Custom-Header': 'my-value' },
  body: JSON.stringify({ action: 'test', userId: 99 })
});
const data = await res.json();
// Returns your full request back:
// {
//   method: "POST",
//   url: "/api/mock/echo?debug=true&env=production",
//   headers: { "content-type": "application/json", "x-custom-header": "my-value", ... },
//   query: { debug: "true", env: "production" },
//   body: { action: "test", userId: 99 },
//   ip: "203.0.113.42",
//   receivedAt: "2026-02-27T14:00:00.000Z"
// }

💾 Custom JSON Persistence

POST /api/mock/custom

Store any JSON payload (up to 20KB) and get back a unique, persistent URL to serve it. Use _meta to control status code and custom headers. Data expires in 7 days automatically.

js
// Step 1: Store your custom JSON
const res = await fetch('https://utilityforges.com/api/mock/custom', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    userId: 42,
    plan: 'enterprise',
    features: ['sso', 'audit-log', 'custom-domain'],
    _meta: { status: 200, headers: { 'X-Plan': 'enterprise' } }
  })
});
const { alias, url } = await res.json();
// alias: "my-custom-abc123"
// url: "https://utilityforges.com/api/mock/custom/my-custom-abc123"

// Step 2: Fetch it back from anywhere (GET)
const userData = await fetch(url).then(r => r.json());
// Returns your original JSON with your custom status and headers

🪝 Webhook Inbox

Create a temporary inbox URL that captures incoming webhook events. Test what your app sends without needing a real webhook receiver. Inboxes expire in 5 minutes. Stores up to 50 events.

js
// Step 1: Create a new inbox
const { inboxId, inboxUrl } = await fetch('https://utilityforges.com/api/mock/webhook/register', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'My App Events' })
}).then(r => r.json());
// inboxUrl: "https://utilityforges.com/api/mock/webhook/inbox/abc12345"

// Step 2: Configure your app to send webhooks to inboxUrl
// (copy-paste inboxUrl into your app's webhook settings)

// Step 3: Read all captured events
const { events } = await fetch(inboxUrl).then(r => r.json());
// events = [
//   { id: "evt_1709040012345", method: "POST", headers: {...}, body: {...}, receivedAt: "..." },
//   ...
// ]

// Step 4: Clear the inbox
await fetch(inboxUrl, { method: 'DELETE' });

🚦 Rate Limit Simulation

?rateLimit=N

Append ?rateLimit=N to any dataset endpoint. After N calls within 60 seconds from the same IP, the server returns a real 429 Too Many Requests response with proper headers — perfect for testing retry logic, exponential backoff, and rate limit UI.

js
// Will succeed for the first 3 calls, then return 429
const fetchWithRetry = async (attempts = 0) => {
  const res = await fetch('https://utilityforges.com/api/mock/inventory?rateLimit=3');

  if (res.status === 429) {
    const { retryAfterMs } = await res.json();
    console.log(`Rate limited! Retry in ${retryAfterMs}ms`);
    // res.headers.get('Retry-After') → seconds to wait
    // res.headers.get('X-RateLimit-Limit') → the configured limit
    // res.headers.get('X-RateLimit-Remaining') → "0"
    await new Promise(r => setTimeout(r, retryAfterMs));
    return fetchWithRetry(attempts + 1);
  }

  return res.json();
};

Interactive Playground Features

5-Language SDK Tabs

Every endpoint shows ready-to-copy code snippets for Fetch, Axios, cURL, Python, and Go.

Collapsible JSON Viewer

Responses render as a colour-coded, collapsible tree — explore deeply nested data with one click.

Network History Log

Slide-up drawer tracks every request you've made: method, path, status, latency, and timestamp.

Schema Explorer

Dedicated /mock-api/schema page shows every field name, type, and sample value for all 8 datasets.

Keyboard Shortcut

Press Cmd/Ctrl + Enter in the playground to execute the selected request instantly.

PRO Badge

Mock API appears with a PRO badge in the global Cmd+K search, clearly marking it as a premium tool.

Base URL Badge

The hero always shows the live base URL with a one-click copy button for quick integration.

CORS Fully Open

All endpoints return Access-Control-Allow-Origin: * so browser fetch() works from any domain.

Ready to start building?

Open the Interactive Playground