{"files":{"SKILL.md":"---\nname: forem-api-v1\ndescription: \"Forem API V1 API skill. Use when working with Forem API V1 for api. Covers 65 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Forem API V1\nAPI version: 1.0.0\n\n## Auth\nApiKey api-key in header\n\n## Base URL\nhttps://dev.to/api\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /api/agent_sessions -- list the authenticated user's agent sessions\n3. POST /api/agent_sessions -- create first agent_session\n\n## Endpoints\n65 endpoints across 1 group. See references/api-spec.lap for full details.\n\n### Api\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /api/agent_sessions | list the authenticated user's agent sessions |\n| POST | /api/agent_sessions | upload a new agent session |\n| GET | /api/agent_sessions/{id} | show details for an agent session |\n| POST | /api/articles | Publish article |\n| GET | /api/articles | Published articles |\n| GET | /api/articles/latest | Published articles sorted by published date |\n| GET | /api/articles/{id} | Published article by id |\n| PUT | /api/articles/{id} | Update an article by id |\n| GET | /api/articles/{username}/{slug} | Published article by path |\n| GET | /api/articles/me | User's articles |\n| GET | /api/articles/me/published | User's published articles |\n| GET | /api/articles/me/unpublished | User's unpublished articles |\n| GET | /api/articles/me/all | User's all articles |\n| PUT | /api/articles/{id}/unpublish | Unpublish an article |\n| GET | /api/segments | Manually managed audience segments |\n| POST | /api/segments | Create a manually managed audience segment |\n| GET | /api/segments/{id} | A manually managed audience segment |\n| DELETE | /api/segments/{id} | Delete a manually managed audience segment |\n| GET | /api/segments/{id}/users | Users in a manually managed audience segment |\n| PUT | /api/segments/{id}/add_users | Add users to a manually managed audience segment |\n| PUT | /api/segments/{id}/remove_users | Remove users from a manually managed audience segment |\n| GET | /api/billboards | Billboards |\n| POST | /api/billboards | Create a billboard |\n| GET | /api/billboards/{id} | A billboard (by id) |\n| PUT | /api/billboards/{id} | Update a billboard by ID |\n| PUT | /api/billboards/{id}/unpublish | Unpublish a billboard |\n| GET | /api/comments | Comments |\n| GET | /api/comments/{id} | Comment by id |\n| GET | /api/follows/tags | Followed Tags |\n| GET | /api/followers/users | Followers |\n| GET | /api/organizations/{username} | An organization (by username) |\n| GET | /api/organizations/{organization_id_or_username}/users | Organization's users |\n| GET | /api/organizations/{organization_id_or_username}/articles | Organization's Articles |\n| GET | /api/organizations | Organizations |\n| POST | /api/organizations | Create an Organization |\n| GET | /api/organizations/{id} | An organization (by id) |\n| PUT | /api/organizations/{id} | Update an organization by id |\n| DELETE | /api/organizations/{id} | Delete an Organization by id |\n| GET | /api/pages | show details for all pages |\n| POST | /api/pages | pages |\n| GET | /api/pages/{id} | show details for a page |\n| PUT | /api/pages/{id} | update details for a page |\n| DELETE | /api/pages/{id} | remove a page |\n| GET | /api/podcast_episodes | Podcast Episodes |\n| GET | /api/profile_images/{username} | A Users or organizations profile image |\n| POST | /api/reactions/toggle | toggle reaction |\n| POST | /api/reactions | create reaction |\n| GET | /api/readinglist | Readinglist |\n| GET | /api/surveys | List surveys |\n| GET | /api/surveys/{id_or_slug} | A survey with polls |\n| GET | /api/surveys/{id_or_slug}/poll_votes | Survey poll votes |\n| GET | /api/surveys/{id_or_slug}/poll_text_responses | Survey poll text responses |\n| GET | /api/tags | Tags |\n| PUT | /api/users/{id}/suspend | Suspend a User |\n| PUT | /api/users/{id}/limited | Add limited role for a User |\n| DELETE | /api/users/{id}/limited | Remove limited for a User |\n| PUT | /api/users/{id}/spam | Add spam role for a User |\n| DELETE | /api/users/{id}/spam | Remove spam role from a User |\n| PUT | /api/users/{id}/trusted | Add trusted role for a User |\n| DELETE | /api/users/{id}/trusted | Remove trusted role from a User |\n| GET | /api/users/me | The authenticated user |\n| GET | /api/users/{id} | A User |\n| PUT | /api/users/{id}/unpublish | Unpublish a User's Articles and Comments |\n| POST | /api/admin/users | Invite a User |\n| GET | /api/videos | Articles with a video |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all agent_sessions?\" -> GET /api/agent_sessions\n- \"Create a agent_session?\" -> POST /api/agent_sessions\n- \"Get agent_session details?\" -> GET /api/agent_sessions/{id}\n- \"Create a article?\" -> POST /api/articles\n- \"List all articles?\" -> GET /api/articles\n- \"List all latest?\" -> GET /api/articles/latest\n- \"Get article details?\" -> GET /api/articles/{id}\n- \"Update a article?\" -> PUT /api/articles/{id}\n- \"List all me?\" -> GET /api/articles/me\n- \"List all published?\" -> GET /api/articles/me/published\n- \"List all unpublished?\" -> GET /api/articles/me/unpublished\n- \"List all all?\" -> GET /api/articles/me/all\n- \"List all segments?\" -> GET /api/segments\n- \"Create a segment?\" -> POST /api/segments\n- \"Get segment details?\" -> GET /api/segments/{id}\n- \"Delete a segment?\" -> DELETE /api/segments/{id}\n- \"List all users?\" -> GET /api/segments/{id}/users\n- \"List all billboards?\" -> GET /api/billboards\n- \"Create a billboard?\" -> POST /api/billboards\n- \"Get billboard details?\" -> GET /api/billboards/{id}\n- \"Update a billboard?\" -> PUT /api/billboards/{id}\n- \"List all comments?\" -> GET /api/comments\n- \"Get comment details?\" -> GET /api/comments/{id}\n- \"List all tags?\" -> GET /api/follows/tags\n- \"Get organization details?\" -> GET /api/organizations/{username}\n- \"List all organizations?\" -> GET /api/organizations\n- \"Create a organization?\" -> POST /api/organizations\n- \"Update a organization?\" -> PUT /api/organizations/{id}\n- \"Delete a organization?\" -> DELETE /api/organizations/{id}\n- \"List all pages?\" -> GET /api/pages\n- \"Create a page?\" -> POST /api/pages\n- \"Get page details?\" -> GET /api/pages/{id}\n- \"Update a page?\" -> PUT /api/pages/{id}\n- \"Delete a page?\" -> DELETE /api/pages/{id}\n- \"List all podcast_episodes?\" -> GET /api/podcast_episodes\n- \"Get profile_image details?\" -> GET /api/profile_images/{username}\n- \"Create a toggle?\" -> POST /api/reactions/toggle\n- \"Create a reaction?\" -> POST /api/reactions\n- \"List all readinglist?\" -> GET /api/readinglist\n- \"List all surveys?\" -> GET /api/surveys\n- \"Get survey details?\" -> GET /api/surveys/{id_or_slug}\n- \"List all poll_votes?\" -> GET /api/surveys/{id_or_slug}/poll_votes\n- \"List all poll_text_responses?\" -> GET /api/surveys/{id_or_slug}/poll_text_responses\n- \"Get user details?\" -> GET /api/users/{id}\n- \"Create a user?\" -> POST /api/admin/users\n- \"List all videos?\" -> GET /api/videos\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Forem API V1\n@base https://dev.to/api\n@version 1.0.0\n@auth ApiKey api-key in header\n@endpoints 65\n@hint download_for_search\n@toc api(65)\n\n@endpoint GET /api/agent_sessions\n@desc list the authenticated user's agent sessions\n@returns(200) successful\n@errors {401: unauthorized}\n\n@endpoint POST /api/agent_sessions\n@desc upload a new agent session\n@required {curated_data: str # JSON string of curated session data with messages array and metadata.}\n@optional {title: str # Title for the session (auto-generated if omitted), s3_key: str # S3 object key from presign endpoint (optional)., tool_name: str(claude_code/codex/gemini_cli/github_copilot/pi) # Tool that produced the session (e.g. claude_code, codex).}\n@returns(201) {id: int(int64), slug: str, title: str, tool_name: str, total_messages: int(int32), published: bool, created_at: str(date-time), updated_at: str(date-time), url: str(url)} # created\n@errors {401: unauthorized, 422: unprocessable}\n\n@endpoint GET /api/agent_sessions/{id}\n@desc show details for an agent session\n@required {id: str # The slug or ID of the agent session.}\n@returns(200) {id: int(int64), slug: str, title: str, tool_name: str, total_messages: int(int32), curated_count: int(int32), published: bool, metadata: map?, messages: [map], slices: [map], created_at: str(date-time), updated_at: str(date-time), url: str(url)} # successful\n@errors {401: unauthorized, 404: not found}\n\n@endpoint POST /api/articles\n@desc Publish article\n@optional {article: map{title: str, body_markdown: str, published: bool, series: str, main_image: str, canonical_url: str, description: str, tags: str, organization_id: int}}\n@returns(201) An Article\n@errors {401: Unauthorized, 422: Unprocessable Entity}\n\n@endpoint GET /api/articles\n@desc Published articles\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable., tag: str # Using this parameter will retrieve articles that contain the requested tag. Articles will be ordered by descending popularity.This parameter can be used in conjuction with `top`., tags: str # Using this parameter will retrieve articles with any of the comma-separated tags. Articles will be ordered by descending popularity., tags_exclude: str # Using this parameter will retrieve articles that do _not_ contain _any_ of comma-separated tags. Articles will be ordered by descending popularity., username: str # Using this parameter will retrieve articles belonging             to a User or Organization ordered by descending publication date.             If `state=all` the number of items returned will be `1000` instead of the default `30`.             This parameter can be used in conjuction with `state`., state: str(fresh/rising/all) # Using this parameter will allow the client to check which articles are fresh or rising.             If `state=fresh` the server will return fresh articles.             If `state=rising` the server will return rising articles.             This param can be used in conjuction with `username`, only if set to `all`., top: int(int32) # Using this parameter will allow the client to return the most popular articles in the last `N` days. `top` indicates the number of days since publication of the articles returned. This param can be used in conjuction with `tag`., collection_id: int(int32) # Adding this will allow the client to return the list of articles belonging to the requested collection, ordered by ascending publication date.}\n@returns(200) A List of Articles\n\n@endpoint GET /api/articles/latest\n@desc Published articles sorted by published date\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of Articles\n\n@endpoint GET /api/articles/{id}\n@desc Published article by id\n@required {id: int}\n@returns(200) An Article\n@errors {404: Article Not Found}\n\n@endpoint PUT /api/articles/{id}\n@desc Update an article by id\n@required {id: int(int32) # The ID of the user to unpublish.}\n@optional {article: map{title: str, body_markdown: str, published: bool, series: str, main_image: str, canonical_url: str, description: str, tags: str, organization_id: int}}\n@returns(200) An Article\n@errors {401: Unauthorized, 404: Article Not Found, 422: Unprocessable Entity}\n\n@endpoint GET /api/articles/{username}/{slug}\n@desc Published article by path\n@required {username: str, slug: str}\n@returns(200) An Article\n@errors {404: Article Not Found}\n\n@endpoint GET /api/articles/me\n@desc User's articles\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of the authenticated user's Articles\n@errors {401: Unauthorized}\n\n@endpoint GET /api/articles/me/published\n@desc User's published articles\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of the authenticated user's Articles\n@errors {401: Unauthorized}\n\n@endpoint GET /api/articles/me/unpublished\n@desc User's unpublished articles\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of the authenticated user's Articles\n@errors {401: Unauthorized}\n\n@endpoint GET /api/articles/me/all\n@desc User's all articles\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of the authenticated user's Articles\n@errors {401: Unauthorized}\n\n@endpoint PUT /api/articles/{id}/unpublish\n@desc Unpublish an article\n@required {id: int(int32) # The ID of the article to unpublish.}\n@optional {note: str # Content for the note that's created along with unpublishing}\n@returns(204) Article successfully unpublished\n@errors {401: Unauthorized, 404: Article Not Found}\n\n@endpoint GET /api/segments\n@desc Manually managed audience segments\n@optional {per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of manually managed audience segments\n@errors {401: Unauthorized}\n\n@endpoint POST /api/segments\n@desc Create a manually managed audience segment\n@returns(201) A manually managed audience segment\n@errors {401: Unauthorized}\n\n@endpoint GET /api/segments/{id}\n@desc A manually managed audience segment\n@required {id: int(int32)}\n@returns(200) The audience segment\n@errors {401: Unauthorized, 404: Audience Segment Not Found}\n\n@endpoint DELETE /api/segments/{id}\n@desc Delete a manually managed audience segment\n@required {id: int(int32)}\n@returns(200) The deleted audience segment\n@errors {401: Unauthorized, 404: Audience Segment Not Found, 409: Audience segment could not be deleted}\n\n@endpoint GET /api/segments/{id}/users\n@desc Users in a manually managed audience segment\n@required {id: int(int32)}\n@optional {per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of users in the audience segment\n@errors {401: Unauthorized, 404: Audience Segment Not Found}\n\n@endpoint PUT /api/segments/{id}/add_users\n@desc Add users to a manually managed audience segment\n@required {id: int(int32)}\n@optional {user_ids: [int]}\n@returns(200) Result of adding the users to the segment.\n@errors {401: Unauthorized, 404: Audience Segment Not Found, 422: Unprocessable Entity}\n\n@endpoint PUT /api/segments/{id}/remove_users\n@desc Remove users from a manually managed audience segment\n@required {id: int(int32)}\n@optional {user_ids: [int]}\n@returns(200) Result of removing the users to the segment.\n@errors {401: Unauthorized, 404: Audience Segment Not Found, 422: Unprocessable Entity}\n\n@endpoint GET /api/billboards\n@desc Billboards\n@returns(200) successful\n@errors {401: unauthorized}\n\n@endpoint POST /api/billboards\n@desc Create a billboard\n@returns(201) A billboard\n@errors {401: unauthorized, 422: unprocessable}\n\n@endpoint GET /api/billboards/{id}\n@desc A billboard (by id)\n@required {id: int(int32) # The ID of the billboard.}\n@returns(200) successful\n@errors {401: unauthorized, 404: Unknown Billboard ID}\n\n@endpoint PUT /api/billboards/{id}\n@desc Update a billboard by ID\n@required {id: int(int32) # The ID of the billboard.}\n@returns(200) successful\n@errors {401: unauthorized, 404: not found}\n\n@endpoint PUT /api/billboards/{id}/unpublish\n@desc Unpublish a billboard\n@required {id: int(int32) # The ID of the billboard to unpublish.}\n@returns(204) no content\n@errors {401: unauthorized, 404: not found}\n\n@endpoint GET /api/comments\n@desc Comments\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable., a_id: str # Article identifier., p_id: str # Podcast Episode identifier., page: str # Page}\n@returns(200) A List of Comments\n@errors {404: Resource Not Found}\n\n@endpoint GET /api/comments/{id}\n@desc Comment by id\n@required {id: int # Comment identifier.}\n@returns(200) A List of the Comments\n@errors {404: Comment Not Found}\n\n@endpoint GET /api/follows/tags\n@desc Followed Tags\n@returns(200) A List of followed tags\n@errors {401: unauthorized}\n\n@endpoint GET /api/followers/users\n@desc Followers\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable., sort: str # Default is 'created_at'. Specifies the sort order for the created_at param of the follow                                 relationship. To sort by newest followers first (descending order) specify                                 ?sort=-created_at.}\n@returns(200) A List of followers\n@errors {401: unauthorized}\n\n@endpoint GET /api/organizations/{username}\n@desc An organization (by username)\n@required {username: str}\n@returns(200) An Organization\n@errors {404: Not Found}\n\n@endpoint GET /api/organizations/{organization_id_or_username}/users\n@desc Organization's users\n@required {organization_id_or_username: str}\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) An Organization's users (with ID)\n@errors {404: Not Found}\n\n@endpoint GET /api/organizations/{organization_id_or_username}/articles\n@desc Organization's Articles\n@required {organization_id_or_username: str}\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) An Organization's Articles (with ID)\n@errors {404: Not Found}\n\n@endpoint GET /api/organizations\n@desc Organizations\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=10 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A list of all organizations\n\n@endpoint POST /api/organizations\n@desc Create an Organization\n@optional {type_of: str, username: str, name: str, summary: str, twitter_username: str, github_username: str, url: str, location: str, joined_at: str, tech_stack: str, tag_line: str, story: str}\n@returns(201) Successful\n@errors {401: Unauthorized, 422: Unprocessable Entity}\n\n@endpoint GET /api/organizations/{id}\n@desc An organization (by id)\n@required {id: int}\n@returns(200) An Organization\n@errors {404: Not Found}\n\n@endpoint PUT /api/organizations/{id}\n@desc Update an organization by id\n@required {id: int(int32) # The ID of the organization to update.}\n@optional {type_of: str, username: str, name: str, summary: str, twitter_username: str, github_username: str, url: str, location: str, joined_at: str, tech_stack: str, tag_line: str, story: str}\n@returns(200) An Organization\n@errors {401: Unauthorized, 404: organization Not Found, 422: Unprocessable Entity}\n\n@endpoint DELETE /api/organizations/{id}\n@desc Delete an Organization by id\n@required {id: int(int32) # The ID of the organization.}\n@returns(200) successful\n@errors {401: unauthorized}\n\n@endpoint GET /api/pages\n@desc show details for all pages\n@returns(200) successful\n\n@endpoint POST /api/pages\n@desc pages\n@optional {title: str # Title of the page, slug: str # Used to link to this page in URLs, must be unique and URL-safe, description: str # For internal use, helps similar pages from one another, body_markdown: str # The text (in markdown) of the ad (required), body_json: str # For JSON pages, the JSON body, is_top_level_path: bool # If true, the page is available at '/{slug}' instead of '/page/{slug}', use with caution, template: str(contained/full_within_layout/nav_bar_included/json/css/txt)=contained # Controls what kind of layout the page is rendered in}\n@returns(200) successful\n@errors {401: unauthorized, 422: unprocessable}\n\n@endpoint GET /api/pages/{id}\n@desc show details for a page\n@required {id: int(int32) # The ID of the page.}\n@returns(200) {title: str, slug: str, description: str, body_markdown: str?, body_json: str?, is_top_level_path: bool, social_image: map?, template: str} # successful\n\n@endpoint PUT /api/pages/{id}\n@desc update details for a page\n@required {id: int(int32) # The ID of the page., title: str # Title of the page, slug: str # Used to link to this page in URLs, must be unique and URL-safe, description: str # For internal use, helps similar pages from one another, template: str(contained/full_within_layout/nav_bar_included/json/css/txt)=contained # Controls what kind of layout the page is rendered in}\n@optional {body_markdown: str # The text (in markdown) of the ad (required), body_json: str # For JSON pages, the JSON body, is_top_level_path: bool # If true, the page is available at '/{slug}' instead of '/page/{slug}', use with caution, social_image: map}\n@returns(200) {title: str, slug: str, description: str, body_markdown: str?, body_json: str?, is_top_level_path: bool, social_image: map?, template: str} # successful\n@errors {401: unauthorized, 422: unprocessable}\n\n@endpoint DELETE /api/pages/{id}\n@desc remove a page\n@required {id: int(int32) # The ID of the page.}\n@returns(200) {title: str, slug: str, description: str, body_markdown: str?, body_json: str?, is_top_level_path: bool, social_image: map?, template: str} # successful\n@errors {401: unauthorized, 422: unprocessable}\n\n@endpoint GET /api/podcast_episodes\n@desc Podcast Episodes\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable., username: str # Using this parameter will retrieve episodes belonging to a specific podcast.}\n@returns(200) A List of Podcast episodes filtered by username\n@errors {404: Unknown Podcast username}\n\n@endpoint GET /api/profile_images/{username}\n@desc A Users or organizations profile image\n@required {username: str # The parameter is the username of the user or the username of the organization.}\n@returns(200) An object containing profile image details\n@errors {404: Resource Not Found}\n\n@endpoint POST /api/reactions/toggle\n@desc toggle reaction\n@required {category: str(like/unicorn/exploding_head/raised_hands/fire), reactable_id: int(int32), reactable_type: str(Comment/Article/User)}\n@returns(200) successful\n@errors {401: unauthorized}\n\n@endpoint POST /api/reactions\n@desc create reaction\n@required {category: str(like/unicorn/exploding_head/raised_hands/fire), reactable_id: int(int32), reactable_type: str(Comment/Article/User)}\n@returns(200) successful\n@errors {401: unauthorized}\n\n@endpoint GET /api/readinglist\n@desc Readinglist\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A list of articles in the users readinglist\n@errors {401: Unauthorized}\n\n@endpoint GET /api/surveys\n@desc List surveys\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable., active: bool # Filter by active status. Omit to return all surveys.}\n@returns(200) A list of surveys\n@errors {401: Unauthorized}\n\n@endpoint GET /api/surveys/{id_or_slug}\n@desc A survey with polls\n@required {id_or_slug: str # The ID or slug of the survey.}\n@returns(200) A survey with nested polls and options\n@errors {401: Unauthorized, 404: Not found}\n\n@endpoint GET /api/surveys/{id_or_slug}/poll_votes\n@desc Survey poll votes\n@required {id_or_slug: str # The ID or slug of the survey.}\n@optional {per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable., after: int # Return only votes with an ID greater than this value.}\n@returns(200) Poll votes\n@errors {401: Unauthorized, 404: Not found}\n\n@endpoint GET /api/surveys/{id_or_slug}/poll_text_responses\n@desc Survey poll text responses\n@required {id_or_slug: str # The ID or slug of the survey.}\n@optional {per_page: int(int32)=30 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable., after: int # Return only text responses with an ID greater than this value.}\n@returns(200) Poll text responses\n@errors {401: Unauthorized, 404: Not found}\n\n@endpoint GET /api/tags\n@desc Tags\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=10 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of all tags\n\n@endpoint PUT /api/users/{id}/suspend\n@desc Suspend a User\n@required {id: int(int32) # The ID of the user to suspend.}\n@returns(204) User successfully unpublished\n@errors {401: Unauthorized, 404: Unknown User ID}\n\n@endpoint PUT /api/users/{id}/limited\n@desc Add limited role for a User\n@required {id: int(int32) # The ID of the user to limit.}\n@returns(204) User successfully limited\n@errors {401: Unauthorized, 404: Unknown User ID}\n\n@endpoint DELETE /api/users/{id}/limited\n@desc Remove limited for a User\n@required {id: int(int32) # The ID of the user to un-limit.}\n@returns(204) User successfully un-limited\n@errors {401: Unauthorized, 404: Unknown User ID}\n\n@endpoint PUT /api/users/{id}/spam\n@desc Add spam role for a User\n@required {id: int(int32) # The ID of the user to assign the spam role.}\n@returns(204) Spam role assigned to the user successfully\n@errors {401: Unauthorized, 404: Unknown User ID}\n\n@endpoint DELETE /api/users/{id}/spam\n@desc Remove spam role from a User\n@required {id: int(int32) # The ID of the user to remove the spam role from.}\n@returns(204) Successfully removed the spam role from a user\n@errors {401: Unauthorized, 404: Unknown User ID}\n\n@endpoint PUT /api/users/{id}/trusted\n@desc Add trusted role for a User\n@required {id: int(int32) # The ID of the user to assign the trusted role.}\n@returns(204) Trusted role assigned to the user successfully\n@errors {401: Unauthorized, 404: Unknown User ID}\n\n@endpoint DELETE /api/users/{id}/trusted\n@desc Remove trusted role from a User\n@required {id: int(int32) # The ID of the user to remove the trusted role from.}\n@returns(204) Successfully removed the trusted role from a user\n@errors {401: Unauthorized, 404: Unknown User ID}\n\n@endpoint GET /api/users/me\n@desc The authenticated user\n@returns(200) successful\n@errors {401: Unauthorized}\n\n@endpoint GET /api/users/{id}\n@desc A User\n@required {id: str}\n@returns(200) successful\n\n@endpoint PUT /api/users/{id}/unpublish\n@desc Unpublish a User's Articles and Comments\n@required {id: int(int32) # The ID of the user to unpublish.}\n@returns(204) User's articles and comments successfully unpublished\n@errors {401: Unauthorized, 404: Unknown User ID (still accepted for async processing)}\n\n@endpoint POST /api/admin/users\n@desc Invite a User\n@optional {email: str, name: str}\n@returns(200) Successful\n@errors {401: Unauthorized, 422: Unprocessable Entity}\n\n@endpoint GET /api/videos\n@desc Articles with a video\n@optional {page: int(int32)=1 # Pagination page, per_page: int(int32)=24 # Page size (the number of items to return per page). The default maximum value can be overridden by \"API_PER_PAGE_MAX\" environment variable.}\n@returns(200) A List of all articles with videos\n\n@end\n"}}