Update Post
PATCH
/api/v1/dashboard/content/posts/{post_id}Overview
Updates an existing blog post. Only the fields included in the request body are updated; all other fields remain unchanged. Works on posts in any status (draft, published, archived, etc.).
Authentication
info
Bearer authentication required - Pass your credentials as Authorization: Bearer <client_id>:<api_key>:<api_secret>.
Headers
| Header | Type | Required | Description |
|---|---|---|---|
Authorization | string | Yes | Bearer <client_id>:<api_key>:<api_secret> |
Content-Type | string | Yes | application/json |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string (UUID) | Yes | The unique identifier of the post |
Request Body
All fields are optional. Only include the fields you want to update.
| Parameter | Type | Description |
|---|---|---|
slug | string | URL-friendly slug (must be unique per client) |
title | string | Post title |
body | object | Post content as Tiptap JSON |
excerpt | string | Short excerpt / summary |
cover_image_url | string | URL of the cover image |
author_name | string | Author display name |
author_id | string (UUID) | Explicit author ID |
tags | string[] | Array of tag names (replaces existing tags) |
tag_ids | string[] | Array of existing tag UUIDs |
category_ids | string[] | Array of existing category UUIDs |
is_featured | boolean | Whether the post is featured |
featured_image_alt | string | Alt text for the cover image |
tldr_summary | string | Optional TL;DR summary |
related_post_ids | string[] | Array of related post UUIDs |
seo_title | string | Custom SEO title |
seo_description | string | Custom SEO meta description |
Response
Returns the full updated PostResponse object (same shape as Create Post).
Example Request
- cURL
- Python
- JavaScript
curl -X PATCH "https://spideriq.ai/api/v1/dashboard/content/posts/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-H "Authorization: Bearer $CLIENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Getting Started with SpiderIQ (Updated)",
"excerpt": "An updated beginner guide to SpiderIQ APIs.",
"tags": ["getting-started", "tutorial", "updated"],
"is_featured": false
}'
import requests
post_id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
resp = requests.patch(
f"https://spideriq.ai/api/v1/dashboard/content/posts/{post_id}",
headers={"Authorization": f"Bearer {CLIENT_TOKEN}"},
json={
"title": "Getting Started with SpiderIQ (Updated)",
"excerpt": "An updated beginner guide to SpiderIQ APIs.",
"tags": ["getting-started", "tutorial", "updated"],
"is_featured": False,
},
)
post = resp.json()
print(f"Updated: {post['title']}")
print(f"Tags: {post['tags']}")
const postId = "a1b2c3d4-e5f6-7890-abcd-ef1234567890";
const resp = await fetch(
`https://spideriq.ai/api/v1/dashboard/content/posts/${postId}`,
{
method: "PATCH",
headers: {
"Authorization": `Bearer ${CLIENT_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Getting Started with SpiderIQ (Updated)",
excerpt: "An updated beginner guide to SpiderIQ APIs.",
tags: ["getting-started", "tutorial", "updated"],
is_featured: false,
}),
}
);
const post = await resp.json();
console.log(`Updated: ${post.title}`);
console.log(`Tags: ${post.tags}`);
Example Response
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"slug": "getting-started-with-spideriq",
"title": "Getting Started with SpiderIQ (Updated)",
"body": {
"type": "doc",
"content": [
{
"type": "paragraph",
"content": [{ "type": "text", "text": "SpiderIQ makes web scraping easy." }]
}
]
},
"excerpt": "An updated beginner guide to SpiderIQ APIs.",
"status": "draft",
"author": {
"id": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
"full_name": "Martin Shein",
"slug": "martin-shein",
"avatar_url": "https://cdn.spideriq.ai/authors/martin.webp",
"bio": "Founder of SpiderIQ."
},
"tags": ["getting-started", "tutorial", "updated"],
"categories": [],
"is_featured": false,
"updated_at": "2026-04-08T11:30:00Z"
}
Status Codes
| Status Code | Meaning | Description |
|---|---|---|
| 200 | OK | Post updated successfully |
| 400 | Bad Request | Invalid field values |
| 401 | Unauthorized | Invalid or missing Bearer token |
| 404 | Not Found | Post not found or belongs to another client |
| 409 | Conflict | Slug already in use by another post |