---
title: "Update a blog article"
method: PATCH
path: "/v1/accounts/{accountId}/blogs/{blogId}/articles/{articleId}"
tags: ["Blogs"]
---

# Update a blog article

`PATCH /v1/accounts/{accountId}/blogs/{blogId}/articles/{articleId}`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/accounts/{accountId}/blogs/{blogId}/articles/{articleId}`
- Auth: HTTP bearer

Partial-updates an article. Send any subset of the create fields
(`title`, `bodyHtml`, `handle`, `tags`, `author`, `excerpt`, `image`,
`seo`, `isPublished`, `publishDate`); at least one field is required
(an empty body returns 400). `isPublished` and `publishDate` behave as
on create: `isPublished: false` unpublishes back to a draft and a
future `publishDate` schedules publication natively on the platform.
Omitting both fields preserves the current WordPress or Wix status. Omitting
`image` preserves the current featured image; removal is not supported.
WordPress rejects `seo` and does not support SEO-plugin/custom-field,
category, or custom-post-type writes. On Webflow, an edit to a
published item goes live immediately, `isPublished: false` unpublishes
it, and a future `publishDate` returns 400.

Supported on Shopify (`shopify`), WordPress (`wordpress`), Wix (`wix`) and Webflow (`webflow`).

## Path parameters

- `accountId` string, required
- `blogId` string, required
- `articleId` string, required

## Request body

- object: At least one field is required.
  - `title` string
  - `bodyHtml` string: Article body as HTML.
  - `handle` string: URL slug of the article.
  - `tags` string[]: Replaces the full tag-name list. WordPress and Wix resolve existing names case-insensitively and create missing tags (Wix allows up to 30).
  - `author` string: Shopify author display name, numeric WordPress user id serialized as a string, or Wix site member id. Assigning another WordPress user may require elevated capability. Wix posts without one go to the site's default author.
  - `excerpt` string: Short summary shown in blog listings.
  - `image` object: Featured image from a public URL. WordPress downloads it into the media library and Wix imports it into the Media Manager; JPEG, PNG, GIF and WebP are accepted up to 10 MB. Omit to preserve it; null removal is not supported.
    - `url` string, uri, required
    - `altText` string
  - `seo` object: Shopify and Wix. Search-engine overrides: Shopify global title_tag and description_tag metafields, Wix post SEO title and meta description. WordPress rejects this field.
    - `title` string
    - `description` string
  - `isPublished` boolean: Set false to move to draft or true to publish. On WordPress and Wix false takes priority over a future publishDate; omission preserves status unless publishDate is sent (edits to a published Wix post go live).
  - `publishDate` string, date-time: ISO 8601 datetime with offset (or Z). A future date schedules publication natively on the platform.
  - `fieldData` object: Webflow only. The collection's own fields that the Blogs API does not map, keyed by field slug, in Webflow's value format (a Reference is an item id, an Image is { url, alt }). Required by collections with required fields of their own; a create that leaves one empty answers 400 listing them. A slug the API already fills (name, slug, body, summary, image, tags, author, date) or one the collection lacks answers 400. Other platforms answer 400.

## Response `200`

Article updated

- object
  - `platform` 'shopify' | 'wordpress' | 'wix' | 'webflow'
  - `article` BlogArticle: An article inside a blog on the connected platform.
    - `id` string: Platform-native article/post id: numeric on Shopify and WordPress, a GUID on Wix, a hex item id on Webflow.
    - `blogId` string: Platform-native id of the blog the article belongs to.
    - `platform` 'shopify' | 'wordpress' | 'wix' | 'webflow'
    - `title` string
    - `bodyHtml` string, nullable: Article body as HTML. Wix stores rich content, converted from and to HTML; Wix lists return null (get the article for its body).
    - `handle` string: URL slug of the article.
    - `tags` string[]: Tag names. On WordPress and Wix, missing tag names are created and matching is case-insensitive.
    - `author` string, nullable: Shopify author display name, numeric WordPress user id serialized as a string, or Wix site member id. Wix posts without one are attributed to the site's default author.
    - `excerpt` string, nullable: Short summary shown in blog listings.
    - `image` object, nullable: Featured image.
      - `url` string
      - `altText` string, nullable
    - `isPublished` boolean: False while the article is a draft or its publish date is still in the future.
    - `publishedAt` string, date-time, nullable: Publication time. On WordPress this is present only when status is `publish`; null for drafts, pending/private posts, and scheduled posts.
    - `status` 'publish' | 'future' | 'draft' | 'pending' | 'private': WordPress and Wix. Post status (`future` = scheduled, `pending` = in review on Wix); omitted for Shopify.
    - `publishDate` string, date-time, nullable: WordPress and Wix. Scheduled publication time in UTC when status is `future`; null for other statuses and omitted for Shopify.
    - `createdAt` string, date-time, nullable: Creation time when the platform exposes one. WordPress returns null because its core date is the editable publication date.
    - `updatedAt` string, date-time, nullable: Last modification time. WordPress returns modified_gmt as UTC.

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `403`: The platform rejected the request (code insufficient_permissions); reconnect the account or restore the WordPress user capabilities.
- `404`: Account not found or not accessible (code account_not_found), blog not found (code blog_not_found), or article not found (code blog_article_not_found).
- `405`: Platform does not support updating an article.
- `429`: Rate limited by Zernio or the connected platform. Retry later.
- `502`: The connected platform returned an unclassified upstream error. Article mutations are not blindly retried.

## Changes

- **2026-10-21** `5304778ae6b6`: 2 warning, 1 info
  - added the new `webflow` enum value to the `article/platform` response property for the response status `200`
  - added the new `webflow` enum value to the `platform` response property for the response status `200`
  - added the new optional request property `fieldData`
- **2026-10-20** `0d064f3b2f7a`: 4 warning
  - changed the pattern of the `path` request parameter `articleId` from `^\d+$` to `^[A-Za-z0-9_-]{1,64}$`
  - changed the pattern of the `path` request parameter `blogId` from `^\d+$` to `^[A-Za-z0-9_-]{1,64}$`
  - added the new `wix` enum value to the `article/platform` response property for the response status `200`
  - added the new `wix` enum value to the `platform` response property for the response status `200`
- **2026-10-06** `f8c8f34fb41a`: 2 warning
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `400`
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `401`
- **2026-10-02** `d556591af3f6`: 8 info
  - added the optional property `code` to the response with the `401` status
  - added the optional property `details` to the response with the `401` status
  - added the optional property `docUrl` to the response with the `400` status
  - added the optional property `docUrl` to the response with the `401` status
  - …4 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/accounts/:accountId/blogs/:blogId/articles/:articleId/patch.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/4e74db179e73?raw)
