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.
https://omegaapi.vercel.app/api/v1HTTPS onlyGET only (all endpoints)None requiredAll origins allowedapplication/json60 requests/min per IP5–15 min TTLAuthentication
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.
Response Headers
X-RateLimit-LimitMaximum requests allowed in the current window (60)X-RateLimit-RemainingNumber of requests remaining in the current windowX-RateLimit-ResetUnix timestamp when the current window resetsX-Request-IDUnique UUID for request tracing and debuggingRetry-AfterSeconds to wait before retrying (only on 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.
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.
{
"success": false,
"error": "Series not found"
}Pagination
List endpoints return paginated results. Use page and perPage parameters to navigate through results.
{
"success": true,
"data": [...],
"pagination": {
"total": 250,
"perPage": 20,
"currentPage": 2,
"lastPage": 13,
"hasNext": true,
"hasPrevious": true
}
}Endpoints
Detailed reference for every available endpoint.
/api/v1/seriesBrowse all available series with optional search and pagination.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
page | integer | no | 1 | Page number |
perPage | integer | no | 20 | Results per page (max 100) |
q | string | no | — | Search query to filter results |
curl "https://omegaapi.vercel.app/api/v1/series?page=1&perPage=5"/api/v1/series/{slug}Get complete information for a single series. Pass include=chapters to embed the full chapter list.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
slug | string | yes | — | URL-friendly series identifier |
include | string | no | — | Pass "chapters" to embed chapter list |
curl "https://omegaapi.vercel.app/api/v1/series/sex-stopwatch?include=chapters"/api/v1/chapters/{slug}Get all chapters for a series with pagination.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
slug | string | yes | — | Series slug |
page | integer | no | 1 | Page number |
perPage | integer | no | 100 | Results per page (max 500) |
curl "https://omegaapi.vercel.app/api/v1/chapters/sex-stopwatch"/api/v1/chapter/{slug}/{chapter}Get chapter content with all page image URLs. Perfect for building reader interfaces.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
slug | string | yes | — | Series slug |
chapter | string | yes | — | Chapter slug (e.g. chapter-1) |
curl "https://omegaapi.vercel.app/api/v1/chapter/sex-stopwatch/chapter-1"/api/v1/search?q={query}Full-text search across all series by title. Minimum 1 character.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
q | string | yes | — | Search query |
page | integer | no | 1 | Page number |
curl "https://omegaapi.vercel.app/api/v1/search?q=solo"/api/v1/genresList all supported genre categories.
curl "https://omegaapi.vercel.app/api/v1/genres"/api/v1/healthCheck API health status, upstream connectivity, and latency.
curl "https://omegaapi.vercel.app/api/v1/health"/api/v1/statsAPI 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');