{
  "id": 15083719,
  "title": "Publishing to Juejin Through Its Web API: The mark_content Lesson",
  "url": "https://urgent.news/2026/10/17/publishing-to-juejin-through-its-web-api-the-mark-content-lesson",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-17T01:01:34.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/mattleeee/publishing-to-juejin-through-its-web-api-the-markcontent-lesson-38b8"
  },
  "original_language": "en",
  "account": "Juejin, a popular Chinese developer community, utilizes an internal HTTP API for its editor. This API is undocumented and changes without notice. A developer encountered a regression where drafts were saved with empty bodies and a publish call returning err_no=1010. The issue was traced to a required field named mark_content. By capturing the real client's actions through DevTools and generating cURL requests, the issue was identified. The save draft call required mark_content to be present and non-empty. The publish call returned an error if mark_content was missing or empty. This information was then used to create Python functions for saving and publishing drafts using the requests library.",
  "summary": "Automating content publishing is a common task for developer-advocates and technical writers. Juejin (掘金) is a popular Chinese developer community, and like many modern web apps, it relies on an internal HTTP API for its editor. That API is undocumented and changes without notice. This post is a post-mortem of a silent regression: drafts saved with empty bodies and a publish call returning…",
  "key_points": [
    "Juejin uses undocumented internal HTTP API for editor",
    "markcontent required field causing draft issues",
    "Python functions created for saving and publishing drafts"
  ],
  "editors_take": "Relying on undocumented internal APIs forces developers into a cycle of reverse engineering and constant maintenance to keep automated publishing workflows functional against unannounced platform changes.",
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}