Policy
Content Safety Policy
Network rules run before a screenshot is requested. Content categories are defined here. They are not detected automatically.
Policy version 2026-10-30.1. This page describes the checks in this repository. It is not a claim that every prohibited site is recognized. api.datatuber.com is not this API.
What is enforced now
POST /api/screenshots and the signed-in dashboard accept a public https URL. Before Cloudflare is called, the server rejects other schemes, credentials in the URL, IP addresses, local and private names, and DNS answers that include a blocked address. The public error is URL_SECURITY_BLOCKED. It does not include the address that was refused.
A blocked request does not use a monthly screenshot credit. It does count toward the same rate limit as a capture: 6 requests a minute for a workspace, and 5 an hour for the public demo. No image is returned, and a refused request does not store a screenshot.
What is not enforced
Content categories below are not classified by a vendor. Google Web Risk is not connected, and it would not cover adult content, gambling, or piracy if it were. Cloudflare Gateway categories are not a field on this screenshot call. With no classifier configured, a public https URL that passes the network rules can still be captured. That is a gap, not a decision that the page is allowed.
The screenshot call uses Cloudflare Quick Actions. Session guardrails, which can limit hostnames, are documented for browser sessions and are unavailable on Quick Actions. This server therefore does not see redirects, iframes, scripts, stylesheets, or WebSockets the browser loads. Two DNS lookups before the call are not a connection-time check. Do not treat the current capture path as network isolation.
If CONTENT_POLICY_ENFORCED is set to all or to a list of categories, and no classifier answers, the route returns URL_UNDER_REVIEW and no image. That switch is off unless the server sets it. A hostname can also be refused with CONTENT_DENY_HOSTS when an operator lists hostname=category. The list ships empty.
Categories
These names are DataTuber policy categories. They are not a statement that a site is illegal in a particular place. Medical, education, research, journalism, sexual health, and news pages are not refused because a word appears in the URL.
adult_content— pornography and sexually explicit sites.gambling— betting, casinos, and gambling services.piracy— sites whose purpose is copyright infringement or illicit downloads. Legal distribution, open source, public-domain works, and news about piracy are not in this category.malware_phishing— phishing, malware, credential theft, and clear scams.child_safety— child sexual abuse material or exploitative content. A capture is not stored. No reporting desk is connected.terrorism_extremism— terrorist recruitment or promotion, with room for reporting and research.violent_exploitation— sites that facilitate serious violence, trafficking, or exploitation.other_restricted— only when a written rule names the case. It is not a catch-all.
Errors
A refusal is JSON, HTTP 403. The example below is not a real request. req_example is not an identifier this service issued.
PlannedExample
{
"error": {
"code": "CONTENT_POLICY_BLOCKED",
"message": "Screenshot capture is not permitted for this URL under DataTuber's Content Safety Policy.",
"category": "adult_content",
"request_id": "req_example",
"appeal_url": "https://datatuber.com/appeal?request_id=req_example",
"documentation_url": "https://datatuber.com/docs/content-policy"
}
}URL_SECURITY_BLOCKED has no category. URL_UNDER_REVIEW means no image was captured. There is no separate job queue, so a review result is also returned on the screenshot call.
Request a review
The appeal page accepts a request reference, a reason, and an explanation. Submission requires the account that owns the blocked request. Another account gets the same not-found response as an unknown reference. A review cannot override a network block, a child-safety block, or the other severe categories. DataTuber does not send email when a request is stored or decided, and no response time is promised.
The acceptable use draft is at /acceptable-use. It is not in effect.