Developer REST API
POST /api/v1/articles
Publish or update a technical article with automated multi-platform cross-posting.
Publish Article (POST /api/v1/articles)
Publishes a new technical post or updates an existing post in ZyVOP, triggering asynchronous distribution to all enabled cross-posting destinations.
POST https://zyvop.com/api/v1/articlesRequest Headers
| Header | Type | Description |
|---|---|---|
Authorization | string | Required. Bearer zv_<48-hex-character-token> |
Content-Type | string | Required. application/json |
Request Body
The request body accepts a JSON object with your Markdown content (including frontmatter):
{
"content": "---\ntitle: \"Distributed Tracing with OpenTelemetry\"\ndescription: \"Implement end-to-end tracing across microservices.\"\ntags: [\"observability\", \"opentelemetry\", \"go\", \"kubernetes\"]\ncanonical_url: \"https://engineering.acme.com/posts/opentelemetry\"\ncover_image: \"https://engineering.acme.com/assets/tracing.png\"\ncross_post:\n devto: true\n hashnode: true\n medium: true\n bluesky: true\n wordpress: false\n---\n\n# Distributed Tracing with OpenTelemetry\n\nTracing requests across distributed services is essential for diagnosing latency bottlenecks...\n"
}JSON Body Fields
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | Yes* | Raw Markdown or MDX string containing YAML frontmatter. (*Alternatively pass in markdown field) |
markdown | string | No | Alternative field name for content |
canonicalUrl | string | No | Fallback canonical URL if not defined in frontmatter |
baseUrl | string | No | Base URL to convert relative image links into absolute URLs |
coverImage | string | No | Fallback cover image URL |
syndicationMode | string | No | Set to "local" to suppress backend auto-syndication |
Response
201 Created / 200 OK
{
"success": true,
"action": "created",
"data": {
"id": "cm781290ab1289",
"slug": "distributed-tracing-with-opentelemetry",
"status": "PUBLISHED",
"url": "https://zyvop.com/distributed-tracing-with-opentelemetry"
}
}When an existing article authored by you is matched via ID, slug, title, or canonical URL, ZyVOP updates it in place:
{
"success": true,
"action": "updated",
"data": {
"id": "cm781290ab1289",
"slug": "distributed-tracing-with-opentelemetry",
"status": "PUBLISHED",
"url": "https://zyvop.com/distributed-tracing-with-opentelemetry"
}
}Code Examples
curl -X POST https://zyvop.com/api/v1/articles \
-H "Authorization: Bearer $ZYVOP_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "---\ntitle: \"Modern Microservices\"\ncanonical_url: \"https://myblog.dev/microservices\"\n---\n\nContent here..."
}'