Skip to content
Terry Carroll edited this page Sep 22, 2018 · 9 revisions

Introduction

Basics

The TSDRData object contains two dictionaries: TSDRSingle and TSDRMulti, which contain attributes of the requested trademark application or registration.

TSDRSingle is used for those data elements that can be represented as a simple string. For example, for the key ApplicationNumber, the value is an eight-character string that represents the application number, e.g. "86799303".

TSDRMulti is used for those data elements that occur 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 TSDRMulti 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).

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.TSDRData.TSDRSingle["ApplicationNumber"]
   print "Trademark text: ", t.TSDRData.TSDRSingle["MarkVerbalElementText"]
   print "Application filing date: ", t.TSDRData.TSDRSingle["ApplicationDate"]
   print "Registration no: ", t.TSDRData.TSDRSingle["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.TSDRData.TSDRMulti["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.TSDRData.TSDRMulti["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 would need 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.

You should not attempt to parse from the combined field into its constituent fields. If one of the fields actually contains a '/' (for example, if CorrespondentAddressLine02 is "Fifth floor/Room 510"), you can't simply split on the '/' character. Instead, use the values provided for the constituent fields themselves.

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.

TSDRDataSingle

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 "TSDRDataMulti" below). For convenience, the data is broken out by what type of information is provided.

In Plumage-py TSDRSingle is implemented as a Python dict. In Plumage-dotnet (C#), it is implemented as Dictionary<string, string>.

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, separated 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

TSDRMulti

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. these lists are stored in the TSDRMulti dictionary. 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")
In Plumage-py, TSDRMulti is represented as a dict. Each entry in the dict is a list. Each entry in the list is a dict whose keys and data are each strings.

In Plumage-dotnet, TSDRMulti is represented as type Dictionary<string, List<Dictionary<string, string>>>. Each entry in the Dictionary is represented as type List<Dictionary<string, string>>; and each entry in the List is of type Dictionary<string, string>.

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

The Applicants entries show the then-current applicant at various stages (described by the ApplicantDescription field) of the trademark prosecution.

ApplicantName
Plumage key ApplicantName
Description Applicant name
XML field name ST66: FreeFormatNameLine
ST96: EntityName, if present; otherwise OrganizationStandardName
TSDR field label N/A
ApplicantDescription
Plumage key ApplicantDescription
Description Applicant description; examples include "ORIGINAL APPLICANT", "OWNER AT PUBLICATION", "ORIGINAL REGSITRANT", etc.
XML field name ST66: PartyTypeDescriptionText
ST96: CommentText
TSDR field label N/A
ApplicantAddressLine01
Plumage key ApplicantAddressLine01
Description First line of applicant address
XML field name ST66: AddressRoom
ST96: AddressLineText (sequenceNumber='1')
TSDR field label N/A
ApplicantAddressLine02
Plumage key ApplicantAddressLine02
Description Second line of applicant address
XML field name ST66: not supported (reported as blank)
ST96: AddressLineText (sequenceNumber='2')
TSDR field label N/A
ApplicantAddressCity
Plumage key ApplicantAddressCity
Description Applicant city
XML field name ST66: AddressCity
ST96: CityName
TSDR field label N/A
ApplicantAddressGeoRegion
Plumage key ApplicantAddressGeoRegion
Description Applicant geographical region (generally a state or province)
XML field name ST66: AddressState
ST96: GeographicRegionName
TSDR field label N/A
ApplicantPostalCode
Plumage key ApplicantPostalCode
Description Applicant postal code (e.g., zip code)
XML field name ST66: AddressPostcode
ST96: PostalCode
TSDR field label N/A
ApplicantCountryCode
Plumage key ApplicantCountryCode
Description Applicant country code (ISO 3166)
XML field name ST66: FormattedAddressCountryCode
ST96: CountryCode
TSDR field label N/A
ApplicantCombinedAddress
Plumage key ApplicantCombinedAddress
Description multiple name and address values for applicant (convenience field); ApplicantAddressLine01, ApplicantAddressLine02, ApplicantAddressCity, ApplicantAddressGeoRegion, ApplicantPostalCode, ApplicantCountryCode, separated by the '/' character
XML field name multiple
TSDR field label N/A
Notes See section Addresses, above.

Assignments

(still under construction)