Skip to content
Injoys

Content API

An API that serves content our editors build together with AI and verify against their editorial standards, in JSON, Markdown, TXT, HTML and JSON-LD across multiple languages. The same key also covers semantic search, text-to-speech audio metadata and datasets for model training and RAG indexing (text corpus, instruction pairs, multilingual parallel), while raw embedding vectors and audio mp3 files come with the Pro plan. Get a free key and start right away.

5 formats

The same content is served as JSON, Markdown, plain text, HTML and schema.org JSON-LD.

Multilingual

Korean, English, Japanese and Spanish, plus machine-translated data-only languages.

Same-content guarantee

Human pages and API responses are generated from the same source. No cloaking.

Pricing

Free

$0

  • 100 requests per month
  • Non-commercial use · attribution required
  • Issued instantly after email verification

Request a free API key

Sign-in required

Sign in with your Google account to like, comment, and save highlights.

Pro

30,000 KRW/month

  • 10,000 requests per month + usage-based overage
  • Commercial license
  • Korean cards and international payments planned

Paid plan pricing will be posted on this page at launch. Prices for new sign-ups may increase monthly; your sign-up price is kept while your subscription stays active.

Price increase ahead: from 2026-09-01, new sign-ups pay 31,500 KRW/month. Subscribe now to lock in the current price.

Start or cancel a subscription from the "My Content API" page after signing in.

API test

Call each endpoint right from your browser with your issued API key or query token, no extra tools needed, and inspect the status code, quota and response body.

API test

Call the endpoints below right from your browser with your issued API key or query token.

Test calls are real API calls. Successful (2xx) responses count toward your monthly quota, and semantic search uses 2x / embedding vectors 5x / TTS audio mp3 files 3x credits, while datasets scale with the requested per_page. Your key or token is not stored and is used only for this call.

Authentication

Usage

Call the API with your key in the Authorization header. Below are the endpoints, parameters, response formats and examples.

Endpoints

EndpointDescription
GET /api/v1/contents Published content list (lang, category, tag, updated_since, pagination)
GET /api/v1/contents/{content_id} Single content body - format set via the format parameter (json|md|txt|html|jsonld, default json)
GET /api/v1/contents/by-slug/{slug} Single content body (look up by slug instead of content_id)
GET /api/v1/contents/{content_id}/images Image metadata (alt, captions, license)
GET /api/v1/categories Category list (slug, name, content count) - discover slugs for the category filter
GET /api/v1/tags Tag list (slug, name, content count) - discover slugs for the tag filter
GET /api/v1/binders Binder (topic collection) list (slug, name, content count)
GET /api/v1/binders/{slug} Single binder metadata
GET /api/v1/binders/{slug}/contents Published content in a binder (paginated)
GET /api/v1/sites Site (service-level topic collection) list (slug, name, content count)
GET /api/v1/sites/{slug} Single site metadata
GET /api/v1/sites/{slug}/contents Published content in a site (paginated)
GET /api/v1/search Search published content (q, 2+ characters). Use mode=semantic for vector semantic search (when the embedding API is on).
GET /api/v1/contents/{content_id}/embeddings Content embedding vectors (Pro only, when the embedding API is on). One language with lang, or all languages of the current model if omitted.
GET /api/v1/contents/{content_id}/audio Content TTS audio metadata (when the audio API is enabled): language, engine, duration, sentence timeline and mp3 path.
GET /api/v1/contents/{content_id}/audio/{lang} Content TTS audio mp3 file (Pro only, 3x credits, when the audio API is enabled).
GET /api/v1/datasets Dataset catalog - available kinds, schema fields, limits and credit rules (when the dataset API is enabled).
GET /api/v1/datasets/corpus Text corpus - records with body, summary and key points, many at once. Supports pagination and incremental sync (updated_since).
GET /api/v1/datasets/qa Instruction dataset - article FAQs expanded into chat message pairs (user/assistant).
GET /api/v1/datasets/parallel Multilingual parallel corpus - the same article aligned across languages in one record. Pick languages and review state with langs/status.
GET /api/v1/datasets/embeddings Embedding vectors in bulk (pro only, when the embedding API is enabled). Vectors bundled per article.

Datasets (training and RAG)

For work that needs many records at once - model training, fine-tuning, RAG indexing - content is normalized into training-ready schemas. page, per_page, category, tag and updated_since behave exactly as in the list and single-item APIs, and format=jsonl feeds straight into a training pipeline.

Kind Description One record Credits
corpus Corpus with body, summary, key points, tags, license and translation status article x language ceil(per_page/10)
qa Instruction data expanding FAQs into user/assistant message pairs FAQ entry x language ceil(per_page/10)
parallel Parallel corpus aligning one article across languages in a single record article ceil(per_page/5)
embeddings Embedding vectors bundled per article (pro only) article ceil(per_page/2)

The per_page cap is 10 on the Free plan and up to 100 per kind on Pro (20 for embeddings). Credits are computed from the requested per_page, so a bulk call costs less than fetching the same volume one item at a time.

The dataset API does not replace the free data files. The unauthenticated paths that serve individual articles as TXT, Markdown, JSON and JSON-LD remain free exactly as they are today. Free data access guide

Available languages

