openapi: 3.0.3
info:
title: File API KG API API
version: '1.0'
servers:
- url: https://api.writer.com
security:
- bearerAuth: []
tags:
- name: KG API
paths:
/v1/graphs:
get:
security:
- bearerAuth: []
summary: List graphs
description: Retrieve a list of Knowledge Graphs.
tags:
- KG API
operationId: findGraphsWithFileStatus
parameters:
- name: order
in: query
required: false
schema:
type: string
default: desc
enum:
- asc
- desc
description: Specifies the order of the results. Valid values are asc for ascending and desc for descending.
- name: before
in: query
required: false
schema:
type: string
format: uuid
description: The ID of the first object in the previous page. This parameter instructs the API to return the previous page of results.
- name: after
in: query
required: false
schema:
type: string
format: uuid
description: The ID of the last object in the previous page. This parameter instructs the API to return the next page of results.
- name: limit
in: query
required: false
schema:
type: integer
format: int32
default: 50
description: Specifies the maximum number of objects returned in a page. The default value is 50. The minimum value is 1, and the maximum value is 100.
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/graphs_response'
example:
data:
- id: 50daa3d0-e7d9-44a4-be42-b53e2379ebf7
created_at: '2024-07-10T15:03:48.785843Z'
name: Example Knowledge Graph
description: Example description
file_status:
in_progress: 0
completed: 0
failed: 0
total: 11
type: manual
urls: null
- id: e7392337-1c4e-4bc9-aaf5-b719bf1e938a
created_at: '2024-07-10T15:03:39.881370Z'
name: Another example Knowledge Graph
description: Another example description
file_status:
in_progress: 0
completed: 0
failed: 0
total: 0
type: web
urls:
- url: https://docs.example.com
status:
status: success
error_type: null
type: single_page
first_id: 50daa3d0-e7d9-44a4-be42-b53e2379ebf7
last_id: e7392337-1c4e-4bc9-aaf5-b719bf1e938a
has_more: true
x-codeSamples:
- lang: cURL
source: "curl --location --request GET https://api.writer.com/v1/graphs \\\n --header \"Authorization: Bearer <token>\""
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n // Automatically fetches more pages as needed.\n for await (const graph of client.graphs.list()) {\n console.log(graph.id);\n }\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\npage = client.graphs.list()\npage = page.data[0]\nprint(page.id)"
post:
security:
- bearerAuth: []
summary: Create graph
description: Create a new Knowledge Graph.
tags:
- KG API
operationId: createGraph
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/graph_request'
required: true
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/graph_response'
example:
id: 50daa3d0-e7d9-44a4-be42-b53e2379ebf7
created_at: '2024-07-10T13:34:28.301201Z'
name: Example Knowledge Graph
description: Example description
urls: null
x-codeSamples:
- lang: cURL
source: "curl --location --request POST https://api.writer.com/v1/graphs \\\n --header \"Authorization: Bearer <token>\" \\\n --header \"Content-Type: application/json\" \\\n--data-raw '{\"name\":\"string\"}'"
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n const graph = await client.graphs.create({ name: 'name' });\n\n console.log(graph.id);\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\ngraph = client.graphs.create(\n name=\"name\",\n)\nprint(graph.id)"
/v1/graphs/question:
post:
security:
- bearerAuth: []
summary: Question
description: Ask a question to specified Knowledge Graphs.
tags:
- KG API
operationId: question
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/question_request'
required: true
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/question_response'
example:
question: What is the generic name for the drug Bavencio?
answer: avelumab
sources:
- file_id: '1234'
snippet: Bavencio is the brand name for avelumab.
text/event-stream:
schema:
$ref: '#/components/schemas/question_response_chunk'
example:
data:
- question: What is the generic name for the drug Bavencio?
answer: avelumab
sources:
- file_id: '1234'
snippet: Bavencio is the brand name for avelumab.
x-codeSamples:
- lang: cURL
source: "curl --location --request POST https://api.writer.com/v1/graphs/question \\\n --header \"Authorization: Bearer <token>\" \\\n --header \"Content-Type: application/json\" \\\n--data-raw '{\"graph_ids\":[\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\"],\"question\":\"What is the generic name for the drug Bavencio?\"}'"
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n const question = await client.graphs.question({\n graph_ids: ['182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e'],\n question: 'What is the generic name for the drug Bavencio?'\n});\n\n console.log(question.answer);\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\nquestion = client.graphs.question(\n graph_ids=[\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\"],\n question=\"What is the generic name for the drug Bavencio?\"\n)\nprint(question.answer)"
/v1/graphs/{graph_id}:
get:
security:
- bearerAuth: []
summary: Retrieve graph
description: Retrieve a Knowledge Graph.
tags:
- KG API
operationId: findGraphWithFileStatus
parameters:
- name: graph_id
in: path
required: true
schema:
type: string
format: uuid
description: The unique identifier of the Knowledge Graph.
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/graph'
example:
id: 50daa3d0-e7d9-44a4-be42-b53e2379ebf7
created_at: '2024-07-10T15:03:48.785843Z'
name: Example Knowledge Graph
description: Example description
file_status:
in_progress: 0
completed: 0
failed: 0
total: 0
type: web
urls:
- url: https://example.com/docs
status:
status: success
error_type: null
type: sub_pages
- url: https://docs.example.com
status:
status: error
error_type: invalid_url
type: single_page
x-codeSamples:
- lang: cURL
source: "curl --location --request GET https://api.writer.com/v1/graphs/{graph_id} \\\n --header \"Authorization: Bearer <token>\""
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n const graph = await client.graphs.retrieve('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\n console.log(graph.id);\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\ngraph = client.graphs.retrieve(\n \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(graph.id)"
put:
security:
- bearerAuth: []
summary: Update graph
description: Update the name and description of a Knowledge Graph.
tags:
- KG API
operationId: updateGraph
parameters:
- name: graph_id
in: path
required: true
schema:
type: string
format: uuid
description: The unique identifier of the Knowledge Graph.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/update_graph_request'
required: true
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/graph_response'
example:
id: 50daa3d0-e7d9-44a4-be42-b53e2379ebf7
created_at: '2024-07-10T15:03:48.785843Z'
name: Updated graph name
description: Updated graph description
urls:
- url: https://example.com/docs
status:
status: success
error_type: null
type: sub_pages
x-codeSamples:
- lang: cURL
source: "curl --location --request PUT https://api.writer.com/v1/graphs/{graph_id} \\\n --header \"Authorization: Bearer <token>\" \\\n --header \"Content-Type: application/json\" \\\n--data-raw '{\"name\":\"string\", \"description\":\"string\", \"urls\":[{\"url\":\"https://example.com/docs\", \"type\":\"sub_pages\", \"exclude_urls\":[\"https://example.com/docs/private\"]}]}'"
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n const graph = await client.graphs.update('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', \n { name: 'name', description: 'description' }\n );\n\n console.log(graph.id);\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\ngraph = client.graphs.update(\n graph_id=\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n name=\"name\",\n description=\"description\",\n)\nprint(graph.id)"
delete:
security:
- bearerAuth: []
summary: Delete graph
description: Delete a Knowledge Graph.
tags:
- KG API
operationId: deleteGraph
parameters:
- name: graph_id
in: path
required: true
schema:
type: string
format: uuid
description: The unique identifier of the Knowledge Graph.
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/delete_graph_response'
example:
id: e7392337-1c4e-4bc9-aaf5-b719bf1e938a
deleted: true
x-codeSamples:
- lang: cURL
source: "curl --location --request DELETE https://api.writer.com/v1/graphs/{graph_id} \\\n --header \"Authorization: Bearer <token>\""
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n const graph = await client.graphs.delete('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');\n\n console.log(graph.id);\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\ngraph = client.graphs.delete(\n \"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(graph.id)"
/v1/graphs/{graph_id}/file:
post:
security:
- bearerAuth: []
summary: Add file to graph
description: Add a file to a Knowledge Graph.
tags:
- KG API
operationId: addFileToGraph
parameters:
- name: graph_id
in: path
required: true
schema:
type: string
format: uuid
description: The unique identifier of the Knowledge Graph.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/graph_file_request'
required: true
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/file_response'
example:
id: 7c36a365-392f-43ba-840d-8f3103b42572
created_at: '2024-07-10T15:16:10.684826Z'
name: example.pdf
graph_id:
- 50daa3d0-e7d9-44a4-be42-b53e2379ebf7
x-codeSamples:
- lang: cURL
source: "curl --location --request POST https://api.writer.com/v1/graphs/{graph_id}/file \\\n --header \"Authorization: Bearer <token>\" \\\n --header \"Content-Type: application/json\" \\\n--data-raw '{\"file_id\":\"string\"}'"
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n const file = await client.graphs.addFileToGraph('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {\n file_id: 'file_id',\n });\n\n console.log(file.id);\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\nfile = client.graphs.add_file_to_graph(\n graph_id=\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n file_id=\"file_id\",\n)\nprint(file.id)"
/v1/graphs/{graph_id}/file/{file_id}:
delete:
security:
- bearerAuth: []
summary: Remove file from graph
description: Remove a file from a Knowledge Graph.
tags:
- KG API
operationId: removeFileFromGraph
parameters:
- name: graph_id
in: path
required: true
schema:
type: string
format: uuid
description: The unique identifier of the Knowledge Graph to which the files belong.
- name: file_id
in: path
required: true
schema:
type: string
description: The unique identifier of the file.
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/delete_file_response'
example:
id: 7c36a365-392f-43ba-840d-8f3103b42572
deleted: true
x-codeSamples:
- lang: cURL
source: "curl --location --request DELETE https://api.writer.com/v1/graphs/{graph_id}/file/{file_id} \\\n --header \"Authorization: Bearer <token>\""
- lang: JavaScript
source: "import Writer from 'writer-sdk';\n\nconst client = new Writer({\n apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted\n});\n\nasync function main() {\n const response = await client.graphs.removeFileFromGraph('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', 'file_id');\n\n console.log(response.id);\n}\n\nmain();"
- lang: Python
source: "import os\nfrom writerai import Writer\n\nclient = Writer(\n # This is the default and can be omitted\n api_key=os.environ.get(\"WRITER_API_KEY\"),\n)\nresponse = client.graphs.remove_file_from_graph(\n file_id=\"file_id\",\n graph_id=\"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e\",\n)\nprint(response.id)"
components:
schemas:
question_request:
title: question_request
required:
- graph_ids
- question
type: object
properties:
graph_ids:
type: array
items:
type: string
format: uuid
minItems: 1
description: The unique identifiers of the Knowledge Graphs to query.
subqueries:
type: boolean
description: Specify whether to include subqueries.
default: false
question:
type: string
description: The question to answer using the Knowledge Graph.
stream:
type: boolean
description: Determines whether the model's output should be streamed. If true, the output is generated and sent incrementally, which can be useful for real-time applications.
default: false
query_config:
$ref: '#/components/schemas/graph_query_config'
description: Configuration options for Knowledge Graph queries, including search parameters and citation settings.
web_connector_url:
title: web_connector_url
required:
- url
- status
- type
type: object
properties:
url:
type: string
description: The URL to be processed by the web connector.
status:
$ref: '#/components/schemas/web_connector_url_state'
description: The current status of the URL processing.
exclude_urls:
type: array
description: An array of URLs to exclude from processing within this web connector.
items:
type: string
type:
$ref: '#/components/schemas/web_connector_url_type'
description: The type of web connector processing for this URL.
source:
title: source
description: A source snippet containing text and fileId from Knowledge Graph content.
required:
- file_id
- snippet
type: object
nullable: true
properties:
file_id:
type: string
description: The unique identifier of the file in your Writer account.
snippet:
type: string
description: The exact text snippet from the source document that was used to support the response.
graph_type:
title: graph_type
description: 'The type of Knowledge Graph:
- `manual`: files are uploaded via UI or API
- `connector`: files are uploaded via a data connector such as Google Drive or Confluence
- `web`: URLs are connected to the Knowledge Graph'
type: string
enum:
- manual
- connector
- web
delete_graph_response:
title: delete_graph_response
required:
- id
- deleted
type: object
properties:
id:
type: string
format: uuid
description: A unique identifier of the deleted Knowledge Graph.
deleted:
type: boolean
description: Indicates whether the Knowledge Graph was successfully deleted.
references:
title: references
description: Detailed source information organized by reference type, providing comprehensive metadata about the sources used to generate the response.
type: object
properties:
files:
type: array
description: Array of file-based references from uploaded documents in the Knowledge Graph.
items:
$ref: '#/components/schemas/file'
minItems: 1
web:
type: array
description: Array of web-based references from online sources accessed during the query.
items:
$ref: '#/components/schemas/web'
minItems: 1
question_response_chunk:
required:
- data
type: object
properties:
data:
$ref: '#/components/schemas/question_response'
graph_request:
title: graph_request
type: object
properties:
name:
type: string
description: The name of the Knowledge Graph (max 255 characters). Omitting this field leaves the name unchanged.
description:
type: string
description: A description of the Knowledge Graph (max 255 characters). Omitting this field leaves the description unchanged.
web_connector_url_error_type:
title: web_connector_url_error_type
description: The type of error that can occur during web connector URL processing.
type: string
enum:
- invalid_url
- not_searchable
- not_found
- paywall_or_login_page
- unexpected_error
graph_file_request:
title: graph_file_request
required:
- file_id
type: object
properties:
file_id:
type: string
description: The unique identifier of the file.
web:
title: web
description: A web-based reference containing text snippets from online sources accessed during the query.
required:
- text
- url
- title
- score
type: object
properties:
text:
type: string
description: The exact text snippet from the web source that was used to support the response.
url:
type: string
description: The URL of the web page where this content was found.
format: uri
title:
type: string
description: The title of the web page where this content was found.
score:
type: number
description: Internal score used during the retrieval process for ranking and selecting relevant snippets.
web_connector_url_status:
title: web_connector_url_status
description: The status of web connector URL processing.
type: string
enum:
- validating
- success
- error
graph:
title: graph
required:
- id
- created_at
- name
- file_status
- type
type: object
properties:
id:
type: string
format: uuid
description: The unique identifier of the Knowledge Graph.
created_at:
type: string
format: date-time
description: The timestamp when the Knowledge Graph was created.
name:
type: string
description: The name of the Knowledge Graph.
description:
type: string
description: A description of the Knowledge Graph.
file_status:
$ref: '#/components/schemas/graph_file_status'
description: The processing status of files in the Knowledge Graph.
type:
$ref: '#/components/schemas/graph_type'
description: 'The type of Knowledge Graph.
- `manual`: files are uploaded via UI or API
- `connector`: files are uploaded via a data connector such as Google Drive or Confluence
- `web`: URLs are connected to the Knowledge Graph'
urls:
type: array
description: An array of web connector URLs associated with this Knowledge Graph.
items:
$ref: '#/components/schemas/web_connector_url'
graph_response:
title: graph_response
required:
- id
- created_at
- name
type: object
properties:
id:
type: string
format: uuid
description: A unique identifier of the Knowledge Graph.
created_at:
type: string
format: date-time
description: The timestamp when the Knowledge Graph was created.
name:
type: string
description: The name of the Knowledge Graph (max 255 characters).
description:
type: string
description: A description of the Knowledge Graph (max 255 characters).
urls:
type: array
description: An array of web connector URLs associated with this Knowledge Graph.
items:
$ref: '#/components/schemas/web_connector_url'
file:
title: file
description: A file-based reference containing text snippets from uploaded documents in the Knowledge Graph.
required:
- text
- fileId
- score
type: object
properties:
text:
type: string
description: The exact text snippet from the source document that was used to support the response.
fileId:
type: string
description: The unique identifier of the file in your Writer account.
score:
type: number
description: Internal score used during the retrieval process for ranking and selecting relevant snippets.
page:
type: integer
format: int32
description: Page number where this snippet was found in the source document.
cite:
type: string
description: Unique citation ID that appears in inline citations within the response text (null if not cited).
graph_query_config:
title: graph_query_config
description: Configuration options for Knowledge Graph queries.
type: object
properties:
max_subquestions:
type: integer
format: int32
minimum: 1
maximum: 10
default: 6
description: 'Maximum number of subquestions to generate when processing complex queries. Set higher to improve detail, set lower to reduce response time. Range: 1-10, Default: 6.'
search_weight:
type: integer
format: int32
minimum: 0
maximum: 100
default: 50
description: 'Weight given to search results when ranking and selecting relevant information. Higher values (closer to 100) prioritize keyword-based matching, while lower values (closer to 0) prioritize semantic similarity matching. Use higher values for exact keyword searches, lower values for conceptual similarity searches. Range: 0-100, Default: 50.'
grounding_level:
type: number
format: double
minimum: 0
maximum: 1
default: 0
description: 'Level of grounding required for responses, controlling how closely answers must be tied to source material. Set lower for grounded outputs, higher for creativity. Higher values (closer to 1.0) allow more creative interpretation, while lower values (closer to 0.0) stick more closely to source material. Range: 0.0-1.0, Default: 0.0.'
max_snippets:
type: integer
format: int32
minimum: 1
maximum: 60
default: 30
description: 'Maximum number of text snippets to retrieve from the Knowledge Graph for context. Works in concert with `search_weight` to control best matches vs broader coverage. While technically supports 1-60, values below 5 may return no results due to RAG implementation. Recommended range: 5-25. Due to RAG system behavior, you may see more snippets than requested. Range: 1-60, Default: 30.'
max_tokens:
type: integer
format: int32
minimum: 100
maximum: 8000
default: 4000
description: 'Maximum number of tokens the model can generate in the response. This controls the length of the AI''s answer. Set higher for longer answers, set lower for shorter, faster answers. Range: 100-8000, Default: 4000.'
keyword_threshold:
type: number
format: double
minimum: 0
maximum: 1
default: 0.7
description: 'Threshold for keyword-based matching when searching Knowledge Graph content. Set higher for stricter relevance, lower for broader range. Higher values (closer to 1.0) require stronger keyword matches, while lower values (closer to 0.0) allow more lenient matching. Range: 0.0-1.0, Default: 0.7.'
semantic_threshold:
type: number
format: double
minimum: 0
maximum: 1
default: 0.7
description: 'Threshold for semantic similarity matching when searching Knowledge Graph content. Set higher for stricter relevance, lower for broader range. Higher values (closer to 1.0) require stronger semantic similarity, while lower values (closer to 0.0) allow more lenient semantic matching. Range: 0.0-1.0, Default: 0.7.'
inline_citations:
type: boolean
default: false
description: 'Whether to include inline citations in the response, showing which Knowledge Graph sources were used. Default: false.'
update_graph_web_url:
title: update_graph_web_url
required:
- url
- type
type: object
properties:
url:
type: string
description: The URL to be processed by the web connector.
exclude_urls:
type: array
description: An array of URLs to exclude from processing within this web connector.
items:
type: string
type:
$ref: '#/components/schemas/web_connector_url_type'
description: The type of web connector processing for this URL.
update_graph_request:
title: update_graph_request
type: object
properties:
name:
type: string
description: The name of the Knowledge Graph (max 255 characters). Omitting this field leaves the name unchanged.
description:
type: string
description: A description of the Knowledge Graph (max 255 characters). Omitting this field leaves the description unchanged.
urls:
type: array
description: An array of web connector URLs to update for this Knowledge Graph. You can only connect URLs to Knowledge Graphs with the type `web`. To clear the list of URLs, set this field to an empty array.
items:
$ref: '#/components/schemas/update_graph_web_url'
graph_file_status:
title: graph_file_status
required:
- in_progress
- completed
- failed
- total
type: object
properties:
in_progress:
type: integer
format: int64
description: The number of files currently being processed.
completed:
type: integer
format: int64
description: The number of files that have been successfully processed.
failed:
type: integer
format: int64
description: The number of files that failed to process.
total:
type: integer
format: int64
description: The total number of files associated with the Knowledge Graph.
web_connector_url_type:
title: web_connector_url_type
descrip
# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/writer/refs/heads/main/openapi/writer-kg-api-api-openapi.yml