Get details

Introduction

POST /v1/generations with Authorization: Bearer <ANYCAP_API_KEY>. Use type=social, model for the platform and input.operation for the query. Parameters and examples follow.

PlatformQuerymodelinput.operation
InstagramPost detailsinstagrampost
TikTokPost detailstiktokvideo
TikTokApp post detailstiktokapp_video
DouyinPost detailsdouyindouyin_video
XiaohongshuImage notexiaohongshuimage_note
XiaohongshuVideo notexiaohongshuvideo_note
WeChat Official AccountsArticle detailswechat_mparticle

Instagram · Post details

Read one public Instagram post, reel or TV item by link. Send type: social, model: instagram and input.operation: post with the post link.

Request

BASH
curl -X POST https://api.anycap.io/v1/generations \  -H "Authorization: Bearer $ANYCAP_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 5b1d7e2a-8c34-4f6d-9a0e-2d7c4b6f8a13" \  -d '{"type":"social","model":"instagram","input":{"operation":"post","url":"https://www.instagram.com/p/DPwhVB-jo9k/"}}'
FieldValueNote
type
Valuesocial
NoteRequired
model
Valueinstagram
NoteRequired
input.operation
Valuepost
NoteRequired; selects the post read instead of the profile read
input.url
ValueInstagram post link
NoteRequired; instagram.com /p/, /reel/ or /tv/ page; input.post_url is accepted as an alias
Idempotency-Key
ValueUnique key
NoteRecommended; a new fetch uses a new key, a retry keeps the original

Profile, story, explore and share-page links are rejected before any upstream call. The response is synchronous.

The connection key must be authorized for social.instagram.post.info. An unauthorized key returns 503 capability_unavailable before any upstream call and is not charged.

Response

JSON
{  "type": "social",  "call": {    "id": "5b1d7e2a-8c34-4f6d-9a0e-2d7c4b6f8a13",    "state": "succeeded",    "operation": "post",    "url": "https://www.instagram.com/p/DPwhVB-jo9k/",    "amount_microcredits": "9000000",    "charged_microcredits": "9000000",    "created_at": "2026-10-28T03:25:00Z",    "completed_at": "2026-10-28T11:25:06+08:00",    "post": {      "id": "3742637871112032100",      "shortcode": "DPwhVB-jo9k",      "media_type": "image",      "description": "I’ll never forget how excited I was in 2006 …",      "cover_url": "https://instagram.fbne9-1.fna.fbcdn.net/v/562815025_18601398793054956_8673755740587648163_n.jpg",      "play_url": "",      "download_url": "",      "width": 1080,      "height": 1080,      "created_at": 1760377223,      "author": {        "id": "11830955",        "username": "taylorswift",        "nickname": "Taylor Swift",        "avatar_url": "https://instagram.fbne9-1.fna.fbcdn.net/v/811102599_18700319776054956_6854910356429154091_n.jpg"      },      "digg_count": 3861440    },    "media_downloads": [      {        "field": "post.cover_url",        "source_url": "https://instagram.fbne9-1.fna.fbcdn.net/v/562815025_18601398793054956_8673755740587648163_n.jpg",        "download_url": "https://api.anycap.io/v1/social-media/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",        "expires_at": "2026-10-28T05:25:06Z",        "status": "ready"      }    ]  }}

call.post contains the post id and shortcode, media_type (image, video or carousel), caption, cover, author, publish time, dimensions and the counters Instagram returned. Carousel posts add ordered image_urls; video or reel posts add play_url. Missing counters, dimensions and duration are omitted, and a single-image post has no image_urls. Media links are temporary Instagram CDN URLs.

call.media_downloads adds Anycap download links while preserving the original third-party URLs. Only status=ready entries can be downloaded without an API key. Links expire 2 hours after call.completed_at, as shown in expires_at; reading the result does not renew them.

Errors

HTTPBodyWhat to do
200call.state=succeededRead call.post; charge settled.
202call.state=started / unknownKeep call.id and read GET /v1/generations/{id} with the original connection key. Do not submit a new fetch.
402error.code=insufficient_creditsAdd credits and retry. Nothing was submitted or charged.
404 / 502 / 503error.codeNo customer charge. Codes: post_not_found, upstream_error, capability_unavailable (paused, not configured, or key not authorized).

TikTok · Post details

Read one public TikTok post by link. Photo posts return every image in call.post.image_urls; video posts return playable media links.

Request

