Skip to content
Terry Carroll edited this page May 20, 2016 · 10 revisions

Table of Contents

Introduction

Basics

The TSDRMap is a dictionary containing a series of attributes of the requested trademark application or registration. Most of the entries are simple strings. For example, for the key ApplicationNumber, the value is an eight-character string that represents the application number, e.g. "86799303".

Certain data occurs more than once, and so cannot be represented as a single string. In these cases, the entry is a list, and each item in the list is itself a dictionary. For example, during the course of a trademark application it will have many events: the initial application, perhaps multiple office actions, publication, registration, renewals, etc. These are represented by a list of Mark Events. The TSDRMap entry with the key MarkEventList is a list of dictionaries, each one of which corresponds to a single Mark Event. For example, there will generally be an element in the list representing the initial application. That element will be represented by a dictionary; and in that dictionary, the entry with the key MarkEventDescription will be something like "NEW APPLICATION ENTERED IN TRAM" (the PTO's use of the acronym "TRAM" here refers to the PTO's Trademark Reporting and Monitoring system).

Any entry that contains a list rather than a simple string is denoted by a key that ends in "List"; and no non-list entries have a key that ends in "List".

The basic examples provide illustrations in several languages (Python, C#, Visual Basic .NET and C++ .NET) of retrieving both types of data. They show retrieval of simple one-value strings such as the application serial number (ApplicationNumber), the text of the trademark (MarkVerbalElementText), the application filing date (ApplicationDate) and registration number (RegistrationNumber). In Python:

   print "Application serial no: ", t.TSDRMap["ApplicationNumber"]
   print "Trademark text: ", t.TSDRMap["MarkVerbalElementText"]
   print "Application filing date: ", t.TSDRMap["ApplicationDate"]
   print "Registration no: ", t.TSDRMap["RegistrationNumber"]

In addition, the examples show the retrieval of the most recent (0th) owner name (ApplicantName) and address (ApplicantCombinedAddress) from the applicant list (ApplicantList); and the date of the most recent (0th) prosecution event (MarkEventDate) and its description (MarkEventDescription) from the Mark Event list (MarkEventList). In Python:

   # Owner info is in most recent (0th) entry in ApplicantList
   applicant_list = t.TSDRMap["ApplicantList"]
   current_owner_info = applicant_list[0]
   print "Owner:", current_owner_info["ApplicantName"]
   print "Owner address: ", current_owner_info["ApplicantCombinedAddress"]
   # Get most recent event: 0th entry in event list
   event_list = t.TSDRMap["MarkEventList"]
   most_recent_event = event_list[0]
   print "Most recent event: ", most_recent_event["MarkEventDescription"]
   print "Event date: ", most_recent_event["MarkEventDate"]

Currently, Plumage reports three types of list data:

  • ApplicantList: Information about applicant or owner at various stages of prosecution;
  • MarkEventList: Information about events at various stages of prosecution;
  • AssignmentList: Information about assignment or other transfers of ownership of the trademark or trademark application.

Data representation

In almost every case, data is returned in exactly the same format as provided by the PTO. For example, an application number is an eight-digit string such as "86799303", even though PTO documents may refer to it as "86/799,303" (meaning series 86, application serial no. 799,303). However, Plumage also provides what I call "convenience values" that are derived from values provided by the PTO as a convenience to the programmer. These are primarily used for dates and addresses. In addition, Plumage generates diagnostic data about the execution of Plumage itself for use in debugging (see "Diagnostic Data", below).

Dates

The PTO provides several dates in a format that includes a time of day, usually one that has no significance (almost always being "04:00" or "05:00"). For example, the application date may be provided in the form "2015-10-26-04:00", and the key ApplicationDate will have a value "2015-10-26-04:00". However, because most programs will want to ignore the superfluous "-04:00", the key ApplicationDateTruncated is also provided, having a value "2015-10-26". Most applications will probably want to use the truncated form.

Addresses

The PTO reports address information as several discrete pieces of information. For instance, the address of the correspondent is reported as six separate items: two lines of address (CorrespondentAddressLine01, usually a street address, e.g., "1234 Gladys Ave.", or a post office box; and CorrespondentAddressLine02 usually blank, but potentially including floor or suite information); a city (CorrespondentAddressCity); a geographic region (CorrespondentAddressGeoRegion, usually a state or province); a postal code (CorrespondentPostalCode, generally a ZIP code); and a country (CorrespondentCountryCode). If a program wants to check to see if the address has changed, it needs to check six separate fields so see whether any of them have changed.

To simplify this, Plumage provides a "combined address" (e.g. CorrespondentCombinedAddress) that consists of all of these fields concatenated, separated by a '/'; for example: "1234 Gladys Ave.//Lakewood/Ohio/44107-2510/US". A program monitoring for changes to the address can simply check the CorrespondentCombinedAddress field rather than each of its individual constituents. Note, though, that a program preparing letters or mailing labels will probably want to use the individual fields and construct the address from them.

Key names

In general, Plumage uses as its key names the same names used as XML tags in the data provided by the PTO. When different names are used by the PTO in ST.66 and ST.96 format, ST.66 is usually preferred. In some cases, for example, where the same names are used in the XML files for multiple purposes, the key names are qualified.

Using the tables

In the tables below, the following information is presented:

  • Plumage key name;
  • Short description of the data;
  • One or more identifiers sufficient to locate the data in the PTO XML files;
  • The equivalent label as used by the PTO on TSDR;
  • Notes, if applicable.
For each of the data items returned

Non-recurring entries

This section describes content where there is one unique value for a particular trademark application (such as the application number, for example). Data that is reported as a list (mark events, applicants and assignments) are set out under "Recurring entries" below). For convenience, the data is broken out by what type of information is provided.

