A registry is any server or static file host that serves the Open Web Comics API. All six endpoints below are required — implementors can rely on them all being present.

Required endpoints

1. Registry info — GET /openwebcomics/api/v1/info

Returns the registry name, description, logo URL, and API version. Clients use this to confirm they're talking to a valid registry before adding it.

{
  "version": "1",
  "name": "My Comic Archive",
  "description": "A personal webcomic registry.",
  "logo_url": "https://example.com/logo.png"
}

See the RegistryInfo schema for field details.

2. Comic list — GET /openwebcomics/api/v1/comics

Returns an array of all comics in the registry.

[
  {
    "id": "my-comic",
    "name": "My Webcomic",
    "url": "https://example.com/my-comic",
    "description": "An ongoing adventure series.",
    "logo_url": "https://example.com/my-comic/logo.jpg",
    "total_pages": 120
  }
]

Each item follows the Comic schema.

3. Single comic — GET /openwebcomics/api/v1/comics/:id

Returns the full Comic object for a single comic by its ID. Returns 404 if the comic does not exist.

4. All pages — GET /openwebcomics/api/v1/comics/:id/pages

Returns all pages for a comic in a single response. The entire archive is returned at once — there is no pagination.

{
  "pages": [
    {
      "id": 1,
      "comic_id": "my-comic",
      "page_number": 1,
      "title": "Page 1",
      "url": "https://example.com/my-comic/page/1",
      "image_url": "https://example.com/my-comic/img/001.jpg"
    }
  ],
  "total": 120
}

See the PagesResponse and ComicPage schemas.

5. Groups — GET /openwebcomics/api/v1/comics/:id/groups

Returns all groups (chapters, acts, arcs, etc.) for a comic as an array of ComicGroup objects. Returns an empty array if the comic has no groups.

6. Single page — GET /openwebcomics/api/v1/comics/:id/pages/:pageNumber

Returns a single ComicPage by page number, including prev_page and next_page navigation hints. Returns 404 if the page does not exist.

Error responses

On error, return a JSON object with an error string and the appropriate HTTP status code:

{ "error": "Comic not found" }

See the Error schema.

Static file deployment

The API is designed to work as static JSON files. Mirror the URL structure as files on disk, then use server rewrite rules to strip the .json extension. This means no live server is required for read-only access — any static file host can serve a compliant registry.

CORS

If you want browser-based clients (including the validator on this site) to be able to read your registry, you must send Access-Control-Allow-Origin headers on the API endpoints. Native apps don't need this, but browsers do. See CORS for registries for examples covering Netlify, Cloudflare, Nginx, Apache, Express and S3+CloudFront.

Explore the full API reference →