{
  "openapi": "3.0.1",
  "info": {
    "title": "Research Paper Alerts: PubMed, Europe PMC and OpenAlex Watch",
    "description": "New research papers and preprints for your keywords from PubMed, Europe PMC, bioRxiv, medRxiv and OpenAlex, one de-duplicated row per paper, with a monitoring mode that only returns and bills papers new since your last run.",
    "version": "1.0",
    "x-build-id": "ej3QiBFWP3gY7bUST"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~research-literature-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-research-literature-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~research-literature-watch/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-research-literature-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~research-literature-watch/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-research-literature-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": {
          "queries": {
            "title": "Keywords or phrases to watch",
            "type": "array",
            "description": "One watch per line, up to 20. Plain words are all required (CRISPR base editing); put a phrase in quotes (\"large language model\"); AND, OR, NOT and parentheses work. Each line is its own watch with its own memory. Accepted formats: llm, \"large language model\" AND radiology, CRISPR base editing, (semaglutide OR tirzepatide) AND obesity. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max papers per watch query",
            "type": "integer",
            "description": "Up to 100. Caps how many papers you get (and pay for) per query in one run, newest first. With monitoring on, the cap counts new papers only, and a new paper beyond it arrives on the next run.",
            "default": 25
          },
          "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": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "sinceDays": {
            "title": "Published in the last N days",
            "type": "integer",
            "description": "How far back to look, by first publication date. Up to 365. For a daily alert 30 is plenty: the monitoring memory, not this window, decides what is new.",
            "default": 30
          },
          "matchIn": {
            "title": "Match the words in",
            "enum": [
              "titleAbstract",
              "fullText"
            ],
            "type": "string",
            "description": "Title and abstract keeps the alert about papers that are on your topic. Anywhere also returns papers that only mention the words in passing.",
            "default": "titleAbstract"
          },
          "sources": {
            "title": "Indexes to check",
            "enum": [
              "all",
              "europePmc"
            ],
            "type": "string",
            "description": "Europe PMC carries PubMed, PubMed Central and preprints from bioRxiv, medRxiv and other servers. OpenAlex adds arXiv and every field outside the life sciences.",
            "default": "all"
          },
          "openAlexApiKey": {
            "title": "Your free OpenAlex API key (optional)",
            "type": "string",
            "description": "Not needed to run. Without a key OpenAlex allows a small number of anonymous searches per day per address; when that allowance is used up the run still returns the Europe PMC papers and says so in the Indexes that did not answer column. With your own free OpenAlex key, OpenAlex is always included."
          },
          "onlyNewSinceLastRun": {
            "title": "Only return papers new since the last run (monitoring)",
            "type": "boolean",
            "description": "On: only papers this watch has not returned before are returned and charged for. Run it on a schedule as a paper alert. Off: every matching paper is returned every time.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Optional. Name this watch's monitoring memory so you can tell two schedules of this actor apart. Leave empty to use one memory per query line.",
            "default": ""
          },
          "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": [
                "searchQuery",
                "paperCount",
                "monitorStatus",
                "truncated",
                "sourcesChecked",
                "sourcesFailed",
                "papers",
                "title",
                "authors",
                "firstAuthor",
                "authorCount",
                "journal",
                "publishedAt",
                "publicationType",
                "isPreprint",
                "preprintServer",
                "doi",
                "pmid",
                "pmcid",
                "openalexId",
                "abstract",
                "isOpenAccess",
                "fullTextUrl",
                "foundIn",
                "paperUrl",
                "sourceUrl",
                "isNew",
                "firstSeenAt"
              ],
              "enumTitles": [
                "Watch query",
                "Papers returned",
                "Monitoring status",
                "More papers matched than were returned",
                "Indexes checked",
                "Indexes that did not answer",
                "All papers (full list)",
                "Title",
                "Authors",
                "First author",
                "Number of authors",
                "Journal or preprint server",
                "Published on",
                "Type",
                "Is a preprint",
                "Preprint server",
                "DOI",
                "PubMed ID",
                "PubMed Central ID",
                "OpenAlex ID",
                "Abstract",
                "Open access",
                "Free full text",
                "Found in",
                "Paper link",
                "Index record",
                "Is this paper new?",
                "First seen on a run"
              ]
            },
            "default": [
              "searchQuery",
              "paperCount",
              "monitorStatus",
              "truncated",
              "sourcesChecked",
              "sourcesFailed",
              "papers",
              "title",
              "authors",
              "firstAuthor",
              "authorCount",
              "journal",
              "publishedAt",
              "publicationType",
              "isPreprint",
              "preprintServer",
              "doi",
              "pmid",
              "pmcid",
              "openalexId",
              "abstract",
              "isOpenAccess",
              "fullTextUrl",
              "foundIn",
              "paperUrl",
              "sourceUrl",
              "isNew",
              "firstSeenAt"
            ]
          },
          "expandRows": {
            "title": "One row per paper (recommended) — turn off for one row per watch query instead",
            "type": "boolean",
            "description": "When on, each paper found gets its own row instead of being grouped under its watch query. You're still only charged once per watch query, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 1,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. This target is a free public API that needs no proxy — defaults to off, but you can turn one on if you prefer.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}