apyhub
Back
▣ 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)

AttributeTypeDescription
limitIntegerMaximum number of results to return. Default: 20. Minimum: 1. Maximum: 200.
queryStringSearch text. Minimum length: 2.
jurisdictionStringJurisdiction 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

ParameterTypeDescription
countIntegerNumber of results returned.
queryStringSearch query used for the response.
resultsObject ArrayTrademark summary items returned by the search. Each item contains source, status, mark_text, updated_at, and jurisdiction.
results[].sourceStringSource of the trademark row.
results[].statusStringTrademark status. Example values include registered, pending, and abandoned.
results[].mark_textStringTrademark text.
results[].updated_atStringTimestamp of the last update, in date-time format.
results[].jurisdictionStringJurisdiction for the trademark row.
attributionObject ArrayAttribution entries associated with the response. Each item contains url, notice, source, dataset, and license.
attribution[].urlStringAttribution URL, in URI format.
attribution[].noticeStringAttribution notice text.
attribution[].sourceStringAttribution source name.
attribution[].datasetStringAttribution dataset name.
attribution[].licenseStringAttribution license text.
jurisdictionStringJurisdiction applied to the search response. Nullable.
▣ 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)

AttributeTypeDescription
mark_textStringThe trademark text to look up.

Query Parameter(s)

AttributeTypeDescription
limitIntegerMaximum number of results to return. Default: 25. Minimum: 1. Maximum: 200.
jurisdictionStringJurisdiction 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.

ParameterTypeDescription
countIntegerNumber of matching records returned.
resultsObject ArrayArray 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_textStringThe trademark text associated with the response.
attributionObject ArrayArray of attribution items. Each item contains url (string, uri), notice (string), source (string), dataset (string), and license (string).
jurisdictionStringJurisdiction associated with the response. Nullable.
▣ 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)

AttributeTypeDescription
record_idIntegerRecord 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.

AttributeTypeDescription
idIntegerTrademark record identifier.
sourceStringSource of the record.
statusStringTrademark status.
mark_textStringTrademark mark text.
updated_atStringLast update timestamp in date-time format.
jurisdictionStringJurisdiction associated with the record.
normalized_markStringNormalized mark text.
attributionObject ArrayArray of attribution entries. Each item may include url (uri), notice, source, dataset, and license.
▣ 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)

AttributeTypeDescription
limitIntegerNumber 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.

AttributeTypeDescription
countIntegerTotal number of records represented in the response.
resultsObject ArrayArray of status breakdown entries. Each item contains:
• status (String)
• records (Integer)
results[].statusStringTrademark status value for the breakdown entry.
results[].recordsIntegerNumber of records for that status.
attributionObject ArrayArray of attribution entries. Each item contains:
• url (String, URI format)
• notice (String)
• source (String)
• dataset (String)
• license (String)
attribution[].urlStringAttribution URL in URI format.
attribution[].noticeStringAttribution notice text.
attribution[].sourceStringAttribution source.
attribution[].datasetStringAttribution dataset name.
attribution[].licenseStringAttribution license text.
▣ 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)

AttributeTypeDescription
limitIntegerMaximum 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.

ParameterTypeDescription
countIntegerNumber of jurisdictions in the response.
resultsObject ArrayArray of jurisdiction breakdown objects. Each item includes records as an integer and jurisdiction as a string.
results[].recordsIntegerNumber of records for the jurisdiction.
results[].jurisdictionStringJurisdiction name.
attributionObject ArrayArray of attribution objects. Each item includes url, notice, source, dataset, and license.
attribution[].urlStringAttribution URL in URI format.
attribution[].noticeStringAttribution notice text.
attribution[].sourceStringSource name.
attribution[].datasetStringDataset name.
attribution[].licenseStringLicense name.
▣ 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.

ParameterTypeDescription
countIntegerTotal number of sources in the inventory.
resultsObject ArrayArray of source breakdown objects. Each item includes:
- source (String): source name
- records (Integer): number of records for that source
attributionObject ArrayArray of attribution objects. Each item includes:
- url (String): attribution URL in URI format
- notice (String): attribution notice text
- source (String): source name
- dataset (String): dataset name
- license (String): license name
▣ 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)

AttributeTypeDescription
daysIntegerNumber of days to include in the timeline.
Default: 30.
Minimum: 1.
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.

AttributeTypeDescription
daysIntegerNumber of days included in the response.
countIntegerTotal count for the returned timeline data.
resultsObject ArrayArray of timeline entries.
Each item contains:
- records (Integer): number of records for the date.
- update_date (String): date value in date format.
attributionObject ArrayArray of attribution items.
Each item contains:
- url (String): source URL in URI format.
- notice (String): attribution notice.
- source (String): source name.
- dataset (String): dataset name.
- license (String): license text or identifier.
▣ 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)

AttributeTypeDescription
limitIntegerMaximum number of results to return. Default: 100. Minimum: 1. Maximum: 1000.
queryStringSearch query string. Minimum length: 2.
end_dateStringEnd of the date filter range. Must match YYYY-MM-DD or be null.
start_dateStringStart 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.

ParameterTypeDescription
countIntegerNumber of matching records returned.
queryStringQuery string used for the search.
statusStringResponse status string. The schema example shows ok.
resultsObject ArrayArray 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_frameStringReel/frame identifier. Example format: 9043/0011.
results[].source_fileStringSource file name or identifier.
results[].trademark_idStringTrademark identifier.
results[].assignee_nameStringName of the assignee.
results[].assignor_nameStringName of the assignor.
results[].recorded_dateStringRecorded date in date format.
results[].conveyance_textStringConveyance text associated with the assignment.
results[].registration_numberStringRegistration number. Nullable.
end_dateStringEnd date echoed in the response. Nullable date string.
start_dateStringStart date echoed in the response. Nullable date string.
attributionObject ArrayAttribution entries for the data source and licensing.
attribution[].urlStringSource URL in URI format.
attribution[].noticeStringAttribution notice text.
attribution[].sourceStringSource name.
attribution[].datasetStringDataset name.
attribution[].licenseStringLicense text.
▣ 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.