BASH
curl -X POST https://api.anycap.io/v1/generations \  -H "Authorization: Bearer $ANYCAP_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 8d0b2e44-9c52-4b5f-8a1d-3f6c7e9a0b21" \  -d '{"type":"social","model":"tiktok","input":{"url":"https://www.tiktok.com/@example_creator/photo/7000000000000000000"}}'
FieldValueNote
type
Valuesocial
NoteRequired
model
Valuetiktok
NoteRequired
input.url
ValueTikTok post link
NoteRequired; tiktok.com and its share links
Idempotency-Key
ValueUnique key
NoteRecommended; new key per lookup, same key on retry

input.operation may be omitted; it defaults to video.

Response · photo post

JSON
{  "type": "social",  "call": {    "id": "8d0b2e44-9c52-4b5f-8a1d-3f6c7e9a0b21",    "state": "succeeded",    "operation": "video",    "amount_microcredits": "4000000",    "charged_microcredits": "4000000",    "created_at": "2026-10-26T10:00:00Z",    "post": {      "id": "7000000000000000000",      "cover_url": "https://cdn.example.com/cover.jpg",      "image_urls": [        "https://cdn.example.com/1.jpg",        "https://cdn.example.com/2.jpg",        "https://cdn.example.com/3.jpg"      ]    },    "completed_at": "2026-10-26T10:00:00Z",    "media_downloads": [      {        "field": "post.image_urls[0]",        "source_url": "https://cdn.example.com/1.jpg",        "download_url": "https://api.anycap.io/v1/social-media/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",        "expires_at": "2026-10-26T12:00:00Z",        "status": "ready"      }    ]  }}

image_urls follows the photo order, with one link per image (up to 100). Video posts may include play_url and download_url instead. Caption, author and counters appear when available. Missing counters and dimensions are omitted.

call.media_downloads adds Anycap download links while preserving the original third-party URLs. Only status=ready entries can be downloaded without an API key. Links expire 2 hours after call.completed_at, as shown in expires_at; reading the result does not renew them.

Errors

HTTPBodyWhat to do
200call.state=succeededRead call.post; charge settled.
202call.state=started / unknownKeep call.id and read GET /v1/generations/{id} with the original connection key. Do not submit a new lookup.
402error.code=insufficient_creditsAdd credits and retry. Nothing was submitted or charged.
404 / 502 / 503error.codeNo customer charge. Codes: video_not_found, upstream_error, capability_unavailable.

The same idempotency key replays the recorded result, even after the source is paused. Read results with the original connection key.

TikTok · App post details

Read one public TikTok post by link through the TikTok app data source. Set input.operation to app_video. Photo posts return every image in call.post.image_urls; video posts return playable media links.

Request

BASH
curl -X POST https://api.anycap.io/v1/generations \  -H "Authorization: Bearer $ANYCAP_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 8d0b2e44-9c52-4b5f-8a1d-3f6c7e9a0b21" \  -d '{"type":"social","model":"tiktok","input":{"operation":"app_video","url":"https://www.tiktok.com/@example_creator/photo/7000000000000000000"}}'
FieldValueNote
type
Valuesocial
NoteRequired
model
Valuetiktok
NoteRequired
input.operation
Valueapp_video
NoteRequired
input.url
ValueTikTok post link
NoteRequired; tiktok.com and its share links
Idempotency-Key
ValueUnique key
NoteRecommended; new key per lookup, same key on retry

Response · photo post

JSON
{  "type": "social",  "call": {    "id": "8d0b2e44-9c52-4b5f-8a1d-3f6c7e9a0b21",    "state": "succeeded",    "operation": "app_video",    "amount_microcredits": "4000000",    "charged_microcredits": "4000000",    "created_at": "2026-10-26T10:00:00Z",    "post": {      "id": "7000000000000000000",      "cover_url": "https://cdn.example.com/cover.jpg",      "image_urls": [        "https://cdn.example.com/1.jpg",        "https://cdn.example.com/2.jpg",        "https://cdn.example.com/3.jpg"      ]    },    "completed_at": "2026-10-26T10:00:00Z",    "media_downloads": [      {        "field": "post.image_urls[0]",        "source_url": "https://cdn.example.com/1.jpg",        "download_url": "https://api.anycap.io/v1/social-media/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",        "expires_at": "2026-10-26T12:00:00Z",        "status": "ready"      }    ]  }}

