Device, OS, browser, and bot, from one header.
Turn a User-Agent into device, OS, browser, and bot answers, down to brand and model. Prefer the User-Agent header. Use ?ua= to test a specific string.
Chromium browsers also send Sec-CH-UA-* Client Hints. Forward them when you have them. The classic string alone still works. Paid ?deep=true adds brand, model, versions, and bot detail.
Bare GET /useragent parses the User-Agent that made the request. No key needed. With ?ua= it is a keyed lookup.
curl "https://api.parseapi.com/useragent" \
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"{
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"device": "desktop",
"os": "macOS",
"browser": "Chrome",
"bot": false,
"mobile": false
}Response fields
Paid. Device brand and model (SM-G998B becomes Samsung Galaxy S21 Ultra 5G), versions, and engine. Bots come back named and categorized. AI crawlers like GPTBot carry ai: true.
curl "https://api.parseapi.com/useragent?deep=true" \
-H "X-API-Key: YOUR_API_KEY" \
-H "User-Agent: Mozilla/5.0 (Linux; Android 12; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Mobile Safari/537.36"{
"useragent": "Mozilla/5.0 (Linux; Android 12; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Mobile Safari/537.36",
"device": "mobile",
"os": "Android",
"browser": "Chrome Mobile",
"bot": false,
"mobile": true,
"deep": {
"device": {
"type": "mobile",
"brand": "Samsung",
"model": "Galaxy S21 Ultra 5G",
"cpu": null,
"touchscreen": true
},
"os": {
"name": "Android",
"version": "12",
"platform": null
},
"browser": {
"name": "Chrome Mobile",
"version": "110.0.0.0",
"type": "browser"
},
"engine": {
"name": "Blink",
"version": null
},
"headless": false
}
}Deep fields
Client Hints are structured headers (Sec-CH-UA-*) from Chromium browsers. Send the classic User-Agent plus any hints you received. We use both.
They matter more every year: modern Chrome freezes the UA string (every Android phone says Android 10; K), so hints are the only source for the real model and OS version. Sec-CH-UA-Model restores the device, Sec-CH-UA-Platform-Version distinguishes Windows 11 from 10, and Sec-CH-UA-Arch reveals the CPU.
Missing hints are fine. We fall back to the User-Agent string. Forward headers exactly as your client sent them.
curl "https://api.parseapi.com/useragent?deep=true" \
-H "X-API-Key: YOUR_API_KEY" \
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
-H 'Sec-CH-UA: "Chromium";v="120", "Google Chrome";v="120", "Not_A Brand";v="8"' \
-H 'Sec-CH-UA-Platform: "macOS"' \
-H "Sec-CH-UA-Mobile: ?0" \
-H 'Sec-CH-UA-Arch: "arm"' \
-H 'Sec-CH-UA-Bitness: "64"' \
-H 'Sec-CH-UA-Full-Version-List: "Chromium";v="120.0.6099.109", "Google Chrome";v="120.0.6099.109", "Not_A Brand";v="10.0.0.4"'{
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"device": "desktop",
"os": "macOS",
"browser": "Chrome",
"bot": false,
"mobile": false,
"deep": {
"device": {
"type": "desktop",
"brand": "Apple",
"model": null,
"cpu": "arm64",
"touchscreen": false
},
"os": {
"name": "macOS",
"version": "10.15.7",
"platform": "ARM"
},
"browser": {
"name": "Chrome",
"version": "120.0.6099.109",
"type": "browser",
"brands": [
{
"brand": "Chromium",
"version": "120.0.6099.109"
},
{
"brand": "Google Chrome",
"version": "120.0.6099.109"
},
{
"brand": "Not_A Brand",
"version": "10.0.0.4"
}
]
},
"engine": {
"name": "Blink",
"version": null
},
"headless": false
}
}Questions? Email