SocialToAIStart freeConsole
POST/v1/call/douyin.marketing_calendarPreview

Douyin Xingtu marketing calendar API

Only on Douyin.

The Douyin Xingtu marketing calendar API returns the campaigns on Xingtu's marketing calendar over a span of time: platform events, e-commerce and seasonal moments, creative and industry campaigns, each with its name, description, kind, stage, sign-up period and running period. All at once, no paging. One call costs 3 credits ($0.006 to $0.01 depending on the pack); failed calls are free. Call it over HTTP or from your AI client over MCP. Last tested 2026-10-17.

100 credits on sign-up, no card needed
3 creditsper call
Up to 200 itemsfirst page only
2026-10-17last tested
995 Bsample response, 1 item

Last updated:

Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Request and response

curl https://api.socialtoai.com/v1/call/douyin.marketing_calendar \  -H "Authorization: Bearer $SOCIALTOAI_KEY" \  -H "Content-Type: application/json" \  -d '{    "since": "2026-10-01T00:00:00Z",    "until": "2026-12-31T23:59:59Z"  }'
import osimport requestsresponse = requests.post(    "https://api.socialtoai.com/v1/call/douyin.marketing_calendar",    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},    json={        "since": "2026-10-01T00:00:00Z",        "until": "2026-12-31T23:59:59Z",    },)print(response.json())
# Connected over MCP? Ask in plain words.Use the Douyin Xingtu marketing calendar interface (douyin.marketing_calendar) with since: 2026-10-01T00:00:00Z, until: 2026-12-31T23:59:59Z.# Your AI calls the call tool with:{  "since": "2026-10-01T00:00:00Z",  "until": "2026-12-31T23:59:59Z"}
Sign in to run3 creditsOpens in the Playground with these parameters after you sign in. It never runs by itself.
200 OK995 B3 credits
{  "op": "douyin.marketing_calendar",  "platform": "douyin",  "status": "ok",  "items": [    {      "platform": "douyin",      "id": "…",      "ref": null,      "approx": [],      "type": "entry",      "entry_type": "xingtu_campaign",      "title": "…",      "url": null,      "rank": null,      "heat": null,      "fields": {        "description": "…",        "category": "ecommerce",        "stage": "open",        "signup_starts_at": "2026-09-29T02:29:20.000Z",        "signup_ends_at": "2026-10-31T02:29:20.000Z",        "starts_at": "2026-10-10T02:29:04.000Z",        "ends_at": "2026-11-20T02:29:04.000Z",        "image_url": "https://example.com/…"      }    }  ],  "unavailable": [],  "page": {    "has_more": false  },  "cost_credits": 3}
entry_type
xingtu_campaign
description
…
category
ecommerce
stage
open
signup_starts_at
2026-09-29T02:29:20.000Z
signup_ends_at
2026-10-31T02:29:20.000Z
starts_at
2026-10-10T02:29:04.000Z

Names and text were removed from the sample; the numbers are as recorded.

Sample data1 of the 43 items recorded

2 parameters.
All required.

Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.

NameTypeRequiredDefaultDescription
sincedatetimeRequired—Start of the span: campaigns that overlap the span are returned
untildatetimeRequired—End of the span
First page only: up to 200 items, with no cursor parameter and no next page.

The fields of each item.
What Douyin cannot give is marked.

FieldTypeMeaning
items[].titlestringThe entry's title or name.
items[].urlstringA link that opens it; null where the platform's list has none.
items[].rankintegerPosition on a board, from 1.
items[].heatintegerThe platform's heat score.
items[].fields.descriptionstringWhat the campaign is.
items[].fields.categorystringThe kind of campaign: a platform event, an e-commerce date, a seasonal or mood moment, creative marketing, or an industry campaign.
items[].fields.stagestringHow far along the campaign is: in preparation, open for sign-up, live, or ended.
items[].fields.signup_starts_atstringWhen sign-up opens.
items[].fields.signup_ends_atstringWhen sign-up closes.
items[].fields.starts_atstringWhen the campaign starts.
items[].fields.ends_atstringWhen the campaign ends.
items[].fields.image_urlstringThe campaign's main image.
nullFields Douyin cannot give

Douyin gives every field of this call. Where one item lacks a value, that field is null.

Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. Response format

What to expect.

One call returns the first page only, up to 200 items, with no cursor, for 3 credits.
A call that runs and finds nothing is a successful call: status is "empty", items is empty, and it costs 3 credits.

1 call per second per key, 5 after a purchase; going over is not charged. Rate limits

A failed call costs 0 credits and is never retried on its own. Error codes

Once connected over MCP, these questions use it.

  1. Get the campaigns on Xingtu's marketing calendar over a span of time (since: 2026-10-01T00:00:00Z, until: 2026-12-31T23:59:59Z).
    call {"op":"douyin.marketing_calendar","since":"2026-10-01T00:00:00Z","until":"2026-12-31T23:59:59Z"}
    3 credits

Questions.
Short answers.

Everything on Douyin
Do I need a Douyin account or Douyin's own API access?
No. You only need a SocialToAI key. The call returns content and account information publicly visible on Douyin; you never sign in to Douyin or apply for anything there.
Can I get the next page?
No. On Douyin this interface gives its first page only (up to 200 items): the response carries no cursor, and page.has_more is always false.
What does “Preview” mean here?
Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Your AI is one URL away
from all of social media.

100 credits on sign-up, no card needed