# WordPress

> Publish and manage a self-hosted WordPress site: write, update and delete posts and pages, organise them with categories and tags, and moderate comments.

App · Website Builders · 20 actions. Web page: https://docs.lodol.com/docs/integrations/wordpress

## Actions

### Create a category

Add a category to the site. Categories can be nested under one another.

**Inputs**

- Name (`name`, text, required): The category name, for example 'Product'.
- Description (`description`, text): A description, shown by some themes.
- Slug (`slug`, text): The URL segment for the category. Leave empty to derive one from the name.
- Parent category ID (`parent_category_id`, text): The category to nest this one under. Leave empty, or use 0, for a top-level category.

**Outputs**

- `count` (number)
- `description` (text)
- `id` (number)
- `link` (text)
- `name` (text)
- `parent` (number)
- `slug` (text)
- `taxonomy` (text)

**Example output**

```json
{
  "count": 34,
  "description": "Release notes and product news.",
  "id": 7,
  "link": "https://example.com/category/product/",
  "name": "Product",
  "parent": 0,
  "slug": "product",
  "taxonomy": "category"
}
```

### Create a page

Create a new page. Leave the status empty to save it as a draft.

**Inputs**

- Title (`title`, text, required): The page title, for example 'About us'.
- Content (`content`, text, required): The body of the page. HTML is allowed.
- Status (`status`, text): Whether to publish the page. Leave empty to save a draft. One of: `publish` (Published), `future` (Scheduled), `draft`, `pending` (Pending review), `private`.
- Excerpt (`excerpt`, text): A short summary, used by some themes.
- Slug (`slug`, text): The URL segment for the page. Leave empty to derive one from the title.
- Parent page ID (`parent_page_id`, text): The page to nest this one under. Leave empty, or use 0, for a top-level page.
- Menu order (`menu_order`, number): Where the page sits among its siblings. Lower numbers come first.
- Publish date (`publish_date`, date and time): When the page should be dated.
- Comment status (`comment_status`, text): Whether readers may comment on the page. One of: `open`, `closed`.

**Outputs**

- `author` (number)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `id` (number)
- `link` (text)
- `menu_order` (number)
- `modified` (text)
- `parent` (number)
- `slug` (text)
- `status` (text)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "comment_status": "closed",
  "content": "<p>Who we are.</p>",
  "date": "2026-01-06T11:00:00",
  "excerpt": "",
  "id": 88,
  "link": "https://example.com/about-us/",
  "menu_order": 2,
  "modified": "2026-02-02T16:20:00",
  "parent": 0,
  "slug": "about-us",
  "status": "publish",
  "title": "About us"
}
```

### Create a post

Write a new post to your WordPress site. Leave the status empty to save it as a draft.

**Inputs**

- Title (`title`, text, required): The post title, for example 'Our spring update'.
- Content (`content`, text, required): The body of the post. HTML is allowed.
- Status (`status`, text): Whether to publish the post. Leave empty to save a draft. One of: `publish` (Published), `future` (Scheduled), `draft`, `pending` (Pending review), `private`.
- Excerpt (`excerpt`, text): A short summary shown in post listings.
- Slug (`slug`, text): The URL segment for the post. Leave empty to let WordPress derive one from the title.
- Categories (`categories`, list): The categories to file the post under.
- Tag IDs (`tags`, text): Tag IDs to apply, separated by commas. Use Find tags to look up an ID; a site can have far too many tags to list in a dropdown.
- Publish date (`publish_date`, date and time): When the post should be dated. Set a future date with the Scheduled status to schedule it.
- Comment status (`comment_status`, text): Whether readers may comment on the post. One of: `open`, `closed`.
- Post format (`post_format`, text): The post format, if your theme uses them. Defaults to Standard. One of: `standard`, `aside`, `chat`, `gallery`, `link`, `image`, `quote`, `status`, `video`, `audio`.
- Pin to the front page (`sticky`, true/false): Whether to keep the post at the top of the blog.

**Outputs**

- `author` (number)
- `categories` (list)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `format` (text)
- `id` (number)
- `link` (text)
- `modified` (text)
- `slug` (text)
- `status` (text)
- `sticky` (true/false)
- `tags` (list)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "categories": [
    7
  ],
  "comment_status": "open",
  "content": "<p>Everything that shipped this quarter.</p>",
  "date": "2026-03-14T09:30:00",
  "excerpt": "<p>Everything that shipped this quarter.</p>",
  "format": "standard",
  "id": 412,
  "link": "https://example.com/spring-product-update/",
  "modified": "2026-03-14T09:30:00",
  "slug": "spring-product-update",
  "status": "publish",
  "sticky": false,
  "tags": [
    21,
    22
  ],
  "title": "Spring product update"
}
```

