{
  "openapi": "3.0.1",
  "info": {
    "title": "Academic Paper Search — OpenAlex, Crossref, arXiv & PubMed",
    "description": "Search scholarly papers in OpenAlex, Crossref, arXiv and PubMed at once, or look up DOIs. One de-duplicated record per paper: title, DOI, year, venue, authors, abstract, citation counts, open access status and PDF link. Public open APIs only. $3 per 1,000 papers.",
    "version": "0.0",
    "x-build-id": "c7Xe8ztOxohAbKAlV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/saliga~academic-paper-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-saliga-academic-paper-search",
        "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/saliga~academic-paper-search/runs": {
      "post": {
        "operationId": "runs-sync-saliga-academic-paper-search",
        "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/saliga~academic-paper-search/run-sync": {
      "post": {
        "operationId": "run-sync-saliga-academic-paper-search",
        "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": "Searches",
            "type": "array",
            "description": "Keyword searches, one per line, e.g. retrieval augmented generation. Each search is sent to every selected source. \"Quoted phrases\" are kept as phrases.",
            "items": {
              "type": "string"
            }
          },
          "dois": {
            "title": "DOIs to look up",
            "type": "array",
            "description": "DOIs (10.1038/s41586-021-03819-2), doi.org links or arXiv IDs (2312.10997). Each one found gives one paper; DOIs not found are listed with an error and are free.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Which open APIs to search. OpenAlex: 250M+ works with citation counts and open access links. Crossref: DOI metadata from publishers. arXiv: preprints with PDFs. PubMed: biomedical literature.",
            "items": {
              "type": "string",
              "enum": [
                "openalex",
                "crossref",
                "arxiv",
                "pubmed"
              ],
              "enumTitles": [
                "OpenAlex",
                "Crossref",
                "arXiv",
                "PubMed"
              ]
            },
            "default": [
              "openalex",
              "arxiv",
              "crossref"
            ]
          },
          "maxResultsPerQuery": {
            "title": "Results per search and source",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many results to take from each source for each search. Results from different sources are merged when they are the same paper, so a search gives between this number and this number × sources.",
            "default": 25
          },
          "fromYear": {
            "title": "From year",
            "minimum": 1000,
            "maximum": 2100,
            "type": "integer",
            "description": "Only papers published in or after this year (searches only, not DOI lookups)."
          },
          "toYear": {
            "title": "To year",
            "minimum": 1000,
            "maximum": 2100,
            "type": "integer",
            "description": "Only papers published in or before this year (searches only)."
          },
          "openAccessOnly": {
            "title": "Open access only",
            "type": "boolean",
            "description": "Keep only papers that are free to read. Crossref does not record open access, so its results are kept only when OpenAlex, arXiv or a Creative Commons licence shows the paper is open.",
            "default": false
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "cited_by",
              "newest"
            ],
            "type": "string",
            "description": "Order in which each source returns results (and of the merged list). arXiv and PubMed have no citation counts and use relevance for \"Most cited\".",
            "default": "relevance"
          },
          "includeAbstract": {
            "title": "Abstracts from OpenAlex and arXiv",
            "type": "boolean",
            "description": "Add the abstract when OpenAlex or arXiv has it.",
            "default": true
          },
          "includePublisherAbstracts": {
            "title": "Abstracts from Crossref and PubMed",
            "type": "boolean",
            "description": "Also use abstracts supplied by publishers through Crossref and PubMed (PubMed needs one more request per 200 papers). Some of these abstracts are copyrighted by the publisher: check before you republish them.",
            "default": false
          },
          "includeReferences": {
            "title": "Reference IDs",
            "type": "boolean",
            "description": "Add referencedWorks: the OpenAlex IDs of the works the paper cites (needs OpenAlex as a source). The count, referencesCount, is always included.",
            "default": false
          },
          "includeCitedBy": {
            "title": "Citing work IDs",
            "type": "boolean",
            "description": "Add citedByIds: the OpenAlex IDs of up to 200 works that cite the paper, most cited first. One extra OpenAlex request per paper. The count, citedByCount, is always included.",
            "default": false
          },
          "mailto": {
            "title": "Your e-mail for the APIs (optional)",
            "type": "string",
            "description": "Sent to OpenAlex, Crossref and NCBI as the contact address of the requests, as they ask. Leave empty to use the Actor's project address; add your e-mail if you use PubMed a lot."
          },
          "openalexApiKey": {
            "title": "Your OpenAlex API key (optional)",
            "type": "string",
            "description": "OpenAlex gives every API key a free daily usage budget. Without your own key, runs share the Actor's budget, and when it is used up OpenAlex is skipped for the rest of the run (the other sources still answer). Add your free key from openalex.org for full OpenAlex results."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}