Base URL
Authentication
Send the project-bound API key as a Bearer token:Project matching
Most endpoints include aprojectId path parameter. That ID must exactly match the project attached to the API key.
If the key belongs to Project A and a request uses Project B, the API returns 403 project_forbidden.
Endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /me | Inspect the current key and project |
GET | /project | Get the key’s project |
GET | /projects/{projectId} | Get the matching project by ID |
GET | /projects/{projectId}/keywords | List keywords |
POST | /projects/{projectId}/keywords | Add a custom keyword |
POST | /projects/{projectId}/keywords/generate | Generate keyword ideas |
POST | /projects/{projectId}/keyword-metrics | Refresh keyword metrics |
GET | /projects/{projectId}/posts | List posts |
POST | /projects/{projectId}/posts | Create a draft post |
GET | /projects/{projectId}/posts/{postId} | Read one post |
PATCH | /projects/{projectId}/posts/{postId} | Update a post |
POST | /projects/{projectId}/posts/{postId}/generate | Generate post content |
POST | /projects/{projectId}/posts/{postId}/publish | Publish a post |
GET | /projects/{projectId}/integrations | List integration status |
POST | /projects/{projectId}/integrations/{provider}/connect-url | Create an integration connect URL |
GET | /projects/{projectId}/integrations/{provider}/fields | List provider fields |
POST | /projects/{projectId}/integrations/{provider}/mapping | Save provider field mapping |
GET | /projects/{projectId}/webhooks | List webhooks |
POST | /projects/{projectId}/webhooks | Create a webhook |
DELETE | /projects/{projectId}/webhooks/{webhookId} | Delete a webhook |
Identity
GET /me
Returns key metadata and the bound project.
Project
GET /project
Returns the project attached to the API key.
GET /projects/{projectId}
Returns the same project when projectId exactly matches the key’s project.
Keywords
GET /projects/{projectId}/keywords
Lists keywords for the project.
POST /projects/{projectId}/keywords
Adds a custom keyword.
POST /projects/{projectId}/keywords/generate
Starts keyword generation for the project. Generation may return 202 Accepted when work continues asynchronously.
POST /projects/{projectId}/keyword-metrics
Refreshes metrics for one or more keywords.
Posts
GET /projects/{projectId}/posts
Lists posts for the project.
POST /projects/{projectId}/posts
Creates a draft post.
GET /projects/{projectId}/posts/{postId}
Reads one post. The post must belong to the same project as the key.
PATCH /projects/{projectId}/posts/{postId}
Updates allowlisted fields on a post.
POST /projects/{projectId}/posts/{postId}/generate
Starts or queues content generation for a post.
POST /projects/{projectId}/posts/{postId}/publish
Publishes through the project’s configured integration. Agents should ask before publishing unless autonomous publishing is explicitly enabled by the user.
Integrations
GET /projects/{projectId}/integrations
Lists connected providers and readiness status.
POST /projects/{projectId}/integrations/{provider}/connect-url
Creates a provider connect URL when supported. The user may still need to complete OAuth or provider authorization in the browser.
GET /projects/{projectId}/integrations/{provider}/fields
Lists available provider fields for mapping.
POST /projects/{projectId}/integrations/{provider}/mapping
Saves field mapping.
Webhooks
GET /projects/{projectId}/webhooks
Lists webhooks.
POST /projects/{projectId}/webhooks
Creates a webhook endpoint.
DELETE /projects/{projectId}/webhooks/{webhookId}
Deletes a webhook. The webhook must belong to the key’s project.
Pagination
List endpoints support a conservativelimit parameter where available. Clients should prefer small pages and retry 429 responses with backoff.

