Article Tracker

PAID
By Clear Skies | Updated il y a un an | Science
Health Check

N/A

README

Article Tracker API documentation

Introduction

Tracking articles is a key analytical task for any modern publisher. It enables:

  • market analysis
  • peer-review feedback
  • misconduct & papermill detection

The process is as follows:

  • Users send queries to the Article Tracker. Each query contains the metadata for a scientific manuscript.
  • the Article Tracker searches Crossref for details of those manuscripts.
  • If those manuscripts have been published as research papers, the Article Tracker recognises this and returns details of those published papers.

The Article Tracker API can be used in a number of ways.

  • track rejected articles to see where they ended up
  • track abandoned submissions (a common feature of papermills)
  • look for duplicate submissions (a common feature of papermills)
  • track accepted articles (this can show duplicate submissions that have been published in 2 places, and it can also be used to benchmark the Article Tracker)
  • link preprints to published article versions
  • track new submissions (can occasionally reveal cases of plagiarism and self-plagiarism. However, since the Article Tracker only checks metadata and not full-text, it will not have a high chance of detecting most cases of plagiarism. The tracker can enhance other common plagiarism detection methods and should not be considered as a replacement)

Quick start

Subscribers can simply query the API. Sample code is given below. If you would prefer not to use the API directly, or are unable to do so, get in touch and we can arrange for the data to be processed offline.

Sample code

Here some example queries representing ArXiv preprints are shown. This code will allow users to find where these preprints were published. (Note that the ‘Decision Datetime’ is simply a made-up value in this case since ArXiv does not make decisions.)

Note the JSON format of queries. This format is strict and, if it is not adhered to, no results will be returned by the Article Tracker.

A detailed description of the schema is below.

Python

import requests

url = "https://article-tracker.p.rapidapi.com/"

payload = {"payload": {
		"articles": [
			{
				"Submission Datetime": "2021-04-26",
				"Decision Datetime": "2021-04-26",
				"Final Decision": "Not applicable",
				"Manuscript ID": "10.1051/0004-6361/202140668",
				"Manuscript Title": "Extreme adaptive optics astrometry of R136. Searching for high proper motion stars",
				"Journal Name": "arxiv",
				"Author Names": "Khorrami, Zeinab; Langlois, M.; Vakili, F.; Clark, P. C.; Buckner, A. S. M.; Gonzalez, M.; Crowther, P.; Wunsch, R.; Palous, J.; Boccaletti, A.; Lumsden, S.; Moraux, E."
			},
			{
				"Submission Datetime": "2019-02-25",
				"Decision Datetime": "2019-02-25",
				"Final Decision": "Not applicable",
				"Manuscript ID": "10.3847/2041-8213/ab0c9c",
				"Manuscript Title": "Extremely Low Molecular Gas Content in a Compact, Quiescent Galaxy at z=1.522",
				"Journal Name": "arxiv",
				"Author Names": "Bezanson, Rachel; Spilker, Justin; Williams, Christina C.; Whitaker, Katherine E.; Narayanan, Desika; Weiner, Benjamin; Franx, Marijn"
			},
			{
				"Submission Datetime": "2019-09-08",
				"Decision Datetime": "2019-09-08",
				"Final Decision": "Not applicable",
				"Manuscript ID": "10.1137/20m1347747",
				"Manuscript Title": "Counting weighted independent sets beyond the permanent",
				"Journal Name": "arxiv",
				"Author Names": "Dyer, Martin; Jerrum, Mark; Muller, Haiko; Vuskovic, Kristina"
			}
		],
		"email": "myname@example.com"
	}}
