Create tracked media
POST /instagram/submissions, POST /x/submissions and
POST /youtube/submissions accept 1 to 100 items.
account_id must be an account of the path’s platform. Every URL must be a
URL of that platform. Each result contains the input url, an open-string
status, and a nullable submission.
Known result statuses are created, already_tracked, not_found,
unsupported_url, platform_mismatch, not_owned, and not_video. The last
two apply only to X and YouTube. Clients must accept new statuses.
Retrying is safe. already_tracked returns the existing object and does not
change its metadata.
Cadence, dates and geo
You can also send these fields. They apply to every item in the request.
The response has an
estimate of the credits that one tracked media uses.
See Credits and limits for the prices.
PATCH /{platform}/submissions/{submission_id} can change metadata,
cadence_hours and end_at, and can turn geo on. You can turn geo off
with geo: false until the first read. After the first read, geo: false
returns 409 conflict. Geo on X returns 400 invalid_request.
A tracked media past its end_at cannot be resumed. Set a later end_at
first.
Tracking media on X
POST /x/submissions takes the same body as Instagram:
account_id must be an X account that connected through an X connect link.
An Instagram account ID returns 404.
Accepted URLs
We accept these URL shapes:https://x.com/<handle>/status/<id>https://x.com/i/status/<id>https://x.com/i/web/status/<id>
twitter.com host also works. The www. and mobile. hosts work for both
domains. A URL can end with /photo/1 or /video/1, and it can have a query
string.
We ignore the handle in the URL. We use only the status ID. The submission’s
canonical url is https://x.com/i/status/<id>.
Only the connected account’s videos
We read each URL and check who published it. We accept the URL only when the publisher is the X account that signed in through the connect link.media_type is video for every X submission.
Errors on X
We never accept a URL when we cannot check it.
Tracking media on YouTube
POST /youtube/submissions takes the same body as Instagram:
account_id must be a YouTube account that connected through a YouTube
connect link. An Instagram or X account ID returns 404.
We track uploaded YouTube media of any length, Shorts included. We do not
track a live or upcoming broadcast.
Accepted URLs
We accept these URL shapes:https://www.youtube.com/watch?v=<id>https://www.youtube.com/shorts/<id>https://www.youtube.com/live/<id>https://www.youtube.com/embed/<id>https://youtu.be/<id>
youtube.com and m.youtube.com hosts also work. A URL can have a query
string. The ID has 11 characters.
The submission’s canonical url is https://www.youtube.com/watch?v=<id>,
for a Short too.
Only the connected channel’s tracked media
We read each URL and check which channel published it. We accept the URL only when the channel is the YouTube account that signed in through the connect link.media_type is short_video for YouTube tracked media of 180 seconds or less, and
video for longer tracked media.
Errors on YouTube
We never accept a URL when we cannot check it.
Submission object
A submission has asub_ ID, platform, canonical url, platform media ID,
media type, and a compact account summary. It also has lifecycle fields,
metrics, metadata, and timestamps.
media_type is an open string. Known values are short_video,
video, image, carousel, and text.
The nested account contains id, username, and external_user_id. It does
not contain account metadata.
List and read
GET /instagram/submissions, GET /x/submissions and
GET /youtube/submissions require project_id. It supports account_id,
external_user_id, status, limit, and cursor filters.
Use these operations for one item. The X paths start with /x/submissions,
and the YouTube paths start with /youtube/submissions.
GET /instagram/submissions/{submission_id}PATCH /instagram/submissions/{submission_id}GET /instagram/submissions/{submission_id}/statsGET /instagram/submissions/{submission_id}/bot-score(Instagram only)POST /instagram/submissions/{submission_id}/pausePOST /instagram/submissions/{submission_id}/resume
sub_ ID. Do not send project_id to these operations. Pause and resume
have no request body.
Lifecycle
Submission status is a closed enum:active, paused, unavailable,
parked, or stopped.
Reason fields are open strings. Known unavailable reasons include
post_not_found, posted_before_professional, token_invalid,
no_linked_account, and connection_removed. Known parked reasons are
token_invalid, insights_permission_missing, account_not_professional, and
read_failed.
token_invalid, insights_permission_missing and account_not_professional
are about the account, so the account’s connection.reason carries the same
value. The tracked media start again by themselves when the creator connects
again.
Use POST /{platform}/submissions/pause or POST /{platform}/submissions/resume
for one project. These bulk operations require project_id. They change only
the tracked media of the path’s platform in that project.
X tracked media that is deleted on X becomes unavailable with the reason
post_not_found. YouTube tracked media that is deleted or made private on
YouTube becomes unavailable with the same reason.
There is no delete operation. Pause stops reads and keeps history.
Comments and demographics
List items can includecomments and demographics. GET /{platform}/submissions/{submission_id}
also includes demographics. Comments report their own
captured_at. demographics is present only on geo tracked media, and its
basis says whose audience it is:
See Audience and insights.
Analytics fields are omitted when analytics access is not enabled.
We do not read comments on X or YouTube.
comments.captured_at stays null
for X and YouTube tracked media.
Metrics on X
We read X tracked media on the cadence you choose, at the same credit price as Instagram tracked media. Geo is not available on X.
There is no bot score for X tracked media.
Metrics on YouTube
We read YouTube tracked media on the cadence you choose, at the same credit price as Instagram tracked media. With geo on, we also read the audience of the tracked media itself once a day. See Audience and insights.extra is empty for YouTube tracked media. There is no bot score for YouTube
tracked media.