Dev.to
OpenQuok CLI examples for Dev.to — markdown articles with title, tags, series, organization, and analytics.
Connect your agent today
Draft from chat, review in your calendar, and publish only what you approve.
Channel quick reference
| Property | Value |
|---|---|
| Provider identifier | devto |
| Max body length | 100,000 characters (-c markdown) |
| Required attachments | None — markdown body plus a title |
| Connect | Dashboard API key (not GET /public/social/devto) |
| Setup guide | Dev.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 Validation
Title must be at least 2 characters. At most 4 tags. Follow-up comments are not supported. Drafts and queued rows return empty analytics until the article is published. Run integrations:settings for output.rules and output.settings before batch scripts.