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
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.
Usage
Call the API with your key in the Authorization header. Below are the endpoints, parameters, response formats and examples.
Endpoints
| Endpoint | Description |
|---|---|
| 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
| Parameter | Description |
|---|---|
| lang | Language. 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. |
| format | Response format. Single content accepts json, md, txt, html, jsonld; datasets accept json or jsonl. Default is json. |
| page, per_page | List pagination. page (from 1), per_page (1-100, default 20). |
| category, tag, updated_since | List filters. category (category slug), tag (tag slug), updated_since (modified after an ISO 8601 datetime). |
| q | Search query (search only, 2+ characters). Partial match on title, summary, body and tag names. |
| mode | Search mode (search only). mode=semantic runs vector semantic search; default is keyword. Semantic works only when the embedding API is on. |
| langs | Languages to include in the parallel corpus (parallel dataset only). Comma-separated; all languages when omitted. |
| status | Translation state filter (parallel dataset only). reviewed (reviewed only), machine (machine translation only) or all (default). |
Supported formats (single content format)
| format | Content-Type | Description |
|---|---|---|
| json | application/json | Structured data (title, summary, body, meta, tags). Default. |
| md | text/markdown | Markdown body. Great for LLMs and docs. |
| txt | text/plain | Plain text body. |
| html | text/html | Rendered HTML body. Ready to display or embed. |
| jsonld | application/ld+json | schema.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