Contract
{
"type": "object",
"required": [
"sec_user_id"
],
"properties": {
"count": {
"type": "integer",
"default": 20,
"description": "Number of followers to return in this page."
},
"max_time": {
"type": "string",
"default": "0",
"description": "Pagination cursor from a previous page's max_time; \"0\" for the first page."
},
"sec_user_id": {
"type": "string",
"examples": [
"MS4wLjABAAAA9y04iBlVdeMQqTJbqsQZKb-tqWqWW29jPVJqideHT70"
],
"description": "The Douyin account's public sec_user_id (the opaque id used on the web profile URL -- not its @handle). Determines whose follower list this call returns."
},
"source_type": {
"type": "integer",
"default": 1,
"description": "Source type (leave at the default)."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"total": {
"type": "number",
"description": "Total fan count for this account across all pages."
},
"has_more": {
"type": "boolean",
"description": "True when more fans exist past this page."
},
"max_time": {
"type": "number",
"description": "Cursor to pass back as `max_time` for the next page when has_more is true."
},
"followers": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"uid": {
"type": "string",
"description": "The follower's public numeric Douyin account id."
},
"language": {
"type": "string",
"description": "Account UI language, e.g. 'zh-Hans' on the fans observed."
},
"nickname": {
"type": "string",
"description": "The follower's public display name."
},
"signature": {
"type": "string",
"description": "The follower's profile bio text. Chinese-language text on the fans observed; may be empty."
},
"unique_id": {
"type": "string",
"description": "The follower's public Douyin handle (@handle). Observed as an empty string on some fans."
},
"aweme_count": {
"type": "number",
"description": "Number of videos posted."
},
"create_time": {
"type": "number",
"description": "Account creation Unix seconds. Observed as 0 (unknown) on the fans calibrated."
},
"is_verified": {
"type": "boolean",
"description": "Platform-verified badge present."
},
"account_region": {
"type": "string",
"description": "Region code where the follower's account was registered. Observed as an empty string on all fans calibrated."
},
"follower_count": {
"type": "number",
"description": "How many follow this follower."
},
"following_count": {
"type": "number",
"description": "How many this follower follows."
},
"total_favorited": {
"type": "number",
"description": "Total likes received on posts."
},
"iso_country_code": {
"type": [
"string",
"null"
],
"description": "ISO country code. Observed as `null` on every fan calibrated -- this field was never seen populated."
}
},
"additionalProperties": true
},
"description": "This page's follower records, one object per follower, in the account's own ordering. Absent (rather than empty-or-null) on the unrecognized-account error envelope."
},
"status_msg": {
"type": "string",
"description": "Human-readable error text, present on the unrecognized-account error case (observed value is the platform's '参数不合法'); absent on a normal response."
},
"status_code": {
"type": "number",
"description": "0 on a normal response; 5 on the unrecognized-account error."
},
"real_fans_count": {
"type": "number",
"description": "The platform's verified 'real fans' count. 0 on the account calibrated."
}
},
"description": "The follower-list record, as returned at routing.responseResultPath ($.output). For an unrecognized sec_user_id this is `{ status_code, status_msg }` with no follower list at all -- confirmed against the `invalid-user-rejected` fixture, which still billed the normal per-call price.",
"additionalProperties": true
}Pricing
Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.
Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.
| Charge | Rate |
|---|---|
Per call Flat, regardless of what comes back | $0.0020475 |
- Cost basis
- Not recorded
This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.
- Updated
- Sep 25, 2026
