DEV Community
DEVELOPER · DEVELOPER
Articles, comments, reading list, and follows under that person’s own key.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
devto_delete_api_badge_achievements_by_idWRITERevoke a badge award by deleting the badge achievement. Requires administrator privileges. via DELETE /api/badge_achievements/{id}
devto_delete_api_badges_by_idWRITEDelete a badge configuration from the system by ID. Requires administrator privileges. via DELETE /api/badges/{id}
devto_delete_api_events_by_idWRITEDelete an event. Requires administrator privileges. via DELETE /api/events/{id}
devto_delete_api_organizations_by_idWRITEThis endpoint allows the client to delete a single organization, specified by id via DELETE /api/organizations/{id}
devto_delete_api_pages_by_idWRITEDelete a custom page from the system by ID. Requires administrative privileges. via DELETE /api/pages/{id}
devto_delete_api_segments_by_idWRITEDelete an audience segment specified by ID. Constraints: - Audience segments cannot be deleted if they are currently assigned to any active or pending Billboards. via DELETE /api/segments/{id}
devto_delete_api_surveys_by_id_or_slugWRITEDelete an existing survey. Requires Administrator privileges. via DELETE /api/surveys/{id_or_slug}
devto_delete_api_users_by_id_limitedWRITERemove the limited role, restoring the user to general privileges. Requires admin or moderator role. via DELETE /api/users/{id}/limited
devto_delete_api_users_by_id_spamWRITEUnflag a user as spammer, restoring general permissions. Requires admin or moderator role. via DELETE /api/users/{id}/spam
devto_delete_api_users_by_id_trustedWRITERevoke the trusted role, returning the user to general status. Requires admin or moderator role. via DELETE /api/users/{id}/trusted
devto_get_api_agent_sessionsREADRetrieve a list of the authenticated user's agent sessions. Agent Sessions Overview: - Agent sessions represent coding conversation transcripts uploaded from CLI tools (like Claude Code). - Used by the developer portal to render interactive walkthroughs or session summaries. - Requires authentication. via GET /api/agent_sessions
devto_get_api_agent_sessions_by_idREADRetrieve details for a single agent session by unique slug or ID. Integration Tip: - Returns the complete session structure including parsed message logs, token counts, slices, and tool execution metadata. via GET /api/agent_sessions/{id}
devto_get_api_agent_sessions_by_id_raw_urlREADRetrieve a temporary presigned GET URL to download the original raw transcript file from S3. via GET /api/agent_sessions/{id}/raw_url
devto_get_api_analytics_dashboardREADRetrieve a complete bundled metrics package (totals, history, top posts) for rendering dashboard landing pages. via GET /api/analytics/dashboard
devto_get_api_analytics_follower_engagementREADRetrieve stats detailing new follower growth and engagement over time. via GET /api/analytics/follower_engagement
devto_get_api_analytics_heatmapREADRetrieve user activity heatmap metrics (commits, posts, reactions) grouped by weekdays and hours. via GET /api/analytics/heatmap
devto_get_api_analytics_historicalREADRetrieve historical analytics data graphed over a time range. Time Range Formats: - start: Start date (e.g. 2024-01-01). Required. - end: End date (e.g. 2024-01-31). Defaults to current date if omitted. via GET /api/analytics/historical
devto_get_api_analytics_past_dayREADRetrieve real-time hourly analytics statistics for the last 24 hours. Used for live graphs. via GET /api/analytics/past_day
devto_get_api_analytics_referrersREADRetrieve traffic referring domains and URL source tracking metrics for articles. via GET /api/analytics/referrers
devto_get_api_analytics_top_contributorsREADRetrieve top organization contributors ordered by article engagement scores. via GET /api/analytics/top_contributors
devto_get_api_analytics_totalsREADRetrieve aggregated lifetime stats (views, reactions, comments) for articles. Scope Control: - Specify article_id to query a single post's metrics. - Specify organization_id to retrieve metrics across all articles owned by the target organization. via GET /api/analytics/totals
devto_get_api_articlesREADThis endpoint allows the client to retrieve a list of articles. "Articles" are all the posts that users create on DEV/Forem that typically show up in the feed. They can be a blog post, a discussion question, a help thread etc. but are referred to as articles within the code. By default it will return featured, published articles ordered by descending popularity. It supports pagination, each page will contain 30 articles by default. Query Parameter Usage Tips: - Filtering by Tags: - Use tag to filter articles containing a single exact tag (e.g. tag=discuss). - Use tags to retrieve articles containing *any* of the comma-separated list of tags (e.g. tags=javascript,css). - Use tags_exclude to filter out articles containing any of the comma-separated list of tags (e.g. tags_exclude=node,java). - Filtering by User / Organization: - Use username to retrieve articles belonging to a specific User or Organization. Articles are returned in reverse chronological publication order. - State Options: - Use state=fresh to fetch fresh articles. - Use state=rising to fetch rising/trending articles. - Combine state=all with username to fetch up to 1000 articles (both published and unpublished) from that user/organization in a single page. - Top / Popularity: - Use top=N to return the most popular articles published in the last N days (e.g. top=7 for top articles of the week, top=30 for top of the month). This parameter can be combined with tag to find top articles in a specific niche. - Collections: - Use collection_id to retrieve articles belonging to a specific collection/series, sorted chronologically. via GET /api/articles
devto_get_api_articles_by_idREADThis endpoint allows the client to retrieve a single published article given its unique numerical id. Integration Tip: - Returns the complete serialized article object including its HTML/markdown representation, tags, and author profile details. - To retrieve an article using its URL path structure instead of its numeric ID, use the /api/articles/{username}/{slug} endpoint. via GET /api/articles/{id}
devto_get_api_articles_by_username_by_slugREADThis endpoint allows the client to retrieve a single published article given its username and slug (the URL-friendly path identifier). Usage Tip: - Handy for resolving absolute Forem/DEV article URLs (e.g., https://dev.to/username/slug) into their corresponding API data models. via GET /api/articles/{username}/{slug}
devto_get_api_articles_latestREADThis endpoint allows the client to retrieve a list of articles ordered strictly by descending publication date. Usage Tips: - Bypasses all Forem/DEV feed personalization and popularity algorithms. - Ideal for building RSS feeds, chronological timelines, or "latest posts" widgets. - Supports standard page and per_page query parameters. via GET /api/articles/latest
devto_get_api_articles_meREADThis endpoint allows the client to retrieve a list of published articles on behalf of an authenticated user. "Articles" are all the posts that users create on DEV that typically show up in the feed. They can be a blog post, a discussion question, a help thread etc. but is referred to as article within the code. Published articles will be in reverse chronological publication order. It will return published articles with pagination. By default a page will contain 30 articles. via GET /api/articles/me
devto_get_api_articles_me_allREADThis endpoint allows the client to retrieve a list of all articles on behalf of an authenticated user. "Articles" are all the posts that users create on DEV that typically show up in the feed. They can be a blog post, a discussion question, a help thread etc. but is referred to as article within the code. It will return both published and unpublished articles with pagination. Unpublished articles will be at the top of the list in reverse chronological creation order. Published articles will follow in reverse chronological publication order. By default a page will contain 30 articles. via GET /api/articles/me/all
devto_get_api_articles_me_publishedREADThis endpoint allows the client to retrieve a list of published articles on behalf of an authenticated user. "Articles" are all the posts that users create on DEV that typically show up in the feed. They can be a blog post, a discussion question, a help thread etc. but is referred to as article within the code. Published articles will be in reverse chronological publication order. It will return published articles with pagination. By default a page will contain 30 articles. via GET /api/articles/me/published
devto_get_api_articles_me_unpublishedREADThis endpoint allows the client to retrieve a list of unpublished articles on behalf of an authenticated user. "Articles" are all the posts that users create on DEV that typically show up in the feed. They can be a blog post, a discussion question, a help thread etc. but is referred to as article within the code. Unpublished articles will be in reverse chronological creation order. It will return unpublished articles with pagination. By default a page will contain 30 articles. via GET /api/articles/me/unpublished
devto_get_api_articles_searchREADThis endpoint allows the client to search for articles. Search Guidance: - q: The search query term. Matches against article titles, tags, and body content. - top: Restricts search results to articles published within the last N days. - page & per_page: Standard pagination support. Use this to display results sequentially on a search results page. via GET /api/articles/search
devto_get_api_articles_semantic_searchREADAllows authenticated clients to search articles using Forem's semantic embeddings database. via GET /api/articles/semantic_search
devto_get_api_badge_achievementsREADRetrieve a list of all badge achievements (awarded badges) in the system. Requires administrator privileges. via GET /api/badge_achievements
devto_get_api_badge_achievements_by_idREADRetrieve details of a specific badge award/achievement by ID. via GET /api/badge_achievements/{id}
devto_get_api_badgesREADRetrieve a list of all badges available on the platform. Badges Overview: - Badges recognize achievements (e.g., "Top Writer", "Beloved Community Member", or anniversary milestones). - Publicly visible on user profiles. via GET /api/badges
devto_get_api_badges_by_idREADRetrieve details of a single badge by unique numeric ID. via GET /api/badges/{id}
devto_get_api_billboardsREADRetrieve a list of all billboards configured in the system. ### Billboards Overview: - Billboards are custom promotional ads, notification banners, or call-to-actions shown on the Forem website. - Requires administrative privileges. - Returned objects include layout code, scheduling parameters, geo-targeting configurations, and custom target audience segment associations. via GET /api/billboards
devto_get_api_billboards_by_idREADRetrieve full configurations of a single billboard by ID. Requires admin credentials. via GET /api/billboards/{id}
devto_get_api_commentsREADThis endpoint allows the client to retrieve all comments belonging to an article or podcast episode as threaded conversations. Threaded Structure & Pagination Tips: - Threaded Format: Comments are returned as a tree structure (nested arrays of replies). Each top-level comment contains its nested child comments recursively. - Query Constraints: You must provide either a_id (Article ID) OR p_id (Podcast Episode ID) to fetch comments. Specifying both is not supported. - Pagination: When paginating, the page parameter filters the *top-level* comments only. All replies to those top-level comments are returned nested inline, regardless of page index. - If the page parameter is omitted, the response returns the full comment tree in a single payload. via GET /api/comments
devto_get_api_comments_by_idREADThis endpoint allows the client to retrieve a specific comment and all of its nested descendant replies. Integration Tip: - Handy for linking directly to a deep comment thread or loading individual comment replies on demand. via GET /api/comments/{id}
devto_get_api_conceptsREADRetrieve all accessible concepts in the system. Concepts Overview: - Concepts are semantic tags generated automatically by analyzing article text using ML embeddings (gemini-embedding-2), rather than explicit user tags. - Primarily used for advanced semantic categorization, automated feeds, and interest mapping. via GET /api/concepts
devto_get_api_concepts_by_idREADRetrieve details, settings, and popularity metrics of a single concept by ID. Integration Tip: - Includes the semantic description, similarity thresholds, parent concept mappings, and scores. via GET /api/concepts/{id}
devto_get_api_concepts_by_id_articlesREADRetrieve articles classified under this concept. Parameter Guidelines: - sort: Set to score to sort articles by article popularity score descending. If omitted or set to any other value, sorting defaults to cosine similarity (closest first) secondary sorted by article score. via GET /api/concepts/{id}/articles
devto_get_api_concepts_searchREADAllows authenticated clients to search concepts using Forem's semantic embeddings database. via GET /api/concepts/search
devto_get_api_eventsREADRetrieve a list of events on the platform. Query Parameters: - type_of: Filter events by their type (live_stream, takeover, other, challenge). via GET /api/events
devto_get_api_events_by_idREADRetrieve a single event by ID. via GET /api/events/{id}
devto_get_api_followers_usersREADThis endpoint allows the client to retrieve a list of the followers they have. ### Integration & Pagination Guidance: - "Followers" are other users registered on the platform who follow the authenticated user. - Supports pagination, defaulting to 80 followers per page. - The sort query parameter determines the sorting order based on when the follow relationship was established. via GET /api/followers/users
devto_get_api_follows_tagsREADRetrieve the list of tags followed by the authenticated user. ### Integration & Personalization Guidance: - Requires authentication. - Returns tags in ascending/popularity order based on user interactions. - Useful for customizing the home feed interface, constructing personalized sidebar navigation, or displaying a user's customized topic preferences in a dashboard. via GET /api/follows/tags
devto_get_api_health_checks_appREADBasic application liveness check. Usage Guidance: - Verifies that the Rails application process is running and responding to requests. - Does not check database or cache connectivity. - Typically used by load balancers, container orchestrators (like Kubernetes), or uptime checkers to verify container health. Needs the Forem instance's own health-check token, which is a server configuration value (HEALTH_CHECK_TOKEN) rather than anything a DEV account can mint: measured 2026-09-16, dev.to answers 401 to this call with a valid DEV API key and no token, although the contract marks the header optional. Pass it as health_check_token if you operate the instance; Agentic Fabriq never stores it and sends it only on this call. via GET /api/health_checks/app
devto_get_api_health_checks_cacheREADCache connection health check. Usage Guidance: - Verifies that the application can successfully ping the Redis cache instance. - Used to monitor cache and background worker queue connection health. Needs the Forem instance's own health-check token, which is a server configuration value (HEALTH_CHECK_TOKEN) rather than anything a DEV account can mint: measured 2026-09-16, dev.to answers 401 to this call with a valid DEV API key and no token, although the contract marks the header optional. Pass it as health_check_token if you operate the instance; Agentic Fabriq never stores it and sends it only on this call. via GET /api/health_checks/cache
devto_get_api_health_checks_databaseREADDatabase connection health check. Usage Guidance: - Verifies that the application can successfully query the primary PostgreSQL database. - Used to monitor database pool status and connection health. Needs the Forem instance's own health-check token, which is a server configuration value (HEALTH_CHECK_TOKEN) rather than anything a DEV account can mint: measured 2026-09-16, dev.to answers 401 to this call with a valid DEV API key and no token, although the contract marks the header optional. Pass it as health_check_token if you operate the instance; Agentic Fabriq never stores it and sends it only on this call. via GET /api/health_checks/database
devto_get_api_instanceREADRetrieve configuration details for the current Forem instance. Instance Metadata: - Bypasses authentication. - Returns public Forem version, branding parameters, community guidelines references, and supported features configurations. via GET /api/instance
devto_get_api_organizationsREADThis endpoint allows the client to retrieve a list of Dev organizations. It supports pagination, each page will contain 10 tags by default. via GET /api/organizations
devto_get_api_organizations_by_idREADThis endpoint allows the client to retrieve a single organization by their id via GET /api/organizations/{id}
devto_get_api_organizations_by_organization_id_or_username_articlesREADRetrieve a list of articles published by the organization. Path Parameter Options: - organization_id_or_username: Supports either the organization's unique numerical ID OR its string username (slug). - Returns articles in reverse chronological publication order. - Ideal for populating an organization's custom blog feed or publication listing. via GET /api/organizations/{organization_id_or_username}/articles
devto_get_api_organizations_by_organization_id_or_username_usersREADRetrieve a list of public user profiles associated with the organization. Path Parameter Options: - organization_id_or_username: Supports either the organization's unique numerical ID OR its string username (slug). - Ideal for displaying team member directory lists on organization/brand pages. via GET /api/organizations/{organization_id_or_username}/users
devto_get_api_organizations_by_usernameREADRetrieve public profile information for a single organization by its username. Integration Tip: - Bypasses authentication. - Returns details like Tech Stack, Tagline, Story, website URLs, and joined date. via GET /api/organizations/{username}
devto_get_api_pagesREADRetrieve details for all Page objects in the system. ### Pages Overview: - Pages are custom static or dynamic views hosted on the Forem instance. - Publicly visible unless restricted. - Helpful for building custom menus, rendering site policies, or embedding custom forms. via GET /api/pages
devto_get_api_pages_by_idREADRetrieve details for a single Page object specified by ID. via GET /api/pages/{id}
devto_get_api_podcast_episodesREADRetrieve a list of podcast episodes published on the platform. ### Integration Guidance: - Bypasses authentication (can be accessed publicly). - Only returns active episodes belonging to published/reachable podcasts. - Episodes are returned in reverse chronological order based on their publication date. - The username query parameter is the unique slug of the podcast channel (e.g. codenewbie). It supports pagination, each page will contain 30 episodes by default. via GET /api/podcast_episodes
devto_get_api_profile_images_by_usernameREADRetrieve the profile image URL and configuration for a user or organization by username. ### Integration Details: - Bypasses authentication. - Convenient for quickly displaying avatars/icons in comments lists, headers, or sidebar elements without requesting the full user profile model. via GET /api/profile_images/{username}
devto_get_api_readinglistREADRetrieve the list of articles saved to the authenticated user's reading list. ### Integration Guidance: - Requires authentication. - Under the hood, this endpoint retrieves articles that the user has reacted to with the "save" reaction category. - Supports pagination, defaulting to 30 articles per page. - Returned objects conform to the standard ArticleIndex schema. via GET /api/readinglist
devto_get_api_recommended_articles_listsREADRetrieve a list of all recommended articles lists configured in the system. Overview: - Recommended Articles Lists are curated selections of articles pinned or recommended in layout regions (e.g. main_feed or sidebar). - Supports search by list name and standard query pagination. - Requires Administrator privileges. via GET /api/recommended_articles_lists
devto_get_api_recommended_articles_lists_by_idREADRetrieve full details and nested article lists for a specific recommended articles list by ID. Requires Admin credentials. via GET /api/recommended_articles_lists/{id}
devto_get_api_segmentsREADRetrieve a list of manually managed audience segments. Audience Segments Overview: - Audience Segments are cohorts of users grouped together for targeting announcements, features, or promotional campaign banners (Billboards). - This endpoint lists manual cohorts created and maintained by site administrators. - Requires administrator privileges. The endpoint supports pagination, and each page will contain 30 segments by default. via GET /api/segments
devto_get_api_segments_by_idREADRetrieve details of a single manually-managed audience segment specified by ID. Integration Tip: - Includes segment type (manual), configuration, and metadata. - Automatic/system-generated segments cannot be queried or updated via this endpoint. via GET /api/segments/{id}
devto_get_api_segments_by_id_usersREADRetrieve a paginated list of users enrolled in the specified manual audience segment. Pagination Guidance: - Supports standard page and per_page controls, returning 30 users per page by default. via GET /api/segments/{id}/users
devto_get_api_subforemsREADRetrieve a list of all discoverable subforems/communities. Subforems Overview: - Subforems represent distinct sub-communities or specialized sections hosted within the Forem instance. - Bypasses authentication (can be accessed publicly). - Returns list of names, slugs, color schemes, and target interests. via GET /api/subforems
devto_get_api_surveysREADRetrieve a list of surveys configured on the platform. Surveys Overview: - Surveys are admin-defined questionnaires consisting of multiple choice or text polls. - Requires Administrator authorization. - Supports standard pagination controls and active status filtering. via GET /api/surveys
devto_get_api_surveys_by_id_or_slugREADRetrieve a single survey (by ID or slug) with its nested structure. Nested Format Details: - Returns the target Survey object including all associated Polls, multiple choice options, and configuration states. - Requires Administrator authorization. via GET /api/surveys/{id_or_slug}
devto_get_api_surveys_by_id_or_slug_poll_text_responsesREADRetrieve free-text poll responses for a specific survey. Integration & Cursor Tip: - Fetches written user answers for text-input questions. - Uses cursor-based pagination (after query param) to stream responses. - Requires Administrator authorization. via GET /api/surveys/{id_or_slug}/poll_text_responses
devto_get_api_surveys_by_id_or_slug_poll_votesREADRetrieve multiple-choice poll votes for a specific survey. Cursor Pagination Tip: - Uses cursor-based pagination to safely stream high volumes of voting records. - Specify the after query parameter with the last retrieved record ID to get the next page. - Requires Administrator authorization. via GET /api/surveys/{id_or_slug}/poll_votes
devto_get_api_tagsREADRetrieve a list of tags used on the platform, ordered by popularity. Integration Tips: - Bypasses authentication (can be accessed publicly). - Ordered by overall popularity/usage metrics on the platform. - Useful for autocomplete inputs in article editors, tag selection screens in settings, or rendering global navigation/explore lists. It supports pagination, each page will contain 10 tags by default. via GET /api/tags
devto_get_api_trendsREADRetrieve a list of active trends. Trends Overview & Score Calculation: - Trends represent hot topics or semantic themes currently being heavily discussed in the community. - They are computed by clustering semantic concept embeddings of recently published articles. - The score reflects the volume and engagement (views, comments, reactions) of articles associated with the trend. - Returned trends are ordered by score and recency. - Publicly accessible without authentication. It supports pagination, each page will contain 10 trends by default. via GET /api/trends
devto_get_api_trends_by_id_or_slugREADRetrieve details of a single trend using either its numeric ID or unique slug. Usage Guidance: - Useful for loading details of a trending topic (description, score, and slug details) to render header sections on trending tag or topic pages. via GET /api/trends/{id_or_slug}
devto_get_api_trends_by_trend_id_or_slug_articlesREADRetrieve a list of published articles belonging to a trend. Article Ordering & Proximity: - Articles are mapped to trends based on their embedding distance to the trend's centroid. - Returned articles are ordered by proximity/similarity (distance) first (most relevant posts first), and then by overall article engagement score. - Supports pagination, each page will contain 10 articles by default. via GET /api/trends/{trend_id_or_slug}/articles
devto_get_api_users_by_idREADThis endpoint allows the client to retrieve a single user, either by id or by the user's username. Path Parameter Options: - id: Can be either the user's unique numerical ID (e.g. 123) OR the user's string username (e.g. ben). - Note that the returned user object schema (ExtendedUser) includes extended profile statistics and social link details. via GET /api/users/{id}
devto_get_api_users_meREADReturned only for delegated Bearer tokens, on any Bearer-capable endpoint, when the configured JWKS endpoint cannot be reached or returns an unusable key set and no cached keys remain. Invalid tokens are 401, never 503. via GET /api/users/me
devto_get_api_users_searchREADSearch for a user by email address. Permissions & Context: - Requires administrative privileges (api-key of an administrator). - Used to verify account existence or map email addresses to platform usernames. via GET /api/users/search
devto_get_api_v1_openapi_jsonREADRetrieve the machine-readable OpenAPI contract for this Forem instance. Automated clients should use this document instead of inferring endpoint schemas from responses or errors. via GET /api/v1/openapi.json
devto_get_api_videosREADRetrieve a list of articles that contain uploaded videos. Videos Overview: - Bypasses authentication (can be accessed publicly). - Returns articles that are published and include a video asset. - Articles are ordered by descending popularity (views, watch time, and reactions). - By default, returns 24 video articles per page. via GET /api/videos
devto_patch_api_badges_by_idWRITEUpdate badge details (title, description, credits awarded, etc.) by unique ID. Requires administrator privileges. via PATCH /api/badges/{id}
devto_patch_api_concepts_by_idWRITEUpdate concept metadata such as description, similarity threshold, and custom score. Parameter Guidelines: - similarity_threshold: Cosine distance threshold (range 0.0 to 1.0) determining how closely an article's embedding must align with the concept's anchor embedding to be classified under it. via PATCH /api/concepts/{id}
devto_patch_api_events_by_idWRITEUpdate an existing event. Requires administrator privileges. via PATCH /api/events/{id}
devto_patch_api_feedback_messages_by_idWRITEUpdate the status of a user feedback message or report. Feedback Messages Overview: - Feedback messages are submitted by users via support forms or content abuse reporting modals. - Requires Administrator privileges. - Used to track moderation/resolution workflows (e.g. marking a spam report as Resolved, Spam, or Ignored). via PATCH /api/feedback_messages/{id}
devto_patch_api_recommended_articles_lists_by_idWRITEUpdate an existing recommended articles list by ID. Requires Admin credentials. via PATCH /api/recommended_articles_lists/{id}
devto_patch_api_surveys_by_id_or_slugWRITEUpdate an existing survey, including its polls and options. Requires Administrator privileges. via PATCH /api/surveys/{id_or_slug}
devto_post_api_agent_sessionsWRITEUpload a new agent session. S3 Upload Workflow: 1. Call the S3 presign endpoint to obtain a direct upload URL for the raw session transcript file. 2. Upload the raw transcript to S3. 3. Send a POST request to this endpoint with the S3 key (s3_key) and the pre-parsed, curated JSON payload (curated_data). via POST /api/agent_sessions
devto_post_api_agent_sessions_presignWRITEGenerate an S3 presigned PUT URL and object key for uploading raw session transcripts directly to S3. via POST /api/agent_sessions/presign
devto_post_api_articlesWRITEThis endpoint allows the client to create a new article. "Articles" are all the posts that users create on DEV/Forem that typically show up in the feed. They can be a blog post, a discussion question, a help thread etc. but are referred to as articles within the code. Body Parameter Tips: - title: A compelling and descriptive title for the article. - body_markdown: The main text of the article in Markdown format. You can use standard Markdown as well as Forem-specific Liquid tags (e.g., {% embed ... %}). You can also include YAML front matter at the very beginning of the markdown to specify metadata such as tags, series, and cover image. - published: Set to true to immediately publish the article and make it visible in feeds. Set to false (default) to save it as a draft. - tags: An array of up to 4 tag strings, e.g. ['ruby', 'rails']. Tags help categorize your post and improve discoverability. - series: Group articles together by specifying a series name. If the series does not exist, it will be created. - main_image: Absolute URL of the cover image for the article. - canonical_url: If this post was originally published elsewhere, specify the canonical URL to maintain SEO integrity. - description: A short summary of the article used for previews and SEO meta description. - ai_disclosure_level: AI tooling usage disclosure (not_disclosed, no_ai, some_ai, fully_autonomous). via POST /api/articles
devto_post_api_badge_achievementsWRITEAward a badge to a user. Requires administrator privileges. Integration Tips: - user_id: The numeric ID of the user receiving the badge. - badge_id: The numeric ID of the badge being awarded. - rewarding_context_message_markdown: Optional personalized message shown in the notification or profile feed to explain why the user was awarded the badge. - metadata: Optional key/value data stored with the achievement for context. - If the badge cannot be awarded more than once and the user already holds it, the request is rejected with 409 Conflict, and the conflicting achievement_id is included in the response. A 422 is returned for other request errors. via POST /api/badge_achievements
devto_post_api_badgesWRITECreate a new badge. Requires administrator privileges. Body Parameter Guidelines: - title: Unique name for the badge. - description: Text explanation of the achievement. - remote_badge_image_url: Public URL to an image asset (PNG, GIF, or SVG) representing the badge icon. - allow_multiple_awards: Set to true if a user can earn the same badge multiple times (e.g. weekly challenges). via POST /api/badges
devto_post_api_billboardsWRITECreate a new billboard. ### Parameter Options & Tips: - body_markdown: The HTML/Markdown advertisement copy. - placement_area: Target region in layouts (e.g. post_comments below comments, sidebar in sidebars, home_feed between posts). - display_to: Cohort target rules (e.g. all for everyone, logged_in, guests, or customized segments). - target_geolocations: Comma-separated ISO codes for country/region targeting. - approved & published: Set to true to activate billboard rotation instantly. via POST /api/billboards
devto_post_api_eventsWRITECreate a new event. Requires administrator privileges. via POST /api/events
devto_post_api_followsWRITEFollow users or organizations in bulk on behalf of the authenticated user. Bulk Update Behavior: - Accepts arrays of user_ids and organization_ids in the request body. - Performs follow actions for all provided identifiers. - Highly efficient for onboarding flows or importing social connections. via POST /api/follows
devto_post_api_organizationsWRITEThis endpoint allows the client to create an organization with the provided parameters. It requires a token from a user with admin privileges. via POST /api/organizations
devto_post_api_pagesWRITECreate a new custom page. Requires administrative privileges. ### Body Parameter Guidelines: - title: Heading displayed at the top of the page. - slug: URL path identifier. Must be unique and URL-safe. - body_markdown: Content written in Markdown format. - body_json: Optional JSON payload for API-consumed/structured data pages. - is_top_level_path: Set to true to serve the page directly at the root (e.g. /{slug}) instead of under the default namespace /page/{slug}. Use with caution to avoid namespace collisions with core Forem paths. - template: Layout styling options (contained or custom layouts). via POST /api/pages
devto_post_api_reactionsWRITECreate a reaction on a target resource (Article, Comment, or User) on behalf of the authenticated user. ### Usage Details: - Unlike the toggle endpoint, this endpoint is idempotent: multiple requests to react with the same category to the same target will return the existing reaction without deleting it. via POST /api/reactions
devto_post_api_reactions_toggleWRITEToggle a reaction on a target resource (Article, Comment, or User) on behalf of the authenticated user. ### Toggle Logic: - First Request: Creates a new reaction of the specified category on the reactable target. - Second Request (with same parameters): Deletes the existing reaction. - Particularly useful for simple, interactive UI buttons like "Like", "Unicorn", or "Save" where clicking toggles the active state. via POST /api/reactions/toggle
devto_post_api_recommended_articles_listsWRITECreate a new recommended articles list or update an existing one. Requires Administrator privileges. Body Parameter Guidelines: - name: Curated list title or label (e.g. "Editor's Choice"). - placement_area: Target UI layout region (e.g. main_feed, sidebar_top, onboarding). - expires_at: ISO 8601 timestamp after which the list recommendation automatically expires. - user_id: Owner/curator numeric user ID. - article_ids: Staged array of numeric article IDs to include in the recommendation sequence. via POST /api/recommended_articles_lists
devto_post_api_segmentsWRITECreate a new manually managed audience segment. Usage Guidance: - Used by administrators to define a new target cohort group. - Users can be added or removed in bulk later via segment member endpoints. via POST /api/segments
devto_post_api_surveysWRITECreate a new survey with optional nested polls and poll options. Requires Administrator privileges. via POST /api/surveys
devto_put_api_articles_by_idWRITEThis endpoint allows the client to update an existing article by its unique numerical id. Authorization Constraints: - The API key provided must belong to the author of the article. - Supports updating individual fields such as title, body_markdown, published, tags, ai_disclosure_level, etc. - Setting published: false on an already published article will revert it to draft status. via PUT /api/articles/{id}
devto_put_api_articles_by_id_unpublishWRITEThis endpoint allows the client to unpublish an article. The user associated with the API key must have any 'admin' or 'moderator' role. The article will be unpublished and will no longer be visible to the public. It will remain in the database and will set back to draft status on the author's posts dashboard. Any notifications associated with the article will be deleted. Any comments on the article will remain. via PUT /api/articles/{id}/unpublish
devto_put_api_billboards_by_idWRITEUpdate an existing billboard's configurations. ### Integration Guidance: - Allows changing placement area, geolocations, target segments, or text copy. - Updating an active billboard takes effect instantly in the layout delivery cache. via PUT /api/billboards/{id}
devto_put_api_billboards_by_id_unpublishWRITERemove a billboard from active rotation by unpublishing it. ### Usage: - Instantly disables display across all pages while keeping the configuration stored in the database for later reactivations or historical reporting. via PUT /api/billboards/{id}/unpublish
devto_put_api_organizations_by_idWRITEThis endpoint allows the client to update an existing organization. via PUT /api/organizations/{id}
devto_put_api_pages_by_idWRITEUpdate an existing page's details by ID. Requires administrative privileges. via PUT /api/pages/{id}
devto_put_api_segments_by_id_add_usersWRITEAdd users in bulk to the specified manual audience segment. Bulk Update Behavior: - Accepts a JSON array of user_ids in the request body. - Returns a list of successes and failures. Successful additions include users already present in the segment. via PUT /api/segments/{id}/add_users
devto_put_api_segments_by_id_remove_usersWRITERemove users in bulk from the specified manual audience segment. Bulk Update Behavior: - Accepts a JSON array of user_ids in the request body. - Returns successes (users successfully removed) and failures (users who were not members of the segment). via PUT /api/segments/{id}/remove_users
devto_put_api_users_by_id_limitedWRITELimit a user's account permissions. Limited Details: - Requires admin or moderator privileges. - Assigns the limited role, which rate-limits notifications generated by their actions (such as publishing new posts or comments). - Does not restrict content creation or delete content. via PUT /api/users/{id}/limited
devto_put_api_users_by_id_spamWRITEFlag a user as spammer. Spam Role Details: - Requires admin or moderator privileges. - Stops the user from creating new posts or comments, acting as a shadowban or block on activity. - Existing content remains but is hidden from search/feeds. via PUT /api/users/{id}/spam
devto_put_api_users_by_id_suspendWRITESuspend a user's account. Suspension Details: - The user associated with the API key must have an admin or moderator role. - Assigns the suspended role to the user, preventing them from posting new content (articles or comments) while suspended. - Existing content is not deleted. - Suspended users are not notified in the UI; if you want them to know, you must notify them explicitly. via PUT /api/users/{id}/suspend
devto_put_api_users_by_id_trustedWRITEAssign the trusted role to a user. Trusted Role Details: - Requires admin or moderator privileges. - Trusted users gain privileges like casting flag votes on inappropriate content or participating in priority review queues. - Triggers a system notification and an email to the user. via PUT /api/users/{id}/trusted
devto_put_api_users_by_id_unpublishWRITEThis endpoint allows the client to unpublish all of the articles and comments created by a user. Administrative Action: - Requires the authenticated user to be an Administrator. - This is a destructive administrative action that immediately unpublishes all posts/comments from public feeds. - Ideal for handling spam accounts or cleanup operations. via PUT /api/users/{id}/unpublish
Often connected alongside
Put DEV Community behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.