Basic Data

ApplicationNumber

Plumage key ApplicationNumber
Description application serial number
XML field name ST.66: ApplicationNumber
ST.96: ApplicationNumberText
TSDR field label US Serial Number

ApplicationDate

Plumage key ApplicationDate
Description application filing date
XML field name ApplicationDate
TSDR field label Application Filing Date

ApplicationDateTruncated

Plumage key ApplicationDateTruncated
Description application filing date, truncated to date-only (convenience value)
XML field name derived from ApplicationDate, above
TSDR field label Application Filing Date

RegistrationNumber

Plumage key RegistrationNumber
Description registration number, if any; empty string otherwise
XML field name RegistrationNumber
TSDR field label US Registration Number

RegistrationDate

Plumage key RegistrationDate
Description registration date, if any; empty string otherwise
XML field name RegistrationDate
TSDR field label Registration Date

RegistrationDateTruncated

Plumage key RegistrationDateTruncated
Description registration date, if any, truncated to date-only; empty string otherwise (convenience value)
XML field name derived from RegistrationDate, above
TSDR field label Registration Date

MarkCurrentStatusDate

Plumage key MarkCurrentStatusDate
Description date of the current status of the trademark
XML field name MarkCurrentStatusDate
TSDR field label Status Date

MarkCurrentStatusDateTruncated

Plumage key MarkCurrentStatusDateTruncated
Description status date, truncated to date-only (convenience value)
XML field name derived from MarkCurrentStatusDate, above
TSDR field label Status Date

MarkCurrentStatusExternalDescriptionText

Plumage key MarkCurrentStatusExternalDescriptionText
Description long status description, human-readable
XML field name MarkCurrentStatusExternalDescriptionText
TSDR field label Status

MarkVerbalElementText

Plumage key MarkVerbalElementText
Description text of trademark
XML field name MarkVerbalElementText
TSDR field label Mark

PublicationDate

Plumage key PublicationDate
Description publication date, if any; empty string otherwise
XML field name PublicationDate
TSDR field label Publication Date

PublicationDateTruncated

Plumage key PublicationDateTruncated
Description publication date, if any, truncated to date-only; empty string otherwise
XML field name derived from PublicationDate, above
TSDR field label Publication Date

RegisterCategory

