Download OpenAPI specification:
Artalk is a modern comment system based on Golang.
Login by email with verify code (Need send email verify code first) or password
The data to login
| code | string |
| email required | string |
| password | string |
{- "code": "string",
- "email": "string",
- "password": "string"
}{- "token": "string",
- "user": {
- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "id": 0,
- "is_admin": true,
- "link": "string",
- "name": "string",
- "receive_email": true
}
}Register by email and verify code (if user exists, will update user, like forget or change password. Need send email verify code first)
The data to register
| code required | string |
| email required | string |
| link | string |
| name | string |
| password required | string |
{- "code": "string",
- "email": "string",
- "link": "string",
- "name": "string",
- "password": "string"
}{- "token": "string",
- "user": {
- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "id": 0,
- "is_admin": true,
- "link": "string",
- "name": "string",
- "receive_email": true
}
}This function is to solve the problem of multiple users with the same email address, should be called after user login and then check, and perform data merge.
The data
| user_name required | string |
{- "user_name": "string"
}{- "deleted_user_count": 0,
- "update_comments_count": 0,
- "update_notifies_count": 0,
- "update_votes_count": 0,
- "user_token": "string"
}Validates a third-party OIDC access token by calling the issuer's /userinfo endpoint, requires a verified email claim, then mints an Artalk session JWT. Use when the surrounding application already runs OIDC and you want Artalk comments to inherit that session without showing Artalk's own login UI.
External SSO token
| token required | string External IdP access token (e.g. an Auth0 access token) |
{- "token": "string"
}{- "token": "string",
- "user": {
- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "id": 0,
- "is_admin": true,
- "link": "string",
- "name": "string",
- "receive_email": true
}
}Get user info to prepare for login or check current user status
string The user email | |
| name | string The username |
{- "is_login": true,
- "notifies": [
- {
- "comment_id": 0,
- "id": 0,
- "is_emailed": true,
- "is_read": true,
- "read_link": "string",
- "user_id": 0
}
], - "notifies_count": 0,
- "user": {
- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "id": 0,
- "is_admin": true,
- "link": "string",
- "name": "string",
- "receive_email": true
}
}Update user profile when user is logged in
The profile data to update
| code | string |
| email required | string |
| link | string |
| name required | string |
{- "code": "string",
- "email": "string",
- "link": "string",
- "name": "string"
}{- "user": {
- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "id": 0,
- "is_admin": true,
- "link": "string",
- "name": "string",
- "receive_email": true
}
}Login user by name or email
The user login data
| email required | string The user email |
| name | string The username |
| password required | string The user password |
{- "email": "string",
- "name": "string",
- "password": "string"
}{- "token": "string",
- "user": {
- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "id": 0,
- "is_admin": true,
- "link": "string",
- "name": "string",
- "receive_email": true
}
}Verify user enters correct captcha code
The data to check
| value required | string The captcha value to check |
{- "value": "string"
}{ }Get a list of comments by some conditions
string The user email | |
| flat_mode | boolean Enable flat_mode |
| limit | integer The limit for pagination |
| name | string The username |
| offset | integer The offset for pagination |
| page_key required | string The comment page_key |
| scope | string Enum: "page" "user" "site" The scope of comments |
| search | string Search keywords |
| site_name | string The site name of your content scope |
| sort_by | string Enum: "date_asc" "date_desc" "vote" Sort by condition |
| type | string Enum: "all" "mentions" "mine" "pending" Message center show type |
| view_only_admin | boolean Only show comments by admin |
{- "comments": [
- {
- "badge_color": "string",
- "badge_name": "string",
- "content": "string",
- "content_marked": "string",
- "date": "string",
- "email_encrypted": "string",
- "id": 0,
- "ip_region": "string",
- "is_allow_reply": true,
- "is_collapsed": true,
- "is_pending": true,
- "is_pinned": true,
- "is_verified": true,
- "link": "string",
- "nick": "string",
- "page_key": "string",
- "page_url": "string",
- "rid": 0,
- "site_name": "string",
- "ua": "string",
- "user_id": 0,
- "visible": true,
- "vote_down": 0,
- "vote_up": 0
}
], - "count": 0,
- "page": {
- "admin_only": true,
- "date": "string",
- "id": 0,
- "key": "string",
- "pv": 0,
- "site_name": "string",
- "title": "string",
- "url": "string",
- "vote_down": 0,
- "vote_up": 0
}, - "roots_count": 0
}Create a new comment
The comment data
| content required | string The comment content |
| email required | string The comment email |
| link | string The comment link |
| name required | string The comment name |
| page_key required | string The comment page_key |
| page_title | string The comment page_title |
| rid | integer The comment rid |
| site_name required | string The site name of your content scope |
| ua | string The comment ua |
{- "content": "string",
- "email": "string",
- "link": "string",
- "name": "string",
- "page_key": "string",
- "page_title": "string",
- "rid": 0,
- "site_name": "string",
- "ua": "string"
}{- "badge_color": "string",
- "badge_name": "string",
- "content": "string",
- "content_marked": "string",
- "date": "string",
- "email_encrypted": "string",
- "id": 0,
- "ip_region": "string",
- "is_allow_reply": true,
- "is_collapsed": true,
- "is_pending": true,
- "is_pinned": true,
- "is_verified": true,
- "link": "string",
- "nick": "string",
- "page_key": "string",
- "page_url": "string",
- "rid": 0,
- "site_name": "string",
- "ua": "string",
- "user_id": 0,
- "visible": true,
- "vote_down": 0,
- "vote_up": 0
}Get the detail of a comment by comment id
| id required | integer The comment ID you want to get |
{- "comment": {
- "badge_color": "string",
- "badge_name": "string",
- "content": "string",
- "content_marked": "string",
- "date": "string",
- "email_encrypted": "string",
- "id": 0,
- "ip_region": "string",
- "is_allow_reply": true,
- "is_collapsed": true,
- "is_pending": true,
- "is_pinned": true,
- "is_verified": true,
- "link": "string",
- "nick": "string",
- "page_key": "string",
- "page_url": "string",
- "rid": 0,
- "site_name": "string",
- "ua": "string",
- "user_id": 0,
- "visible": true,
- "vote_down": 0,
- "vote_up": 0
}, - "reply_comment": {
- "badge_color": "string",
- "badge_name": "string",
- "content": "string",
- "content_marked": "string",
- "date": "string",
- "email_encrypted": "string",
- "id": 0,
- "ip_region": "string",
- "is_allow_reply": true,
- "is_collapsed": true,
- "is_pending": true,
- "is_pinned": true,
- "is_verified": true,
- "link": "string",
- "nick": "string",
- "page_key": "string",
- "page_url": "string",
- "rid": 0,
- "site_name": "string",
- "ua": "string",
- "user_id": 0,
- "visible": true,
- "vote_down": 0,
- "vote_up": 0
}
}Update a specific comment
| id required | integer The comment ID you want to update |
The comment data
| content required | string The comment content |
string The comment email | |
| ip | string The comment ip |
| is_collapsed required | boolean The comment is_collapsed |
| is_pending required | boolean The comment is_pending |
| is_pinned required | boolean The comment is_pinned |
| link | string The comment link |
| nick | string The comment nick |
| page_key required | string The comment page_key |
| rid required | integer The comment rid |
| site_name required | string The site name of your content scope |
| ua | string The comment ua |
{- "content": "string",
- "email": "string",
- "ip": "string",
- "is_collapsed": true,
- "is_pending": true,
- "is_pinned": true,
- "link": "string",
- "nick": "string",
- "page_key": "string",
- "rid": 0,
- "site_name": "string",
- "ua": "string"
}{- "badge_color": "string",
- "badge_name": "string",
- "content": "string",
- "content_marked": "string",
- "date": "string",
- "email_encrypted": "string",
- "id": 0,
- "ip_region": "string",
- "is_allow_reply": true,
- "is_collapsed": true,
- "is_pending": true,
- "is_pinned": true,
- "is_verified": true,
- "link": "string",
- "nick": "string",
- "page_key": "string",
- "page_url": "string",
- "rid": 0,
- "site_name": "string",
- "ua": "string",
- "user_id": 0,
- "visible": true,
- "vote_down": 0,
- "vote_up": 0
}Send an email to test the email sender
The email data
| body required | string The body of email |
| subject required | string The subject of email |
| to_addr required | string The email address of the receiver |
{- "body": "string",
- "subject": "string",
- "to_addr": "string"
}{ }Apply settings and restart the server
The settings
| yaml required | string The content of the config file in YAML format |
{- "yaml": "string"
}{ }Get config templates in different languages for rendering the settings page in the frontend
| locale required | string The locale of the settings template you want to get |
{- "yaml": "string"
}Get a list of notifies for user
| name required | string The user name |
| email required | string The user email |
{- "count": 0,
- "notifies": [
- {
- "comment_id": 0,
- "id": 0,
- "is_emailed": true,
- "is_read": true,
- "read_link": "string",
- "user_id": 0
}
]
}Mark all notifies as read for user
The options
| email required | string The user email |
| name required | string The username |
{- "email": "string",
- "name": "string"
}{ }Get a list of pages by some conditions
| limit | integer The limit for pagination |
| offset | integer The offset for pagination |
| search | string Search keywords |
| site_name | string The site name of your content scope |
{- "count": 0,
- "pages": [
- {
- "admin_only": true,
- "date": "string",
- "id": 0,
- "key": "string",
- "pv": 0,
- "site_name": "string",
- "title": "string",
- "url": "string",
- "vote_down": 0,
- "vote_up": 0
}
]
}Fetch the data of all pages
The options
| site_name | string If not empty, only fetch pages of this site |
{- "site_name": "string"
}{ }Increase and get the number of page views
The page to record pv
| page_key required | string The page key |
| page_title | string The page title |
| site_name | string The site name of your content scope |
{- "page_key": "string",
- "page_title": "string",
- "site_name": "string"
}{- "pv": 0
}Update a specific page
| id required | integer The page ID you want to update |
The page data
| admin_only required | boolean Updated page admin_only option |
| key required | string Updated page key |
| site_name required | string The site name of your content scope |
| title required | string Updated page title |
{- "admin_only": true,
- "key": "string",
- "site_name": "string",
- "title": "string"
}{- "admin_only": true,
- "date": "string",
- "id": 0,
- "key": "string",
- "pv": 0,
- "site_name": "string",
- "title": "string",
- "url": "string",
- "vote_down": 0,
- "vote_up": 0
}Fetch the data of a specific page
| id required | integer The page ID you want to fetch |
{- "admin_only": true,
- "date": "string",
- "id": 0,
- "key": "string",
- "pv": 0,
- "site_name": "string",
- "title": "string",
- "url": "string",
- "vote_down": 0,
- "vote_up": 0
}Create a new site
The site data
| name required | string The site name |
| urls required | Array of strings The site urls |
{- "name": "string",
- "urls": [
- "string"
]
}{- "first_url": "string",
- "id": 0,
- "name": "string",
- "urls": [
- "string"
], - "urls_raw": "string"
}Update a specific site
| id required | integer The site ID you want to update |
The site data
| name required | string Updated site name |
| urls required | Array of strings Updated site urls |
{- "name": "string",
- "urls": [
- "string"
]
}{- "first_url": "string",
- "id": 0,
- "name": "string",
- "urls": [
- "string"
], - "urls_raw": "string"
}Get the statistics of various data analysis
| type required | string Enum: "latest_comments" "latest_pages" "pv_most_pages" "comment_most_pages" "page_pv" "site_pv" "page_comment" "site_comment" "rand_comments" "rand_pages" The type of statistics |
| limit | integer The limit for pagination |
| page_keys | string multiple page keys separated by commas |
| site_name | string The site name of your content scope |
{- "data": null,
- "msg": "string"
}Import data to Artalk
The data to import
| assumeyes | boolean Automatically answer yes for all questions |
| json_data | string The JSON data |
| json_file | string The JSON file path |
| target_site_name | string The target site name |
| target_site_url | string The target site url |
| url_keep_domain | boolean Keep domain |
| url_resolver | boolean Enable URL resolver |
{- "assumeyes": true,
- "json_data": "string",
- "json_file": "string",
- "target_site_name": "string",
- "target_site_url": "string",
- "url_keep_domain": true,
- "url_resolver": true
}Create a new user
The user data
| badge_color | string The user badge color (hex format) |
| badge_name | string The user badge name |
| email required | string The user email |
| is_admin required | boolean The user is an admin |
| link | string The user link |
| name required | string The user name |
| password | string The user password |
| receive_email required | boolean The user receive email |
{- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "is_admin": true,
- "link": "string",
- "name": "string",
- "password": "string",
- "receive_email": true
}{- "badge_color": "string",
- "badge_name": "string",
- "comment_count": 0,
- "email": "string",
- "id": 0,
- "is_admin": true,
- "is_in_conf": true,
- "last_ip": "string",
- "last_ua": "string",
- "link": "string",
- "name": "string",
- "receive_email": true
}Update a specific user
| id required | integer The user ID you want to update |
The user data
| badge_color | string The user badge color (hex format) |
| badge_name | string The user badge name |
| email required | string The user email |
| is_admin required | boolean The user is an admin |
| link | string The user link |
| name required | string The user name |
| password | string The user password |
| receive_email required | boolean The user receive email |
{- "badge_color": "string",
- "badge_name": "string",
- "email": "string",
- "is_admin": true,
- "link": "string",
- "name": "string",
- "password": "string",
- "receive_email": true
}{- "badge_color": "string",
- "badge_name": "string",
- "comment_count": 0,
- "email": "string",
- "id": 0,
- "is_admin": true,
- "is_in_conf": true,
- "last_ip": "string",
- "last_ua": "string",
- "link": "string",
- "name": "string",
- "receive_email": true
}Get a list of users by some conditions
| type required | string Enum: "all" "admin" "in_conf" The type of users |
| limit | integer The limit for pagination |
| offset | integer The offset for pagination |
| search | string Search keywords |
{- "count": 0,
- "users": [
- {
- "badge_color": "string",
- "badge_name": "string",
- "comment_count": 0,
- "email": "string",
- "id": 0,
- "is_admin": true,
- "is_in_conf": true,
- "last_ip": "string",
- "last_ua": "string",
- "link": "string",
- "name": "string",
- "receive_email": true
}
]
}Get vote status for a specific comment or page
| target_name required | string Enum: "comment" "page" The name of vote target |
| target_id required | integer The target comment or page ID |
{- "down": 0,
- "is_down": true,
- "is_up": true,
- "up": 0
}Create a new vote for a specific comment or page
| target_name required | string Enum: "comment" "page" The name of vote target |
| target_id required | integer The target comment or page ID |
| choice required | string Enum: "up" "down" The vote choice |
The vote data
string The user email | |
| name | string The username |
{- "email": "string",
- "name": "string"
}{- "down": 0,
- "is_down": true,
- "is_up": true,
- "up": 0
}