curl -G "https://api.pinakelai.com/v1/changes" \
-H "Authorization: Bearer $PINAKEL_API_KEY" \
--data-urlencode "jurisdiction=AD,AL" \
--data-urlencode "cursor=$PINAKEL_FEED_CURSOR"
import os
import requests
resp = requests.get(
"https://api.pinakelai.com/v1/changes",
headers={"Authorization": f"Bearer {os.environ['PINAKEL_API_KEY']}"},
params={"jurisdiction": "AD,AL", "cursor": os.environ["PINAKEL_FEED_CURSOR"]},
timeout=30,
)
resp.raise_for_status()
page = resp.json()
const params = new URLSearchParams({
jurisdiction: "AD,AL",
cursor: process.env.PINAKEL_FEED_CURSOR,
});
const res = await fetch(`https://api.pinakelai.com/v1/changes?${params}`, {
headers: { Authorization: `Bearer ${process.env.PINAKEL_API_KEY}` },
});
const page = await res.json();
{
"object": "list",
"data": [
{
"object": "change",
"id": "chg_8d1f4a0c27b94e6f",
"type": "trademark.changed",
"created_at": "2026-12-01T03:12:44.802113Z",
"trademark": {
"object": "trademark_summary",
"id": "tm_AD_097c8a54-c1a8-5a8e-8b77-fb1b9e51ccba",
"jurisdiction": "AD",
"office": "AD",
"origin_office": null,
"identifiers": {
"application_number": "48003",
"registration_number": "48003"
},
"mark": {
"text": "SkingénIA by GALENIC",
"translation": null,
"transliteration": null,
"feature": "word",
"kind": "individual"
},
"status": {
"value": "registered",
"category": "live",
"date": "2020-06-23"
},
"dates": {
"application": "2020-06-23",
"registration": "2020-06-23",
"publication": "2025-07-30",
"expiry": "2030-06-23",
"renewal": null,
"termination": null,
"opposition_period_end": null
},
"primary_owner": {
"name": "GALENIC COSMETICS LABORATORY",
"country": null
},
"owner_count": 1,
"nice_class_count": 1,
"primary_nice_class": 9,
"media": {
"has_image": false
},
"updated_at": "2026-12-01T02:58:17.390551Z",
"links": {
"self": "https://api.pinakelai.com/v1/trademarks/tm_AD_097c8a54-c1a8-5a8e-8b77-fb1b9e51ccba"
}
}
}
],
"has_more": false,
"next_cursor": "eJxNjEEKwjAQRe9y1l3EVnDhOdQLFLp2IXRbxG0ZphgxIAwTF_n7iQqFt3n_Mf8FTRBCkMU.9cQ2aNfDdA",
"unavailable_jurisdictions": [],
"feed_start": "2026-11-30T02:41:09.000000Z",
"complete_through": "2026-12-01T03:30:00.115406Z"
}
{
"type": "https://docs.pinakelai.com/errors/cursor-mismatch",
"title": "Cursor does not match the request",
"status": 400,
"detail": "This cursor was issued for different filters. Send the original filters with it.",
"request_id": "req_01M7Q41G8H9J0K1M2N3P4Q5R6S"
}
{
"type": "https://docs.pinakelai.com/errors/jurisdiction-unavailable",
"title": "Jurisdiction unavailable",
"status": 503,
"detail": "Every register in this request is being reloaded: AD, AL.",
"request_id": "req_01M7Q41H9J0K1M2N3P4Q5R6S7T"
}
Changes
List changed trademarks
Follow every record change in publication order with a stored cursor.
GET
/
v1
/
changes
curl -G "https://api.pinakelai.com/v1/changes" \
-H "Authorization: Bearer $PINAKEL_API_KEY" \
--data-urlencode "jurisdiction=AD,AL" \
--data-urlencode "cursor=$PINAKEL_FEED_CURSOR"
import os
import requests
resp = requests.get(
"https://api.pinakelai.com/v1/changes",
headers={"Authorization": f"Bearer {os.environ['PINAKEL_API_KEY']}"},
params={"jurisdiction": "AD,AL", "cursor": os.environ["PINAKEL_FEED_CURSOR"]},
timeout=30,
)
resp.raise_for_status()
page = resp.json()
const params = new URLSearchParams({
jurisdiction: "AD,AL",
cursor: process.env.PINAKEL_FEED_CURSOR,
});
const res = await fetch(`https://api.pinakelai.com/v1/changes?${params}`, {
headers: { Authorization: `Bearer ${process.env.PINAKEL_API_KEY}` },
});
const page = await res.json();
{
"object": "list",
"data": [
{
"object": "change",
"id": "chg_8d1f4a0c27b94e6f",
"type": "trademark.changed",
"created_at": "2026-12-01T03:12:44.802113Z",
"trademark": {
"object": "trademark_summary",
"id": "tm_AD_097c8a54-c1a8-5a8e-8b77-fb1b9e51ccba",
"jurisdiction": "AD",
"office": "AD",
"origin_office": null,
"identifiers": {
"application_number": "48003",
"registration_number": "48003"
},
"mark": {
"text": "SkingénIA by GALENIC",
"translation": null,
"transliteration": null,
"feature": "word",
"kind": "individual"
},
"status": {
"value": "registered",
"category": "live",
"date": "2020-06-23"
},
"dates": {
"application": "2020-06-23",
"registration": "2020-06-23",
"publication": "2025-07-30",
"expiry": "2030-06-23",
"renewal": null,
"termination": null,
"opposition_period_end": null
},
"primary_owner": {
"name": "GALENIC COSMETICS LABORATORY",
"country": null
},
"owner_count": 1,
"nice_class_count": 1,
"primary_nice_class": 9,
"media": {
"has_image": false
},
"updated_at": "2026-12-01T02:58:17.390551Z",
"links": {
"self": "https://api.pinakelai.com/v1/trademarks/tm_AD_097c8a54-c1a8-5a8e-8b77-fb1b9e51ccba"
}
}
}
],
"has_more": false,
"next_cursor": "eJxNjEEKwjAQRe9y1l3EVnDhOdQLFLp2IXRbxG0ZphgxIAwTF_n7iQqFt3n_Mf8FTRBCkMU.9cQ2aNfDdA",
"unavailable_jurisdictions": [],
"feed_start": "2026-11-30T02:41:09.000000Z",
"complete_through": "2026-12-01T03:30:00.115406Z"
}
{
"type": "https://docs.pinakelai.com/errors/cursor-mismatch",
"title": "Cursor does not match the request",
"status": 400,
"detail": "This cursor was issued for different filters. Send the original filters with it.",
"request_id": "req_01M7Q41G8H9J0K1M2N3P4Q5R6S"
}
{
"type": "https://docs.pinakelai.com/errors/jurisdiction-unavailable",
"title": "Jurisdiction unavailable",
"status": 503,
"detail": "Every register in this request is being reloaded: AD, AL.",
"request_id": "req_01M7Q41H9J0K1M2N3P4Q5R6S7T"
}
The changes feed: every record that changed, in the order the changes were published. Follow it with a stored cursor to keep a copy of registers current.
- Subscribe: call without
sinceorcursorto start from now. You get an empty page and anext_cursor. - Start from a time:
since(RFC 3339, withZor an offset) is inclusive and cannot be earlier thanfeed_start. Use it on the first call only. - Continue: send
cursorwith the samejurisdictionas the first call.next_cursoris never null; store it after every page. - Done for now:
has_more: falsemeans everything published beforecomplete_throughhas been delivered. Poll again later, at most every 15 minutes. - Items carry the record as it is when you read the page, as a summary, or as a full record with
include=full(limitat most 25). - Registers that are reloading are skipped and listed in
unavailable_jurisdictions. If every register named injurisdictionis reloading, the call gets 503jurisdiction-unavailable.
curl -G "https://api.pinakelai.com/v1/changes" \
-H "Authorization: Bearer $PINAKEL_API_KEY" \
--data-urlencode "jurisdiction=AD,AL" \
--data-urlencode "cursor=$PINAKEL_FEED_CURSOR"
import os
import requests
resp = requests.get(
"https://api.pinakelai.com/v1/changes",
headers={"Authorization": f"Bearer {os.environ['PINAKEL_API_KEY']}"},
params={"jurisdiction": "AD,AL", "cursor": os.environ["PINAKEL_FEED_CURSOR"]},
timeout=30,
)
resp.raise_for_status()
page = resp.json()
const params = new URLSearchParams({
jurisdiction: "AD,AL",
cursor: process.env.PINAKEL_FEED_CURSOR,
});
const res = await fetch(`https://api.pinakelai.com/v1/changes?${params}`, {
headers: { Authorization: `Bearer ${process.env.PINAKEL_API_KEY}` },
});
const page = await res.json();
{
"object": "list",
"data": [
{
"object": "change",
"id": "chg_8d1f4a0c27b94e6f",
"type": "trademark.changed",
"created_at": "2026-12-01T03:12:44.802113Z",
"trademark": {
"object": "trademark_summary",
"id": "tm_AD_097c8a54-c1a8-5a8e-8b77-fb1b9e51ccba",
"jurisdiction": "AD",
"office": "AD",
"origin_office": null,
"identifiers": {
"application_number": "48003",
"registration_number": "48003"
},
"mark": {
"text": "SkingénIA by GALENIC",
"translation": null,
"transliteration": null,
"feature": "word",
"kind": "individual"
},
"status": {
"value": "registered",
"category": "live",
"date": "2020-06-23"
},
"dates": {
"application": "2020-06-23",
"registration": "2020-06-23",
"publication": "2025-07-30",
"expiry": "2030-06-23",
"renewal": null,
"termination": null,
"opposition_period_end": null
},
"primary_owner": {
"name": "GALENIC COSMETICS LABORATORY",
"country": null
},
"owner_count": 1,
"nice_class_count": 1,
"primary_nice_class": 9,
"media": {
"has_image": false
},
"updated_at": "2026-12-01T02:58:17.390551Z",
"links": {
"self": "https://api.pinakelai.com/v1/trademarks/tm_AD_097c8a54-c1a8-5a8e-8b77-fb1b9e51ccba"
}
}
}
],
"has_more": false,
"next_cursor": "eJxNjEEKwjAQRe9y1l3EVnDhOdQLFLp2IXRbxG0ZphgxIAwTF_n7iQqFt3n_Mf8FTRBCkMU.9cQ2aNfDdA",
"unavailable_jurisdictions": [],
"feed_start": "2026-11-30T02:41:09.000000Z",
"complete_through": "2026-12-01T03:30:00.115406Z"
}
{
"type": "https://docs.pinakelai.com/errors/cursor-mismatch",
"title": "Cursor does not match the request",
"status": 400,
"detail": "This cursor was issued for different filters. Send the original filters with it.",
"request_id": "req_01M7Q41G8H9J0K1M2N3P4Q5R6S"
}
{
"type": "https://docs.pinakelai.com/errors/jurisdiction-unavailable",
"title": "Jurisdiction unavailable",
"status": 503,
"detail": "Every register in this request is being reloaded: AD, AL.",
"request_id": "req_01M7Q41H9J0K1M2N3P4Q5R6S7T"
}
Authorizations
Your API key: Authorization: Bearer pk_live_... (or pk_test_...).
Query Parameters
First call only: start from this time (RFC 3339 with Z or an offset, inclusive; not before feed_start). Without since and cursor the feed starts now.
Registers to follow. Repeat the parameter or separate values with commas (OR), up to 20. Send the same set with every cursor.
Items per page, 1 to 100 (default 100; at most 25 with include=full).
Required range:
1 <= x <= 100full: full trademark objects instead of summaries (limit at most 25).
Allowed value:
"full"next_cursor of the previous page; store it after every page.
Maximum string length:
6000