Language Value (lang) Tier Web pages Data files Audio (TTS) Embeddings
한국어 ko Tier 1
English en Tier 1
日本語 ja Tier 1
Español es Tier 1
Indonesian id Tier 2 - - -
Portuguese pt Tier 2 - - -
Chinese (Traditional) zh-hant Tier 2 - - -
Deutsch de Tier 2 - - -
  • Tier 1 - Languages whose translations have been reviewed. Everything is provided: human-readable web pages, search exposure (sitemap and hreflang), AI audio (TTS) and embeddings.
  • Tier 2 - Machine-translated, data-only languages. Served through data files and the API only - no web pages, no search exposure, no audio (TTS) and no embeddings. Every file carries a translation_status: machine label to mark that it has not been reviewed.

Pass these values directly as the API's lang parameter. Single content and dataset endpoints accept tier 2 languages, while the audio (TTS) and embedding endpoints answer for tier 1 languages only.

Query parameters

ParameterDescription
langLanguage. Use the values from the languages table above; defaults to ko. Single content and datasets accept tier 2 languages, while audio (TTS) and embeddings answer for tier 1 (ko, en, ja, es) only.
formatResponse format. Single content accepts json, md, txt, html, jsonld; datasets accept json or jsonl. Default is json.
page, per_pageList pagination. page (from 1), per_page (1-100, default 20).
category, tag, updated_sinceList filters. category (category slug), tag (tag slug), updated_since (modified after an ISO 8601 datetime).
qSearch query (search only, 2+ characters). Partial match on title, summary, body and tag names.
modeSearch mode (search only). mode=semantic runs vector semantic search; default is keyword. Semantic works only when the embedding API is on.
langsLanguages to include in the parallel corpus (parallel dataset only). Comma-separated; all languages when omitted.
statusTranslation state filter (parallel dataset only). reviewed (reviewed only), machine (machine translation only) or all (default).

Supported formats (single content format)

formatContent-TypeDescription
jsonapplication/jsonStructured data (title, summary, body, meta, tags). Default.
mdtext/markdownMarkdown body. Great for LLMs and docs.
txttext/plainPlain text body.
htmltext/htmlRendered HTML body. Ready to display or embed.
jsonldapplication/ld+jsonschema.org JSON-LD (Article). For search and knowledge graphs.

Examples

Authenticate with the Authorization: Bearer header or the X-Api-Key header.

# List
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents?lang=ko&page=1&per_page=20"

# Filter by category
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents?lang=ko&category=<CATEGORY_SLUG>"

# Filter by tag
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents?lang=ko&tag=<TAG_SLUG>"

# Incremental sync (modified since a datetime)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents?updated_since=2026-01-01T00:00:00Z"

# Single content (HTML format)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents/<CONTENT_ID>?lang=ko&format=html"

# Look up by slug (Markdown format)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents/by-slug/<SLUG>?lang=ko&format=md"

# Image metadata
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents/<CONTENT_ID>/images"

# Category list
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/categories?lang=ko"

# Tag list
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/tags?lang=ko"

# Binder list
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/binders?lang=ko"

# Content in a binder
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/binders/<BINDER_SLUG>/contents?lang=ko"

# Site list
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/sites?lang=ko"

# Content in a site
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/sites/<SITE_SLUG>/contents?lang=ko"

# Search
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/search?q=<KEYWORD>&lang=ko"

# Semantic search (vector meaning)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/search?q=<KEYWORD>&mode=semantic&lang=ko"

# Embedding vectors (Pro)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents/<CONTENT_ID>/embeddings?lang=ko"

# TTS audio metadata
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents/<CONTENT_ID>/audio?lang=ko"

# TTS audio mp3 (Pro)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/contents/<CONTENT_ID>/audio/ko"

# Dataset catalog
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/datasets"

# Text corpus (many records at once)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/datasets/corpus?lang=ko&per_page=100"

# Text corpus as JSONL (for training pipelines)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/datasets/corpus?lang=ko&format=jsonl"

# Incremental sync (only records changed since a timestamp)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/datasets/corpus?updated_since=2026-01-01T00:00:00Z&format=jsonl"

# Instruction dataset (FAQ to message pairs)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/datasets/qa?lang=ko&format=jsonl"

# Multilingual parallel corpus (reviewed only)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/datasets/parallel?langs=ko,en,ja&status=reviewed"

# Embedding vectors in bulk (Pro)
curl -H "Authorization: Bearer <API_KEY>" \
  "https://injoys.com/api/v1/datasets/embeddings?lang=ko&per_page=20"

Optional: instead of headers you can use a query token (URL auth). Append the QUERY_KEY issued on the "My Content API" page to call without headers. It can be exposed in URLs/logs, so it is read-only, expiring and revocable - recommended only for non-sensitive convenience use.

https://injoys.com/api/v1/contents?query_key=<QUERY_KEY>&lang=ko

Only successful (2xx) responses count toward the monthly quota; remaining quota is reported in the X-Monthly-Quota-* response headers. The quota resets on the 1st of each month (KST).

Semantic search, embedding, audio and dataset requests use extra credits: semantic search (mode=semantic) 2x, raw embedding vectors 5x, TTS audio mp3 files 3x (metadata 1x). Datasets scale with the requested per_page (1 per 10 records for corpus and QA, 1 per 5 for parallel, 1 per 2 for embeddings). Raw vectors, audio mp3 files and the embeddings dataset are Pro-only, and each feature works only when the admin has enabled the corresponding API (embeddings/audio/datasets).

Use of the API is subject to: Terms · Refund Policy · Privacy