ZYVOPDOCS
MULTI-PLATFORM SYNC
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/articles

Request Headers

HeaderTypeDescription
AuthorizationstringRequired. Bearer zv_<48-hex-character-token>
Content-TypestringRequired. application/json

Request Body

The request body accepts a JSON object with your Markdown content (including frontmatter):

Request Payload
{
  "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

ParameterTypeRequiredDescription
contentstringYes*Raw Markdown or MDX string containing YAML frontmatter. (*Alternatively pass in markdown field)
markdownstringNoAlternative field name for content
canonicalUrlstringNoFallback canonical URL if not defined in frontmatter
baseUrlstringNoBase URL to convert relative image links into absolute URLs
coverImagestringNoFallback cover image URL
syndicationModestringNoSet 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..."
  }'

On this page