### Create a tag

Add a tag to the site so posts can be filed under it.

**Inputs**

- Name (`name`, text, required): The tag name, for example 'changelog'.
- Description (`description`, text): A description, shown by some themes.
- Slug (`slug`, text): The URL segment for the tag. Leave empty to derive one from the name.

**Outputs**

- `count` (number)
- `description` (text)
- `id` (number)
- `link` (text)
- `name` (text)
- `parent` (number)
- `slug` (text)
- `taxonomy` (text)

**Example output**

```json
{
  "count": 12,
  "description": "",
  "id": 21,
  "link": "https://example.com/tag/changelog/",
  "name": "changelog",
  "parent": 0,
  "slug": "changelog",
  "taxonomy": "post_tag"
}
```

### Delete a category

Delete a category. WordPress has no trash for categories, so this is permanent: posts filed under it keep their content and fall back to the default category.

**Inputs**

- Category ID (`category_id`, text, required): The numeric ID of the category to delete.

**Outputs**

- `count` (number)
- `description` (text)
- `id` (number)
- `link` (text)
- `name` (text)
- `parent` (number)
- `slug` (text)
- `taxonomy` (text)

**Example output**

```json
{
  "count": 34,
  "description": "Release notes and product news.",
  "id": 7,
  "link": "https://example.com/category/product/",
  "name": "Product",
  "parent": 0,
  "slug": "product",
  "taxonomy": "category"
}
```

### Delete a comment

Move a comment to the trash, or delete it outright. A trashed comment can be restored from the WordPress admin; a permanent delete cannot be undone.

**Inputs**

- Comment ID (`comment_id`, text, required): The numeric ID of the comment to delete.
- Delete permanently (`permanently`, true/false): Turn this on to skip the trash and delete the comment for good.

**Outputs**

- `author_email` (text)
- `author_name` (text)
- `author_url` (text)
- `content` (text)
- `date` (text)
- `id` (number)
- `link` (text)
- `parent` (number)
- `post` (number)
- `status` (text)

**Example output**

```json
{
  "author_email": "dana@example.com",
  "author_name": "Dana Reader",
  "author_url": "",
  "content": "<p>This is exactly what we needed, thank you.</p>",
  "date": "2026-03-14T12:05:00",
  "id": 903,
  "link": "https://example.com/spring-product-update/#comment-903",
  "parent": 0,
  "post": 412,
  "status": "trash"
}
```

### Delete a page

Move a page to the trash, or delete it outright. A trashed page can be restored from the WordPress admin; a permanent delete cannot be undone.

**Inputs**

- Page ID (`page_id`, text, required): The numeric ID of the page to delete.
- Delete permanently (`permanently`, true/false): Turn this on to skip the trash and delete the page for good.

**Outputs**

- `author` (number)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `id` (number)
- `link` (text)
- `menu_order` (number)
- `modified` (text)
- `parent` (number)
- `slug` (text)
- `status` (text)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "comment_status": "closed",
  "content": "<p>Who we are.</p>",
  "date": "2026-01-06T11:00:00",
  "excerpt": "",
  "id": 88,
  "link": "https://example.com/about-us/",
  "menu_order": 2,
  "modified": "2026-02-02T16:20:00",
  "parent": 0,
  "slug": "about-us",
  "status": "trash",
  "title": "About us"
}
```

### Delete a post

Move a post to the trash, or delete it outright. A trashed post can be restored from the WordPress admin; a permanent delete cannot be undone.

**Inputs**

- Post ID (`post_id`, text, required): The numeric ID of the post to delete.
- Delete permanently (`permanently`, true/false): Turn this on to skip the trash and delete the post for good.

**Outputs**

- `author` (number)
- `categories` (list)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `format` (text)
- `id` (number)
- `link` (text)
- `modified` (text)
- `slug` (text)
- `status` (text)
- `sticky` (true/false)
- `tags` (list)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "categories": [
    7
  ],
  "comment_status": "open",
  "content": "<p>Everything that shipped this quarter.</p>",
  "date": "2026-03-14T09:30:00",
  "excerpt": "<p>Everything that shipped this quarter.</p>",
  "format": "standard",
  "id": 412,
  "link": "https://example.com/spring-product-update/",
  "modified": "2026-03-14T09:30:00",
  "slug": "spring-product-update",
  "status": "trash",
  "sticky": false,
  "tags": [
    21,
    22
  ],
  "title": "Spring product update"
}
```