Plumage key RegisterCategory
Description register (Primary or Secondary) on which the mark is registered or sought to be registered
XML field name RegisterCategory
TSDR field label Register
Notes In ST.66, the PTO reports this as "Principal" or "Supplemental". In ST.96, the PTO reports this as "Primary" or "Supplemental". Regardless of source, Plumage reports this as "Principal" or "Supplemental", using the statutory terminology. 15 U.S.C. §§ 1051, 1091.

RenewalDate

Plumage key RenewalDate
Description renewal date, if any; empty string otherwise
XML field name RenewalDate
TSDR field label Renewal Date (section "Maintenance Filings or Post Registration Information")

RenewalDateTruncated

Plumage key RenewalDateTruncated
Description renewal date, if any, truncated to date-only; empty string otherwise
XML field name derived from RenewalDate, above
TSDR field label Renewal Date (section "Maintenance Filings or Post Registration Information")

InternationalApplicationNumber

Plumage key InternationalApplicationNumber
Description international application no., if any
XML field name ST.66: InternationalApplicationNumber
ST.96: ApplicationNumber/ApplicationNumberText (where the AssociationCategory is 'International application or registration')
TSDR field label International Application(s)/Registration(s) Based on this Property (section "Related Properties Information")

InternationalRegistrationNumber

Plumage key InternationalRegistrationNumber
Description international registration no., if any
XML field name InternationalRegistrationNumber
TSDR field label International Registration Number (section "Related Properties Information")

Office Data

LawOfficeAssignedText

Plumage key LawOfficeAssignedText
Description office at the PTO to which the case is assigned
XML field name LawOfficeAssignedText
TSDR field label Law Office Assigned (section "TM Staff and Location Information")

CurrentLocationText

Plumage key CurrentLocationText
Description location of trademark file at PTO
XML field name CurrentLocationText
TSDR field label Current Location (section "TM Staff and Location Information")

CurrentLocationCode

Plumage key CurrentLocationCode
Description code corresponding to CurrentLocationText
XML field name CurrentLocationCode
TSDR field label N/A

CurrentLocationDate

Plumage key CurrentLocationDate
Description date in current location
XML field name CurrentLocationDate
TSDR field label Date in Location (section "TM Staff and Location Information")

CurrentLocationDateTruncated

Plumage key CurrentLocationDateTruncated
Description date in current location, truncated to date-only
XML field name derived from CurrentLocationDate, above
TSDR field label Date in Location (section "TM Staff and Location Information")

StaffName

Plumage key StaffName
Description name of individual, if any, at the PTO to whom the case is assigned; empty string otherwise
XML field name StaffName
TSDR field label TM Attorney (section "TM Staff and Location Information")

StaffOfficialTitle

Plumage key StaffOfficialTitle
Description title of individual named in StaffName; empty string otherwise
XML field name OfficialTitle
TSDR field label N/A

Correspondent Data

CorrespondentName

Plumage key CorrespondentName
Description name of correspondent listed for applicant
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / FreeFormatNameLine[1]
ST.96: NationalCorrespondent / ... / PersonFullName
TSDR field label Correspondent: Correspondent (section "Attorney/Correspondence Information")

CorrespondentOrganization

Plumage key CorrespondentOrganization
Description organization of correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / FreeFormatNameLine[2]
ST.96: NationalCorrespondent / ... / OrganizationStandardName
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")

CorrespondentAddressLine01

Plumage key CorrespondentAddressLine01
Description correspondent address, line 1
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressBuilding
ST.96: NationalCorrespondent / ... / AddressLineText (where sequenceNumber = '1')
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")

CorrespondentAddressLine02

Plumage key CorrespondentAddressLine02
Description correspondent address, line 2
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressStreet
ST.96: NationalCorrespondent / ... / AddressLineText (where sequenceNumber = '2')
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")

CorrespondentAddressCity

Plumage key CorrespondentAddressCity
Description city for correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressCity
ST.96: NationalCorrespondent / ... / CityName
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")

CorrespondentAddressGeoRegion

