List Blogs
List the blog posts in a project, newest first, with paging and filters.
This endpoint returns the post details and metadata only. It does not return the post body. Use Get a blog post to read the content.
GET /blogsAuthentication
Send your API key as a bearer token. See Authentication .
Query parameters
| Parameter | Type | Default | Notes |
projectId | UUID | required | The project to read. |
page | integer | 1 | The page number, starting at 1. |
pageSize | integer | 25 | Rows per page. The maximum is 100. |
search | string | none | Free text search across the post title. |
blogIdeasId | UUID | none | Return only the post for this blog idea. |
completed | boolean | none | Set to true to return only finished posts. |
Response
{
"data": [
{
"blogId": "b1a2c3d4-e5f6-4a70-8b9c-0d1e2f3a4b5c",
"projectId": "8a7b6c5d-4e3f-2a1b-0c9d-8e7f6a5b4c3d",
"title": "How to price a SaaS product",
"slug": "how-to-price-a-saas-product",
"status": "completed",
"wordCount": 1840,
"qualityScore": 87,
"metadata": {
"summary": "A short guide to value based pricing for early stage SaaS.",
"keywords": ["saas pricing", "value based pricing"],
"coverImage": "A pricing table on a laptop screen, soft daylight.",
"callToAction": "Start your free trial",
"metaDescription": "Learn how to price a SaaS product with a value based method.",
"estimatedReadTimeMinutes": 7
},
"createdAt": "2026-08-25T08:30:00.000Z",
"updatedAt": "2026-08-26T09:00:00.000Z"
}
],
"pagination": { "page": 1, "pageSize": 25, "total": 1, "totalPages": 1 }
}Response fields
| Field | Type | Notes |
blogId | string | The ID of the blog post. Use it with Get a blog post . |
projectId | string | The project the post belongs to. |
title | string | The post title. |
slug | string | The URL slug for the post. |
status | string | The generation status. completed means the post is finished and ready to use. |
wordCount | number or null | The word count of the finished post. |
qualityScore | number or null | Our quality score for the post, from 0 to 100. |
metadata | object or null | SEO and summary fields. null until the post has content. |
metadata.summary | string or null | A short summary of the post. |
metadata.keywords | array | The keywords the post targets. |
metadata.coverImage | string or null | A text description of the cover image. |
metadata.callToAction | string or null | The call to action for the post. |
metadata.metaDescription | string or null | The SEO meta description. |
metadata.estimatedReadTimeMinutes | number or null | The estimated read time in minutes. |
createdAt | string | When the post was created, as an ISO date. |
updatedAt | string | When the post was last changed, as an ISO date. |
Example
curl "https://app.contendar.com/api/v1/blogs?projectId=YOUR_PROJECT_ID&completed=true&page=1&pageSize=25" \
-H "Authorization: Bearer ck_your_key_here"Related pages
Was this helpful?