Skip to main content
Every register is mapped to one record model. A record comes in two shapes: Summaries are built from one row per record, so a page of 100 comes back quickly. The full record adds parties, classification, identifiers, designations and the office’s own status wording. Use the summary to decide which records you need, then fetch those in a batch of up to 100.

Rules that apply to every field

  • Every field is always present. A field never disappears because it has no value.
  • null means the office did not state the value. Pinakel never fills a gap with a default or a computed value: an expiry date is never calculated from a filing date, and a missing country is never guessed from an address.
  • Arrays are never null. An empty list means the record has none.
  • Dates are calendar dates as the office states them, YYYY-MM-DD, with no time zone. See Dates.
  • Timestamps are UTC with microseconds and a Z suffix: 2026-11-10T09:02:13.512000Z.
  • Enumerations are open. New values can appear in later versions; treat an unknown value like other. See Versioning.

The full record

This is an Albanian application for a figurative mark. It has no mark text, so mark.text is null, and it carries the office’s own status wording in Albanian.

Fields

Each party has the same fields:

Enumerations

Filter values and response values are the same strings, so a value you read can be passed straight back as a filter. other means the office used a value that has no mapping yet. For status, the office’s wording is in status.office_status; for the other fields it is in source_record. Each of these fields can also be null when the office stated nothing; filter for that with the value none. Status explains the difference between null, other and unknown.

The summary

Search results and feed items carry these fields. Their meaning is the same as in the full record.

Optional blocks

Retrieve and batch retrieve accept include to add blocks. A block appears only when you ask for it. Batch requests with goods_services, assignments or source_record are limited to 25 ids. On search and the changes feed, include accepts only full, which returns full trademark objects instead of summaries and limits the page to 25.

Records that cannot be built

Rarely, a record exists but cannot be assembled at that moment, for example while its source document is being replaced. Such a record is left out of search and feed pages, listed under unavailable in a batch response, and answered with 503 unavailable on retrieve. Retry later.

What is not in v1

  • When Pinakel first saw a record. Backfills restamp that time, so it would mislead; it will be added once it is reliable.
  • Images. media.has_image tells you whether one exists.
  • Opposition details, and removal events in the changes feed.
  • Sparse fieldsets (fields=).