### Delete a tag

Delete a tag. WordPress has no trash for tags, so this is permanent: posts carrying it keep their content and simply lose the tag.

**Inputs**

- Tag ID (`tag_id`, text, required): The numeric ID of the tag to delete.

**Outputs**

- `count` (number)
- `description` (text)
- `id` (number)
- `link` (text)
- `name` (text)
- `parent` (number)
- `slug` (text)
- `taxonomy` (text)

**Example output**

```json
{
  "count": 12,
  "description": "",
  "id": 21,
  "link": "https://example.com/tag/changelog/",
  "name": "changelog",
  "parent": 0,
  "slug": "changelog",
  "taxonomy": "post_tag"
}
```

### Find categories

List or search the site's categories, or find the categories on one post.

**Inputs**

- Search (`search`, text): Only return categories matching this text.
- Parent category ID (`parent_category_id`, text): Only return categories nested under this one. Use 0 for top-level categories.
- Post ID (`post_id`, text): Only return the categories assigned to this post.
- Hide unused categories (`hide_empty`, true/false): Turn this on to leave out categories with no published posts.
- Sort direction (`order`, text): Whether to sort ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Sort by (`order_by`, text): Which field to sort by. Defaults to name. One of: `id`, `include` (Given ID order), `name`, `slug`, `include_slugs` (Given slug order), `term_group` (Term Group), `description`, `count`.
- Results per page (`per_page`, number): How many results to return, 1 to 100. Defaults to 10. From 1 to 100.
- Page (`page`, number): Which page of results to return. Starts at 1. At least 1.
- Slug (`slug`, text): Only return the category with this exact slug.

**Outputs**

- `count` (number)
- `items` (list)

**Example output**

```json
{
  "count": 1,
  "items": [
    {
      "count": 34,
      "description": "Release notes and product news.",
      "id": 7,
      "link": "https://example.com/category/product/",
      "name": "Product",
      "parent": 0,
      "slug": "product",
      "taxonomy": "category"
    }
  ]
}
```

### Find comments

List comments across the site or on one post. Set the status to 'Awaiting moderation' to fetch the moderation queue.

**Inputs**

- Post ID (`post_id`, text): Only return comments on this post.
- Search (`search`, text): Only return comments matching this text.
- Status (`status`, text): Which comments to return. Defaults to approved comments only. One of: `approve` (Approved), `hold` (Awaiting moderation), `spam`, `trash` (Trashed), `all` (All statuses).
- Author email (`author_email`, text): Only return comments left by this email address.
- Parent comment ID (`parent_comment_id`, text): Only return replies to this comment. Use 0 for top-level comments only.
- Posted after (`published_after`, date and time): Only return comments left after this moment.
- Posted before (`published_before`, date and time): Only return comments left before this moment.
- Sort direction (`order`, text): Whether to sort ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Sort by (`order_by`, text): Which field to sort by. Defaults to date. One of: `date`, `date_gmt` (Date (GMT)), `id`, `include` (Given ID order), `post`, `parent`, `type`.
- Results per page (`per_page`, number): How many results to return, 1 to 100. Defaults to 10. From 1 to 100.
- Page (`page`, number): Which page of results to return. Starts at 1. At least 1.

**Outputs**

- `count` (number)
- `items` (list)

**Example output**

```json
{
  "count": 1,
  "items": [
    {
      "author_email": "dana@example.com",
      "author_name": "Dana Reader",
      "author_url": "",
      "content": "<p>This is exactly what we needed, thank you.</p>",
      "date": "2026-03-14T12:05:00",
      "id": 903,
      "link": "https://example.com/spring-product-update/#comment-903",
      "parent": 0,
      "post": 412,
      "status": "approved"
    }
  ]
}
```

### Find pages

List or search pages. Every filter is optional; with none set this returns the site's published pages.

