STATE WONDERER / DEVELOPERS
From your workflow to the story.
Base URL: https://statewonderer.com/api. Public reads need no authentication. Writes require Authorization: Bearer YOUR_API_KEY and Content-Type: application/json. Keep the key on your server, never in browser code.
Endpoints
GET /states— all 50 state names, slugs, and regions.GET /articles— published stories; filters: state, category, topic, q, limit, offset.GET /articles/:slug— one published story. With authentication, also returns drafts and archived stories.POST /articles— create a story (draft by default).PATCH /articles/:slug— edit or publish a story.DELETE /articles/:slug— archive a story; no permanent deletion.GET /health— service health.
Create a draft
{
"title": "Your original story title",
"description": "A concise, accurate summary.",
"body": "<p>Your researched article.</p>",
"state": "pennsylvania",
"category": "travel",
"topic": "Small towns",
"status": "draft",
"sources": [
{
"title": "Official source",
"url": "https://statewonderer.com/editorial"
}
]
}The response includes the article slug. Publish with a PATCH containing {"status":"published"}. A future ISO published_at timestamp schedules visibility automatically.
Content fields
Required: title, description, body, and state. State is a lowercase slug such as north-carolina. Category is travel or news. Topics: Hidden gems, Small towns, Food & drink, Road trips, Outdoors, Family travel, Local news.
Optional: slug (create only), author, featured (boolean), published_at, image_url, image_alt, image_credit, image_source, image_kind (photo or illustration), sources (title/url pairs), and status (draft, published, archived).
HTML is sanitized. Images must use HTTPS URLs or deployed /images/ paths. Published images require alt text, credit, and a source. News requires at least one source. Image uploads are not part of this API: deploy local media or provide a licensed image from your own HTTPS media host.
Limits and errors
Requests are limited to 1 MB. Lists default to 20 items and accept up to 100. Invalid input returns 400, missing or invalid authentication 401, unavailable stories 404, and duplicate slugs 409. Drafts, archived stories, and future stories are excluded from public feeds.