apyhub
MARKETING · SEO

US Trademark Registry & Analytics API

What it does

US Trademark Intelligence covers trademark search, record lookup, and portfolio-level analytics over normalized US trademark data, plus recorded ownership-transfer history for marks.

Search trademark records by text with /trademarks/search (optional jurisdiction filter), or resolve an exact mark with /trademarks/by-mark/{mark_text} when you already know the spelling you're checking. Once you have a specific record, /trademarks/{record_id} returns the full entry: mark_text, status, jurisdiction, source, normalized_mark, and updated_at. These three endpoints are the core of any brand clearance, name-check, or trademark-monitoring workflow.

For reporting and portfolio-state monitoring, four analytics endpoints return pre-aggregated counts: /trademarks/analytics/status-breakdown (records by status — registered, pending, abandoned), /trademarks/analytics/jurisdictions (records by country/registry), /trademarks/analytics/sources (records by ingestion source), and /trademarks/analytics/update-timeline (update volume over a configurable day window, useful for tracking refresh recency).

/assignments/trademark/search extends the API into ownership history: search recorded trademark assignment transfers by name, company, or registration number, with optional recorded-date filtering. Each result includes assignee_name, assignor_name, recorded_date, conveyance_text, and reel_frame, which supports due diligence, M&A research, and compliance workflows that need to trace who currently holds rights to a mark.

Every response includes attribution entries with source and licensing details so you can trace records back to their dataset or surface provenance in your own product.

▣ ENDPOINT 01 / 08
GET
Search US Trademarks
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/search

QUICKSTART

GUIDE

Quickstart

Search US trademarks by query term, with the jurisdiction and limit passed as query parameters.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/search?query=TESLA&limit=20&jurisdiction=US" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with count as an integer, query as a string, results as an array of trademark summary objects, and jurisdiction as a string or null. Each result includes source, status, mark_text, updated_at, and jurisdiction; attribution is an array of attribution objects with url, notice, source, dataset, and license.

