Before you start
- API in TEST:
https://test-api.segmnt.cloud POST /v1/projects/{projectId}/videos/{videoId}/reportsaccepts a project API key (Authorization: Bearer sk_...) — the same key you use for playback tokens.- The player has no “report” button yet. Your own page collects the report and your server sends it to segmnt.
- Times are UTC.
1. File a viewer report
POST /v1/projects/{projectId}/videos/{videoId}/reports
Body:
201), or 200 when the same Idempotency-Key was already used:
- The report is stored against the video and the project of the key. A key for
another project gets
404 not_found, the same as an unknown video. - Every accepted report raises an alert for our team at once (section 2).
- The answer is always the stored report, and nothing about what we do next (section 3).
- Send an
Idempotency-Keyheader (1 to 255 characters) to make a retry safe. The key is unique per project: a retriedPOSTreturns the first report with200and raises no second alert. Without the header, a report is at-least-once, so dedupe on your side when you can.
2. What our team does with a report
- Every report appears in our internal review list at once. A person reads it.
- If the report is real, we hold the video or remove it (section 3). A hold is reversible; a remove is not.
- Our review tools are internal. They are not part of this API and customers cannot call them.
Our review page is internal
Our team reads reports on an internal review page at/admin on the dashboard
host. It sits behind Cloudflare Access, and it is not part of this API.
- The page is served only at the real
/adminpath. There is no#/adminhash route, so the Access policy on/admincovers the page. The API under/v1/admin/**is a second door to the same data and shares the same gate. - When a reviewer is already signed in through Access, the page opens with no
extra token. A shared
ADMIN_TOKENis only the TEST fallback: without an Access session the API answers401and the page shows a token form. - The videos list shows the account name, not the raw account id.
/v1/admin/** from your app. It is for our team only.
3. When we hold or remove a video
We can change a video from our side:
We send a webhook on a hold:
Handle
video.held in your app: hide the player, or show a short message. You
receive these events only if your webhook endpoint subscribed to them.
A hold does not delete your file or reset your usage. To stop a video forever,
ask us to remove it.
4. New accounts and automatic moderation
Every new account is checked by a person on our team. This runs in the background: you never see it, and you do not have to do anything. If we find a problem, we may hold or remove a video (section 3). A video also gets an automatic moderation check after it is ready, and a free account’s first videos are held until a person checks them. A held video does not play: a playback token is refused with409 video_not_ready and the
detail The video is held for review. Our team releases it from the same review
page. See Moderation and held videos.
5. Errors
Errors useapplication/problem+json. Use the code field in your code, not
the text.
Tested in TEST
Checked againsthttps://test-api.segmnt.cloud on 14 Oct 2026, once the report
route was on TEST:
POST .../reportswith no key, and with a wrong key, both answer401 unauthorized.GET .../reportsanswers405 method_not_allowed.- The full path with a project key is proved by our API tests
(
api/src/alerts.test.ts):201for a new report,200for a retry with the sameIdempotency-Key,400 invalid_requestfor a missingreason, and404 not_foundfor a key of another project.