> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pinakelai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Dates

> The seven lifecycle dates, what null means, implausible dates, date filters, and timestamps.

## Lifecycle dates

Every record has a `dates` block with seven dates, plus `status.date`. Each is a calendar date, `YYYY-MM-DD`, exactly as the office states it, with no time zone.

| Field | What the office states | Filter parameters |
| - | - | - |
| `dates.application` | The filing date | `application_date_from`, `application_date_to` |
| `dates.registration` | The registration date | `registration_date_from`, `registration_date_to` |
| `dates.publication` | A publication date, usually publication for opposition | `publication_date_from`, `publication_date_to` |
| `dates.expiry` | When the current term of protection ends | `expiry_date_from`, `expiry_date_to` |
| `dates.renewal` | The date of the most recent renewal | `renewal_date_from`, `renewal_date_to` |
| `dates.termination` | When the right ended (cancellation, withdrawal, lapse) | `termination_date_from`, `termination_date_to` |
| `dates.opposition_period_end` | When the opposition period ends or ended | `opposition_period_end_date_from`, `opposition_period_end_date_to` |
| `status.date` | The date of the current status | `status_date_from`, `status_date_to` |

Offices use these dates differently. Some republish a mark after an event such as an assignment, so `publication` can be years after `registration`. Read each date as "the date this office gave for this event", and check [Data quality](https://docs.pinakelai.com/data/data-quality.md) for register-specific notes.

## null means not stated

A `null` date means the office did not publish it. Pinakel never computes a missing date: an expiry date is not derived from a registration date and a term length, and a registration date is not copied from an application date. If you need a computed deadline, compute it yourself and keep it separate from the office's date.

A record whose date is `null` never matches a range filter on that date.

## Implausible dates

Office data contains typing errors, such as a year `0201` or `2201`. Pinakel returns these dates as stated, because silently correcting them would hide the office's error.

For sorting only, a date before `1800-01-01` or more than one day in the future counts as undated. Undated records come **last** in both ascending and descending order, so a sort by application date starts with real dates. Records with equal dates are ordered by jurisdiction and id.

## Date filters

Ranges use `<field>_date_from` and `<field>_date_to`. Both bounds are inclusive and optional, and `from` must not be after `to`. Use one bound for an open range.

```bash theme={null}
# Registered marks expiring in the first quarter of 2027
curl -G "https://api.pinakelai.com/v1/trademarks" \
  -H "Authorization: Bearer $PINAKEL_API_KEY" \
  --data-urlencode "jurisdiction=AD" \
  --data-urlencode "status=registered" \
  --data-urlencode "expiry_date_from=2027-01-01" \
  --data-urlencode "expiry_date_to=2027-03-31"
```

A date filter compares the stated value, so it can match an implausible date that falls inside your range.

## Sorting by date

| `sort` | Order | Needs an anchor filter |
| - | - | - |
| `-application_date` (default) | Newest filing first | No |
| `application_date` | Oldest filing first | No |
| `-registration_date`, `registration_date` | By registration date | Yes |
| `-expiry_date`, `expiry_date` | By expiry date | Yes |

An anchor filter is a number, name, key or phrase filter (see [Searching](https://docs.pinakelai.com/guides/searching.md#anchored-and-broad-searches)). Without one, sorting by registration or expiry date gets 400 [`invalid-request`](https://docs.pinakelai.com/errors/invalid-request). There is no sort by `updated_at`: use the [changes feed](https://docs.pinakelai.com/guides/syncing.md) to process records in change order.

## Timestamps

Timestamps are UTC, with microseconds and a `Z` suffix: `2026-11-10T09:02:13.512000Z`.

| Field | Meaning |
| - | - |
| `updated_at` | When the record last changed in Pinakel. It also moves when a register is reloaded, even if nothing visible changed. |
| `source.processed_on` | The date Pinakel last processed the record from its source (a date, not a timestamp). |
| Feed `created_at` | When a change was published to the changes feed. |
| Feed `feed_start`, `complete_through` | The start of the feed's history, and the time up to which every change has been published. See [Syncing](https://docs.pinakelai.com/guides/syncing.md). |

The changes feed's `since` parameter takes an RFC 3339 timestamp with `Z` or an offset, such as `2026-12-01T00:00:00Z`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.