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 for $0

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