Create Post
POST
/api/v1/dashboard/content/postsOverview
Creates a new blog post for the authenticated client. Posts are created in draft status by default. Use the Publish Post endpoint to make a post public.
Authentication
info
Bearer authentication required - Pass your credentials as Authorization: Bearer <client_id>:<api_key>:<api_secret>. These are the same credentials used for all SpiderIQ API calls.
Headers
| Header | Type | Required | Description |
|---|---|---|---|
Authorization | string | Yes | Bearer <client_id>:<api_key>:<api_secret> |
Content-Type | string | Yes | application/json |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | URL-friendly slug (must be unique per client) |
title | string | Yes | Post title |
body | object | Yes | Post content as Tiptap JSON |
excerpt | string | No | Short excerpt / summary |
cover_image_url | string | No | URL of the cover image |
author_name | string | No | Author display name (creates author if not found) |
author_id | string (UUID) | No | Explicit author ID (takes precedence over author_name) |
tags | string[] | No | Array of tag names (creates tags if not found) |
tag_ids | string[] | No | Array of existing tag UUIDs |
category_ids | string[] | No | Array of existing category UUIDs |
is_featured | boolean | No | Whether the post is featured (default: false) |
featured_image_alt | string | No | Alt text for the cover image |
tldr_summary | string | No | Optional TL;DR summary |
related_post_ids | string[] | No | Array of related post UUIDs |
seo_title | string | No | Custom SEO title |
seo_description | string | No | Custom SEO meta description |
Response
idstring (UUID)Unique post identifier
slugstringURL-friendly slug
titlestringPost title
bodyobjectPost content as Tiptap JSON
excerptstring | nullShort excerpt / summary
statusstringPost status (draft for new posts)
authorobjectAuthor object with id, full_name, slug, avatar_url, bio
tagsstring[]Array of tag names
categoriesarrayArray of category objects with id, name, slug
is_featuredbooleanWhether the post is featured
created_atstringISO 8601 creation timestamp
Example Request
- cURL
- Python
- JavaScript
curl -X POST "https://spideriq.ai/api/v1/dashboard/content/posts" \
-H "Authorization: Bearer $CLIENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"slug": "getting-started-with-spideriq",
"title": "Getting Started with SpiderIQ",
"body": {
"type": "doc",
"content": [
{
"type": "heading",
"attrs": { "level": 2 },
"content": [{ "type": "text", "text": "Introduction" }]
},
{
"type": "paragraph",
"content": [{ "type": "text", "text": "SpiderIQ makes web scraping and lead generation easy." }]
}
]
},
"excerpt": "A beginner guide to SpiderIQ APIs.",
"tags": ["getting-started", "tutorial"],
"author_name": "Martin Shein",
"is_featured": true,
"seo_title": "Getting Started with SpiderIQ | Blog",
"seo_description": "Learn how to use SpiderIQ for web scraping and lead generation."
}'
import requests
resp = requests.post(
"https://spideriq.ai/api/v1/dashboard/content/posts",
headers={"Authorization": f"Bearer {CLIENT_TOKEN}"},
json={
"slug": "getting-started-with-spideriq",
"title": "Getting Started with SpiderIQ",
"body": {
"type": "doc",
"content": [
{
"type": "heading",
"attrs": {"level": 2},
"content": [{"type": "text", "text": "Introduction"}],
},
{
"type": "paragraph",
"content": [
{"type": "text", "text": "SpiderIQ makes web scraping and lead generation easy."}
],
},
],
},
"excerpt": "A beginner guide to SpiderIQ APIs.",
"tags": ["getting-started", "tutorial"],
"author_name": "Martin Shein",
"is_featured": True,
},
)
post = resp.json()
print(f"Created post: {post['id']}")
print(f"Status: {post['status']}")
const resp = await fetch(
"https://spideriq.ai/api/v1/dashboard/content/posts",
{
method: "POST",
headers: {
"Authorization": `Bearer ${CLIENT_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
slug: "getting-started-with-spideriq",
title: "Getting Started with SpiderIQ",
body: {
type: "doc",
content: [
{
type: "heading",
attrs: { level: 2 },
content: [{ type: "text", text: "Introduction" }],
},
{
type: "paragraph",
content: [
{ type: "text", text: "SpiderIQ makes web scraping and lead generation easy." },
],
},
],
},
excerpt: "A beginner guide to SpiderIQ APIs.",
tags: ["getting-started", "tutorial"],
author_name: "Martin Shein",
is_featured: true,
}),
}
);
const post = await resp.json();
console.log(`Created post: ${post.id}`);
console.log(`Status: ${post.status}`);
Example Response
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"slug": "getting-started-with-spideriq",
"title": "Getting Started with SpiderIQ",
"body": {
"type": "doc",
"content": [
{
"type": "heading",
"attrs": { "level": 2 },
"content": [{ "type": "text", "text": "Introduction" }]
},
{
"type": "paragraph",
"content": [{ "type": "text", "text": "SpiderIQ makes web scraping and lead generation easy." }]
}
]
},
"excerpt": "A beginner guide to SpiderIQ APIs.",
"tldr_summary": null,
"cover_image_url": null,
"featured_image_alt": null,
"status": "draft",
"published_at": null,
"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"],
"categories": [],
"related_posts": [],
"reading_time": 1,
"view_count": 0,
"is_featured": true,
"seo_title": "Getting Started with SpiderIQ | Blog",
"seo_description": "Learn how to use SpiderIQ for web scraping and lead generation.",
"og_image_url": null,
"created_at": "2026-04-08T10:00:00Z",
"updated_at": "2026-04-08T10:00:00Z"
}
Status Codes
| Status Code | Meaning | Description |
|---|---|---|
| 201 | Created | Post created successfully |
| 400 | Bad Request | Missing required fields or invalid body format |
| 401 | Unauthorized | Invalid or missing Bearer token |
| 409 | Conflict | A post with this slug already exists |