image_urls follows the photo order, with one link per image (up to 100). Video posts may include play_url and download_url instead. Caption, author and counters appear when available. Missing counters and dimensions are omitted.

call.media_downloads adds Anycap download links while preserving the original third-party URLs. Only status=ready entries can be downloaded without an API key. Links expire 2 hours after call.completed_at, as shown in expires_at; reading the result does not renew them.

Errors

HTTPBodyWhat to do
200call.state=succeededRead call.post; charge settled.
202call.state=started / unknownKeep call.id and read GET /v1/generations/{id} with the original connection key. Do not submit a new lookup.
402error.code=insufficient_creditsAdd credits and retry. Nothing was submitted or charged.
404 / 502 / 503error.codeNo customer charge. Codes: video_not_found, upstream_error, capability_unavailable.

The same idempotency key replays the recorded result, even after the source is paused. Read results with the original connection key.

Douyin · Post details

Read one public Douyin post through the Douyin web data source (fetch_one_video). Send a 19-digit input.aweme_id, or a canonical douyin.com/video / iesdouyin.com/share/video link (the numeric id is extracted locally, so no extra resolver call is billed); short v.douyin.com links are refused. input.need_anchor_info optionally asks for location, merchant and showcase anchors. The result carries the description, author, cover, playable video, duration, dimensions and engagement counts.

Request

BASH
curl -X POST https://api.anycap.io/v1/generations \  -H "Authorization: Bearer $ANYCAP_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 8c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f" \  -d '{"type":"social","model":"douyin","input":{"operation":"douyin_video","aweme_id":"7372484719365098803"}}'
FieldValueNote
type
Valuesocial
NoteRequired
model
Valuedouyin
NoteRequired
input.operation
Valuedouyin_video
NoteRequired; selects the Douyin web route
input.aweme_id
Value19-digit item id
NoteEither this or input.url; when both are sent the id wins
input.url
ValueDouyin item link
Notedouyin.com/video/... or iesdouyin.com/share/video/...; short links are refused
input.need_anchor_info
Valuetrue / false
NoteOptional, default false; enabling anchors may slow the response
Idempotency-Key
ValueUnique key
NoteRecommended; new key per fetch, same key on retry

Response

JSON
{  "type": "social",  "call": {    "id": "8c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",    "state": "succeeded",    "operation": "douyin_video",    "aweme_id": "7372484719365098803",    "amount_microcredits": "2000000",    "charged_microcredits": "2000000",    "created_at": "2026-11-02T03:20:00Z",    "post": {      "id": "7372484719365098803",      "description": "你对我的好我一直记得",      "cover_url": "https://p3-pc-sign.douyinpic.com/example-cover.jpg",      "play_url": "https://v3-web.douyinvod.com/example-video.mp4",      "duration_ms": 8010,      "width": 1080,      "height": 1920,      "created_at": 1716540374,      "author": {        "id": "95823111667",        "username": "L99612",        "nickname": "萧萧不吃辣",        "avatar_url": "https://p3-pc.douyinpic.com/example-avatar.jpg"      },      "digg_count": 312986,      "comment_count": 4071,      "share_count": 79966,      "collect_count": 19911    }  }}

call.post.play_url is the direct video link; media links are temporary Douyin CDN URLs. call.aweme_id is present for an id submission and also when a link supplied the id. Counters, duration and dimensions are omitted when the platform does not report them.

Deleted or restricted posts still return HTTP 200 from the data source with filter_detail and are billed. Anycap maps that to video_not_found with no customer charge, but the upstream lookup has already been consumed.

Errors

HTTPBodyWhat to do
200call.state=succeededRead call.post; charge settled.
202call.state=started / unknownKeep call.id and read GET /v1/generations/{id} with the original connection key. Do not submit a new fetch.
402error.code=insufficient_creditsAdd credits and retry. Nothing was submitted or charged.
404 / 502 / 503error.codeNo customer charge. Codes: video_not_found, upstream_error, capability_unavailable.

Xiaohongshu · Image note

Read one public Xiaohongshu note by note link or note id through the Xiaohongshu app interface (app/v2). input.operation selects the note route: image_note (default) reads notes of either kind and returns a video note cover only; video_note reads video notes and returns the play link. When a note's type is video, call video_note with the same note id to obtain call.note.play_url. Only the app routes are exposed; the web note pages are not part of this capability.

Request

