{
  "openapi": "3.0.1",
  "info": {
    "title": "Trademark Filing Watch: New USPTO Application Alerts",
    "description": "Watch my brand for similar trademark filings? Get new USPTO and EUIPO trademark applications that contain or resemble your marks, by Nice class. One row per filing with owner, classes and record link. Monitoring bills only new matches; alerts to Slack, Discord or Telegram, or Google Sheets.",
    "version": "1.0",
    "x-build-id": "am7XgC2mzhGJMDZGd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~trademark-filing-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-trademark-filing-watch",
        "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/accountable_eel~trademark-filing-watch/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-trademark-filing-watch",
        "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/accountable_eel~trademark-filing-watch/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-trademark-filing-watch",
        "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": {
          "terms": {
            "title": "Marks to watch",
            "type": "array",
            "description": "One mark per line. Each line is searched on its own. By default a filing matches when the word mark contains the term. Accepted formats: cloud, ClassCloud, your brand. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "offices": {
            "title": "Which register",
            "enum": [
              "US",
              "EM",
              "both"
            ],
            "type": "string",
            "description": "USPTO is the United States trademark register. EUIPO is the European Union register, searched through TMview. Both runs one search per mark on each register.",
            "default": "US"
          },
          "matchMode": {
            "title": "How a mark matches",
            "enum": [
              "contains",
              "exact",
              "similar"
            ],
            "type": "string",
            "description": "Contains: the word mark includes the term. Exact: the whole word mark equals the term. Similar: contains, or the normalized edit distance is 2 or less, or the consonant skeleton is the same (Kloud matches Cloud). Similar is scored locally over a wider candidate set.",
            "default": "contains"
          },
          "classes": {
            "title": "Nice classes (optional)",
            "type": "array",
            "description": "Optional. Nice class numbers, for example 9 and 42. Empty means every class.",
            "items": {
              "type": "string"
            }
          },
          "liveOnly": {
            "title": "Live applications only",
            "type": "boolean",
            "description": "On: drop dead, expired, refused or withdrawn filings. Off: include them.",
            "default": true
          },
          "excludeOwners": {
            "title": "Skip these owners (optional)",
            "type": "array",
            "description": "Optional. Your own company names. A filing is dropped when an owner name contains one of these, so your own applications do not alert you.",
            "items": {
              "type": "string"
            }
          },
          "sinceDays": {
            "title": "Look back (days)",
            "type": "integer",
            "description": "1 to 90. Filings with a filing date in the last N days. For a daily schedule, 7 covers a weekend.",
            "default": 7
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max filings per mark",
            "type": "integer",
            "description": "1 to 500. Caps how many filings you get (and pay for) for each watched mark.",
            "default": 50
          },
          "onlyNewSinceLastRun": {
            "title": "Only return filings new since the last run (monitoring)",
            "type": "boolean",
            "description": "On: only filings this watchlist has not returned before are returned and charged. Run it on a schedule. Off: every matching filing is returned every time. A filing not seen for 180 days is forgotten. Status changes on a filing you have already seen are not alerted.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Optional. Name this search's monitoring memory so two schedules stay separate, or so a filter change keeps one memory. Leave empty to derive one from your filters.",
            "default": ""
          },
          "notifyUrl": {
            "title": "Send alerts to (Discord or Slack webhook, Telegram bot link, or any URL)",
            "type": "string",
            "description": "Optional. After new filings are billed, each one is posted here: mark, owner, classes, filed date and the record link. Discord or Slack: paste the channel webhook URL. Telegram: https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat id>. Any other URL receives JSON. Messages are free. A message that fails never fails the run (notifyErrors says why). Stored encrypted, never logged or written into the results."
          },
          "notifyFormat": {
            "title": "Message format",
            "enum": [
              "auto",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave on Detect from the link. discord.com gets a Discord message, hooks.slack.com Slack, api.telegram.org Telegram, anything else JSON.",
            "default": "auto"
          },
          "maxNotificationsPerRun": {
            "title": "Most alert messages per run",
            "type": "integer",
            "description": "Up to 100. Above this, one +N more message says how many more filings are in the dataset, so a busy first run does not flood the channel.",
            "default": 20
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "filingCount",
                "filings",
                "searchSummary",
                "monitorStatus",
                "truncated",
                "notifyErrors",
                "office",
                "serialNumber",
                "mark",
                "matchType",
                "similarityScore",
                "filedDate",
                "liveStatus",
                "statusCode",
                "ownerNames",
                "niceClasses",
                "goodsAndServices",
                "recordUrl",
                "isNew",
                "firstSeenAt"
              ],
              "enumTitles": [
                "Filings returned",
                "All filings (full list)",
                "Search run",
                "Monitoring status",
                "More results were available",
                "Alert delivery errors",
                "Office",
                "Serial or application number",
                "Word mark",
                "How it matched",
                "Edit distance",
                "Filed on",
                "Live or dead",
                "USPTO status code",
                "Owners",
                "Nice classes",
                "Goods and services",
                "Record page",
                "Is this filing new?",
                "First seen on a run"
              ]
            },
            "default": [
              "filingCount",
              "filings",
              "searchSummary",
              "monitorStatus",
              "truncated",
              "notifyErrors",
              "office",
              "serialNumber",
              "mark",
              "matchType",
              "similarityScore",
              "filedDate",
              "liveStatus",
              "statusCode",
              "ownerNames",
              "niceClasses",
              "goodsAndServices",
              "recordUrl",
              "isNew",
              "firstSeenAt"
            ]
          },
          "expandRows": {
            "title": "One row per filing (recommended) — turn off for one row per term instead",
            "type": "boolean",
            "description": "When on, each filing found gets its own row instead of being grouped under its term. You're still only charged once per term, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}