**Inputs**

- Search (`search`, text): Only return pages matching this text.
- Statuses (`status`, list): Only return pages with these statuses. Defaults to published pages only. One or more of: `publish` (Published), `future` (Scheduled), `draft`, `pending` (Pending review), `private`.
- Parent page ID (`parent_page_id`, text): Only return pages nested under this one. Use 0 for top-level pages.
- Sort direction (`order`, text): Whether to sort ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Sort by (`order_by`, text): Which field to sort by. Defaults to date. One of: `author`, `date`, `id`, `include` (Given ID order), `modified`, `parent`, `relevance`, `slug`, `include_slugs` (Given slug order), `title`, `menu_order` (Menu order).
- Results per page (`per_page`, number): How many results to return, 1 to 100. Defaults to 10. From 1 to 100.
- Page (`page`, number): Which page of results to return. Starts at 1. At least 1.
- Slug (`slug`, text): Only return the page with this exact slug.

**Outputs**

- `count` (number)
- `items` (list)

**Example output**

```json
{
  "count": 1,
  "items": [
    {
      "author": 1,
      "comment_status": "closed",
      "content": "<p>Who we are.</p>",
      "date": "2026-01-06T11:00:00",
      "excerpt": "",
      "id": 88,
      "link": "https://example.com/about-us/",
      "menu_order": 2,
      "modified": "2026-02-02T16:20:00",
      "parent": 0,
      "slug": "about-us",
      "status": "publish",
      "title": "About us"
    }
  ]
}
```

### Find posts

List or search posts. Every filter is optional; with none set this returns the site's most recent published posts.

**Inputs**

- Search (`search`, text): Only return posts matching this text.
- Statuses (`status`, list): Only return posts with these statuses. Defaults to published posts only. One or more of: `publish` (Published), `future` (Scheduled), `draft`, `pending` (Pending review), `private`.
- Categories (`categories`, list): Only return posts in these categories.
- Tag IDs (`tags`, text): Only return posts with these tag IDs. Use Find tags to look up an ID; a site can have far too many tags to list in a dropdown.
- Author ID (`author_id`, text): Only return posts written by this user ID.
- Published after (`published_after`, date and time): Only return posts dated after this moment.
- Published before (`published_before`, date and time): Only return posts dated before this moment.
- Sort direction (`order`, text): Whether to sort ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Sort by (`order_by`, text): Which field to sort by. Defaults to date. One of: `author`, `date`, `id`, `include` (Given ID order), `modified`, `parent`, `relevance`, `slug`, `include_slugs` (Given slug order), `title`.
- Results per page (`per_page`, number): How many results to return, 1 to 100. Defaults to 10. From 1 to 100.
- Page (`page`, number): Which page of results to return. Starts at 1. At least 1.
- Slug (`slug`, text): Only return the post with this exact slug.

**Outputs**

- `count` (number)
- `items` (list)

**Example output**

```json
{
  "count": 1,
  "items": [
    {
      "author": 1,
      "categories": [
        7
      ],
      "comment_status": "open",
      "content": "<p>Everything that shipped this quarter.</p>",
      "date": "2026-03-14T09:30:00",
      "excerpt": "<p>Everything that shipped this quarter.</p>",
      "format": "standard",
      "id": 412,
      "link": "https://example.com/spring-product-update/",
      "modified": "2026-03-14T09:30:00",
      "slug": "spring-product-update",
      "status": "publish",
      "sticky": false,
      "tags": [
        21,
        22
      ],
      "title": "Spring product update"
    }
  ]
}
```

### Find tags

List or search the site's tags, or find the tags on one post. This is how to look up the tag IDs the post actions take.

**Inputs**

- Search (`search`, text): Only return tags matching this text.
- Post ID (`post_id`, text): Only return the tags assigned to this post.
- Hide unused tags (`hide_empty`, true/false): Turn this on to leave out tags with no published posts.
- Sort direction (`order`, text): Whether to sort ascending or descending. One of: `asc` (Ascending), `desc` (Descending).
- Sort by (`order_by`, text): Which field to sort by. Defaults to name. One of: `id`, `include` (Given ID order), `name`, `slug`, `include_slugs` (Given slug order), `term_group` (Term Group), `description`, `count`.
- Results per page (`per_page`, number): How many results to return, 1 to 100. Defaults to 10. From 1 to 100.
- Page (`page`, number): Which page of results to return. Starts at 1. At least 1.
- Slug (`slug`, text): Only return the tag with this exact slug.

