{
  "openapi": "3.0.1",
  "info": {
    "title": "Academic Papers API: OpenAlex & Crossref Search",
    "description": "Search research paper metadata across OpenAlex and Crossref in one run: topic search, DOI lookup or author/ORCID, deduplicated by DOI, with citation counts, open access links and openly licensed abstracts. No API key. Not affiliated with OpenAlex or Crossref.",
    "version": "0.2",
    "x-build-id": "B0rK4yVuZetUnQWCw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yourevenings~academic-papers-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yourevenings-academic-papers-api",
        "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/yourevenings~academic-papers-api/runs": {
      "post": {
        "operationId": "runs-sync-yourevenings-academic-papers-api",
        "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/yourevenings~academic-papers-api/run-sync": {
      "post": {
        "operationId": "run-sync-yourevenings-academic-papers-api",
        "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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "doi",
              "author"
            ],
            "type": "string",
            "description": "<b>Topic search</b> finds papers matching your keywords. <b>DOI lookup</b> returns full metadata for a list of DOIs. <b>Author search</b> returns an author's papers by name or ORCID iD.",
            "default": "search"
          },
          "query": {
            "title": "Search query (topic search)",
            "type": "string",
            "description": "Keywords to search titles, abstracts and full text where the source supports it, e.g. <code>large language models</code> or <code>microplastics drinking water</code>. Used in topic search mode."
          },
          "dois": {
            "title": "DOIs (DOI lookup)",
            "type": "array",
            "description": "One DOI per line, with or without <code>https://doi.org/</code>. Up to 500 per run. Invalid or unknown DOIs come back as free status rows.",
            "items": {
              "type": "string"
            }
          },
          "author": {
            "title": "Author name or ORCID iD (author search)",
            "type": "string",
            "description": "A full name such as <code>Jennifer A. Doudna</code>, or an ORCID iD such as <code>0000-0001-9161-999X</code>. Names: OpenAlex picks its best-matching author profile (shown in the run SUMMARY); Crossref results are kept only when an author has the same family name and first initial. ORCID iDs search OpenAlex and Crossref."
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Which databases to search. Results are merged and deduplicated by DOI. arXiv and PubMed are not queried directly (their API hosts' robots.txt disallow automated access); OpenAlex already indexes arXiv preprints and PubMed records, with arXiv and PubMed IDs.",
            "items": {
              "type": "string",
              "enum": [
                "OPENALEX",
                "CROSSREF"
              ],
              "enumTitles": [
                "OpenAlex (all disciplines, citations, open access; includes arXiv and PubMed records)",
                "Crossref (DOI registry, all publishers)"
              ]
            },
            "default": [
              "OPENALEX",
              "CROSSREF"
            ]
          },
          "yearFrom": {
            "title": "Published from (year)",
            "minimum": 1000,
            "maximum": 3000,
            "type": "integer",
            "description": "Only papers published in or after this year, e.g. <code>2023</code>."
          },
          "yearTo": {
            "title": "Published to (year)",
            "minimum": 1000,
            "maximum": 3000,
            "type": "integer",
            "description": "Only papers published in or before this year."
          },
          "openAccessOnly": {
            "title": "Open access only",
            "type": "boolean",
            "description": "Return only papers known to be free to read (OpenAlex open access status, a Creative Commons licence on Crossref). Papers with unknown status are left out.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest",
              "mostCited"
            ],
            "type": "string",
            "description": "<b>Relevance</b> interleaves each source's best matches. <b>Newest</b> sorts by publication date. <b>Most cited</b> sorts by citation count (OpenAlex, then Crossref).",
            "default": "relevance"
          },
          "maxResults": {
            "title": "Maximum papers returned",
            "minimum": 0,
            "type": "integer",
            "description": "Most paper rows returned (and charged) per run after merging. <code>0</code> means no limit (up to 10,000).",
            "default": 50
          },
          "maxResultsPerSource": {
            "title": "Maximum papers read per source",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many results to read from each source before merging (topic and author search). Reading is free; you pay only for paper rows returned.",
            "default": 25
          },
          "deduplicate": {
            "title": "Merge duplicates across sources",
            "type": "boolean",
            "description": "Merge the same paper found in several sources into one row (matched by DOI, arXiv ID, PubMed ID, or exact title and year). <code>foundIn</code> lists the sources.",
            "default": true
          },
          "enrichWithOpenAlex": {
            "title": "Add OpenAlex citation counts and open access links",
            "type": "boolean",
            "description": "For papers found only in Crossref, look up their DOIs in OpenAlex (one batched request per 50 papers) to add citation counts, open access status and links. <code>enrichedFrom</code> shows when this was used.",
            "default": true
          },
          "includeAbstract": {
            "title": "Include openly licensed abstracts",
            "type": "boolean",
            "description": "Include the abstract only when the paper carries an open licence that allows reuse (CC0, CC BY, CC BY-SA or public domain). Other abstracts are copyrighted by publishers or authors and are left out; abstractStatus says which. Turn off for metadata only.",
            "default": true
          },
          "openAlexApiKey": {
            "title": "Your OpenAlex API key (optional)",
            "type": "string",
            "description": "Not needed. OpenAlex works without a key but shares a small daily allowance per network. For large or frequent runs, paste your own free key from openalex.org. It is used only for your requests to OpenAlex and never stored in the output."
          },
          "monitorMode": {
            "title": "Monitor mode (only new papers)",
            "type": "boolean",
            "description": "Remember what was returned and, on later runs, return only papers not returned before. Schedule the Actor (e.g. weekly, sorted by newest) to get new-paper alerts for a topic or author.",
            "default": false
          },
          "emitBaselineOnFirstRun": {
            "title": "Return papers on the first monitor run",
            "type": "boolean",
            "description": "On the first monitor run, return the current papers (on) or just remember them silently (off), so later runs return only what is new.",
            "default": true
          },
          "stateStoreName": {
            "title": "Monitor state store name",
            "type": "string",
            "description": "Named key-value store that remembers returned papers. Use a different name for each topic or author you monitor.",
            "default": "academic-papers-monitor"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}