Plumage key CorrespondentAddressGeoRegion
Description geographical region (usually state or province) for correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressState
ST.96: NationalCorrespondent / ... / GeographicRegionName
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")

CorrespondentPostalCode

Plumage key CorrespondentPostalCode
Description postal code (e.g., ZIP code) for correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / AddressPostcode
ST.96: NationalCorrespondent / ... / PostalCode
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")

CorrespondentCountryCode

Plumage key CorrespondentCountryCode
Description ISO 3166 country code for correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / FormattedAddressCountryCode
ST.96: NationalCorrespondent / ... / CountryCode
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")

CorrespondentCombinedAddress

Plumage key CorrespondentCombinedAddress
Description multiple name/address values for correspondent (convenience value);
CorrespondentName, CorrespondentOrganization, CorrespondentAddressLine01, CorrespondentAddressLine02, CorrespondentAddressCity, CorrespondentAddressGeoRegion, CorrespondentPostalCode and CorrespondentCountryCode, seperated by the '/' character.
XML field name multiple
TSDR field label Correspondent: Name/Address (section "Attorney/Correspondence Information")
Notes See section Addresses, above].

CorrespondentPhoneNumber

Plumage key CorrespondentPhoneNumber
Description telephone number for correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / Phone
ST.96: NationalCorrespondent / ... / PhoneNumber
TSDR field label Correspondent: Phone (section "Attorney/Correspondence Information")

CorrespondentFaxNumber

Plumage key CorrespondentFaxNumber
Description fax number for correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / Fax
ST.96: NationalCorrespondent / ... / FaxNumber
TSDR field label Correspondent: Fax (section "Attorney/Correspondence Information")

CorrespondentEmailAddress

Plumage key CorrespondentEmailAddress
Description email address for correspondent
XML field name ST.66: Representative (where Comment = 'Domestic Correspondent') / ... / Email
ST.96: NationalCorrespondent / ... / EmailAddressText
TSDR field label Correspondent: Correspondent e-mail (section "Attorney/Correspondence Information")

Diagnostic Data

The fields listed here are for purposes of audit, debugging and other documentation purposes. They are generated by Plumage itself at runtime, and do not correspond to any data supplied by the PTO. They have no corresponding XML field name or TSDR field label.

In the descriptions below, "XML file" refers to the XML file containing the TSDR data (generally provided at least initially by the PTO); "XSL file" refers to the XSL file used to transform the XML file; and "Plumage implementation" refers to the callable Plumage program (e.g., Plumage-py or Plumage-dotnet).

DiagnosticInfoXSLTFilename

Plumage key DiagnosticInfoXSLTFilename
Description name of the XSL file

DiagnosticInfoXSLTLocation

Plumage key DiagnosticInfoXSLTLocation
Description location of the XSL file

DiagnosticInfoXSLTVersion

Plumage key DiagnosticInfoXSLTVersion
Description XSL file version information

DiagnosticInfoXSLTDate

Plumage key DiagnosticInfoXSLTDate
Description date of the XSL file

DiagnosticInfoXSLTFormat

Plumage key DiagnosticInfoXSLTFormat
Description XML format that the XSL file is designed to parse ("ST.66" or "ST.96")

DiagnosticInfoXSLTAuthor

Plumage key DiagnosticInfoXSLTAuthor
Description author of XSL file

DiagnosticInfoXSLTURL

Plumage key DiagnosticInfoXSLTURL
Description URL for XSL file development

DiagnosticInfoXSLTCopyright

Plumage key DiagnosticInfoXSLTCopyright
Description copyright information/notice for XSL file

DiagnosticInfoXSLTLicense

Plumage key DiagnosticInfoXSLTLicense
Description license information for XSL file

DiagnosticInfoXSLTLicenseURL

Plumage key DiagnosticInfoXSLTLicenseURL
Description license URL for XSL file

DiagnosticInfoImplementationName

Plumage key DiagnosticInfoImplementationName
Description Name of the Plumage implementation (e.g., "Plumage-dotnet", "Plumage-py")