**Outputs**

- `count` (number)
- `items` (list)

**Example output**

```json
{
  "count": 1,
  "items": [
    {
      "count": 12,
      "description": "",
      "id": 21,
      "link": "https://example.com/tag/changelog/",
      "name": "changelog",
      "parent": 0,
      "slug": "changelog",
      "taxonomy": "post_tag"
    }
  ]
}
```

### Get a page

Fetch one page by its ID, including its full content.

**Inputs**

- Page ID (`page_id`, text, required): The numeric ID of the page to fetch.

**Outputs**

- `author` (number)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `id` (number)
- `link` (text)
- `menu_order` (number)
- `modified` (text)
- `parent` (number)
- `slug` (text)
- `status` (text)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "comment_status": "closed",
  "content": "<p>Who we are.</p>",
  "date": "2026-01-06T11:00:00",
  "excerpt": "",
  "id": 88,
  "link": "https://example.com/about-us/",
  "menu_order": 2,
  "modified": "2026-02-02T16:20:00",
  "parent": 0,
  "slug": "about-us",
  "status": "publish",
  "title": "About us"
}
```

### Get a post

Fetch one post by its ID, including its full content.

**Inputs**

- Post ID (`post_id`, text, required): The numeric ID of the post to fetch.

**Outputs**

- `author` (number)
- `categories` (list)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `format` (text)
- `id` (number)
- `link` (text)
- `modified` (text)
- `slug` (text)
- `status` (text)
- `sticky` (true/false)
- `tags` (list)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "categories": [
    7
  ],
  "comment_status": "open",
  "content": "<p>Everything that shipped this quarter.</p>",
  "date": "2026-03-14T09:30:00",
  "excerpt": "<p>Everything that shipped this quarter.</p>",
  "format": "standard",
  "id": 412,
  "link": "https://example.com/spring-product-update/",
  "modified": "2026-03-14T09:30:00",
  "slug": "spring-product-update",
  "status": "publish",
  "sticky": false,
  "tags": [
    21,
    22
  ],
  "title": "Spring product update"
}
```

### Moderate a comment

Approve, hold, spam or trash a comment, or edit its text. Fill in only what you want to change.

**Inputs**

- Comment ID (`comment_id`, text, required): The numeric ID of the comment to change.
- Comment (`content`, text): New text for the comment.
- Moderation (`status`, text): What to do with the comment. One of: `approved` (Approve), `hold` (Hold for moderation), `spam` (Mark as spam), `unspam` (Not spam), `trash` (Move to trash), `untrash` (Restore from trash).
- Author name (`author_name`, text): A corrected name for the comment's author.
- Author email (`author_email`, text): A corrected email address for the author.

**Outputs**

- `author_email` (text)
- `author_name` (text)
- `author_url` (text)
- `content` (text)
- `date` (text)
- `id` (number)
- `link` (text)
- `parent` (number)
- `post` (number)
- `status` (text)

**Example output**

```json
{
  "author_email": "dana@example.com",
  "author_name": "Dana Reader",
  "author_url": "",
  "content": "<p>This is exactly what we needed, thank you.</p>",
  "date": "2026-03-14T12:05:00",
  "id": 903,
  "link": "https://example.com/spring-product-update/#comment-903",
  "parent": 0,
  "post": 412,
  "status": "hold"
}
```

### Post a comment

Leave a comment on a post. The post must be published or private (WordPress rejects comments on drafts) and its comment status must be open.

**Inputs**

- Post ID (`post_id`, text, required): The numeric ID of the post to comment on.
- Comment (`content`, text, required): The comment text. WordPress rejects a second comment with the same author and exactly the same text.
- Author name (`author_name`, text): Who the comment is from. Leave empty to comment as the connected WordPress user.
- Author email (`author_email`, text): The comment author's email address.
- Author website (`author_url`, text): A website to link the author's name to.
- Reply to comment ID (`parent_comment_id`, text): The comment this one replies to. Leave empty for a top-level comment.
- Status (`status`, text): Whether the comment goes live straight away. Leave empty to let the site's moderation settings decide. One of: `approved` (Approve), `hold` (Hold for moderation), `spam` (Mark as spam), `unspam` (Not spam), `trash` (Move to trash), `untrash` (Restore from trash).

