{
  "openapi": "3.0.1",
  "info": {
    "title": "Trademark Scraper — USPTO, EUIPO, Nice Classification (TMview)",
    "description": "Search registered trademarks across 70+ national and regional offices (USPTO, EUIPO, UK, DE, JP, WIPO and more) via the official TMview database. 22 fields incl. status, Nice classes, applicant, expiration & opposition dates, seniority claim and mark image. From $0.002/result, no start fee.",
    "version": "0.1",
    "x-build-id": "N92iTFLKoX36n4xaZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fetchsmith~trademark-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fetchsmith-trademark-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/fetchsmith~trademark-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fetchsmith-trademark-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/fetchsmith~trademark-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fetchsmith-trademark-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchTerm": {
            "title": "Trademark term",
            "type": "string",
            "description": "Word or brand to search for. Matches trademarks whose name contains this term (see Match mode to require a whole word at the start/end instead).",
            "default": "coffee"
          },
          "matchMode": {
            "title": "Match mode",
            "enum": [
              "contains",
              "startsWith",
              "endsWith"
            ],
            "type": "string",
            "description": "How 'Trademark term' is matched against each trademark's name. 'Contains' (default) matches the term anywhere, as a plain substring -- no word boundary, so \"solar\" also matches \"SOLARWINDS\". 'Starts with a word' and 'Ends with a word' both require a COMPLETE word, not just a substring -- e.g. the fragment \"solarw\" matches under Contains but matches NOTHING under either whole-word mode, since neither \"solar\" nor \"solarw\" is a complete word in \"SOLARWINDS\". Useful for clearance screening: 'Starts with a word' answers \"does any mark begin with my proposed name\" without wading through every mark that merely contains it somewhere in a longer compound.",
            "default": "contains"
          },
          "offices": {
            "title": "Trademark offices",
            "type": "array",
            "description": "Two-letter office codes to search, e.g. US (USPTO), EM (EUIPO), GB, DE, FR, JP, CN, WO (WIPO). Case-insensitive -- a lowercase or mixed-case code is corrected for you (TMview itself matches office codes case-sensitively). TMview covers exactly 81 offices; a code outside that set (e.g. \"UK\" instead of \"GB\", or \"EU\" instead of \"EM\") matches no trademark at all, so the run warns and tells you in its status message instead of just returning an empty dataset. Leave empty to search all 81 offices in TMview.",
            "default": [
              "US",
              "EM"
            ],
            "items": {
              "type": "string"
            }
          },
          "niceClasses": {
            "title": "Nice classes",
            "type": "array",
            "description": "Restrict to these Nice classification classes, e.g. \"25\" (clothing), \"9\" (software). The Nice Classification has 45 classes (1-34 goods, 35-45 services); zero-padded forms like \"09\" work too. A value outside 1-45 matches no trademark at all, so the run warns and tells you in its status message instead of just returning an empty dataset. Leave empty for all classes.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "statuses": {
            "title": "Trademark status",
            "type": "array",
            "description": "Restrict to these statuses. TMview recognises exactly four values: Registered, Filed, Ended, Expired. Any differently-cased match (e.g. \"registered\") is corrected for you automatically. A value that isn't one of the four at all (e.g. \"Opposed\", \"Pending\", \"Withdrawn\" -- TMview has no such statuses) matches no marks, so the run warns and tells you in its status message instead of just returning an empty dataset. Leave empty for all statuses.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after this many trademarks.",
            "default": 50
          },
          "watchLabel": {
            "title": "Watch label",
            "type": "string",
            "description": "Optional label that turns on watch mode: the first run under a label seeds a baseline and returns nothing (charged nothing); every run after that returns and charges only marks not already delivered under that label. Leave unset for a plain, repeatable search.",
            "default": ""
          },
          "watchChanges": {
            "title": "Watch mode: also alert on status changes",
            "type": "boolean",
            "description": "Only used together with Watch label. When on, a run also re-delivers a mark you already have if its status has changed since you last saw it -- e.g. Filed -> Registered, or a move into Ended/Expired -- instead of only ever reporting brand-new filings. Charged at the same per-row price as a new mark. Each changed row is tagged with `_watchChangeType: [\"status\"]` plus the previous value under `_watchPrevious`. Off by default so existing watches keep their current behaviour. IMPORTANT: do not combine this with the Trademark status filter above -- that is a server-side filter on the very field this option watches, so a mark whose status moves out of your filter stops matching the search and its change can never be reported. The run warns you if you do; see the README FAQ \"don't filter on the field you're watching\".",
            "default": false
          },
          "webhookUrl": {
            "title": "Webhook URL (notify on completion)",
            "type": "string",
            "description": "Optional. An http(s) URL to POST a small JSON summary to when the run finishes — marks pushed, marks scanned, and (when Watch label is set) whether this was a baseline run plus the new/skipped counts, along with the run's dataset ID so you can fetch the results. A convenience for callers who want a completion ping without setting up an Apify platform webhook (which needs separate Console/API configuration per Task, not per run). Best-effort: a failed or slow webhook is logged as a warning and never fails the run or affects charging — it fires after every mark has already been pushed and charged. Leave empty to skip."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}