DiagnosticInfoImplementationVersion

Plumage key DiagnosticInfoImplementationVersion
Description Plumage implementation version information

DiagnosticInfoImplementationDate

Plumage key DiagnosticInfoImplementationDate
Description date of the Plumage implementation

DiagnosticInfoImplementationAuthor

Plumage key DiagnosticInfoImplementationAuthor
Description author of the Plumage implementation

DiagnosticInfoImplementationURL

Plumage key DiagnosticInfoImplementationURL
Description URL for Plumage implementation development

DiagnosticInfoImplementationCopyright

Plumage key DiagnosticInfoImplementationCopyright
Description copyright information/notice for Plumage implementation development

DiagnosticInfoImplementationLicense

Plumage key DiagnosticInfoImplementationLicense
Description license information for Plumage implementation

DiagnosticInfoImplementationLicenseURL

Plumage key DiagnosticInfoImplementationLicenseURL
Description license URL for Plumage implementation

DiagnosticInfoExecutionDateTime

Plumage key DiagnosticInfoExecutionDateTime
Description date and time of Plumage execution

DiagnosticInfoXMLSource

Plumage key DiagnosticInfoXMLSource
Description source (URL or other location) of XML file

DiagnosticInfoXSLProcessorVersion

Plumage key DiagnosticInfoXSLProcessorVersion
Description version number of XSL processor

DiagnosticInfoXSLProcessorVendor

Plumage key DiagnosticInfoXSLProcessorVendor
Description vendor information for XSL processor

DiagnosticInfoXSLProcessorVendorURL

Plumage key DiagnosticInfoXSLProcessorVendorURL
Description URL of XSL processor vendor

Recurring entries

Recurring data is data that can occur multiple times for a trademark. For example, typically a number of events will occur in the course of a trademark registrations lifetime:

  • An application is filed;
  • the application is assigned to a PTO trademark examiner;
  • the examiner issues an office action;
  • the applicant responds to the office action;
  • the application is approved for publication;
  • the application is published;
  • the mark is registered.
There's more, but this is sufficient to illustrate that there are some things that, unlike single value things like the date of application, occur multiple times and need to be represented as lists, rather than single-value items. In the example above, each of the bullet items is a "mark event", and presented in a "mark event list".

Plumage provides three lists of recurring data:

  • MarkEventList: Information about events at various stages of prosecution ("Mark Events");
  • ApplicantList: Information about applicant or owner at various stages of prosecution ("Applicants");
  • AssignmentList: Information about assignment or other transfers of ownership of the trademark or trademark application. ("Assignments")
Note that any entry that provides a list rather than a simple string is denoted by a key that ends in "List"; and no non-list entries have a key that ends in "List".

In Plumage-py, each corresponding entry is a Python list; and each entry in the list is a dictionary whose keys and data are each strings.

In Plumage-dotnet, each corresponding entry is of type ArrayList; and each entry in the ArrayList is of type Dictionary<string, Object>, whose keys and data are each strings.

Each of the lists is documented in further detail below. See "Basic examples" to see how these lists can be accessed.

Mark events

MarkEventEntryNumber

Plumage key MarkEventEntryNumber
Description number associated with the event as supplied by the PTO. The PTO numbers the first event "1" and the number increments with each succeeding event.
XML field name MarkEventEntryNumber
TSDR field label N/A

MarkEventDate

Plumage key MarkEventDate
Description date of the mark event
XML field name MarkEventDate
TSDR field label Date (section "Prosecution History")

MarkEventDateTruncated

Plumage key MarkEventDateTruncated
Description date of the mark event, truncated to date-only (convenience value)
XML field name MarkEventEntryNumber
TSDR field label Date (section "Prosecution History")

MarkEventDescription

Plumage key MarkEventDescription
Description description of the mark event
XML field name ST66: MarkEventInternalDescriptionText
ST96: MarkEventDescriptionText
TSDR field label Description (section "Prosecution History")

Applicants

(still under construction)

Assignments

(still under construction)

Clone this wiki locally