Chapter 08 · Publishing

Connect DEV Community or another Forem site

Generate an API key under Settings → Extensions, connect with the Forem URL, and see how Serpio sends Markdown, a cover image, a canonical URL, and up to four tags.

Updated Sep 19, 2026 · 5 min read

On this page

DEV Community runs on Forem, and so do other community sites built on the same software. Serpio's DEV / Forem connection works with any of them: you give it the site's URL and an API key for the author, and Serpio creates articles as that author, in Markdown.

Before you start

  • A paid Serpio plan.
  • An account on DEV or the Forem site, belonging to the person who should appear as the author. Articles are created by the API key's owner.
  • The site's public base URL. For DEV Community that is https://dev.to, which the form fills in for you.

Create the API key

  1. 1

    Open Extensions

    Sign in to DEV or your Forem site as the author. Open Settings → Extensions.

  2. 2

    Generate a key

    In the API keys section, enter Serpio as the description and generate a key. Copy it now; Forem shows the value once.

Connect in Serpio

  1. 1

    Open the card

    Under Connections, open DEV / Forem and press Connect.

  2. 2

    Enter the Forem URL

    The Forem URL field defaults to https://dev.to. For another Forem instance, replace it with that site's base URL, without a path.

  3. 3

    Paste the API key and test

    Paste the key into API key, leave Scheduled articles on Review before sending and When Serpio sends an article on Create a draft, and press Test & save. Serpio asks the site who the key belongs to and shows Connected as followed by that author's name. Nothing is created.

Serpio's DEV / Forem connection dialog with https://dev.to in the Forem URL field, an empty API key field, and Choose per article and Create a draft selected.
The form for DEV. There is no destination to choose; the URL and the key decide where articles go and who writes them.

How Serpio sends an article

Forem stores article bodies as Markdown, so Serpio converts its HTML body to Markdown and sends that. The delivery happens in two calls, and knowing that helps when you read a result.

  1. 1

    Create an unpublished article

    Serpio creates the article with the title, Markdown body, cover image, description, and canonical URL, always as unpublished. DEV's create endpoint handles tags inconsistently, so Serpio does not send them here.

  2. 2

    Update it with tags and the final state

    Serpio then updates that same article with up to four tags and sets it to published only if the connection is on Publish live. On Create a draft it stays unpublished.

If the second call fails, the article exists as an unpublished draft with no tags, and Serpio reports the failure. Check your DEV dashboard before retrying so you do not end up with two drafts.

Article contentIn DEV or Forem
TitleTitle
BodyMarkdown body
Hero imageCover image, by URL. Alt text is not sent; Forem has no field for it.
Meta description or summaryDescription
Canonical URLCanonical URL, only when the article explicitly has one. Otherwise DEV assigns its own.
KeywordsUp to four tags, normalized
Slug, SEO titleNot sent. Forem builds the URL from the title.

How tags are normalized

Forem tags are lowercase and alphanumeric, and DEV allows at most four per article. Serpio takes the article's keywords in order and, for each one, lowercases it, strips accents, removes spaces and punctuation, and cuts it to 30 characters. Duplicates are dropped, then the first four survivors are sent. "Content marketing" becomes contentmarketing; "SEO and GEO" becomes seoandgeo. If you want specific tags, edit them in the DEV editor before publishing.

Draft or live

Create a draft leaves the article unpublished. It appears in your DEV dashboard under drafts, visible only to you, and Serpio's result reads Draft saved. Publish live publishes it at the end of the second call, and the result reads Live. Live articles on DEV are public community content immediately, shown in feeds and indexed, so send a few drafts first and read them in DEV's editor. Switching the connection to live later does not publish drafts that already exist.

When something fails

  • If the key is rejected, the card changes to Reconnect. Generate a new key under Settings → Extensions, press Reconnect credentials, paste it, and press Test & reconnect. Settings are kept.
  • If DEV answers with a server error or times out, the result reads Check destination. Look in your DEV dashboard for an unpublished article with the same title. Only if it is absent, tick "I checked the destination and confirmed this article was not created" in the dialog and publish again.
  • If DEV asks Serpio to slow down, the result reads Retrying shortly and Serpio retries on its own.

See Publishing history and retries for how each state is handled and Troubleshooting connections for connection problems.

Common questions

  • Can I publish under an organization on DEV?

    Not from Serpio. Articles are created under the API key's personal account. Move the article to an organization in DEV's editor if you need to.

  • Why do my tags look different from my keywords?

    Forem only accepts lowercase alphanumeric tags, and DEV allows four. Serpio normalizes each keyword and keeps the first four unique results.

  • Does Serpio work with Forem sites other than DEV?

    Yes. Enter that site's base URL in the Forem URL field and use an API key from that site. The same two-step delivery applies.

Your next article starts here.

Turn a topic that is trending right now into your first article.

Write my first article

3 free articles a month. No credit card.