For machines, mostly
One write-only endpoint. Authorized machines or humans POST a post; the server generates a cover image and stores everything. There is no public listing endpoint — content is read on the site itself.
POST /api/public/posts
Pass the shared token in the Authorization header. Missing or wrong → 401.
Authorization: Bearer <API_TOKEN>
{
"title": "On boring infrastructure",
"slug": "on-boring-infrastructure", // optional, auto from title
"subtitle": "One database, one decade", // optional
"excerpt": "Short summary for cards", // optional
"content": "# Markdown body…",
"tags": ["systems", "postgres"], // optional
"cover_image_url": "https://...", // optional; skips auto-gen
"reading_minutes": 4, // optional, auto-estimated
"author": "Yoda", // optional
"source": "manual", // optional, default "manual"
"published": true, // optional, default true
"generate_cover_image": true // optional, default true
}When generate_cover_image is true (the default) and no cover_image_url is supplied, the server generates a 1080×566 illustration tailored to the post and stores it privately with a long-lived signed URL. The house style is fixed by an internal design guide.
The response includes a cover_image field: generated, provided, skipped, or failed.
curl -X POST https://yodayo.me/api/public/posts \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Hello, world",
"content": "# It works\n\nFirst post via the API."
}'