How a check works
1. Domain onlyAn address without a page of one of the most visited websites, such as foxnews.com, is answered straight from our database. Every other address is checked live.
2. PageThe page is loaded and checked for the 10 categories. If the first way of loading it fails, other ways are tried until the page can be read, for up to 10 seconds.
3. Page cannot be loadedThe answer is based on the website's categories in our database, and page_read is false. The page address can add a category, but never removes one.
4. UnverifiedWhen the page could not be loaded and the website is not in our database, unverified is true and the page is treated as not safe, unless you send unverified=allow.
Most of the response time is the time it takes the page itself to load, so the check runs about as long as the student's own browser needs to open the page.
Pricing
$500 per 1 million calls ($0.50 per 1,000 calls), from prepaid packs starting at $99. Calls to this API are counted separately from the credits of our other API plans. It is priced below our standard API because it returns web filtering answers only, without IAB categories and enrichment data. To buy calls, contact us at [email protected].
Endpoint
GET or POST https://www.websitecategorizationapi.com/api/filter/cipa.php
| Parameter | Required | Description |
url | yes | The address to check: a full page address or a domain, with or without https://. |
api_key | yes | Your API key from your account. |
unverified | no | block (default) or allow: what to answer when the page cannot be loaded and the website is not in our database. |
Response fields
| Field | Type | Meaning |
cipa_safe | true / false | false when the page has content that CIPA requires schools and libraries to block (obscene, child pornography or harmful to minors: our Adult category) or is a VPN / proxy tool that gets around the filter. CIPA itself does not cover weapons, drugs, gambling or the other categories. |
k12_safe | true / false | false when any of the 10 categories below is flagged: the categories schools usually block under their own internet safety policy. |
flags | list | The categories that were found, for example ["Adult"]. Empty when nothing was found. |
scores | object | A score from 0 to 1 for each of the 10 categories for this page. A category is flagged from 0.5. null when the answer came from the database. |
root_domain_categories | list | The categories of the root domain (the whole website) from our database, for example ["News/Media"]. An adult or gambling website stays flagged on every one of its pages. |
page_read | true / false | Whether the page itself was loaded and read. |
checked_from | text | page, website (domain-only address), website_and_address (page could not be loaded) or address (page could not be loaded, website not in our database) or dns (the domain does not exist). |
unverified | true / false | true when the page could not be loaded and the website is not in our database. |
domain_exists | true / false / null | false when the domain is not registered (checked when no page could be loaded), null when it could not be checked. |
response_ms | number | Time the check took, in milliseconds. |
filtering_taxonomy | list | All categories (page and website) in the same format as our other web filtering endpoints. |
status | number | 200 when the check succeeded. |
Example: a page on a news website
curl "https://www.websitecategorizationapi.com/api/filter/cipa.php?api_key=YOUR_API_KEY&url=https://www.foxnews.com/entertainment/kim-kardashians-full-frontal-pics-hit-the-web"
{
"url": "https://www.foxnews.com/entertainment/kim-kardashians-full-frontal-pics-hit-the-web",
"status": 200,
"cipa_safe": false,
"k12_safe": false,
"flags": ["Adult"],
"scores": {"Adult": 0.79, "Gambling": 0.02, "Illegal Drugs": 0.02, "Weapons": 0.01, "Violence": 0.05,
"Hate/Discrimination": 0.04, "VPN / Proxy / Anonymizers": 0.02, "Alcohol": 0.02, "Tobacco": 0.02, "Dating": 0.02},
"root_domain_categories": ["News/Media", "Political"],
"page_read": true,
"checked_from": "page",
"unverified": false,
"domain_exists": true,
"response_ms": 730,
"filtering_taxonomy": [["Category name: Adult", "Confidence: 0.79"], ["Category name: News/Media", "Confidence: 1.0"],
["Category name: Political", "Confidence: 1.0"]]
}
Example: a domain only
curl "https://www.websitecategorizationapi.com/api/filter/cipa.php?api_key=YOUR_API_KEY&url=foxnews.com"
{
"url": "foxnews.com",
"status": 200,
"cipa_safe": true,
"k12_safe": true,
"flags": [],
"scores": null,
"root_domain_categories": ["News/Media", "Political"],
"page_read": false,
"checked_from": "website",
"unverified": false,
"domain_exists": true,
"response_ms": 0,
"filtering_taxonomy": [["Category name: News/Media", "Confidence: 1.0"], ["Category name: Political", "Confidence: 1.0"]]
}
The 10 categories
| Category | A page is flagged when it contains or mainly offers | Counts for |
| Adult | pornography, nudity, nude or topless photos, or sexually explicit material, including news or gossip articles about nude or explicit photos | CIPA, K-12 |
| VPN / Proxy / Anonymizers | VPNs, web proxies or tools that hide identity or get around a web filter | CIPA, K-12 |
| Gambling | betting, casinos, poker, lotteries or sports betting with money | K-12 |
| Illegal Drugs | buying, selling, using or promoting illegal or recreational drugs, including cannabis | K-12 |
| Weapons | selling or promoting guns, ammunition, knives or weapon making | K-12 |
| Violence | graphic violence, gore, killing or serious assault shown or described | K-12 |
| Hate/Discrimination | content attacking people for race, religion, ethnicity, gender or sexual orientation | K-12 |
| Alcohol | selling or promoting alcoholic drinks | K-12 |
| Tobacco | selling or promoting cigarettes, vaping or tobacco | K-12 |
| Dating | dating sites or apps for finding romantic or sexual partners | K-12 |
Errors
| Status | Meaning |
400 | The url parameter is missing or is not a web address. |
401 | The API key is missing or invalid. |
403 | Your prepaid web filtering API calls are used up. |
503 | The check could not finish. Please retry the request. |