BASH
curl -X POST https://api.anycap.io/v1/generations \  -H "Authorization: Bearer $ANYCAP_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 8d0b2e44-9c52-4b5f-8a1d-3f6c7e9a0b21" \  -d '{"type":"social","model":"xiaohongshu","input":{"operation":"image_note","note_id":"697c0eee000000000a03c308"}}'
FieldValueNote
type
Valuesocial
NoteRequired
model
Valuexiaohongshu
NoteRequired
input.operation
Valueimage_note or video_note
Noteimage_note is the default when omitted
input.note_id
Value24-character note id
NoteEither this or input.url; sending both is rejected
input.url
ValueNote or share link
Notexiaohongshu.com note links, xhslink.com and xhslink.cn share links
Idempotency-Key
ValueUnique key
NoteRecommended; new key per fetch, same key on retry

Response

JSON
{  "type": "social",  "call": {    "id": "5c4a1d2e-9f3b-4a6c-8d7e-1b2c3d4e5f60",    "state": "succeeded",    "operation": "image_note",    "note_id": "697c0eee000000000a03c308",    "amount_microcredits": "11000000",    "charged_microcredits": "11000000",    "created_at": "2026-10-30T08:00:00Z",    "note": {      "id": "697c0eee000000000a03c308",      "type": "normal",      "title": "秋日通勤穿搭",      "description": "通勤三件套,配色参考。",      "cover_url": "https://sns-webpic-qc.xhscdn.com/cover.jpg",      "image_urls": [        "https://sns-webpic-qc.xhscdn.com/1.jpg",        "https://sns-webpic-qc.xhscdn.com/2.jpg"      ],      "created_at": 1759718400,      "author": {        "id": "5f0000000000000000000001",        "nickname": "示例作者",        "avatar_url": "https://sns-avatar-qc.xhscdn.com/avatar.jpg"      },      "digg_count": 12000,      "collect_count": 3456,      "comment_count": 78    },    "completed_at": "2026-10-30T08:00:01Z",    "media_downloads": [      {        "field": "note.image_urls[0]",        "source_url": "https://sns-webpic-qc.xhscdn.com/1.jpg",        "download_url": "https://api.anycap.io/v1/social-media/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",        "expires_at": "2026-10-30T10:00:00Z",        "status": "ready"      }    ]  }}

note.type is normal for an image note and video for a video note. note.image_urls follows the note order with one link per image (up to 100). note.play_url is present only when the video note interface read the note. Counters, duration and dimensions appear when the platform reports them, and compact counters such as 1.2万 are expanded to integers.

call.media_downloads adds Anycap download links while preserving the original third-party URLs. Only status=ready entries can be downloaded without an API key. Links expire 2 hours after call.completed_at, as shown in expires_at; reading the result does not renew them.

Video note

BASH
curl -X POST https://api.anycap.io/v1/generations \  -H "Authorization: Bearer $ANYCAP_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: 6b1f4c7e-2a3d-4e5f-8a9b-0c1d2e3f4a5b" \  -d '{"type":"social","model":"xiaohongshu","input":{"operation":"video_note","url":"http://xhslink.com/o/8GqargIxrko"}}'

video_note accepts the same note_id and url fields and returns call.note.play_url plus the cover image. An image note sent to video_note cannot be read; that is a limitation of the platform, not of Anycap.

Errors

HTTPBodyWhat to do
200call.state=succeededRead call.note; charge settled.
202call.state=started / unknownKeep call.id and read GET /v1/generations/{id} with the original connection key. Do not submit a new fetch.
402error.code=insufficient_creditsAdd credits and retry. Nothing was submitted or charged.
404 / 502 / 503error.codeNo customer charge. Codes: note_not_found (missing, non-public note, or the other note type), upstream_error, capability_unavailable.

The same idempotency key replays the recorded result, even after the source is paused. Read results with the original connection key.

WeChat Official Accounts · Article details

StepMethod and pathResponse
Discover the authorized operationGET /v1/generations/models?type=social200; select model=wechat_mp, operation=article
Read an articlePOST /v1/generations200 succeeded; 202 started/unknown
Read the saved callGET /v1/generations/{call.id}200; inspect call.state

Read a public WeChat article by URL using the H5 article detail operation.