**Outputs**

- `author_email` (text)
- `author_name` (text)
- `author_url` (text)
- `content` (text)
- `date` (text)
- `id` (number)
- `link` (text)
- `parent` (number)
- `post` (number)
- `status` (text)

**Example output**

```json
{
  "author_email": "dana@example.com",
  "author_name": "Dana Reader",
  "author_url": "",
  "content": "<p>This is exactly what we needed, thank you.</p>",
  "date": "2026-03-14T12:05:00",
  "id": 903,
  "link": "https://example.com/spring-product-update/#comment-903",
  "parent": 0,
  "post": 412,
  "status": "approved"
}
```

### Update a page

Change an existing page. Fill in only the fields you want to change; everything left empty stays as it is.

**Inputs**

- Page ID (`page_id`, text, required): The numeric ID of the page to change.
- Title (`title`, text): A new title for the page.
- Content (`content`, text): New body content. HTML is allowed.
- Status (`status`, text): A new status for the page. One of: `publish` (Published), `future` (Scheduled), `draft`, `pending` (Pending review), `private`.
- Excerpt (`excerpt`, text): A new short summary for the page.
- Slug (`slug`, text): A new URL segment. Changing this changes the page's public address.
- Parent page ID (`parent_page_id`, text): The page to nest this one under. Use 0 to move it back to the top level.
- Menu order (`menu_order`, number): Where the page sits among its siblings. Lower numbers come first.

**Outputs**

- `author` (number)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `id` (number)
- `link` (text)
- `menu_order` (number)
- `modified` (text)
- `parent` (number)
- `slug` (text)
- `status` (text)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "comment_status": "closed",
  "content": "<p>Who we are.</p>",
  "date": "2026-01-06T11:00:00",
  "excerpt": "",
  "id": 88,
  "link": "https://example.com/about-us/",
  "menu_order": 2,
  "modified": "2026-02-02T16:20:00",
  "parent": 0,
  "slug": "about-us",
  "status": "publish",
  "title": "About our team"
}
```

### Update a post

Change an existing post. Fill in only the fields you want to change; everything left empty stays as it is.

**Inputs**

- Post ID (`post_id`, text, required): The numeric ID of the post to change.
- Title (`title`, text): A new title for the post.
- Content (`content`, text): New body content. HTML is allowed.
- Status (`status`, text): A new status. Set this to Published to publish a draft. One of: `publish` (Published), `future` (Scheduled), `draft`, `pending` (Pending review), `private`.
- Excerpt (`excerpt`, text): A new short summary for the post.
- Slug (`slug`, text): A new URL segment. Changing this changes the post's public address.
- Categories (`categories`, list): The categories the post should have. This replaces its current categories rather than adding to them.
- Tag IDs (`tags`, text): The tag IDs the post should have, separated by commas. This replaces its current tags. Use Find tags to look up an ID; a site can have far too many tags to list in a dropdown.
- Comment status (`comment_status`, text): Whether readers may comment on the post. One of: `open`, `closed`.
- Post format (`post_format`, text): A new post format, if your theme uses them. One of: `standard`, `aside`, `chat`, `gallery`, `link`, `image`, `quote`, `status`, `video`, `audio`.
- Pin to the front page (`sticky`, true/false): Whether to keep the post at the top of the blog.

**Outputs**

- `author` (number)
- `categories` (list)
- `comment_status` (text)
- `content` (text)
- `date` (text)
- `excerpt` (text)
- `format` (text)
- `id` (number)
- `link` (text)
- `modified` (text)
- `slug` (text)
- `status` (text)
- `sticky` (true/false)
- `tags` (list)
- `title` (text)

**Example output**

```json
{
  "author": 1,
  "categories": [
    7
  ],
  "comment_status": "open",
  "content": "<p>Everything that shipped this quarter.</p>",
  "date": "2026-03-14T09:30:00",
  "excerpt": "<p>Everything that shipped this quarter.</p>",
  "format": "standard",
  "id": 412,
  "link": "https://example.com/spring-product-update/",
  "modified": "2026-03-14T09:30:00",
  "slug": "spring-product-update",
  "status": "publish",
  "sticky": false,
  "tags": [
    21,
    22
  ],
  "title": "Spring product update (revised)"
}
```
