User-Agent API

API reference

User-Agent HTTP endpoints on api.syndaq.com.

All User-Agent endpoints are served from https://api.syndaq.com/v1/useragent/.

Authenticated requests require a valid User-Agent key. Lookup routes require your ua_sec_ secret key.

Endpoints overview

MethodPathAuthPurpose
GET/v1/useragent/lookupSecret keyLookup by ?ua= or ?user_agent=
GET/v1/useragent/lookup/{ua}Secret keyLookup by URL-encoded User-Agent in the path
POST/v1/useragent/lookupSecret keyLookup with JSON body ua / user_agent
GET/v1/useragent/statusPublic or secret keyPlan limits and quota snapshot

Response headers

Successful and error responses may include:

HeaderDescription
X-Request-IdUnique ID for support and log correlation
X-RateLimit-LimitPlan requests per minute for this key
X-RateLimit-RemainingRequests left in the current minute window
X-RateLimit-ResetUnix timestamp when the minute window resets
X-Quota-LimitMonthly quota for the subscription
X-Quota-RemainingLookups left this calendar month (UTC)
X-Quota-PeriodCurrent quota month (YYYY-MM)
Retry-AfterSeconds to wait after HTTP 429

GET /v1/useragent/lookup

Parses a User-Agent string into browser, OS, device, and bot fields.

Request

GET /v1/useragent/lookup?ua=Mozilla%2F5.0%20...

Headers:

Authorization: Bearer ua_sec_YOUR_SECRET_KEY

v1 scope

v1 parses the User-Agent string only. It does not validate that the client is genuine, fingerprint device hardware, or perform bot mitigation beyond keyword and heuristic flags.

Success response (200)

{
  "success": true,
  "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
  "cached": true,
  "browser": { "name": "Chrome", "version": "126.0.0.0" },
  "os": { "name": "Windows", "version": "10.0" },
  "device_type": "desktop",
  "is_bot": false,
  "engine": "Blink",
  "request_id": "e6d04020be9b57b1e1069d6e483c0443"
}

Response fields

FieldTypeDescription
user_agentstringTruncated sample of the input string
cachedbooleantrue when Syndaq already holds a recent result for this lookup
browser.namestringDetected browser name when recognized
browser.versionstringDetected browser version when available
os.namestringDetected operating system name when recognized
os.versionstringDetected OS version when available
device_typestringDevice class such as desktop, mobile, or tablet
is_botbooleantrue when bot/crawler heuristics match
enginestringRendering engine when detected

GET /v1/useragent/status

Returns key status, plan limits, and quota usage without performing a lookup.

Request

GET /v1/useragent/status
Authorization: Bearer ua_sec_YOUR_SECRET_KEY

The public key (ua_pub_) is accepted on this route.

Success response (200)

{
  "success": true,
  "status": "active",
  "product": "useragent",
  "plan": "starter",
  "rate_limit_per_minute": 120,
  "monthly_quota": 10000,
  "quota_unlimited": false,
  "quota_remaining": 9842,
  "quota_period": "2026-07"
}

Errors

Failed requests return JSON with success: false, error, error_code, and usually request_id.

HTTPerror_codeTypical cause
400invalid_user_agentMissing or empty User-Agent
401missing_credentialsNo API key provided
401invalid_api_keyUnknown, inactive, or revoked key
401wrong_key_typePublic key used on a lookup endpoint
403ip_not_allowedCaller IP not on the key allowlist
429rate_limit_exceededPer-minute limit exceeded
429quota_exceededMonthly quota exhausted
500internal_errorUnexpected server error

Handle non-200 responses in your application and retry transient errors with exponential backoff.