{
  "count": 1,
  "query": "TESLA",
  "results": [
    {
      "source": "uspto",
      "status": "registered",
      "mark_text": "TESLA",
      "updated_at": "2024-01-15T12:00:00Z",
      "jurisdiction": "US"
    }
  ],
  "attribution": [],
  "jurisdiction": "US"
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Searches US trademark records using a text query and returns a JSON object containing the matching results, the original query, a result count, attribution details, and the jurisdiction used for the search.

Query Parameter(s)

AttributeTypeMandatoryDescription
limitIntegerNoMaximum number of results to return. Default: 20. Minimum: 1. Maximum: 200.
queryStringYesSearch text. Minimum length: 2.
jurisdictionStringNoJurisdiction code. Maximum length: 8. Minimum length: 2. Nullable.

Response

Returns a JSON object with count as an integer, query as a string, results as an array of trademark summary objects, attribution as an array of attribution objects, and jurisdiction as a string or null.

Success response: 200

ParameterTypeMandatoryDescription
countIntegerNoNumber of results returned.
queryStringNoSearch query used for the response.
resultsObject ArrayNoTrademark summary items returned by the search. Each item contains source, status, mark_text, updated_at, and jurisdiction.
results[].sourceStringNoSource of the trademark row.
results[].statusStringNoTrademark status. Example values include registered, pending, and abandoned.
results[].mark_textStringNoTrademark text.
results[].updated_atStringNoTimestamp of the last update, in date-time format.
results[].jurisdictionStringNoJurisdiction for the trademark row.
attributionObject ArrayNoAttribution entries associated with the response. Each item contains url, notice, source, dataset, and license.
attribution[].urlStringNoAttribution URL, in URI format.
attribution[].noticeStringNoAttribution notice text.
attribution[].sourceStringNoAttribution source name.
attribution[].datasetStringNoAttribution dataset name.
attribution[].licenseStringNoAttribution license text.
jurisdictionStringNoJurisdiction applied to the search response. Nullable.

Query parameters

Name
Type
Description
limitOPTIONAL
integer
DEFAULT 20
queryREQUIRED
string
jurisdictionOPTIONAL
string
▣ ENDPOINT 02 / 08
GET
Lookup US Trademark
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/by-mark/:mark_text

QUICKSTART

GUIDE

Quickstart

Search for a trademark by its mark text. Replace TESLA in the path if you want to try a different mark.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/by-mark/:mark_text?limit=25&jurisdiction=US" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with count as an integer, results as an array of trademark records, mark_text as a string, attribution as an array of attribution objects, and jurisdiction as a string or null.

{
  "count": 1,
  "results": [
    {
      "id": 123,
      "source": "uspto",
      "status": "LIVE",
      "mark_text": "TESLA",
      "updated_at": "2026-08-04T12:00:00Z",
      "jurisdiction": "US",
      "normalized_mark": "TESLA"
    }
  ],
  "mark_text": "TESLA",
  "attribution": [],
  "jurisdiction": "US"
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Looks up US trademark records by the trademark text in the path and returns matching records in a JSON object. You can optionally narrow the search with limit and jurisdiction.

Path Parameter(s)

AttributeTypeMandatoryDescription
mark_textStringYesThe trademark text to look up.

Query Parameter(s)

AttributeTypeMandatoryDescription
limitIntegerNoMaximum number of results to return. Default: 25. Minimum: 1. Maximum: 200.
jurisdictionStringNoJurisdiction filter. String value with length between 2 and 8 characters, or null.

Response

Returns a JSON object with count as an integer, results as an array of trademark record objects, mark_text as a string, attribution as an array of attribution objects, and jurisdiction as a nullable string.

ParameterTypeMandatoryDescription
countIntegerNoNumber of matching records returned.
resultsObject ArrayNoArray of trademark records. Each item contains id (integer), source (string), status (string), mark_text (string), updated_at (string, date-time), jurisdiction (string), and normalized_mark (string).
mark_textStringNoThe trademark text associated with the response.
attributionObject ArrayNoArray of attribution items. Each item contains url (string, uri), notice (string), source (string), dataset (string), and license (string).
jurisdictionStringNoJurisdiction associated with the response. Nullable.

Path parameters

Name
Type
Description
mark_textREQUIRED
string

Query parameters

Name
Type
Description
limitOPTIONAL
integer
DEFAULT 25
jurisdictionOPTIONAL
string
▣ ENDPOINT 03 / 08
GET
Get US Trademark Details
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/:record_id

QUICKSTART

GUIDE

Quickstart

Fetch a trademark record by its record ID.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/:record_id" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with trademark details from the TrademarkRecord shape, plus an optional attribution array. Top-level fields can include id, source, status, mark_text, updated_at, jurisdiction, and normalized_mark, and attribution contains objects with url, notice, source, dataset, and license.

{
  "id": 3,
  "source": "uspto",
  "status": "registered",
  "mark_text": "ACME",
  "updated_at": "2024-01-15T10:30:00Z",
  "jurisdiction": "US",
  "normalized_mark": "ACME",
  "attribution": [
    {
      "url": "https://www.uspto.gov/",
      "notice": "Data sourced from USPTO records.",
      "source": "USPTO",
      "dataset": "Trademark records",
      "license": "Public domain"
    }
  ]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Retrieves the full US trademark record for the specified record_id and returns the trademark details as a JSON object.

Path Parameter(s)

AttributeTypeMandatoryDescription
record_idIntegerYesRecord identifier.

Response

Returns a JSON object containing the trademark record fields plus an attribution array. The top-level fields are id, source, status, mark_text, updated_at, jurisdiction, normalized_mark, and attribution.

AttributeTypeMandatoryDescription
idIntegerNoTrademark record identifier.
sourceStringNoSource of the record.
statusStringNoTrademark status.
mark_textStringNoTrademark mark text.
updated_atStringNoLast update timestamp in date-time format.
jurisdictionStringNoJurisdiction associated with the record.
normalized_markStringNoNormalized mark text.
attributionObject ArrayNoArray of attribution entries. Each item may include url (uri), notice, source, dataset, and license.

Path parameters

Name
Type
Description
record_idREQUIRED
integer
▣ ENDPOINT 04 / 08
GET
Get US Trademark Status Breakdown
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/status-breakdown

QUICKSTART

GUIDE

Quickstart

Fetch the trademark status breakdown with the default limit.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/status-breakdown?limit=25" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with count as an integer, results as an array of status breakdown objects, and attribution as an array of attribution objects.

{
  "count": 0,
  "results": [
    {
      "status": "active",
      "records": 0
    }
  ],
  "attribution": [
    {
      "url": "https://example.com",
      "notice": "Example notice",
      "source": "Example source",
      "dataset": "Example dataset",
      "license": "Example license"
    }
  ]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Returns a US trademark status breakdown for the requested result limit. The response includes a count integer, a results array of status/record-count objects, and an attribution array.

Query Parameter(s)

AttributeTypeMandatoryDescription
limitIntegerNoNumber of results to return. Default: 25. Minimum: 1. Maximum: 200.

Response

Returns a JSON object with count as an integer, results as an array of objects, and attribution as an array of objects. This is the success response body for the endpoint.

AttributeTypeMandatoryDescription
countIntegerNoTotal number of records represented in the response.
resultsObject ArrayNoArray of status breakdown entries. Each item contains: <br>status (String) <br>records (Integer)
results[].statusStringNoTrademark status value for the breakdown entry.
results[].recordsIntegerNoNumber of records for that status.
attributionObject ArrayNoArray of attribution entries. Each item contains: <br>url (String, URI format) <br>notice (String) <br>source (String) <br>dataset (String) <br>license (String)
attribution[].urlStringNoAttribution URL in URI format.
attribution[].noticeStringNoAttribution notice text.
attribution[].sourceStringNoAttribution source.
attribution[].datasetStringNoAttribution dataset name.
attribution[].licenseStringNoAttribution license text.

Query parameters

Name
Type
Description
limitOPTIONAL
integer
DEFAULT 25
▣ ENDPOINT 05 / 08
GET
Get US Trademark Jurisdiction Breakdown
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/jurisdictions

QUICKSTART

GUIDE

Quickstart

Fetch the trademark jurisdiction breakdown, optionally limiting how many results are returned.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/jurisdictions?limit=25" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with these top-level fields: count as an integer, results as an array of objects, and attribution as an array of attribution objects.

Each item in results includes records (integer) and jurisdiction (string). Each item in attribution includes url, notice, source, dataset, and license.

{
  "count": 2,
  "results": [
    {
      "records": 120,
      "jurisdiction": "US"
    }
  ],
  "attribution": [
    {
      "url": "https://example.com",
      "notice": "Data provided by example source",
      "source": "Example Source",
      "dataset": "Trademark Analytics",
      "license": "CC BY 4.0"
    }
  ]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Returns a breakdown of U.S. trademark jurisdictions, with a count of matching jurisdictions, a list of jurisdiction records, and attribution metadata.

Query Parameter(s)

AttributeTypeMandatoryDescription
limitIntegerNoMaximum number of results to return. Default: 25. Minimum: 1. Maximum: 200.

Response

Returns a JSON object with count as an integer, results as an array of objects, and attribution as an array of attribution objects. Success is returned as a 200 response.

ParameterTypeMandatoryDescription
countIntegerYesNumber of jurisdictions in the response.
resultsObject ArrayYesArray of jurisdiction breakdown objects. Each item includes records as an integer and jurisdiction as a string.
results[].recordsIntegerYesNumber of records for the jurisdiction.
results[].jurisdictionStringYesJurisdiction name.
attributionObject ArrayYesArray of attribution objects. Each item includes url, notice, source, dataset, and license.
attribution[].urlStringYesAttribution URL in URI format.
attribution[].noticeStringYesAttribution notice text.
attribution[].sourceStringYesSource name.
attribution[].datasetStringYesDataset name.
attribution[].licenseStringYesLicense name.

Query parameters

Name
Type
Description
limitOPTIONAL
integer
DEFAULT 25
▣ ENDPOINT 06 / 08
GET
Get US Trademark Source Inventory
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/sources

QUICKSTART

GUIDE

Quickstart

Fetch the trademark source breakdown.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/sources" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with count as an integer, results as an array of objects, and attribution as an array of attribution objects.

  • count: total number of source records returned
  • results[]: each item includes source (string) and records (integer)
  • attribution[]: each item may include url, notice, source, dataset, and license
{
  "count": 2,
  "results": [
    { "source": "USPTO", "records": 1200 },
    { "source": "WIPO", "records": 340 }
  ],
  "attribution": [
    {
      "url": "https://example.com/dataset",
      "notice": "Data provided for analytics purposes",
      "source": "USPTO",
      "dataset": "Trademark dataset",
      "license": "CC BY 4.0"
    }
  ]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Returns the US trademark source inventory as a JSON object, including a total count, a results array of source record counts, and an attribution array with licensing and source metadata.

Response

Returns a JSON object with three top-level fields: count is an integer, results is an array of source breakdown objects, and attribution is an array of attribution objects. Success response: 200.

ParameterTypeMandatoryDescription
countIntegerNoTotal number of sources in the inventory.
resultsObject ArrayNoArray of source breakdown objects. Each item includes:<br>- source (String): source name<br>- records (Integer): number of records for that source
attributionObject ArrayNoArray of attribution objects. Each item includes:<br>- url (String): attribution URL in URI format<br>- notice (String): attribution notice text<br>- source (String): source name<br>- dataset (String): dataset name<br>- license (String): license name

Parameters

No parameters.
▣ ENDPOINT 07 / 08
GET
Get US Trademark Update Timeline
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/update-timeline

QUICKSTART

GUIDE

Quickstart

Get the trademark update timeline for the default 30 days.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/trademarks/analytics/update-timeline?days=30" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with days and count integers, a results array of objects, and an attribution array of objects. Each results item includes records as an integer and update_date as a date string; each attribution item includes url, notice, source, dataset, and license.

{
  "days": 30,
  "count": 2,
  "results": [
    {
      "records": 12,
      "update_date": "2024-05-01"
    }
  ],
  "attribution": [
    {
      "url": "https://example.com",
      "notice": "Data source notice",
      "source": "Example Source",
      "dataset": "Trademark Updates",
      "license": "Example License"
    }
  ]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Returns a US trademark update timeline for the requested number of days. The response includes the requested days value, a total count, a results array of date-based update records, and an attribution array.

Query Parameter(s)

AttributeTypeMandatoryDescription
daysIntegerNoNumber of days to include in the timeline.<br>Default: 30.<br>Minimum: 1.<br>Maximum: 3650.

Response

Returns a JSON object with integer days and count fields, a results array of objects containing records and update_date, and an attribution array of objects containing source and licensing information. Success is represented by the response object defined in the schema.

AttributeTypeMandatoryDescription
daysIntegerNoNumber of days included in the response.
countIntegerNoTotal count for the returned timeline data.
resultsObject ArrayNoArray of timeline entries.<br>Each item contains:<br>- records (Integer): number of records for the date.<br>- update_date (String): date value in date format.
attributionObject ArrayNoArray of attribution items.<br>Each item contains:<br>- url (String): source URL in URI format.<br>- notice (String): attribution notice.<br>- source (String): source name.<br>- dataset (String): dataset name.<br>- license (String): license text or identifier.

Query parameters

Name
Type
Description
daysOPTIONAL
integer
DEFAULT 30
▣ ENDPOINT 08 / 08
GET
Search US Trademark Assignments
https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/assignments/trademark/search

QUICKSTART

GUIDE

Quickstart

Search trademark assignment records for a query term like Nike.

curl -X GET "https://api.eu.apyhub.com/dosvak/search-trademark-records/api/v1/uspto/assignments/trademark/search?query=Nike" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with count integer, query string, status string, results array of trademark assignment records, and optional start_date, end_date, and attribution fields.

{
  "count": 1,
  "query": "Nike",
  "status": "ok",
  "results": [
    {
      "reel_frame": "9043/0011",
      "source_file": "assignments.pdf",
      "trademark_id": "1234567",
      "assignee_name": "Nike, Inc.",
      "assignor_name": "ABC Holdings LLC",
      "recorded_date": "2024-01-15",
      "conveyance_text": "Assignment of trademark rights",
      "registration_number": "7654321"
    }
  ]
}
TRY ITLIVE · 100 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Searches US trademark assignment records using a required query string and optional date filters, then returns matching assignment records along with search metadata.

Query Parameter(s)

AttributeTypeMandatoryDescription
limitIntegerNoMaximum number of results to return. Default: 100. Minimum: 1. Maximum: 1000.
queryStringYesSearch query string. Minimum length: 2.
end_dateStringNoEnd of the date filter range. Must match YYYY-MM-DD or be null.
start_dateStringNoStart of the date filter range. Must match YYYY-MM-DD or be null.

Response

Returns a JSON object with count as an integer, query as a string, status as a string, results as an array of trademark assignment records, end_date and start_date as nullable date strings, and attribution as an array of attribution objects.

ParameterTypeMandatoryDescription
countIntegerNoNumber of matching records returned.
queryStringNoQuery string used for the search.
statusStringNoResponse status string. The schema example shows ok.
resultsObject ArrayNoArray of trademark assignment records. Each item includes reel_frame, source_file, trademark_id, assignee_name, assignor_name, recorded_date, conveyance_text, and registration_number.
results[].reel_frameStringNoReel/frame identifier. Example format: 9043/0011.
results[].source_fileStringNoSource file name or identifier.
results[].trademark_idStringNoTrademark identifier.
results[].assignee_nameStringNoName of the assignee.
results[].assignor_nameStringNoName of the assignor.
results[].recorded_dateStringNoRecorded date in date format.
results[].conveyance_textStringNoConveyance text associated with the assignment.
results[].registration_numberStringNoRegistration number. Nullable.
end_dateStringNoEnd date echoed in the response. Nullable date string.
start_dateStringNoStart date echoed in the response. Nullable date string.
attributionObject ArrayNoAttribution entries for the data source and licensing.
attribution[].urlStringNoSource URL in URI format.
attribution[].noticeStringNoAttribution notice text.
attribution[].sourceStringNoSource name.
attribution[].datasetStringNoDataset name.
attribution[].licenseStringNoLicense text.

Query parameters

Name
Type
Description
limitOPTIONAL
integer
DEFAULT 100
queryREQUIRED
string
end_dateOPTIONAL
string
start_dateOPTIONAL
string
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.