Developer Reference

API Documentation

REST API for searching 14M+ USPTO trademark records. Two endpoints, Bearer token auth, JSON responses. Get an API key →

Overview

The Goalie IP Trademark API provides structured access to the USPTO trademark database — the same data that powers our search tools. Query by mark name, owner, status, international class, serial number, and more.

Base URLhttps://goalieip.com
Versionv1
FormatJSON request and response bodies
AuthBearer token in Authorization header

Authentication

Every request must include your API key as a Bearer token in the Authorization header. Keys are created and managed in your portal.

Authorization: Bearer gip_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Keys are prefixed with gip_live_ and are 40 characters total. Keep them secret — they are shown only once at creation. You can create up to 5 active keys per account.

Quick start

Search for all active registrations of a mark in a specific class:

curl -X POST https://goalieip.com/api/v1/trademarks/search \
  -H "Authorization: Bearer gip_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "markLiteral": "ACME",
    "markLiteralMode": "exact",
    "currentStatusCode": ["700", "800"],
    "internationalClasses": ["025"],
    "page": 1,
    "pageSize": 25
  }'

Look up a specific trademark by serial number:

curl https://goalieip.com/api/v1/trademarks/97123456 \
  -H "Authorization: Bearer gip_live_your_key_here"

GET/api/v1/trademarks/{serialNumber}

Retrieve a single trademark record by its USPTO serial number. Returns the full record or 404 if not found.

GET /api/v1/trademarks/97123456
Authorization: Bearer gip_live_...

Response

{
  "data": {
    "serialNumber": "97123456",
    "registrationNumber": "6789012",
    "markLiteral": "NIKE",
    ...
  },
  "meta": {
    "callsUsed": 2,
    "callsRemaining": 4998
  }
}

Search parameters

All fields are optional. Combining multiple fields narrows results (AND logic).

Mark filters

FieldTypeDescription
markLiteralstringThe text of the mark. Case-insensitive.
markLiteralMode"contains" "exact" "fuzzy"How to match markLiteral. contains — substring match (default). exact — full string equality. fuzzy — phonetic similarity using trigram matching; useful for finding confusingly similar marks.
markDrawingCodestringFilter by drawing type code. See Drawing codes.

Owner & attorney filters

FieldTypeDescription
ownerNamestringSubstring match on the registrant/owner name.
attorneyNamestringSubstring match on the attorney of record.

Classification & goods filters

FieldTypeDescription
internationalClassesstring[]Filter by Nice Classification codes. Pass multiple to match any (OR logic). Values are zero-padded three-digit strings, e.g. "025", "035".
goodsAndServicesstringSubstring match on the goods and services description.

Status & identifier filters

FieldTypeDescription
serialNumberstringExact match on the USPTO serial number.
registrationNumberstringExact match on the registration number.
currentStatusCodestring[]Filter by one or more status codes (OR logic). E.g. ["700", "800"] for all registered marks. See Status codes.

Date range filters

FieldTypeDescription
filingDateFromISO 8601 date stringInclude only records filed on or after this date. Example: "2023-01-01".
filingDateToISO 8601 date stringInclude only records filed on or before this date. Example: "2023-01-01".
currentStatusDateFromISO 8601 date stringFilter by status change date (on or after). Example: "2023-01-01".
currentStatusDateToISO 8601 date stringFilter by status change date (on or before). Example: "2023-01-01".

Pagination & sorting

FieldTypeDefaultDescription
pageinteger1Page number, 1-indexed.
pageSizeinteger25Results per page. Max 500.
sortFieldstringfilingDateField to sort by. One of: serialNumber, filingDate, transactionDate, markLiteral, ownerName, currentStatusCode, currentStatusDate, registrationNumber.
sortDir"asc" "desc""asc"Sort direction.

Response fields

Each record in data[] contains the following fields.

FieldTypeDescription
serialNumberstringUSPTO serial number. Unique identifier for each application.
registrationNumberstring | nullRegistration number once granted. "0000000" means not yet registered.
markLiteralstring | nullThe text of the mark. Null for purely design marks.
markDrawingCodestringCode indicating the type of mark drawing. See Drawing codes.
ownerNamestring | nullName of the current owner/registrant.
ownerAddressobject | nullStructured address: city, country, postcode, address_1, nationality_country, legal_entity_type_code.
correspondentAddressstring | nullFull mailing address of the correspondent of record.
attorneyNamestring | nullAttorney of record at the USPTO.
attorneyDocketNumberstring | nullAttorney's internal docket reference, if recorded.
filingDateISO datetime | nullDate the application was filed.
transactionDateISO datetimeDate of the most recent USPTO transaction.
currentStatusCodestringCurrent application/registration status code. See Status codes.
currentStatusDateISO datetimeDate the current status was set.
statusHistoryarrayOrdered list of all status events: { code, date, description }.
publishedForOppositionDateISO datetime | nullDate published for opposition in the Official Gazette, if applicable.
internationalClassesstring[]Nice Classification class codes, e.g. ["025", "035"]. Empty array if unclassified.
goodsAndServicesstring | nullFull goods and services description from the application.
currentLocationstring | nullCurrent physical location at the USPTO (e.g. "PUBLICATION AND ISSUE SECTION").
employeeNamestring | nullUSPTO examining attorney assigned to the application.
headerFlagsobjectBoolean flags for application attributes (see below).
createdAtISO datetimeWhen this record was added to the Goalie IP database.
updatedAtISO datetimeWhen this record was last updated.

