{
  "openapi": "3.0.1",
  "info": {
    "title": "CNKI Scraper: 中国知网 Citations, Rankings & Academic Search",
    "description": "Search CNKI (中国知网), China's largest academic database, for title, authors, abstract, keywords, DOI, journal, citation and download counts, and journal-prestige tier (北大核心/CSSCI/CSCD/EI/SCI). Citation metadata only, never full-text/PDF. No login or API key needed.",
    "version": "0.1",
    "x-build-id": "aje6dQ2Vbr6ws4XGt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~cnki-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-cnki-scraper",
        "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/getascraper~cnki-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-cnki-scraper",
        "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/getascraper~cnki-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-cnki-scraper",
        "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": {
          "searchMode": {
            "title": "Search Mode",
            "enum": [
              "keyword",
              "author",
              "subject",
              "classification"
            ],
            "type": "string",
            "description": "Which CNKI Advanced Search field to query. Keyword searches title/keyword/abstract terms (CNKI field KY), Author searches the author name field (AU), Subject searches CNKI's own subject-ranking field (SU), and Classification Code searches China's Chinese Library Classification codes (CLC). These map directly to CNKI's own Advanced Search field selector, not an invented category.",
            "default": "keyword"
          },
          "query": {
            "title": "Search Query",
            "type": "string",
            "description": "The term to search for, matched against whichever CNKI field Search Mode selects (e.g. an author's name when Search Mode is Author, a subject phrase when it is Subject). Required unless Track Citation Changes (in Advanced) is enabled with a list of Saved Papers instead.",
            "default": "carbon neutrality"
          },
          "databaseTypes": {
            "title": "Database Types",
            "type": "array",
            "description": "Restrict the search to one or more CNKI database types. Leave empty to search every database CNKI indexes (confirmed live: an empty selection searches everything, it does not mean zero results). Filtering by publication type this precisely (e.g. Theses & Dissertations only) is a real gap versus Google Scholar-style tools, which do not expose the Chinese corpus broken out this way.",
            "items": {
              "type": "string",
              "enum": [
                "academicJournals",
                "thesesDissertations",
                "conferences",
                "newspapers",
                "yearbooks",
                "books",
                "patents",
                "standards",
                "achievements"
              ],
              "enumTitles": [
                "Academic Journals",
                "Theses & Dissertations",
                "Conferences",
                "Newspapers",
                "Yearbooks",
                "Books",
                "Patents",
                "Standards",
                "Achievements"
              ]
            },
            "default": []
          },
          "discipline": {
            "title": "Discipline",
            "type": "string",
            "description": "Optional free-text subject discipline to filter by, e.g. \"Environment Science and Resources Utilization\", \"Finance\", or \"Electric Power Industry\" (real examples seen live for a carbon-neutrality search). This is intentionally free text rather than a fixed dropdown: CNKI's discipline list depends on the search query itself, so a hardcoded set of choices would misrepresent coverage for every query it was not built from. Your text is matched against CNKI's own live discipline list for this search; if nothing matches, the search still runs, just without a discipline filter.",
            "default": ""
          },
          "journalTiers": {
            "title": "Journal Prestige Tiers",
            "type": "array",
            "description": "Restrict results to papers published in journals belonging to one or more of China's well-known journal-quality indices. This is a real gap versus Google Scholar and Web-of-Science-style tools, which do not expose these Chinese tier classifications at all, but which a research-security or academic due-diligence buyer specifically needs (a paper's tier signals venue prestige and peer-review rigor). Leave empty to include all tiers.",
            "items": {
              "type": "string",
              "enum": [
                "pkuCore",
                "cssci",
                "cscd",
                "ami",
                "wjci",
                "ei",
                "sci"
              ],
              "enumTitles": [
                "北大核心 (Peking University Core)",
                "CSSCI",
                "CSCD",
                "AMI",
                "WJCI",
                "EI",
                "SCI"
              ]
            },
            "default": []
          },
          "dateFrom": {
            "title": "Publication Date From",
            "type": "string",
            "description": "Only include papers published on or after this date."
          },
          "dateTo": {
            "title": "Publication Date To",
            "type": "string",
            "description": "Only include papers published on or before this date."
          },
          "language": {
            "title": "Language",
            "enum": [
              "any",
              "chinese",
              "english"
            ],
            "type": "string",
            "description": "Restrict results to papers in a specific language, or search across both.",
            "default": "any"
          },
          "includeCitationString": {
            "title": "Include Citation String",
            "type": "boolean",
            "description": "Adds a ready-to-use GB/T 7714 citation string to each paper record, built locally from already-scraped fields (title, authors, source, year). GB/T 7714 is China's national citation standard and the first format CNKI's own \"Export Reference\" menu lists. No extra request is made for this.",
            "default": true
          },
          "includeAuthorProfiles": {
            "title": "Include Author Profiles",
            "type": "boolean",
            "description": "Fetches each result's own paper detail page to read author institutional affiliations, then populates the separate \"Author Profiles\" dataset view (per-author paper count, total citations, and institution). This adds one extra page fetch per result returned, so it defaults off and should be enabled deliberately for smaller result sets.",
            "default": false
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of papers to return, up to 50. This ceiling is not arbitrary: CNKI's search backend returns a CAPTCHA challenge when a second results page is requested without an established, cookie-based browser session. Since this Actor never stores cookies and never solves CAPTCHAs, it fetches exactly one results page per run, and 50 is CNKI's own largest single-page option (its \"Records/Page\" selector only offers 10, 20, or 50). Run the Actor again with different filters or Sort By to reach beyond the top 50 for a broad query.",
            "default": 15
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "relevance",
              "publicationDate",
              "cites",
              "downloads",
              "overall"
            ],
            "type": "string",
            "description": "How CNKI should order results before the top Max Results are taken. These are CNKI's own real sort options, read directly off its results page.",
            "default": "relevance"
          },
          "onlyNewOrChanged": {
            "title": "Monitor Mode: Only New or Changed Papers",
            "type": "boolean",
            "description": "When enabled, re-running this same search (with the same State Name) reports only papers that were not seen in a previous run, instead of the full result set every time. Use this on a schedule to build a recurring \"what's newly indexed on this topic\" feed rather than re-reading the same papers each run.",
            "default": false
          },
          "stateName": {
            "title": "State Name",
            "type": "string",
            "description": "Identifies this search's persisted monitor state, so you can run several different saved searches or citation trackers without them overwriting each other's history. Only relevant when Only New Or Changed Papers or Track Citation Changes is enabled.",
            "default": "default"
          },
          "trackCitationChanges": {
            "title": "Track Citation Changes",
            "type": "boolean",
            "description": "Switches the Actor into a distinct mode: instead of running a new search, it re-checks the live citation count of the papers you list in Saved Papers below and reports only the ones whose count changed since the last run. Every paper re-checked is billed its own citation-check charge regardless of whether the count actually moved, since the re-fetch costs the same either way. Query and Search Mode are ignored in this mode.",
            "default": false
          },
          "savedPapers": {
            "title": "Saved Papers",
            "type": "array",
            "description": "Papers to re-check for citation-count movement. Only used when Track Citation Changes is enabled. Each entry's sourceUrl must be a CNKI paper detail URL previously returned in this Actor's own \"sourceUrl\" output field; a title is optional and only used to label the output.",
            "default": []
          },
          "resetState": {
            "title": "Reset Monitor State",
            "type": "boolean",
            "description": "Clears the persisted monitor or citation-tracking history for this State Name before this run starts, so the next results are treated as a fresh baseline instead of being diffed against a previous run.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "CNKI's search, facet, and paper-detail endpoints used by this Actor showed no active anti-bot enforcement during testing (no WAF blocks, no CAPTCHA on any endpoint this Actor calls other than the pagination case described under Max Results), so the default Apify datacenter proxy is sufficient. Residential is not required.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}