> ## 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.

# Retrieve up to 100 trademarks

> Retrieve up to 100 full trademark records by id in one call.

Returns full [trademark records](https://docs.pinakelai.com/concepts/trademark-record.md) for up to 100 ids in one call, in the order you sent them. The request is read-only; `POST` only carries the list of ids.

* Body: `{"ids": [...], "include": [...]}`, as `application/json`, at most 64 KB. Anything else gets 415 or 413.
* `ids`: 1 to 100 record ids. Duplicates are removed; the first occurrence keeps its place.
* `include`: optional, the same values as [retrieve](https://docs.pinakelai.com/api-reference/trademarks/retrieve.md). With `goods_services`, `assignments` or `source_record`, at most 25 ids.
* Ids that do not exist are listed in `not_found`. Ids whose register is reloading, or whose record cannot be assembled right now, are listed in `unavailable`; retry those later. Both lists hold the ids as you sent them.
* One batch counts as one call, whatever the number of ids.

```bash cURL theme={null}
curl "https://api.pinakelai.com/v1/trademarks/batch" \
  -H "Authorization: Bearer $PINAKEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["tm_AD_2376e41e-3d24-57e3-af6f-6a176f9985ba", "tm_AL_01380b37-3212-5fc1-8cce-20183f7c15eb", "tm_AL_no-such-record"]}'
```

```python Python theme={null}
import os

import requests

resp = requests.post(
    "https://api.pinakelai.com/v1/trademarks/batch",
    headers={"Authorization": f"Bearer {os.environ['PINAKEL_API_KEY']}"},
    json={"ids": [
        "tm_AD_2376e41e-3d24-57e3-af6f-6a176f9985ba",
        "tm_AL_01380b37-3212-5fc1-8cce-20183f7c15eb",
        "tm_AL_no-such-record",
    ]},
    timeout=60,
)
resp.raise_for_status()
body = resp.json()
```

```javascript JavaScript theme={null}
const res = await fetch("https://api.pinakelai.com/v1/trademarks/batch", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PINAKEL_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    ids: [
      "tm_AD_2376e41e-3d24-57e3-af6f-6a176f9985ba",
      "tm_AL_01380b37-3212-5fc1-8cce-20183f7c15eb",
      "tm_AL_no-such-record",
    ],
  }),
});
const body = await res.json();
```

```json 200 theme={null}
{
  "object": "list",
  "data": [
    {
      "object": "trademark",
      "id": "tm_AD_2376e41e-3d24-57e3-af6f-6a176f9985ba",
      "jurisdiction": "AD",
      "office": "AD",
      "origin_office": null,
      "identifiers": {
        "application_number": "48000",
        "registration_number": "48000",
        "international_registration_numbers": [],
        "priority_claims": []
      },
      "mark": {
        "text": "NOKY",
        "translation": null,
        "transliteration": null,
        "feature": "word",
        "kind": "individual"
      },
      "status": {
        "value": "registered",
        "category": "live",
        "date": "2009-06-05",
        "office_status": null,
        "office_status_code": null
      },
      "dates": {
        "application": "2009-06-05",
        "registration": "2009-06-05",
        "publication": "2025-07-28",
        "expiry": "2029-06-05",
        "renewal": null,
        "termination": null,
        "opposition_period_end": null
      },
      "classification": {
        "nice_classes": [8, 16, 21],
        "national_classes": [],
        "similar_group_codes": [],
        "vienna_codes": []
      },
      "parties": {
        "owners": [
          {
            "name": "ESSITY PLD FRANCE SAS",
            "name_translated": null,
            "name_key": "ESSITY PLD FRANCE",
            "country": null,
            "address": "BOULEVARD VICTOR-HUGO, CS 80047, 151, POSTAL CODE: 93400, CITY: SAINT-OUEN, FRANCE",
            "entity": "SAS",
            "roles": ["owner", "applicant"]
          }
        ],
        "representatives": [
          {
            "name": "JOSEP CARBONELL GIMENO",
            "name_translated": null,
            "name_key": "JOSEP CARBONELL GIMENO",
            "country": "AD",
            "address": "C. Bonaventura Riberaygua, 39, 4t - 3a Andorra la Vella",
            "entity": null,
            "roles": ["representative"]
          }
        ]
      },
      "designated_countries": [],
      "media": {
        "has_image": false
      },
      "updated_at": "2026-11-10T09:02:13.512000Z",
      "source": {
        "processed_on": "2026-11-10"
      },
      "links": {
        "self": "https://api.pinakelai.com/v1/trademarks/tm_AD_2376e41e-3d24-57e3-af6f-6a176f9985ba"
      }
    },
    {
      "object": "trademark",
      "id": "tm_AL_01380b37-3212-5fc1-8cce-20183f7c15eb",
      "jurisdiction": "AL",
      "office": "AL",
      "origin_office": null,
      "identifiers": {
        "application_number": "AL/T/2026/001305",
        "registration_number": null,
        "international_registration_numbers": [],
        "priority_claims": []
      },
      "mark": {
        "text": null,
        "translation": null,
        "transliteration": null,
        "feature": "figurative",
        "kind": "individual"
      },
      "status": {
        "value": "pending",
        "category": "live",
        "date": null,
        "office_status": "Në proces ekzaminimi",
        "office_status_code": null
      },
      "dates": {
        "application": "2026-10-05",
        "registration": null,
        "publication": null,
        "expiry": null,
        "renewal": null,
        "termination": null,
        "opposition_period_end": null
      },
      "classification": {
        "nice_classes": [9, 35, 36, 42],
        "national_classes": [],
        "similar_group_codes": [],
        "vienna_codes": []
      },
      "parties": {
        "owners": [
          {
            "name": "CONAD-CONSORZIO NAZ. DETTAGLIANTI SOC.COOPERATIVA IN SIGLA CONAD",
            "name_translated": null,
            "name_key": "CONAD CONSORZIO NAZ DETTAGLIANTI SOCCOOPERATIVA IN SIGLA CONAD",
            "country": "IT",
            "address": "VIA MICHELINO, 59 40127 Bolonja, Itali",
            "entity": null,
            "roles": ["applicant"]
          }
        ],
        "representatives": [
          {
            "name": "RENATA LEKA",
            "name_translated": null,
            "name_key": "RENATA LEKA",
            "country": "AL",
            "address": "Njesia bashkiake nr 5, rruga Ibrahim Rugova, Kompleksi Green Park, kulla 1, kati 3,Tirane , AL",
            "entity": null,
            "roles": ["representative"]
          }
        ]
      },
      "designated_countries": [],
      "media": {
        "has_image": true
      },
      "updated_at": "2026-11-10T09:02:13.512000Z",
      "source": {
        "processed_on": "2026-11-10"
      },
      "links": {
        "self": "https://api.pinakelai.com/v1/trademarks/tm_AL_01380b37-3212-5fc1-8cce-20183f7c15eb"
      }
    }
  ],
  "not_found": ["tm_AL_no-such-record"],
  "unavailable": []
}
```

```json 400 theme={null}
{
  "type": "https://docs.pinakelai.com/errors/invalid-request",
  "title": "Invalid request",
  "status": 400,
  "detail": "The request has invalid parameters; see errors.",
  "request_id": "req_01M7Q41E6F7G8H9J0K1M2N3P4Q",
  "errors": [
    {
      "code": "invalid-body",
      "detail": "Not a valid trademark id.",
      "pointer": "/ids/1"
    }
  ]
}
```

```json 415 theme={null}
{
  "type": "https://docs.pinakelai.com/errors/unsupported-media-type",
  "title": "Unsupported media type",
  "status": 415,
  "detail": "The request body must be application/json.",
  "request_id": "req_01M7Q41F7G8H9J0K1M2N3P4Q5R"
}
```


## OpenAPI

````yaml POST /v1/trademarks/batch
openapi: 3.1.0
info:
  title: Pinakel Trademark Data API
  summary: 'Trademark records from 119 registers: search, retrieve, sync and coverage.'
  description: >
    Structured trademark records from national, regional and international
    registers, normalized into one object.


    - **Authentication:** every endpoint except `GET /v1/health` needs
    `Authorization: Bearer <key>` (`pk_live_...` or `pk_test_...`). Keys are
    never accepted in the URL.

    - **Errors** are RFC 9457 problem details (`application/problem+json`) whose
    `type` links to the error's documentation; every response carries
    `X-Request-Id`.

    - **Limits:** the `RateLimit` and `RateLimit-Policy` headers report the
    key's per-minute and monthly allowance; `429` responses say which one ran
    out and when to retry.

    - **Pagination** is by opaque cursor: send `next_cursor` back with the same
    filters.

    - **Stability:** v1 only gains additive changes. Enumerations in responses
    are open (`x-extensible-enum`): treat unknown values as `other`.


    Guides, concepts and coverage: https://docs.pinakelai.com
  termsOfService: https://www.pinakelai.com/terms-of-use
  contact:
    name: Pinakel API support
    url: https://docs.pinakelai.com/
  license:
    name: 'Proprietary: use under the Pinakel terms of use'
    url: https://www.pinakelai.com/terms-of-use
  version: 1.0.0
servers:
  - url: https://api.pinakelai.com
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Trademarks
    description: Search, retrieve and batch-retrieve records.
  - name: Changes
    description: Follow every record that changed, by cursor.
  - name: Jurisdictions
    description: Registers covered, their state and freshness.
  - name: Account
    description: Your usage, and the public health check.
paths:
  /v1/trademarks/batch:
    post:
      tags:
        - Trademarks
      summary: Retrieve up to 100 trademarks
      operationId: batchRetrieveTrademarks
      requestBody:
        content:
          application/json:
            schema:
              properties:
                ids:
                  items:
                    type: string
                  type: array
                  maxItems: 100
                  minItems: 1
                  title: Ids
                  description: >-
                    Up to 100 trademark ids (25 with goods_services, assignments
                    or source_record), as returned in `id`. Duplicates are
                    answered once.
                include:
                  items:
                    type: string
                    enum:
                      - goods_services
                      - previous_parties
                      - assignments
                      - source_record
                  type: array
                  title: Include
                  description: >-
                    Optional parts to add to every object: goods_services,
                    previous_parties, assignments (with securities),
                    source_record.
              additionalProperties: false
              type: object
              required:
                - ids
              title: BatchRequest
              description: >-
                OpenAPI schema of the batch body. parse_batch() is the
                validator.
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResult'
        '400':
          description: invalid-request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        '401':
          description: unauthenticated, key-revoked
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        '403':
          description: product-not-enabled
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        '413':
          description: payload-too-large
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        '415':
          description: unsupported-media-type
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        '429':
          description: rate-limited, quota-exceeded
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        '500':
          description: internal-error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        '503':
          description: unavailable
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
        default:
          description: Any other problem (RFC 9457).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDocument'
components:
  schemas:
    BatchResult:
      properties:
        object:
          type: string
          const: list
          title: Object
        data:
          items:
            $ref: '#/components/schemas/Trademark'
          type: array
          title: Data
        not_found:
          items:
            type: string
          type: array
          title: Not Found
        unavailable:
          items:
            type: string
          type: array
          title: Unavailable
      type: object
      required:
        - object
        - data
        - not_found
        - unavailable
      title: BatchResult
    ProblemDocument:
      properties:
        type:
          type: string
          title: Type
        title:
          type: string
          title: Title
        status:
          type: integer
          title: Status
        detail:
          type: string
          title: Detail
        request_id:
          type: string
          title: Request Id
        errors:
          anyOf:
            - items:
                $ref: '#/components/schemas/FieldErrorDocument'
              type: array
            - type: 'null'
          title: Errors
        violated_policies:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Violated Policies
      additionalProperties: true
      type: object
      required:
        - type
        - title
        - status
        - detail
        - request_id
      title: ProblemDocument
      description: OpenAPI schema of every error response (RFC 9457).
    Trademark:
      properties:
        object:
          type: string
          const: trademark
          title: Object
        id:
          type: string
          title: Id
        jurisdiction:
          type: string
          title: Jurisdiction
        office:
          anyOf:
            - type: string
            - type: 'null'
          title: Office
        origin_office:
          anyOf:
            - type: string
            - type: 'null'
          title: Origin Office
        identifiers:
          $ref: '#/components/schemas/Identifiers'
        mark:
          $ref: '#/components/schemas/Mark'
        status:
          $ref: '#/components/schemas/Status'
        dates:
          $ref: '#/components/schemas/Dates'
        classification:
          $ref: '#/components/schemas/Classification'
        parties:
          $ref: '#/components/schemas/Parties'
        designated_countries:
          items:
            type: string
          type: array
          title: Designated Countries
        media:
          $ref: '#/components/schemas/Media'
        updated_at:
          type: string
          title: Updated At
        source:
          $ref: '#/components/schemas/Source'
        links:
          $ref: '#/components/schemas/Links'
        goods_services:
          anyOf:
            - items:
                $ref: '#/components/schemas/GoodsServicesEntry'
              type: array
            - type: 'null'
          title: Goods Services
          description: Only with include=goods_services.
        previous_parties:
          anyOf:
            - $ref: '#/components/schemas/Parties'
            - type: 'null'
          description: Only with include=previous_parties.
        assignments:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Assignments
          description: Only with include=assignments.
        securities:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Securities
          description: Only with include=assignments.
        source_record:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Source Record
          description: >-
            Only with include=source_record; not covered by the stability
            guarantee.
      type: object
      required:
        - object
        - id
        - jurisdiction
        - office
        - origin_office
        - identifiers
        - mark
        - status
        - dates
        - classification
        - parties
        - designated_countries
        - media
        - updated_at
        - source
        - links
      title: Trademark
      description: The trademark object (plan 1.9). Include fields appear only when asked.
    FieldErrorDocument:
      properties:
        code:
          type: string
          title: Code
        detail:
          type: string
          title: Detail
        parameter:
          anyOf:
            - type: string
            - type: 'null'
          title: Parameter
        pointer:
          anyOf:
            - type: string
            - type: 'null'
          title: Pointer
      additionalProperties: false
      type: object
      required:
        - code
        - detail
      title: FieldErrorDocument
      description: OpenAPI schema of one `errors[]` item.
    Identifiers:
      properties:
        application_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Application Number
        registration_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Registration Number
        international_registration_numbers:
          items:
            type: string
          type: array
          title: International Registration Numbers
        priority_claims:
          items:
            $ref: '#/components/schemas/PriorityClaim'
          type: array
          title: Priority Claims
      type: object
      required:
        - application_number
        - registration_number
        - international_registration_numbers
        - priority_claims
      title: Identifiers
    Mark:
      properties:
        text:
          anyOf:
            - type: string
            - type: 'null'
          title: Text
        translation:
          anyOf:
            - type: string
            - type: 'null'
          title: Translation
        transliteration:
          anyOf:
            - type: string
            - type: 'null'
          title: Transliteration
        feature:
          anyOf:
            - type: string
            - type: 'null'
          title: Feature
          x-extensible-enum:
            - word
            - figurative
            - combined
            - three_dimensional
            - colour
            - combination_of_colours
            - sound
            - hologram
            - olfactory
            - motion
            - multimedia
            - position
            - pattern
            - touch
            - taste
            - stylized_characters
            - other
        kind:
          anyOf:
            - type: string
            - type: 'null'
          title: Kind
          x-extensible-enum:
            - individual
            - collective
            - certificate
            - guarantee
            - defensive
            - geographical
            - common_right
            - logotype
            - service
            - trademark
            - denomination
            - other
      type: object
      required:
        - text
        - translation
        - transliteration
        - feature
        - kind
      title: Mark
    Status:
      properties:
        value:
          anyOf:
            - type: string
            - type: 'null'
          title: Value
          description: >-
            registered, pending, abandoned, cancelled, expired, unknown, other;
            null = not stated.
          x-extensible-enum:
            - registered
            - pending
            - abandoned
            - cancelled
            - unknown
            - other
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
          description: live, dead, unknown; null = not stated.
          x-extensible-enum:
            - live
            - dead
            - unknown
        date:
          anyOf:
            - type: string
            - type: 'null'
          title: Date
        office_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Office Status
        office_status_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Office Status Code
      type: object
      required:
        - value
        - category
        - date
        - office_status
        - office_status_code
      title: Status
    Dates:
      properties:
        application:
          anyOf:
            - type: string
            - type: 'null'
          title: Application
        registration:
          anyOf:
            - type: string
            - type: 'null'
          title: Registration
        publication:
          anyOf:
            - type: string
            - type: 'null'
          title: Publication
        expiry:
          anyOf:
            - type: string
            - type: 'null'
          title: Expiry
        renewal:
          anyOf:
            - type: string
            - type: 'null'
          title: Renewal
        termination:
          anyOf:
            - type: string
            - type: 'null'
          title: Termination
        opposition_period_end:
          anyOf:
            - type: string
            - type: 'null'
          title: Opposition Period End
      type: object
      required:
        - application
        - registration
        - publication
        - expiry
        - renewal
        - termination
        - opposition_period_end
      title: Dates
    Classification:
      properties:
        nice_classes:
          items:
            type: integer
          type: array
          title: Nice Classes
        national_classes:
          items:
            type: string
          type: array
          title: National Classes
        similar_group_codes:
          items:
            type: string
          type: array
          title: Similar Group Codes
        vienna_codes:
          items:
            type: string
          type: array
          title: Vienna Codes
      type: object
      required:
        - nice_classes
        - national_classes
        - similar_group_codes
        - vienna_codes
      title: Classification
    Parties:
      properties:
        owners:
          items:
            $ref: '#/components/schemas/Party'
          type: array
          title: Owners
        representatives:
          items:
            $ref: '#/components/schemas/Party'
          type: array
          title: Representatives
      type: object
      required:
        - owners
        - representatives
      title: Parties
    Media:
      properties:
        has_image:
          type: boolean
          title: Has Image
      type: object
      required:
        - has_image
      title: Media
    Source:
      properties:
        processed_on:
          anyOf:
            - type: string
            - type: 'null'
          title: Processed On
      type: object
      required:
        - processed_on
      title: Source
    Links:
      properties:
        self:
          type: string
          title: Self
      type: object
      required:
        - self
      title: Links
    GoodsServicesEntry:
      properties:
        nice_class:
          anyOf:
            - type: integer
            - type: 'null'
          title: Nice Class
        class_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Class Code
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
        text:
          anyOf:
            - type: string
            - type: 'null'
          title: Text
        translation:
          anyOf:
            - type: string
            - type: 'null'
          title: Translation
      type: object
      required:
        - nice_class
        - class_code
        - language
        - text
        - translation
      title: GoodsServicesEntry
    PriorityClaim:
      properties:
        number:
          anyOf:
            - type: string
            - type: 'null'
          title: Number
        country:
          anyOf:
            - type: string
            - type: 'null'
          title: Country
          description: ISO 3166-1 alpha-2 where resolvable.
        date:
          anyOf:
            - type: string
            - type: 'null'
          title: Date
          description: YYYY-MM-DD.
      type: object
      required:
        - number
        - country
        - date
      title: PriorityClaim
    Party:
      properties:
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
        name_translated:
          anyOf:
            - type: string
            - type: 'null'
          title: Name Translated
        name_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Name Key
          description: >-
            Usable as an owner_key= / representative_key= value; may change when
            normalization improves.
        country:
          anyOf:
            - type: string
            - type: 'null'
          title: Country
        address:
          anyOf:
            - type: string
            - type: 'null'
          title: Address
        entity:
          anyOf:
            - type: string
            - type: 'null'
          title: Entity
        roles:
          items:
            type: string
          type: array
          title: Roles
      type: object
      required:
        - name
        - name_translated
        - name_key
        - country
        - address
        - entity
        - roles
      title: Party
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your API key: Authorization: Bearer pk_live_... (or pk_test_...).'

````

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