Channels
Naver Blog
How an agent publishes to Naver Blog through uplika, what the browser extension does, what the body markdown accepts, and what Naver simply does not offer.
Quick reference
| Name | Type | Description |
|---|---|---|
characters | text | 30,000 |
images | media | up to 40 per post; more than that and the first 40 go out with a warning |
carousel | media | no carousel; images sit in the post one after another |
video | media | 10 per post |
text alone | media | allowed |
posts / 24h | limit | 20 |
deletes / 24h | limit | Naver Blog through the browser extension, with no documented daily cap |
status | state | bridge |
These numbers come from the same file the server validates against. The body is markdown and the title is separate; a category is required and there is no default.
How does publishing work?
publish queues a job. The extension in your browser picks it up, opens the Naver editor in a separate window that does not take focus, fills the title, body, images and tags, picks the category and publishes. If the browser is closed the post waits up to seven days. If Naver has logged you out, the job pauses at a login stage, brings that window to the front, and continues in the same window once you have logged in. The post detail page shows each stage while it runs.
How do I publish my first post?
Connect Naver Blog in the dashboard, install the extension when asked, then call publish with a title, a category (by id or by name) and a markdown body.
curl -X POST https://api.uplika.com/v1/posts \
-H "Authorization: Bearer $UPLIKA_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "## 소제목\n\n본문 **굵게** [uplika](https://uplika.com)\n\n> 인용 {.bubble}\n\n",
"accountIds": ["conn_..."],
"mediaIds": ["med_..."],
"options": {
"naver_blog": {
"title": "첫 글",
"category": "AI 최신 정보",
"tags": ["uplika"],
"openType": "public"
}
}
}'What does the body accept?
Standard markdown for what markdown can say, and two small additions for what only Naver has: a trailing {.attribute} on a paragraph, heading, quote or rule, and an @directive on its own line for blocks. Anything unknown is rejected before publishing with naver_markdown_unknown, naming the line, so nothing goes out half-rendered.
Inline
| Name | Type | Description |
|---|---|---|
**굵게** *기울임* ~~취소선~~ ++밑줄++ | inline | bold, italic, strikethrough, underline |
[글자](https://…) | inline | a link on the text |
^위^ ~아래~ | inline | superscript and subscript |
`코드` | inline | inline code, approximated with a light background (Naver has no inline code) |
[글자]{.color=#e7000b .bg=#fff59d} | inline | text colour and highlight on just those words |
Blocks
| Name | Type | Description |
|---|---|---|
# ## ### | block | section title. Naver has one heading level, so # is size 28, ## the default size, ### size 19 |
> 인용 {.bubble} / > -- 출처 | block | quotation. Add a style attribute for one of six looks; a last line starting with -- becomes the source |
--- {.line3} | block | divider. Eight looks: default and line1 to line7 |
- 항목 / 1. 항목 | block | bullet or numbered list; indent two spaces to nest |
| a | b | + |:--|--:| | block | table. The first row is the header; :--: in the separator centres a column |
``` … ``` | block | source code block |
 | block | an image you uploaded through media_presign, media_from_url or media_upload_link; the caption is the alt text. The id does not have to repeat in mediaIds: we read it from the body. The line has to be nothing but the reference, or it publishes as literal text |
Paragraph attributes
| Name | Type | Description |
|---|---|---|
.left .center .right .justify | attr | alignment |
.size=11|13|15|16|19|24|28|30|34|38 | attr | font size |
.font=기본|고딕|명조|스퀘어… | attr | font, by Korean name as shown in the editor |
.lh=150~210 | attr | line height in percent |
.dropcap | attr | large first letter |
.color=#rrggbb .bg=#rrggbb | attr | text colour and background for the whole paragraph |
Naver-only blocks
| Name | Type | Description |
|---|---|---|
@video(media:ID) | directive | a video you uploaded, with the same rules as an image reference |
@group(…) | directive | |
@card(https://…) | directive | a link preview card |
@sticker(motion2d_01-3) | directive | a Naver sticker, pack and number as shown in the editor's sticker panel |
@map(강남역[, 2]) | directive | a map card for the first search result; add , 2 for the second |
@schedule(제목 | 2026-09-20 14:00 | 장소) | directive | a schedule card with title, optional start time and place |
@formula(\frac{a}{b}) | directive | a rendered formula from LaTeX |
Quote and rule styles
| Name | Type | Description |
|---|---|---|
.default .line .bubble .underline .postit .corner | quotation | quotation. Add a style attribute for one of six looks; a last line starting with -- becomes the source |
.default .line1 .line2 .line3 .line4 .line5 .line6 .line7 | horizontalLine | divider. Eight looks: default and line1 to line7 |
How do categories work?
Categories are read from the blog when you connect and are listed by list_accounts under naverBlog.categories. Pass either categoryId or category (the exact name) when publishing; an unknown name is refused with the list to pick from. If you just created a category on Naver, call refresh_account and the extension re-reads the list, usually within a minute.
Can I delete a post?
Yes. delete_post takes the publish id or any link to the post, including posts written in Naver's own editor, as long as they are on the connected blog. A link to a different blog is refused. Naver Blog posts cannot be edited through uplika; publish a new one.
Can the agent comment, like and add neighbors?
Yes, on your own posts and on other people's. reply writes a comment, or a nested reply when you pass replyTo with an id from list_replies; secret: true makes it a secret comment. like presses Naver's like button on a post or, with replyTo, on a comment; it reads the state first and never turns a like off, and Naver ignores liking your own post, which comes back as naver_not_allowed. follow adds a blog as a neighbor, or with mutual: true sends a mutual-neighbor request that stays pending until the other blog accepts. For someone else's post, hand any of these the post link and uplika acts as the connected blog. The extension does all of it in your browser, one action at a time, the way a person would.
What shape does a Naver post come out in?
Unless you say otherwise, publish reshapes the markdown into the blog's house form (the photo-story preset, measured from three reference posts): # and ## titles become underlined quote headings, a thin rule sits between sections, and photos you attached but did not place go one per section, leftovers paired at the end. Words never change. Call naver_layout first to see the result, or pass options.naver_blog.layout: "as-is" when the person dictated the structure or you placed everything with media: references. There are eight forms and a person picks: the composer's "Compare forms" lays the same post out in all eight at real size, and an agent passes forms: "all" to naver_layout to get the same eight, lets the person choose, then publishes with options.naver_blog.form. The server never picks.
Can a published Naver post be edited?
Yes. update_post on a published Naver Blog post rewrites it in place: the extension opens the post in Naver's editor, replaces the whole body, and publishes again, so the URL and logNo stay the same. Pass the full new content and list the media ids again to keep the photos. Other channels still answer post_not_editable.
What is not available?
Editing an existing post, and file attachments: Naver only accepts a file through its native file picker, which an extension cannot fill. Naver's own editor also offers purchase-linked product cards, templates, clips and photos pulled from other social accounts; those depend on Naver-side data or another login and cannot be expressed in a body, so they are not offered.
Frequently asked
Does uplika store my Naver password or cookies?
Never your password: the extension has no place to type one, and uplika never receives it. Cookies never reach uplika either. When you connect Naver Blog, the extension keeps your Naver sign-ins in that browser's own extension storage so it can put the right account back before publishing — Naver allows only one sign-in at a time. Those stay on your computer, and removing the account or the extension deletes them.
Why is my post still publishing?
Because the browser with the extension is closed or Naver logged you out. The post waits up to seven days. Open the browser, and if a login window appeared, log in there; the same job continues.
Can I write bold text or a table in the body?
Yes. The body is markdown: bold, links, lists, tables, code blocks and quotes all render as Naver's own components. Naver-only things like stickers, maps, schedules and formulas have an @directive. Anything unknown is refused before publishing, with the line number.
The Naver editor shows a "missing image" error when I open a published post to edit it.
That happens only on posts published by an older extension, which stored image paths without the scheme. The published post itself renders fine. Call update_post on that post: it rewrites the post in place with the same URL, and the edit screen shows every image again.