Intelligence API

Access UK trademark opposition intelligence data programmatically. Hearing officers, firm benchmarking, class risk, and decision search.

Authentication

All requests require an API key passed in the x-api-key header.

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/hearing-officers"

Sign up and generate your API key in dashboard settings

Rate limits

Rate limits depend on your API key tier. The current limits and reset time are included in every response under the rateLimit field.

TierRateDaily limit
Free10 req/min1,000 req/day
Basic30 req/min10,000 req/day
Premium100 req/min100,000 req/day

Response format

All endpoints return a consistent envelope format with the data, pagination metadata, and rate limit information.

{
  "data": [...],
  "meta": { "total": 230, "page": 1, "limit": 20 },
  "rateLimit": { "remaining": 9, "reset": "2026-03-22T12:00:00Z" }
}

Error responses use standard HTTP status codes with a JSON body containing an error field describing the issue.

{
  "error": "Rate limit exceeded. Try again after 2026-03-22T12:00:00Z"
}

Endpoints

GET/api/intelligence/v1/hearing-officers

List hearing officers with outcome statistics.

Parameters

NameTypeDescription
pagenumberPage number (default 1)
limitnumberResults per page (default 20, max 100)
searchstringSearch by officer name
sortstringSort field: name, total_decisions, success_rate

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/hearing-officers?page=1&limit=20"

Example response

{
  "data": [
    {
      "slug": "amanda-michaels",
      "name": "Amanda Michaels",
      "totalDecisions": 342,
      "applicantSuccessRate": 0.38,
      "opponentSuccessRate": 0.51
    }
  ],
  "meta": { "total": 124, "page": 1, "limit": 20 },
  "rateLimit": { "remaining": 9, "reset": "2026-03-22T12:00:00Z" }
}
GET/api/intelligence/v1/hearing-officers/:slug

Get a single hearing officer profile with detailed statistics.

Parameters

NameTypeDescription
slugstringOfficer slug (path parameter)

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/hearing-officers/amanda-michaels"

Example response

{
  "data": {
    "slug": "amanda-michaels",
    "name": "Amanda Michaels",
    "totalDecisions": 342,
    "applicantSuccessRate": 0.38,
    "opponentSuccessRate": 0.51,
    "yearRange": [2004, 2026],
    "topClasses": [9, 25, 35, 41, 42],
    "groundsAnalysis": [
      { "ground": "s5(2)(b)", "count": 180, "opponentSuccessRate": 0.54 }
    ]
  }
}
GET/api/intelligence/v1/firms

List law firms with opposition performance metrics.

Parameters

NameTypeDescription
pagenumberPage number (default 1)
limitnumberResults per page (default 20, max 100)
searchstringSearch by firm name
sortstringSort field: name, total_cases, win_rate

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/firms?page=1&limit=20"

Example response

{
  "data": [
    {
      "slug": "marks-clerk",
      "name": "Marks & Clerk",
      "totalCases": 412,
      "winRate": 0.58,
      "asApplicant": 210,
      "asOpponent": 202
    }
  ],
  "meta": { "total": 230, "page": 1, "limit": 20 },
  "rateLimit": { "remaining": 9, "reset": "2026-03-22T12:00:00Z" }
}
GET/api/intelligence/v1/firms/:slug

Get a single firm profile with detailed performance breakdown.

Parameters

NameTypeDescription
slugstringFirm slug (path parameter)

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/firms/marks-clerk"

Example response

{
  "data": {
    "slug": "marks-clerk",
    "name": "Marks & Clerk",
    "totalCases": 412,
    "winRate": 0.58,
    "topClasses": [9, 25, 35],
    "yearRange": [2000, 2026],
    "topOfficers": [
      { "name": "Amanda Michaels", "cases": 28, "winRate": 0.61 }
    ]
  }
}
GET/api/intelligence/v1/class-risk

Get opposition risk data for all 45 Nice classes.

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/class-risk"

Example response

{
  "data": [
    {
      "niceClass": 9,
      "totalDecisions": 820,
      "oppositionRate": 0.12,
      "opponentSuccessRate": 0.48,
      "topGrounds": ["s5(2)(b)", "s5(1)"]
    }
  ],
  "meta": { "total": 45 },
  "rateLimit": { "remaining": 9, "reset": "2026-03-22T12:00:00Z" }
}
GET/api/intelligence/v1/class-risk/:classNum

Get detailed opposition risk data for a single Nice class.

Parameters

NameTypeDescription
classNumnumberNice class number 1 to 45 (path parameter)

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/class-risk/9"

Example response

{
  "data": {
    "niceClass": 9,
    "totalDecisions": 820,
    "oppositionRate": 0.12,
    "opponentSuccessRate": 0.48,
    "yearlyTrend": [
      { "year": 2024, "decisions": 62, "opponentSuccessRate": 0.45 }
    ],
    "topGrounds": [
      { "ground": "s5(2)(b)", "count": 480, "successRate": 0.52 }
    ]
  }
}
GET/api/intelligence/v1/decisions

Search and filter opposition decisions.

Parameters

NameTypeDescription
qstringFree text search across decision content
yearnumberFilter by decision year
outcomestringFilter by outcome: upheld, dismissed, partially_upheld
pagenumberPage number (default 1)
limitnumberResults per page (default 20, max 100)

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/decisions?q=software&year=2025&outcome=upheld&page=1"

Example response

{
  "data": [
    {
      "id": "d-12345",
      "caseNumber": "O/123/25",
      "date": "2025-06-15",
      "outcome": "upheld",
      "hearingOfficer": "Amanda Michaels",
      "applicantMark": "TECHFLOW",
      "opponentMark": "TECHGLOW",
      "classes": [9, 42]
    }
  ],
  "meta": { "total": 84, "page": 1, "limit": 20 },
  "rateLimit": { "remaining": 9, "reset": "2026-03-22T12:00:00Z" }
}
GET/api/intelligence/v1/stats

Get aggregate statistics across the entire decision dataset.

Example request

curl -H "x-api-key: tmg_xxxx..." \
  "https://api.tmguard.uk/api/intelligence/v1/stats"

Example response

{
  "data": {
    "totalDecisions": 9342,
    "totalOfficers": 124,
    "totalFirms": 230,
    "yearRange": [1998, 2026],
    "overallOpponentSuccessRate": 0.47,
    "decisionsThisYear": 312
  },
  "rateLimit": { "remaining": 9, "reset": "2026-03-22T12:00:00Z" }
}

Ready to get started?

Create a free account and generate your API key to start querying UK opposition intelligence data.

Generate API keyExplore intelligence hub