You need a TGLSC account to use the API dashboard. Log in or create an account to manage your API tokens.
Global platform statistics and your API usage overview.
Manage your API tokens. You can create up to 5 tokens per account.
Events and special promotions on TGLSC LTSLink.
During the Density 4 Season 3 event, your LTSLink API limits are automatically multiplied based on your TGLSC account level! Keep leveling up on the main platform to unlock massive API limits.
During this season, Level Vouchers will be your best friend, use them wisely!
| Account Level | Multiplier | New Weekly Limit | Difficulty | Status |
|---|---|---|---|---|
Discord Linked | 1.25x Limit | 25,000 requests | Easy | โ (Permanently Available) |
Level 100+ | 2x Limit | 40,000 requests | Medium | โ Available |
Level 200+ | 4x Limit | 80,000 requests | Hard | โ Available |
Level 500+ | 50x Limit | 1,000,000 requests | Almost Impossible (trading + giveaways + insane grind) | โ Available |
Level 2000+ | 225x Limit | 4,500,000 requests | Cheater (no mercy.) | โ Available |
These limits apply to all tokens owned by your account. Make sure your account is linked and meets the level requirements!
Check your inbox regularly for updates, announcements and potential rewards!
Link your Discord account to your TGLSC profile on the dashboard to unlock this feature.
| Account Status | Multiplier |
|---|---|
Discord Linked | x1.25 Limit |
Discord Unlinked | x1.00 Default Limit |
Everything you need to know about the TGLSC LTSLink API.
The TGLSC LTSLink API allows you to programmatically check URLs against 48+ web content filters used in schools and enterprises. Get real-time categorization and block status for any URL.
https://live.glseries.net/api/v1API tokens are linked to your TGLSC account at glseries.net. You must be logged in to create and manage tokens.
1. Log in to your TGLSC account at glseries.net.
2. Create an API token from the Tokens page or sidebar.
3. Make a GET request to https://live.glseries.net/api/v1/check with your token and a URL.
4. Receive categorization results from all filters.
GET https://live.glseries.net/api/v1/check?token=gl_your_token&url=glseries.net
| Endpoint | Description |
|---|---|
/api/v1/check | Check a single URL against one or all filters |
/api/v1/bulk | Check up to 3 URLs at once (each URL counts individually) |
/api/v1/vs | Compare exactly 2 filters head-to-head on a URL |
/api/v1/multi | Check a URL against a custom set of filters |
/api/v1/filters | List all available filters (no auth required) |
All check endpoints support a stream=1 parameter that returns results as a live Server-Sent Events (SSE) feed. Results appear as each filter completes instead of waiting for all filters to finish.
GET https://live.glseries.net/api/v1/check?token=gl_your_token&url=glseries.net&stream=1
| Limit Type | Value |
|---|---|
| Weekly requests | 20,000 per token |
| Burst limit | 10 requests per 5 seconds |
| Per-minute limit | 60 requests per minute |
| Bulk URL limit | 3 URLs per bulk request |
Each URL/domain scanned counts as one request toward your weekly limit, regardless of how many filters are run against it. For example, checking 3 URLs in a bulk request counts as 3 requests.
All responses are returned as JSON. Successful responses include a success: true field. Streaming responses use SSE format with JSON data payloads.
How to authenticate with the LTSLink API.
All API tokens are linked to a TGLSC account. You must be logged in at glseries.net to create tokens.
All API requests require a valid token. Tokens are passed as a query parameter.
GET https://live.glseries.net/api/v1/check?token=gl_abc123...&url=google.com
All tokens start with the prefix gl_ followed by 48 hexadecimal characters.
gl_a1b2c3d4e5f6...
Complete reference for all available endpoints.
GET/api/v1/check
Checks a single URL against all filters, or a specific filter if specified. Supports streaming.
| Parameter | Required | Description |
|---|---|---|
token | Yes | Your API token |
url | Yes | URL to check (e.g. google.com) |
filter | No | Filter key to check against a single filter (e.g. fortiguard) |
stream | No | Set to 1 for live SSE streaming results |
Counts as 1 request toward your weekly limit.
GET /api/v1/check?token=gl_token&url=google.com
GET /api/v1/check?token=gl_token&url=google.com&filter=fortiguard
GET /api/v1/check?token=gl_token&url=google.com&stream=1
GET/api/v1/bulk
Check up to 3 URLs at once. Each URL counts as a separate request toward your weekly limit. Supports streaming and optional single-filter mode.
| Parameter | Required | Description |
|---|---|---|
token | Yes | Your API token |
url | Yes | Comma-separated URLs (max 3). Example: google.com,github.com,glseries.net |
filter | No | Filter key to only check a single filter for all URLs |
stream | No | Set to 1 for live SSE streaming results |
Counts as N requests where N = number of URLs. 3 URLs = 3 requests toward your weekly limit.
GET /api/v1/bulk?token=gl_token&url=google.com,github.com,glseries.net
GET /api/v1/bulk?token=gl_token&url=google.com,github.com&filter=fortiguard
GET /api/v1/bulk?token=gl_token&url=google.com,github.com,glseries.net&stream=1
{
"success": true,
"results": {
"google.com": [
{ "filter": "fortiguard", "name": "FortiGuard", "category": "Search Engines", "blocked": false, "error": false, "responseTime": 120 },
...
],
"github.com": [ ... ],
"glseries.net": [ ... ]
},
"totalUrls": 3,
"totalFilters": 48,
"usage": { "weeklyUsed": 45, "weeklyLimit": 20000 }
}
data: {"type":"init","urls":["google.com","github.com"],"totalUrls":2,"totalFilters":48,"totalChecks":86}
data: {"type":"result","url":"google.com","filter":"fortiguard","name":"FortiGuard","category":"Search Engines","blocked":false,"error":false,"responseTime":95}
data: {"type":"result","url":"github.com","filter":"fortiguard","name":"FortiGuard","category":"Information Technology","blocked":false,"error":false,"responseTime":110}
data: {"type":"result","url":"google.com","filter":"lightspeed","name":"Lightspeed","category":"Search Engines","blocked":false,"error":false,"responseTime":200}
...
data: {"type":"done","usage":{"weeklyUsed":48,"weeklyLimit":20000}}
GET/api/v1/vs
Compare exactly 2 filters head-to-head on one or more URLs. Great for seeing how different filters categorize the same site. Supports streaming and bulk URLs (max 3).
| Parameter | Required | Description |
|---|---|---|
token | Yes | Your API token |
url | Yes | URL or comma-separated URLs (max 3) |
filters | Yes | Exactly 2 filter keys separated by comma. Example: fortiguard,lightspeed |
stream | No | Set to 1 for live SSE streaming results |
Counts as N requests where N = number of URLs. The number of filters does not affect counting.
GET /api/v1/vs?token=gl_token&url=glseries.net&filters=fortiguard,lightspeed
GET /api/v1/vs?token=gl_token&url=glseries.net,youtube.com&filters=cisco,goguardian&stream=1
{
"success": true,
"mode": "versus",
"results": {
"glseries.net": {
"fortiguard": {
"filter": "fortiguard", "name": "FortiGuard",
"category": "Games", "blocked": true, "error": false, "responseTime": 130
},
"lightspeed": {
"filter": "lightspeed", "name": "Lightspeed",
"category": "Security - Proxy", "blocked": true, "error": false, "responseTime": 95
}
}
},
"filters": [
{ "key": "fortiguard", "name": "FortiGuard" },
{ "key": "lightspeed", "name": "Lightspeed" }
],
"totalUrls": 1,
"usage": { "weeklyUsed": 48, "weeklyLimit": 50000 }
}
GET/api/v1/multi
Check a URL against a custom set of filters โ pick any number you want. Unlike /vs which requires exactly 2, this lets you choose 1, 5, 10, or all of them. Supports streaming and bulk URLs (max 3).
| Parameter | Required | Description |
|---|---|---|
token | Yes | Your API token |
url | Yes | URL or comma-separated URLs (max 3) |
filters | Yes | Comma-separated filter keys (any number). Example: fortiguard,cisco,goguardian,securly |
stream | No | Set to 1 for live SSE streaming results |
Counts as N requests where N = number of URLs. The number of filters does not affect counting.
GET /api/v1/multi?token=gl_token&url=youtube.com&filters=fortiguard,cisco,goguardian
GET /api/v1/multi?token=gl_token&url=youtube.com,twitch.tv&filters=fortiguard,lightspeed,securly,iboss&stream=1
{
"success": true,
"mode": "multi",
"results": {
"youtube.com": [
{ "filter": "fortiguard", "name": "FortiGuard", "category": "Streaming Media", "blocked": false, "error": false, "responseTime": 115 },
{ "filter": "cisco", "name": "Cisco Umbrella", "category": "Media Sharing", "blocked": false, "error": false, "responseTime": 200 },
{ "filter": "goguardian", "name": "GoGuardian", "category": "Streaming", "blocked": true, "error": false, "responseTime": 88 }
]
},
"filters": [
{ "key": "fortiguard", "name": "FortiGuard" },
{ "key": "cisco", "name": "Cisco Umbrella" },
{ "key": "goguardian", "name": "GoGuardian" }
],
"totalUrls": 1,
"usage": { "weeklyUsed": 49, "weeklyLimit": 20000 }
}
GET/api/v1/filters
Returns a list of all available filter keys and names. No authentication required.
GET/api/stats
Returns the total number of checks performed on the platform. No authentication required.
Add &stream=1 to any check endpoint (/check, /bulk, /vs, /multi) to receive results as a live Server-Sent Events stream.
Instead of waiting for all filters to complete before receiving a response, results are pushed to you the moment each filter finishes. This is useful for:
| Event Type | Description |
|---|---|
init | Sent first โ contains metadata about the scan (URLs, filter count, total checks) |
result | Sent as each filter completes โ contains the URL, filter key, category, blocked status, and response time |
done | Sent last โ indicates all filters have completed, includes usage stats |
const source = new EventSource(
'https://live.glseries.net/api/v1/check?token=gl_token&url=google.com&stream=1'
);
source.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'init') {
console.log('Scan started:', data.totalFilters, 'filters');
}
if (data.type === 'result') {
console.log(data.filter, 'โ', data.category, data.blocked ? 'โ BLOCKED' : 'โ
OK');
}
if (data.type === 'done') {
console.log('All done! Used:', data.usage.weeklyUsed, '/', data.usage.weeklyLimit);
source.close();
}
};
All content filters you can check against.
| Key | Name | Description | Status |
|---|---|---|---|
fortiguard | ๐ก๏ธ FortiGuard | Fortinet web filter database | |
lightspeed | ๐ฆ Lightspeed | Lightspeed Systems filter | |
paloalto | ๐ชต Palo Alto | Palo Alto Networks URL filtering | |
blocksiweb | ๐งฑ Blocksi Web | Blocksi standard web filter | |
blocksiai | ๐ค Blocksi AI | Blocksi AI-powered classification | |
blocksiguardian | โ๏ธ Blocksi Guardian | Blocksi Guardian filtering system | |
linewize | ๐โ๐ฉ Linewize | Linewize content filter | |
cisco | โ๏ธ Cisco Umbrella | Cisco Umbrella (OpenDNS) | |
securly | โ๏ธ Securly | Securly cloud filter | |
goguardian | ๐ GoGuardian | GoGuardian web filter | |
goguardianv2 | ๐ก GoGuardian V2 | GoGuardian V2-powered classification | |
goguardianai | โ๏ธ GoGuardian AI | GoGuardian AI-powered classification | |
lanschool | ๐ซ LanSchool | LanSchool web filter | |
lanschoolair | ๐ง LanSchool Air | LanSchool Air content filter | |
contentkeeper | ๐งน ContentKeeper | ContentKeeper filter | |
aristotle | ๐ฅ AristotleK12 | Aristotle K-12 filter | |
senso | ๐ณ Senso Cloud | Senso Cloud filter | |
deledao | ๐ Deledao | Deledao AI filter | |
iboss | ๐ผ iBoss | iBoss cloud filter | |
barracuda | ๐ฆ Barracuda | Barracuda web reputation filter | |
dnsfilter | ๐ก DNSFilter | DNSFilter domain categorization | |
qustodio | ๐ชผ Qustodio | Qustodio parental control filter | |
sophos | ๐ณ Sophos | Sophos SXL4 URL classification | |
zscaler | โ๏ธ Zscaler | Zscaler cloud filter | |
gaggle | ๐ฆ Gaggle | Gaggle AI filter | |
smoothwall | ๐ค Smoothwall | Smoothwall content filter | โ ๏ธ |
safedns | ๐ผ SafeDNS | SafeDNS content filter | |
ruckus | ๐ Ruckus | Ruckus content filter | |
unifi | ๐ Unifi | Unifi content filter (Deprecated) | โ ๏ธ |
webroot | ๐ฑ Webroot | Webroot malware filter | |
nextdns | ๐ฐ๏ธ NextDNS | NextDNS content filter | |
netsweeper | ๐ซ Netsweeper | Netsweeper content filter | |
hapara | ๐งฉ Hapara | Hapara content filter | |
forcepoint | ๐น ForcePoint | ForcePoint web filtering | |
cleanbrowsing | ๐ฟ CleanBrowsing | CleanBrowsing DNS filter | |
adguard | ๐งญ AdGuard | AdGuard DNS/content filtering | |
googlesafebrowsing | ๐งจ Google Safe Browsing | Google malicious site detection | |
opendns | ๐งฌ OpenDNS | Cisco OpenDNS filtering | |
watchguard | ๐๏ธ WatchGuard | WatchGuard web filtering | |
cloudflareintel | ๐ฉ๏ธ Cloudflare Intel | Cloudflare Intel content filtering | โ ๏ธ |
cloudflarefamily | ๐ก Cloudflare Family | Cloudflare Family content filtering | |
quad9 | ๐ท Quad9 | Quad9 malware filter | |
trellix | ๐ธ Trellix | Trellix Real-Time Database filter (Deprecated) | โ ๏ธ |
controld | ๐ Control D | Control D content filter | |
dragonflyai | ๐ฆ Dragonfly AI | Dragonfly AI filtering | |
norton | ๐ Norton | Norton filter | |
kaspersky | ๐ค๏ธ Kaspersky | Kaspersky filter | โ ๏ธ |
ciracs | ๐ CIRA CS | CIRA CS filter | |
safesurfer | ๐ SafeSurfer | SafeSurfer filter | |
mrworldwide | ๐ Mr. Worldwide | Mr. Worldwide filter (april fools edition) | โฐ |
Error codes and rate limiting behavior.
| Code | HTTP Status | Description |
|---|---|---|
MISSING_TOKEN | 401 | No token provided |
INVALID_TOKEN | 401 | Token does not exist |
TOKEN_DISABLED | 403 | Token has been disabled |
NO_ACCOUNT | 403 | Token not linked to an account |
WEEKLY_LIMIT | 429 | 20,000 weekly request limit reached |
UNKNOWN_FILTER | 404 | Invalid filter key specified |
MISSING_URL | 400 | No URL parameter provided |
MISSING_FILTERS | 400 | No filters parameter provided (for /vs and /multi) |
INVALID_FILTER_COUNT | 400 | Wrong number of filters for /vs (must be exactly 2) |
NO_FILTERS | 400 | Empty filters parameter (for /multi) |
TOO_MANY_URLS | 400 | More than 3 URLs provided in bulk request |
INVALID_TLD | 400 | Domain uses an unrecognized top-level domain |
CHECK_FAILED | 500 | Filter check encountered an error |
API tokens have two levels of rate limiting:
When rate limited, the API returns a 429 status with a retryAfter field indicating seconds to wait.
Each token has a weekly limit of 20,000 requests. Each URL scanned counts as one request, regardless of the number of filters checked against it.
The /bulk, /vs, and /multi endpoints accept up to 3 URLs per request. Each URL counts individually toward your weekly limit.
Quick examples in popular languages.
const res = await fetch(
'https://live.glseries.net/api/v1/check?token=gl_your_token&url=glseries.net'
);
const data = await res.json();
console.log(data.results);
import requests
r = requests.get('https://live.glseries.net/api/v1/check', params={
'token': 'gl_your_token',
'url': 'glseries.net'
})
print(r.json())
curl "https://live.glseries.net/api/v1/check?token=gl_your_token&url=glseries.net"
curl "https://live.glseries.net/api/v1/check?token=gl_your_token&url=glseries.net&filter=fortiguard"
const source = new EventSource(
'https://live.glseries.net/api/v1/check?token=gl_your_token&url=google.com&stream=1'
);
source.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'result') {
console.log(`${data.filter}: ${data.category} โ ${data.blocked ? 'BLOCKED' : 'OK'} (${data.responseTime}ms)`);
}
if (data.type === 'done') {
console.log('Scan complete. Weekly usage:', data.usage.weeklyUsed);
source.close();
}
};
import requests
import json
url = 'https://live.glseries.net/api/v1/check'
params = {'token': 'gl_your_token', 'url': 'google.com', 'stream': '1'}
with requests.get(url, params=params, stream=True) as r:
for line in r.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('data: '):
data = json.loads(line[6:])
if data['type'] == 'result':
print(f"{data['filter']}: {data['category']} โ {'BLOCKED' if data['blocked'] else 'OK'}")
elif data['type'] == 'done':
print(f"Done. Used: {data['usage']['weeklyUsed']}/{data['usage']['weeklyLimit']}")
break
curl "https://live.glseries.net/api/v1/bulk?token=gl_your_token&url=google.com,github.com,glseries.net"
const source = new EventSource(
'https://live.glseries.net/api/v1/bulk?token=gl_your_token&url=google.com,github.com&stream=1'
);
source.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'result') {
console.log(`[${data.url}] ${data.filter}: ${data.category}`);
}
if (data.type === 'done') {
source.close();
}
};
curl "https://live.glseries.net/api/v1/bulk?token=gl_your_token&url=google.com,github.com,glseries.net&filter=fortiguard"
curl "https://live.glseries.net/api/v1/vs?token=gl_your_token&url=glseries.net&filters=fortiguard,lightspeed"
import requests, json
params = {
'token': 'gl_your_token',
'url': 'glseries.net',
'filters': 'fortiguard,lightspeed',
'stream': '1'
}
with requests.get('https://live.glseries.net/api/v1/vs', params=params, stream=True) as r:
for line in r.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith('data: '):
data = json.loads(line[6:])
if data['type'] == 'result':
status = 'BLOCKED' if data['blocked'] else 'ALLOWED'
print(f"[{data['url']}] {data['name']}: {data['category']} โ {status}")
elif data['type'] == 'done':
break
curl "https://live.glseries.net/api/v1/vs?token=gl_your_token&url=glseries.net,youtube.com&filters=goguardian,securly"
curl "https://live.glseries.net/api/v1/multi?token=gl_your_token&url=youtube.com&filters=fortiguard,cisco,goguardian,securly,iboss"
const source = new EventSource(
'https://live.glseries.net/api/v1/multi?token=gl_your_token&url=youtube.com&filters=fortiguard,cisco,goguardian&stream=1'
);
const results = [];
source.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'result') {
results.push(data);
console.log(`โ ${data.name}: ${data.category} (${data.responseTime}ms)`);
}
if (data.type === 'done') {
console.log(`\nCompleted ${results.length} checks`);
console.log(`Weekly usage: ${data.usage.weeklyUsed} / ${data.usage.weeklyLimit}`);
source.close();
}
};
curl "https://live.glseries.net/api/v1/multi?token=gl_your_token&url=youtube.com,twitch.tv,discord.com&filters=fortiguard,lightspeed,goguardian"
{
"success": true,
"url": "glseries.net",
"results": [
{
"filter": "fortiguard",
"name": "FortiGuard",
"category": "Information Technology",
"blocked": false,
"error": false,
"responseTime": 245
},
...
],
"totalFilters": 48,
"usage": {
"weeklyUsed": 42,
"weeklyLimit": 20000
}
}
data: {"type":"init","url":"glseries.net","totalFilters":48}
data: {"type":"result","url":"glseries.net","filter":"fortiguard","name":"FortiGuard","category":"Information Technology","blocked":false,"error":false,"responseTime":245}
data: {"type":"result","url":"glseries.net","filter":"lightspeed","name":"Lightspeed","category":"Technology","blocked":false,"error":false,"responseTime":180}
...
data: {"type":"done","usage":{"weeklyUsed":42,"weeklyLimit":20000}}
| Endpoint | Use Case | Filters | Max URLs | Streaming |
|---|---|---|---|---|
/api/v1/check | Standard single-URL check | All or 1 | 1 | ?stream=1 |
/api/v1/bulk | Check multiple URLs at once | All or 1 | 3 | ?stream=1 |
/api/v1/vs | Compare 2 filters head-to-head | Exactly 2 | 3 | ?stream=1 |
/api/v1/multi | Custom filter selection | Any number | 3 | ?stream=1 |