Skip to content

Dev.to

OpenQuok CLI examples for Dev.to — markdown articles with title, tags, series, organization, and analytics.

2 min read

Connect your agent today

Draft from chat, review in your calendar, and publish only what you approve.

Start your free trial

Channel quick reference

PropertyValue
Provider identifierdevto
Max body length100,000 characters (-c markdown)
Required attachmentsNone — markdown body plus a title
ConnectDashboard API key (not GET /public/social/devto)
Setup guideDev.to
DEVTO_ID=$(openquok integrations:list | jq -r '.[] | select(.identifier=="devto") | .id')

Connect the channel in the workspace first. The CLI cannot start a Dev.to OAuth URL.

Article with title and tags

The post body is markdown. Set title (min 2 characters) and up to 4 tags in settings:

openquok posts:create 
  -c "Technical writing cadence — queue this markdown article before it stalls in drafts." 
  -s "2026-01-01T12:00:00Z" 
  -i "<integration-id>" 
  --settings '{"title":"Keep technical posts shipping","tags":["webdev","productivity"]}'

Nested devto bucket

The backend accepts flat keys and a nested devto bucket (same shape as the web composer):

openquok posts:create 
  -c "Scheduled from the CLI." 
  -s "2026-01-01T12:00:00Z" 
  -i "<integration-id>" 
  --providerSettingsByIntegrationId '{"<integration-id>":{"devto":{"title":"Weekly changelog","tags":[{"value":"webdev","label":"webdev"},{"value":"opensource","label":"opensource"}]}}}'

Series

Pass a free-text series name. Dev.to creates the series if it does not already exist:

openquok posts:create 
  -c "Part of an ongoing shipping-notes series." 
  -s "2026-01-01T12:00:00Z" 
  -i "<integration-id>" 
  --settings '{"title":"Shipping notes — week 12","series":"Shipping notes","tags":["webdev"]}'

Canonical URL

When the long-form post already lives on your site, pass a canonical URL:

openquok posts:create 
  -c "This tutorial already lives on our docs site. Dev.to should point at the original." 
  -s "2026-01-01T12:00:00Z" 
  -i "<integration-id>" 
  --settings '{"title":"Syndicate this tutorial without losing the original URL","canonical":"https://example.com/blog/tutorial","tags":["webdev"]}'

Cover image and organization

Upload a cover (recommended 1000×420), then pass its storage path. Resolve an organization id with integrations:trigger organizations first:

test -f ./cover.webp && test -s ./cover.webp
COVER_PATH=$(openquok upload ./cover.webp | jq -r '.data.path // .data.filePath')
openquok integrations:trigger "<integration-id>" organizations
openquok posts:create 
  -c "Release notes for the latest workspace update." 
  -s "2026-01-01T12:00:00Z" 
  -i "<integration-id>" 
  --providerSettingsByIntegrationId "$(jq -nc --arg id "<integration-id>" --arg cover "$COVER_PATH" '{($id):{devto:{title:"Workspace update — what shipped this week",organization:12345,tags:[{value:"opensource",label:"opensource"}],mainImage:{path:$cover}}}}')"

Replace 12345 with an id from the organizations tool output.

List tags and organizations

openquok integrations:settings "$DEVTO_ID"
openquok integrations:trigger "$DEVTO_ID" tags
openquok integrations:trigger "$DEVTO_ID" organizations

Platform analytics

Account-wide page views, reactions, and comments over 7, 30, or 90 days:

openquok analytics:platform "$DEVTO_ID" -d 30

Post insights

Per-article metrics for a published Dev.to post (page views, reactions, comments):

POST_ID=$(openquok posts:list | jq -r '.items[] | select(.identifier=="devto") | .id' | head -1)
openquok analytics:post "$POST_ID" -d 7
Search documentation
Find a docs page
Discord Support