headers = {
	"X-RapidAPI-Host": "article-tracker.p.rapidapi.com",
	"X-RapidAPI-Key": os.getenv("X-RAPIDAPI-KEY"),
	"Content-Type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)

Node.js

const axios = require("axios");

const options = {
  method: 'POST',
  url: 'https://article-tracker.p.rapidapi.com/',
  headers: {
    'X-RapidAPI-Host': 'article-tracker.p.rapidapi.com',
    'X-RapidAPI-Key': x_rapidapi_key,
    'Content-Type': 'application/json'
  },
   '{"payload":{"articles":[{"Submission Datetime":"2021-04-26","Decision Datetime":"2021-04-26","Final Decision":"Not applicable","Manuscript ID":"10.1051/0004-6361/202140668","Manuscript Title":"Extreme adaptive optics astrometry of R136. Searching for high proper motion stars","Journal Name":"arxiv","Author Names":"Khorrami, Zeinab; Langlois, M.; Vakili, F.; Clark, P. C.; Buckner, A. S. M.; Gonzalez, M.; Crowther, P.; Wunsch, R.; Palous, J.; Boccaletti, A.; Lumsden, S.; Moraux, E."},{"Submission Datetime":"2019-02-25","Decision Datetime":"2019-02-25","Final Decision":"Not applicable","Manuscript ID":"10.3847/2041-8213/ab0c9c","Manuscript Title":"Extremely Low Molecular Gas Content in a Compact, Quiescent Galaxy at z=1.522","Journal Name":"arxiv","Author Names":"Bezanson, Rachel; Spilker, Justin; Williams, Christina C.; Whitaker, Katherine E.; Narayanan, Desika; Weiner, Benjamin; Franx, Marijn"},{"Submission Datetime":"2019-09-08","Decision Datetime":"2019-09-08","Final Decision":"Not applicable","Manuscript ID":"10.1137/20m1347747","Manuscript Title":"Counting weighted independent sets beyond the permanent","Journal Name":"arxiv","Author Names":"Dyer, Martin; Jerrum, Mark; Muller, Haiko; Vuskovic, Kristina"}],"email":"myname@example.com"}}'
};

axios.request(options).then(function (response) {
	console.log(response.data);
}).catch(function (error) {
	console.error(error);
});

Java

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
String value = "{\"payload\":{\"articles\":[{\"Submission Datetime\": \"2021-04-26\", \"Decision Datetime\": \"2021-04-26\",  \"Final Decision\": \"Not applicable\",  \"Manuscript ID\": \"10.1051/0004-6361/202140668\",  \"Manuscript Title\": \"Extreme adaptive optics astrometry of R136. Searching for high proper motion stars\",  \"Journal Name\": \"arxiv\",  \"Author Names\": \"Khorrami, Zeinab; Langlois, M.; Vakili, F.; Clark, P. C.; Buckner, A. S. M.; Gonzalez, M.; Crowther, P.; Wunsch, R.; Palous, J.; Boccaletti, A.; Lumsden, S.; Moraux, E.\"}, {\"Submission Datetime\": \"2019-02-25\",  \"Decision Datetime\": \"2019-02-25\",  \"Final Decision\": \"Not applicable\",  \"Manuscript ID\": \"10.3847/2041-8213/ab0c9c\",  \"Manuscript Title\": \"Extremely Low Molecular Gas Content in a Compact, Quiescent Galaxy at z=1.522\",  \"Journal Name\": \"arxiv\",  \"Author Names\": \"Bezanson, Rachel; Spilker, Justin; Williams, Christina C.; Whitaker, Katherine E.; Narayanan, Desika; Weiner, Benjamin; Franx, Marijn\"}, {\"Submission Datetime\": \"2019-09-08\",  \"Decision Datetime\": \"2019-09-08\",  \"Final Decision\": \"Not applicable\",  \"Manuscript ID\": \"10.1137/20m1347747\",  \"Manuscript Title\": \"Counting weighted independent sets beyond the permanent\",  \"Journal Name\": \"arxiv\",  \"Author Names\": \"Dyer, Martin; Jerrum, Mark; Muller, Haiko; Vuskovic, Kristina\"}],\"email\":\"myname@example.com\"}}";
RequestBody body = RequestBody.create(mediaType, value);

Request request = new Request.Builder()
	.url("https://article-tracker.p.rapidapi.com/")
	.post(body)
	.addHeader("X-RapidAPI-Host", "article-tracker.p.rapidapi.com")
	.addHeader("X-RapidAPI-Key", x_rapidapi_key)
	.addHeader("Content-Type", "application/json")
	.build();

Response response = client.newCall(request).execute();

In depth

How it works

It’s worth understanding some details of how the API works.

  • Users make requests which are sent to Crossref.

  • Crossref limit requests to 50 per second maximum. The Article Tracker will also enforce this same limit. It is impossible to query the Article Tracker for more than 50 articles in 1 second.

  • Crossref results are then passed through a complex machine-learning pipeline in order to determine which user queries match which published articles.

  • This data is returned to the user.

  • If the submitted data is poorly formed, or the tracker finds no results, it will return an empty response.

  • If using the tracker for rejected-article-tracking note that it can take several months or years for rejected articles to be published, so it is quite possible to receive an empty response when searching for recently rejected articles.

Limits

No more than 50 articles can be requested in 1 single request.

Request limits can be multiplied by 50 to get the total number of articles that can be requested under a particular plan. For example: if a plan allows 20,000 requests in 1 month, then the user can request 20,000 * 50 = 1,000,000 articles in a month.

Users can not make more than 1 request per second.

The speed of requests to the Crossref API is also variable and not within our control. Users should expect to be able to query 500 articles per minute, but this is not guaranteed. Not that Crossref provide faster responses to users who include an email address in requests. This is why the article tracker requires an ‘email’ value to be given.

JSON Schema for queries

{
	"type": "object",
	"properties": {
		"payload": {
			"type": "object",
			"properties": {
				"articles": {
					"type": "array",
					"items": {
						"type": "object",
						"properties": {
							"Submission Datetime": {
								"type": "string"
							},
							"Decision Datetime": {
								"type": "string"
							},
							"Final Decision": {
								"type": "string"
							},
							"Manuscript ID": {
								"type": "string"
							},
							"Manuscript Title": {
								"type": "string"
							},
							"Journal Name": {
								"type": "string"
							},
							"Author Names": {
								"type": "string"
							}
						}
					}
				},
				"email": {
					"type": "string"
				}
			}
		}
	},
	"externalDocs": {
		"description": "Random arXiv preprints"
	}
}
Followers: 0
Resources:
Product Website Terms of use
API Creator:
Rapid account: Clear Skies
Clear Skies
clear-skies
Log In to Rate API
Rating: 5 - Votes: 1