curl --request POST \
--url https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"username": "gh_363b924965e9",
"page_size": 20,
"offset": "",
"item_show_type": 123,
"raw": true
}
'import requests
url = "https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles"
payload = {
"username": "gh_363b924965e9",
"page_size": 20,
"offset": "",
"item_show_type": 123,
"raw": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
username: 'gh_363b924965e9',
page_size: 20,
offset: '',
item_show_type: 123,
raw: true
})
};
fetch('https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'username' => 'gh_363b924965e9',
'page_size' => 20,
'offset' => '',
'item_show_type' => 123,
'raw' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles"
payload := strings.NewReader("{\n \"username\": \"gh_363b924965e9\",\n \"page_size\": 20,\n \"offset\": \"\",\n \"item_show_type\": 123,\n \"raw\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"username\": \"gh_363b924965e9\",\n \"page_size\": 20,\n \"offset\": \"\",\n \"item_show_type\": 123,\n \"raw\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"username\": \"gh_363b924965e9\",\n \"page_size\": 20,\n \"offset\": \"\",\n \"item_show_type\": 123,\n \"raw\": true\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"request_id": "<string>",
"message": "Request successful. This request will incur a charge.",
"message_zh": "请求成功,本次请求将被计费。",
"support": "Discord: https://discord.gg/aMEAS8Xsvz",
"time": "<string>",
"time_stamp": 123,
"time_zone": "America/Los_Angeles",
"docs": "<string>",
"cache_message": "This response is cached and accessible via the URL below for 24 hours at no extra cost. The cache is for request tracing only — it doesn't affect the API's data freshness and won't be returned through the API again.",
"cache_message_zh": "本次响应已缓存,可通过下方 URL 直接查看,有效期 24 小时,访问缓存链接无额外费用。缓存仅用于请求溯源,不影响接口数据的时效性,也不会再次通过接口返回。",
"cache_url": "<string>",
"router": "",
"params": {},
"data": "<unknown>"
}Get WeChat MP Account Articles
Get WeChat MP Account Articles
curl --request POST \
--url https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"username": "gh_363b924965e9",
"page_size": 20,
"offset": "",
"item_show_type": 123,
"raw": true
}
'import requests
url = "https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles"
payload = {
"username": "gh_363b924965e9",
"page_size": 20,
"offset": "",
"item_show_type": 123,
"raw": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
username: 'gh_363b924965e9',
page_size: 20,
offset: '',
item_show_type: 123,
raw: true
})
};
fetch('https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'username' => 'gh_363b924965e9',
'page_size' => 20,
'offset' => '',
'item_show_type' => 123,
'raw' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles"
payload := strings.NewReader("{\n \"username\": \"gh_363b924965e9\",\n \"page_size\": 20,\n \"offset\": \"\",\n \"item_show_type\": 123,\n \"raw\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"username\": \"gh_363b924965e9\",\n \"page_size\": 20,\n \"offset\": \"\",\n \"item_show_type\": 123,\n \"raw\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"username\": \"gh_363b924965e9\",\n \"page_size\": 20,\n \"offset\": \"\",\n \"item_show_type\": 123,\n \"raw\": true\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"request_id": "<string>",
"message": "Request successful. This request will incur a charge.",
"message_zh": "请求成功,本次请求将被计费。",
"support": "Discord: https://discord.gg/aMEAS8Xsvz",
"time": "<string>",
"time_stamp": 123,
"time_zone": "America/Los_Angeles",
"docs": "<string>",
"cache_message": "This response is cached and accessible via the URL below for 24 hours at no extra cost. The cache is for request tracing only — it doesn't affect the API's data freshness and won't be returned through the API again.",
"cache_message_zh": "本次响应已缓存,可通过下方 URL 直接查看,有效期 24 小时,访问缓存链接无额外费用。缓存仅用于请求溯源,不影响接口数据的时效性,也不会再次通过接口返回。",
"cache_url": "<string>",
"router": "",
"params": {},
"data": "<unknown>"
}code is 200.
Example
curl -X POST "https://api.aisa.one/apis/v1/tikhub/wechat_mp/v2/fetch_account_articles" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' # see request schema below
Authorizations
AIsa API key. Get yours at https://aisa.one
Body
Official account username. Three forms are supported: gh_…, gh_…@app (mini-program-linked accounts) and custom WeChat IDs (e.g. nikejdi). Taken from $.data.content.user_name of the article detail endpoints
Usage: Official account gh_username (gh_…). E.g. gh_363b924965e9
80^[0-9A-Za-z][-_0-9A-Za-z]{1,63}(@[0-9A-Za-z]{1,16})?$"gh_363b924965e9"
Articles per page (default 20). WeChat currently ignores this parameter; the account determines the returned count. Paginate using offset and next_offset.
1 <= x <= 100Optional pagination cursor (base64), leave empty for the first page; for the next page pass next_offset from the previous response. E.g. CAMQChiS5KfRBiAKOJLkp9EGQABIAVgAYABwAQ==
8192^[A-Za-z0-9+/=_-]*$Optional content tab (matches the "Articles / Videos / Audios" tabs on the account homepage). Empty / 0=articles (default), 5=videos, 7=audios, 8=image-text posts. Omitting it = articles, behavior unchanged.
True=raw response; False=simplified parsed structure
Response
Successful response. The outer object follows ResponseModel; the endpoint-specific payload is in data.
Return
- Single page of articles with pagination cursor
Tip:
offsetis a base64 cursor (contains+/=), hence POST body. This endpoint fetches a single page only and does not auto-paginate.
Response structure & JSON Path
raw=false (simplified, snake_case):
- Account username:
$.data.biz_username - Is last page (0/1):
$.data.is_end - Articles returned on this page:
$.data.count - Next-page cursor (pass back as
offset; null at the last page):$.data.next_offset - Article list:
$.data.articles[] - Single article (N is the index):
- Article appmsgid:
$.data.articles[N].app_msg_id - Title:
$.data.articles[N].title - Digest:
$.data.articles[N].digest - URL:
$.data.articles[N].url - Cover:
$.data.articles[N].cover(multi-ratio$.data.articles[N].covers) - Publish / update timestamps:
$.data.articles[N].create_time/.update_time - Position / type within the batch:
$.data.articles[N].idx/.msg_type/.item_show_type - Image count / paid flags:
$.data.articles[N].pic_count/.is_paid/.is_pay_subscribe
- Article appmsgid:
raw=true (raw, default for this endpoint):
datatop-level fields match the simplified version (biz_username/is_end/count/next_offset), butarticles[]are full raw batch entries (nested camelCase):- Per entry:
$.data.articles[N].appMsg(withbaseInfo/detailInfo),$.data.articles[N].baseInfo(msgId/msgType/dateTime/status) - Article bodies are in
$.data.articles[N].appMsg.detailInfo(one batch may contain multiple articles: headline / secondary) - Pagination also uses top-level
next_offsetpassed back asoffset. For list display, preferraw=falsefor cleaner paths.
- Per entry:
HTTP status code
Unique request identifier
Response message (EN-US)
Response message (ZH-CN)
Support message
The time the response was generated
The timestamp the response was generated
The timezone of the response time
Link to the API Swagger documentation for this endpoint
Cache message (EN-US)
Cache message (ZH-CN)
The URL to access the cached result
The endpoint that generated this response
The parameters used in the request
Endpoint-specific response payload. The official shared model does not declare a fixed type or field set. Use the operation's documented return fields or response example; an operation-specific schema, when present, describes the documented fields. Undocumented fields must be read from the actual response rather than assumed.