{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky & Mastodon Keyword Monitor: Mentions & Alerts",
    "description": "Find new public Bluesky and Mastodon posts that mention your brand, product or topic, in any language. Only new posts on a schedule, Excel/CSV and a text digest. Read-only, respects opt-outs, no login or API key.",
    "version": "0.1",
    "x-build-id": "lHZ9Tk5OYfafm7LeE"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/prime619~bluesky-mastodon-keyword-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-prime619-bluesky-mastodon-keyword-monitor",
        "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/prime619~bluesky-mastodon-keyword-monitor/runs": {
      "post": {
        "operationId": "runs-sync-prime619-bluesky-mastodon-keyword-monitor",
        "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/prime619~bluesky-mastodon-keyword-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-prime619-bluesky-mastodon-keyword-monitor",
        "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",
        "required": [
          "keywords"
        ],
        "properties": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Brand, product, project or topic names to watch (up to 20), in any language and script. A post must contain at least one of them in its text. Matching is case-insensitive. Words and phrases match whole words (\"open source\" will not match \"opensourced\"); in Japanese, Chinese, Korean, Thai and similar scripts, which have no spaces between words, the keyword matches anywhere in the text. Start with # to match a hashtag. Domains like example.com match anywhere in the text or links.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop posts that contain any of these, for example job ad or giveaway.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ignoreAccents": {
            "title": "Ignore accents",
            "type": "boolean",
            "description": "Match keywords with or without accents: \"eleicao\" finds \"eleição\", \"Muller\" finds \"Müller\", \"cafe\" finds \"café\". Japanese, Chinese, Korean and other scripts are unaffected. Turn off if accents change the meaning of your keywords.",
            "default": true
          },
          "platforms": {
            "title": "Platforms",
            "type": "array",
            "description": "Where to look.",
            "items": {
              "type": "string",
              "enum": [
                "bluesky",
                "mastodon"
              ],
              "enumTitles": [
                "Bluesky (public search)",
                "Mastodon (public hashtag timelines)"
              ]
            },
            "default": [
              "bluesky",
              "mastodon"
            ]
          },
          "mastodonInstances": {
            "title": "Mastodon servers",
            "type": "array",
            "description": "Up to 5 servers to read. Each server shows its own users' posts and the posts it has received from others. Servers whose rules forbid automated collection, or that close their hashtag timelines to logged-out visitors, are skipped and listed in RUN_SUMMARY.",
            "default": [
              "mastodon.social",
              "fosstodon.org",
              "hachyderm.io"
            ],
            "items": {
              "type": "string"
            }
          },
          "mastodonHashtags": {
            "title": "Mastodon hashtags",
            "type": "array",
            "description": "Mastodon has no public full-text search, so the Actor reads hashtag timelines. Leave empty to use your keywords as hashtags (\"open source\" becomes #opensource). Posts still need a keyword in the text.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Two-letter language codes, for example en, pt, es, ja, de. Leave empty for all languages. Posts without a language tag are kept. With exactly one language, Bluesky filters on the server, so you get up to 100 posts in that language per keyword.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "lookbackHours": {
            "title": "Look back (hours)",
            "minimum": 1,
            "maximum": 168,
            "type": "integer",
            "description": "How far back to search. For an hourly schedule use 3, for a daily schedule 30.",
            "default": 24
          },
          "includeReplies": {
            "title": "Include replies",
            "type": "boolean",
            "description": "Also return replies that mention your keywords.",
            "default": true
          },
          "minLikes": {
            "title": "Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep posts with at least this many likes (favourites). 0 keeps everything.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only new mentions",
            "type": "boolean",
            "description": "Skip posts that an earlier run with the same settings already delivered. You only pay for new mentions.",
            "default": true
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Optional. Runs with the same name share their memory of delivered posts, even if you change the keywords.",
            "default": ""
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Upper limit of mentions per run (newest first).",
            "default": 100
          },
          "csvDelimiter": {
            "title": "CSV delimiter",
            "enum": [
              "comma",
              "semicolon"
            ],
            "type": "string",
            "description": "Separator for mentions.csv.",
            "default": "comma"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}