API Documentation

OmegaAPI is a free, public REST API for manga and manhwa data. It acts as a middleware layer on top of the OmegaScans API, adding caching, rate limiting, data normalization, and consistent error handling.

Base URLhttps://omegaapi.vercel.app/api/v1
ProtocolHTTPS only
MethodGET only (all endpoints)
AuthNone required
CORSAll origins allowed
Content-Typeapplication/json
Rate Limit60 requests/min per IP
Cache5–15 min TTL

Authentication

No authentication required

OmegaAPI is completely open. No API keys, no OAuth tokens, no sign-up forms. Just make a GET request and receive JSON. We enforce fair usage through IP-based rate limiting instead of authentication.

Rate Limiting

To ensure fair usage and protect the upstream API, OmegaAPI enforces rate limits on all endpoints. Limits are tracked per IP address using a sliding window algorithm.

Limit
60 requests
per minute
Window
60 seconds
rolling
Scope
Per IP
address

Response Headers

X-RateLimit-LimitMaximum requests allowed in the current window (60)
X-RateLimit-RemainingNumber of requests remaining in the current window
X-RateLimit-ResetUnix timestamp when the current window resets
X-Request-IDUnique UUID for request tracing and debugging
Retry-AfterSeconds to wait before retrying (only on 429 responses)
Handling 429 responses
const res = await fetch('https://omegaapi.vercel.app/api/v1/series');

if (res.status === 429) {
  const retryAfter = res.headers.get('Retry-After');
  console.log(`Rate limited. Retry after ${retryAfter}s`);
  await new Promise(r => setTimeout(r, retryAfter * 1000));
  // Retry the request...
}

Caching

All responses are cached in-memory with configurable TTL to reduce load on the upstream API and deliver sub-second responses.

Series list & details5 minutes
Search results10 minutes
Chapter content & images15 minutes
Genres30 minutes

Cached responses include an X-Cache: HIT header. The Cache-Control: public, s-maxage=300 header enables Vercel's edge cache for additional performance.

Error Handling

All error responses follow the same envelope format with a descriptive message.

200
Success — data returned
400
Bad request — missing/invalid params
404
Not found — series/chapter doesn't exist
429
Rate limited — too many requests
500
Server error — upstream API issue
503
Service unavailable — upstream down
Error response format
{
  "success": false,
  "error": "Series not found"
}

Pagination

List endpoints return paginated results. Use page and perPage parameters to navigate through results.

Pagination object
{
  "success": true,
  "data": [...],
  "pagination": {
    "total": 250,
    "perPage": 20,
    "currentPage": 2,
    "lastPage": 13,
    "hasNext": true,
    "hasPrevious": true
  }
}

Endpoints

Detailed reference for every available endpoint.

GET/api/v1/series

Browse all available series with optional search and pagination.

Parameters

NameTypeRequiredDefaultDescription
pageintegerno1Page number
perPageintegerno20Results per page (max 100)
qstringnoSearch query to filter results
curl "https://omegaapi.vercel.app/api/v1/series?page=1&perPage=5"
GET/api/v1/series/{slug}

Get complete information for a single series. Pass include=chapters to embed the full chapter list.

Parameters

NameTypeRequiredDefaultDescription
slugstringyesURL-friendly series identifier
includestringnoPass "chapters" to embed chapter list
curl "https://omegaapi.vercel.app/api/v1/series/sex-stopwatch?include=chapters"
GET/api/v1/chapters/{slug}

Get all chapters for a series with pagination.

Parameters

NameTypeRequiredDefaultDescription
slugstringyesSeries slug
pageintegerno1Page number
perPageintegerno100Results per page (max 500)
curl "https://omegaapi.vercel.app/api/v1/chapters/sex-stopwatch"
GET/api/v1/chapter/{slug}/{chapter}

Get chapter content with all page image URLs. Perfect for building reader interfaces.

Parameters

NameTypeRequiredDefaultDescription
slugstringyesSeries slug
chapterstringyesChapter slug (e.g. chapter-1)
curl "https://omegaapi.vercel.app/api/v1/chapter/sex-stopwatch/chapter-1"
GET/api/v1/genres

List all supported genre categories.

curl "https://omegaapi.vercel.app/api/v1/genres"
GET/api/v1/health

Check API health status, upstream connectivity, and latency.

curl "https://omegaapi.vercel.app/api/v1/health"
GET/api/v1/stats

API statistics including uptime, cache info, and endpoint listing.

curl "https://omegaapi.vercel.app/api/v1/stats"

Code Examples

Node.js / Fetch

const response = await fetch('https://omegaapi.vercel.app/api/v1/search?q=naruto');
const { success, data, pagination } = await response.json();

if (success) {
  console.log(`Found ${pagination.total} series:`);
  data.forEach(series => {
    console.log(`  ${series.title} (★${series.rating})`);
  });
}

Python / requests

import requests

response = requests.get('https://omegaapi.vercel.app/api/v1/series/sex-stopwatch')
data = response.json()

if data['success']:
    series = data['data']
    print(f"{series['title']} — {series['status']}")
    print(f"Rating: {series['rating']}")
    print(f"Chapters: {series['chaptersCount']}")

cURL / Shell

# Search for series
curl -s "https://omegaapi.vercel.app/api/v1/search?q=solo" | jq '.data[] | .title'

# Get chapter images
curl -s "https://omegaapi.vercel.app/api/v1/chapter/sex-stopwatch/chapter-1" | jq '.data.images[]'

# Check health
curl -s "https://omegaapi.vercel.app/api/v1/health" | jq '.data.status'

Build a Reader (Browser)

async function loadChapter(seriesSlug, chapterSlug) {
  const res = await fetch(
    `https://omegaapi.vercel.app/api/v1/chapter/${seriesSlug}/${chapterSlug}`
  );
  const { data } = await res.json();

  const reader = document.getElementById('reader');
  reader.innerHTML = '';

  data.images.forEach((url, i) => {
    const img = document.createElement('img');
    img.src = url;
    img.alt = `Page ${i + 1}`;
    img.loading = 'lazy';
    img.style.width = '100%';
    reader.appendChild(img);
  });
}

loadChapter('sex-stopwatch', 'chapter-1');