Contract
{
"type": "object",
"required": [
"tag_name"
],
"properties": {
"tag_name": {
"type": "string",
"examples": [
"tiktok"
],
"description": "Tag name"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"shareMeta": {
"type": "object",
"properties": {
"desc": {
"type": "string",
"description": "Share-preview description text for this hashtag."
},
"title": {
"type": "string",
"description": "Share-preview title text for this hashtag."
}
},
"description": "Present only when `tag_name` resolves to a real hashtag.",
"additionalProperties": true
},
"statusCode": {
"type": "number",
"description": "The vendor's own raw result-status code for this lookup: observed as `0` on the one real hashtag calibrated and `10205` on the invented, not-found tag name -- use it to detect a not-found result even though this tool's fixtures already show that case as an object with only this field set."
},
"challengeInfo": {
"type": "object",
"properties": {
"statsV2": {
"type": "object",
"properties": {
"viewCount": {
"type": "string",
"description": "Total views across videos tagged with this hashtag, as a digit string."
},
"videoCount": {
"type": "string",
"description": "Total videos tagged with this hashtag, as a digit string."
}
},
"description": "The hashtag's video and view counts, as decimal-digit STRINGS (not numbers). This is the counter TikHub reports as current; a separate legacy `stats` object on the same raw response reported `0` for both fields on the one real hashtag calibrated (a well-known, actively-posted-to hashtag), so that legacy counter is not trustworthy and is not exposed by this tool.",
"additionalProperties": true
},
"challenge": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The hashtag's numeric TikTok id."
},
"desc": {
"type": "string",
"description": "Hashtag description. Empty string observed on the one real hashtag calibrated."
},
"title": {
"type": "string",
"description": "The hashtag's own name, e.g. 'tiktok'."
},
"coverThumb": {
"type": "string",
"description": "Same cover image, thumbnail size. Empty string observed, same caveat as `coverLarger`."
},
"isCommerce": {
"type": "boolean",
"description": "Whether this is a branded/commerce hashtag."
},
"coverLarger": {
"type": "string",
"description": "Cover image URL for the hashtag page, largest size. Observed as an empty string on the one real hashtag calibrated -- whether a populated value is a full image URL is unconfirmed."
},
"coverMedium": {
"type": "string",
"description": "Same cover image, medium size. Empty string observed, same caveat as `coverLarger`."
},
"profileThumb": {
"type": "string",
"description": "Same profile image, thumbnail size. Empty string observed, same caveat as `coverLarger`."
},
"profileLarger": {
"type": "string",
"description": "Profile image URL for the hashtag page, largest size. Empty string observed, same caveat as `coverLarger`."
},
"profileMedium": {
"type": "string",
"description": "Same profile image, medium size. Empty string observed, same caveat as `coverLarger`."
}
},
"additionalProperties": true
},
"challengeAnnouncement": {
"type": "object",
"properties": {
"body": {
"type": "string",
"description": "Empty string observed on the one real hashtag calibrated."
},
"title": {
"type": "string",
"description": "Empty string observed on the one real hashtag calibrated."
}
},
"description": "Campaign announcement banner text for a branded hashtag, when set.",
"additionalProperties": true
}
},
"description": "Present only when `tag_name` resolves to a real hashtag.",
"additionalProperties": true
}
},
"description": "The hashtag challenge record, as returned at routing.responseResultPath ($.output). Observed as only `{ statusCode: 10205 }` (no `challengeInfo` at all) when the given `tag_name` does not resolve to an existing TikTok hashtag -- confirmed against the `nonexistent-tag` fixture.",
"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 23, 2026
