Semantic Scholar
api.semanticscholar.org · Science
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
Sample Requests
Search papers by keyword.
Hover any highlighted part to learn what it does
| 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));Fetch paper details by Semantic Scholar ID.
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 a free API key at semanticscholar.org/product/api
- Set header x-api-key: YOUR_KEY
- Try GET https://api.semanticscholar.org/graph/v1/paper/search?query=llm&limit=5
- 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?