Find an API

Search public APIs with auth details & Postman guides

← All APIs

Semantic Scholar

api.semanticscholar.org · Science

Science API Key Free Tier Academic Research AI

AI-powered academic search engine with data on nearly 200 million papers across all disciplines. Access paper metadata, authors, citations, recommendations, and semantic similarity. Free API key available.

Authentication

API Key Free API key available at semanticscholar.org/product/api. Pass as x-api-key header. Unauthenticated requests are rate-limited to 1 req/sec.

Sample Requests

GET Search papers

Search papers by keyword.

https://api.semanticscholar.org/graph/v1/paper/search?limit=5&query=transformer neural network&fields=title,year,authors

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
x-api-key YOUR_API_KEY
curl -X GET "https://api.semanticscholar.org/graph/v1/paper/search?limit=5&query=transformer%20neural%20network&fields=title%2Cyear%2Cauthors" \
  -H "x-api-key: YOUR_API_KEY"
import requests
params = {
    "limit": "5",
    "query": "transformer neural network",
    "fields": "title,year,authors"
}
headers = {
    "x-api-key": "YOUR_API_KEY"
}
response = requests.get(
    "https://api.semanticscholar.org/graph/v1/paper/search",
    params=params,
    headers=headers,
)
print(response.json())
const url = new URL('https://api.semanticscholar.org/graph/v1/paper/search');
url.searchParams.set('limit', '5');
url.searchParams.set('query', 'transformer neural network');
url.searchParams.set('fields', 'title,year,authors');

const response = await fetch(url, {
  headers: {
    'x-api-key': 'YOUR_API_KEY'
  },
}); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.semanticscholar.org/graph/v1/paper/search")
	q := baseURL.Query()
	q.Set("limit", "5")
	q.Set("query", "transformer neural network")
	q.Set("fields", "title,year,authors")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.semanticscholar.org/graph/v1/paper/search")
uri.query = URI.encode_www_form({
  "limit" => "5",
  "query" => "transformer neural network",
  "fields" => "title,year,authors"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "YOUR_API_KEY"

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.semanticscholar.org/graph/v1/paper/search?" . http_build_query([
    "limit" => "5",
    "query" => "transformer neural network",
    "fields" => "title,year,authors"
]);
$opts = ["http" => [
    "method" => "GET",
    "header" => implode("\r\n", [
        "x-api-key: YOUR_API_KEY"
    ]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Get paper details

Fetch paper details by Semantic Scholar ID.

https://api.semanticscholar.org/graph/v1/paper/CorpusId:209862019?fields=title,abstract,authors,citationCount

Hover any highlighted part to learn what it does

curl -X GET "https://api.semanticscholar.org/graph/v1/paper/CorpusId:209862019?fields=title%2Cabstract%2Cauthors%2CcitationCount"
import requests
params = {
    "fields": "title,abstract,authors,citationCount"
}
response = requests.get(
    "https://api.semanticscholar.org/graph/v1/paper/CorpusId:209862019",
    params=params,
)
print(response.json())
const url = new URL('https://api.semanticscholar.org/graph/v1/paper/CorpusId:209862019');
url.searchParams.set('fields', 'title,abstract,authors,citationCount');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.semanticscholar.org/graph/v1/paper/CorpusId:209862019")
	q := baseURL.Query()
	q.Set("fields", "title,abstract,authors,citationCount")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.semanticscholar.org/graph/v1/paper/CorpusId:209862019")
uri.query = URI.encode_www_form({
  "fields" => "title,abstract,authors,citationCount"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.semanticscholar.org/graph/v1/paper/CorpusId:209862019?" . http_build_query([
    "fields" => "title,abstract,authors,citationCount"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. Get a free API key at semanticscholar.org/product/api
  2. Set header x-api-key: YOUR_KEY
  3. Try GET https://api.semanticscholar.org/graph/v1/paper/search?query=llm&limit=5
  4. Use fields param to select which fields to return

What can you build with Semantic Scholar?

Semantic Scholar is a Science API. Developers commonly use science APIs for:

  • accessing research datasets and scientific literature
  • powering academic and R&D applications
  • running scientific calculations and simulations
  • visualising experimental and observational data
  • integrating with research and reference databases

API Key authentication. You'll receive a key after signing up. Send it with every request — in a header or query parameter. Keep it out of client-side code and never commit it to version control. Semantic Scholar is free to use up to a usage limit, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