Skip to main content

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>
The 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>
The 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 a sub_ 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}/stats
  • GET /instagram/submissions/{submission_id}/bot-score (Instagram only)
  • POST /instagram/submissions/{submission_id}/pause
  • POST /instagram/submissions/{submission_id}/resume
Use a 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 include comments 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.