BASH
curl https://api.anycap.io/v1/generations \  -H "Authorization: Bearer $ANYCAP_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: $(uuidgen)" \  --max-time 120 \  -d '{"type":"social","model":"wechat_mp","input":{"operation":"article","url":"https://mp.weixin.qq.com/s/ARTICLE","raw":true}}'
FieldTypeDescription
input.urlstring
DescriptionRequired HTTPS mp.weixin.qq.com/s/ link, or /s?__biz= long link; at most 2048 UTF-8 bytes, no fragment or credentials
input.operationstring
Descriptionarticle (default)
input.rawboolean
DescriptionDefault true; includes additional metadata inside content

A successful response contains call.article with url, bizUin, itemIdx and content. Read content.title, author, nick_name, cdn_url, create_time, content_text, content_noencode, source_url and _content_type. mid and comment_id are strings; keep them as strings. Treat content_noencode as untrusted HTML.

Images are available in call.article.image_urls and the cover in call.article.cover_url. Each call.media_downloads item identifies its field (for example article.image_urls[0]), status, download_url and expires_at. Ready images have private signed download links valid until two hours after call completion. History reads do not extend expiry; expired or unavailable items have no download URL. Allow at least 30 seconds for article extraction; use a 120-second client timeout when preparing image downloads. The response does not include reading statistics or comment lists. raw=false preserves the same envelope and returns core content fields. Content types include article, immersive, video and unknown; HTML may be empty for non-article pages.

Image download fields

Response fieldMeaning
call.article.cover_url / image_urlsNormalized original image URLs; use media_downloads for saved downloads.
call.media_downloads[].fieldPath relative to call; article.cover_url or article.image_urls[0]. Array indexes start at zero.
source_urlOriginal platform image URL, separate from the saved download link.
download_urlPrivate signed GET URL for the saved image. Returned only for ready items; its host may differ from the API host.
expires_atFixed UTC deadline, at most two hours after call.completed_at. History reads and replays do not renew it.
statusready: available for download; unavailable: no saved copy or transfer/signing failed; expired: the deadline passed. The latter two omit download_url.

Use the complete download_url unchanged with GET. Do not prepend the API origin, alter the signed query, switch to HEAD, or attach an Anycap Authorization header. Anyone holding the link can download before expiry; keep it private. The two-hour deadline applies to the saved download link, not the original source_url. Image-transfer failures do not change a successful article response.

BASH
# Set DOWNLOAD_URL to a ready item's complete download_url.curl --fail "$DOWNLOAD_URL" --output article-image.jpg

Successful response (illustrative URLs)

JSON
{  "type": "social",  "call": {    "id": "8b8ab1ac-20ae-4d2a-8323-09d33a0f0540",    "state": "succeeded",    "operation": "article",    "url": "https://mp.weixin.qq.com/s/ARTICLE",    "article": {      "url": "https://mp.weixin.qq.com/s/ARTICLE",      "bizUin": 123456,      "itemIdx": 1,      "cover_url": "https://images.example.invalid/cover.jpg",      "image_urls": [        "https://images.example.invalid/illustration.jpg"      ],      "content": {        "title": "Example article",        "nick_name": "Example account",        "author": "Example author",        "create_time": "2026-11-09 10:00",        "content_text": "Example article text.",        "_content_type": "article",        "mid": "12345678901234567890",        "comment_id": "9007199254740993"      }    },    "media_downloads": [      {        "field": "article.cover_url",        "source_url": "https://images.example.invalid/cover.jpg",        "download_url": "https://downloads.example.invalid/cover.jpg?X-Amz-Date=20261109T020000Z&X-Amz-Expires=7200&X-Amz-Signature=EXAMPLE",        "expires_at": "2026-11-09T04:00:00Z",        "status": "ready"      },      {        "field": "article.image_urls[0]",        "source_url": "https://images.example.invalid/illustration.jpg",        "download_url": "https://downloads.example.invalid/illustration.jpg?X-Amz-Date=20261109T020000Z&X-Amz-Expires=7200&X-Amz-Signature=EXAMPLE",        "expires_at": "2026-11-09T04:00:00Z",        "status": "ready"      }    ],    "amount_microcredits": "12000000",    "charged_microcredits": "12000000",    "created_at": "2026-11-09T01:59:48Z",    "completed_at": "2026-11-09T02:00:00Z"  }}

HTTP 202 returns a started or unknown call; retrieve it with GET /v1/generations/{call.id}. GET returns HTTP 200 for a recorded call, so inspect call.state: succeeded, started, unknown or failed. Unknown is awaiting reconciliation, not proof of a background retry. Reuse the original request key for recovery. HTTP 404 with article_not_found means the article is unavailable; errors use an error envelope rather than call.