headerFlags

Boolean attributes of the application. Commonly useful flags:

FlagMeaning when true
trademark_inFiled as a trademark (vs. service mark, collective mark, etc.)
service_mark_inFiled as a service mark
intent_to_use_inOriginal filing basis was intent-to-use (§1(b))
use_application_currently_inCurrent basis is use in commerce (§1(a))
standard_characters_claimed_inMark is in standard characters with no design claim
color_drawing_current_inColor is currently claimed as a feature of the mark
section_8_filed_inSection 8 declaration of use has been filed
section_15_filed_inSection 15 declaration of incontestability has been filed
renewal_filed_inRenewal application has been filed
opposition_pending_inOpposition proceeding is currently pending
cancellation_pending_inCancellation proceeding is currently pending
foreign_priority_inForeign priority claim under §44(d)

meta

FieldDescription
totalTotal number of records matching the query (across all pages).
pageCurrent page number.
pageSizeNumber of results returned on this page.
callsUsedTotal API calls made by your account this calendar month, including this request.
callsRemainingCalls remaining this month before your quota is exhausted.

Status codes

The currentStatusCode field uses USPTO internal codes. The most commonly encountered codes by category:

Live / Pending
CodeDescription
630New application — not yet assigned to examiner
638New application — assigned to examiner
641Non-final office action mailed
645Final refusal mailed
680Approved for publication
686Published for opposition
688Notice of allowance issued
718–734Statement of use extension requests (ITU)
744Statement of use filed
760Ex parte appeal pending
774Opposition pending
Live / Registered
CodeDescription
700Registered
701Section 8 accepted (declaration of use filed)
702Section 8 & 15 accepted — incontestable
703Section 15 acknowledged
800Registered and renewed
Dead / Abandoned
CodeDescription
600Abandoned — incomplete response
601Abandoned — express
602Abandoned — failure to respond or late response
606Abandoned — no statement of use filed
900Expired
Dead / Cancelled
CodeDescription
709Cancelled — Section 71
710Cancelled — Section 8 (failure to file maintenance)
711Cancelled — Section 7
712Cancelled by court order (Section 37)
626Registered backfile — cancelled or expired

To filter for all live registered marks, pass "currentStatusCode": ["700", "701", "702", "703", "704", "705", "800"].

Drawing codes

The markDrawingCode field indicates the form of the mark drawing submitted to the USPTO.

CodeDescription
1Typed drawing — plain word mark, no design element
2Design without color claim
3Design with color claim
4Standard character mark — word in any font, size, or color
5Standard character mark with color claim
6Special form — word combined with design element

To find only word marks (no design element), filter for markDrawingCode: "4" (standard characters) or "1" (typed drawing).

Note: Our database contains trademark metadata only — it does not store mark images or design specimens. For trademarks that consist solely of a design or logo (drawing codes 2, 3, 5, and 6), the API will return all available textual fields but no image URL or image data. To view the actual mark image, use the USPTO's TSDR portal at tsdr.uspto.gov.

Error responses

Errors return a JSON body with an error string and the appropriate HTTP status code.

{ "error": "Monthly call quota of 5000 calls exceeded. Upgrade at https://goalieip.com/subscribe" }
StatusCauseResolution
400Invalid JSON body or a request parameter failed validation.Check the error message for the specific field that failed.
401Missing, malformed, or revoked API key.Verify the Authorization header is present and the key is active in your portal.
404Serial number not found (lookup endpoint only).Verify the serial number. USPTO serial numbers are 8 digits.
429Monthly call quota exceeded.Upgrade your plan or wait until the quota resets on the 1st of next month.
500Internal server error.Retry the request. If it persists, contact reid@goalieip.com.

Rate limits

Quotas are enforced at the account level — all API keys on the same account share one monthly pool. The quota resets on the 1st of each calendar month.

PlanCalls / monthOverage
Free200None — requests return 429 when exhausted
API Starter ($19/mo)5,000+$0.004 per call
API Professional ($49/mo)30,000+$0.002 per call

Every response includes meta.callsUsed and meta.callsRemaining so you can monitor consumption in your application. Upgrade your plan →