### Install Pre-commit Hooks
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Installs the necessary development dependencies and then installs the pre-commit hooks to run checks before each commit.
```bash
pipenv install --dev
pipenv run pre-commit install
```
--------------------------------
### Install Development Dependencies
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Installs all necessary development tools and dependencies for testing and quality assurance.
```bash
pipenv install --dev
```
--------------------------------
### Search for Multiple Categories - Wildcard Example
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Illustrates how to search for entries within a category using a wildcard. Includes both working and failing examples.
```shell
# Works:
curl -si https://export.arxiv.org/api/query?search_query=cat:q-fin.%2A | egrep 'cat|
new();
my $response = $browser->get($url);
print $response->content();
```
--------------------------------
### Run Classic API in Dev Mode
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Starts the Flask development server for the classic API. Ensure FLASK_APP is set to 'classic-api.py'.
```bash
FLASK_APP=classic-api.py FLASK_DEBUG=1 ELASTICSEARCH_SERVICE_HOST=127.0.0.1 pipenv run flask run
```
--------------------------------
### Bypass Search Query Adaptor - Error Example
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Shows an example of an invalid query string when using the raw=1 parameter.
```shell
curl -is http://localhost:8080/api/query?search_query=pineapple&raw=1
ErrorInvalid query string: 'pineapple'
```
--------------------------------
### Run New Metadata API in Dev Mode
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Starts the Flask development server for the new metadata API. Ensure FLASK_APP is set to 'api.py'.
```bash
FLASK_APP=api.py FLASK_DEBUG=1 ELASTICSEARCH_SERVICE_HOST=127.0.0.1 pipenv run flask run
```
--------------------------------
### Typical Atom Response Example
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
This is an example of a typical Atom response received from the arXiv API when querying for 'electron'. It includes metadata about the search and the first entry found.
```xml
ArXiv Query: search_query=all:electron&id_list=&start=0&max_results=1http://arxiv.org/api/cHxbiOdZaP56ODnBPIenZhzg5f82007-10-08T00:00:00-04:00100001http://arxiv.org/abs/hep-ex/03070152003-07-07T13:46:39-04:002003-07-07T13:46:39-04:00Multi-Electron Production at High Transverse Momenta in ep Collisions at
HERA Multi-electron production is studied at high electron transverse momentum in
positron- and electron-proton collisions using the H1 detector at HERA. The
data correspond to an integrated luminosity of 115 pb-1. Di-electron and
tri-electron event yields are measured. Cross sections are derived in a
restricted phase space region dominated by photon-photon collisions. In general
good agreement is found with the Standard Model predictions. However, for
electron pair invariant masses above 100 GeV, three di-electron events and
three tri-electron events are observed, compared to Standard Model expectations
of 0.30 0.04 and 0.23 0.04, respectively.
H1 Collaboration23 pages, 8 figures and 4 tablesEur.Phys.J. C31 (2003) 17-29
```
--------------------------------
### Build Documentation Locally
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Builds the service documentation locally. Requires navigating to the docs directory, installing requirements, and running make with a specified format (e.g., html, latexpdf).
```bash
cd docs
pip install -r requirements.txt
make [format]
```
--------------------------------
### Bypass Search Query Adaptor - Working Example
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Demonstrates a successful query using the raw=1 parameter, showing the modified title element.
```shell
curl -is http://localhost:8080/api/query?search_query=pineapple&raw=1
...
arXiv Query: search_query=all:pineapple
```
--------------------------------
### OpenSearch Start Index Element
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
The element specifies the starting index of the results, analogous to the 'start' parameter in API queries.
```xml
0
```
--------------------------------
### PHP Simple Example
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
This snippet illustrates how to fetch and display the raw Atom response from the arXiv API using PHP's file_get_contents function.
```php
```
--------------------------------
### Paging through search results
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
Demonstrates how to construct URLs to retrieve results in chunks using the start and max_results parameters. This is useful for handling large result sets.
```default
http://export.arxiv.org/api/query?search_query=all:electron&start=0&max_results=10 (1)
http://export.arxiv.org/api/query?search_query=all:electron&start=10&max_results=10 (2)
http://export.arxiv.org/api/query?search_query=all:electron&start=20&max_results=10 (3)
```
--------------------------------
### Fuzzy search example
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Demonstrates a fuzzy search using the '~' modifier, which appears to work on author and 'all' prefixes but not on the title field. The examples show it having no effect.
```shell
curl -si https://export.arxiv.org/api/query?search_query="fruit+identification"~3 | egrep 'new;
my $query = "http://arxiv.org/api/query?search_query=all:electron&id_list=&start=0&max_results=1";
my $response = $ua->get($query);
if ($response->is_success) {
print $response->decoded_content;
} else {
die $response->status_line;
}
```
--------------------------------
### API Search Query with Sorting Parameters
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
Example of an API search query demonstrating the use of `sortBy` and `sortOrder` parameters to control the result set ordering.
```default
http://export.arxiv.org/api/query?search_query=ti:"electron thermal conductivity"&sortBy=lastUpdatedDate&sortOrder=ascending
```
--------------------------------
### Run Flask Development Server
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Starts the Flask development server, which monitors Python files for changes and automatically restarts. Static files and templates are not monitored, requiring a manual restart for changes to take effect.
```bash
FLASK_APP=app.py FLASK_DEBUG=1 ELASTICSEARCH_SERVICE_HOST=127.0.0.1 pipenv run flask run
```
--------------------------------
### Search by DOI (no results)
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Example of a curl command to search for a specific DOI that is expected to yield no results.
```shell
curl -is https://export.arxiv.org/api/query?search_query=doi:"10.1088/0004-637X/753/1/35"
```
--------------------------------
### Indexing Agent Log Output
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Example log output from the indexing agent showing it processing records. This output is informational and indicates the agent's progress.
```log
agent | application 12/Apr/2018:15:49:24 +0000 - search.agent.consumer - None - [arxiv:null] - INFO: "Processing record 49583482484923667520018808447538184389617576917415755778"
agent | application 12/Apr/2018:15:49:25 +0000 - search.agent.consumer - None - [arxiv:null] - INFO: "Processing record 49583482484923667520018808447539393315437191546590461954"
agent | application 12/Apr/2018:15:49:25 +0000 - search.agent.consumer - None - [arxiv:null] - INFO: "Processing record 49583482484923667520018808447540602241256806175765168130"
agent | application 12/Apr/2018:15:49:25 +0000 - search.agent.consumer - None - [arxiv:null] - INFO: "Processing record 49583482484923667520018808447541811167076420804939874306"
```
--------------------------------
### Date Filtering with submittedDate
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Demonstrates filtering search results by date range using the 'submittedDate' parameter, including variations with brackets and legacy examples.
```shell
curl -is http://localhost:8080/api/query?search_query=submittedDate:"202301010600+TO+202301030600" | egrep -i 'date|publish|'
Same with [ ]:
http://localhost:8080/api/query?search_query=submittedDate:%5b202301010600+TO+202301030600%5D | egrep -i '' | sort
...
http://arxiv.org/abs/2210.05489v32023-01-02T20:15:04Z2022-10-11T10:45:07Z
# legacy:
curl -si https://export.arxiv.org/api/query?search_query=ti:%22Generating+Approximate+Ground+States+of+Molecules%22 | gi ''
2025-11-03T00:00:00-05:00http://arxiv.org/abs/2210.05489v32023-01-02T05:37:45Z2022-10-11T14:45:07Z
curl -si https://export.arxiv.org/api/query?search_query=ti:%22Generating+Approximate+Ground+States+of+Molecules%22+AND+submittedDate:%5b202301010600+TO+202301030600%5D | gi ''
curl -si https://export.arxiv.org/api/query?search_query=ti:%22Generating+Approximate+Ground+States+of+Molecules%22+AND+submittedDate:%5b202210100600+TO+202210120600%5D | gi ''
...
http://arxiv.org/abs/2210.05489v3
# Correct the python search to use published:
curl -si http://localhost:8080/api/query?search_query=ti:%22Generating+Approximate+Ground+States+of+Molecules%22+AND+submittedDate:%5b202210100600+TO+202210120600%5D | gi '|http://arxiv.org/abs/2210.05489v32025-11-03T18:00:21Z2022-10-11T10:45:07ZGenerating Approximate Ground States of Mol...
```
--------------------------------
### Run Elasticsearch and Kibana with Docker Compose
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Starts Elasticsearch and Kibana using the provided docker-compose.yml file. This maps ES ports 9200/9300 and Kibana port 5601 to localhost. Ensure you have a recent version of docker-compose.
```bash
docker-compose up
```
--------------------------------
### v2 API search by all or DOI
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Examples using the v2 API endpoint (localhost:8080) to search using the 'all' field or 'doi' field. Both 'all' and 'doi' fields accept quoted values.
```shell
curl -si http://localhost:8080/api/query?search_query=all:"10.1038/418838a"
```
```shell
curl -si http://localhost:8080/api/query?search_query=doi:"10.1038/418838a"
```
--------------------------------
### RSS Response from Classic API
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/migration.md
Example of an RSS response from the classic arXiv API, showing search results in XML format. This format was used by the older API.
```xml
http://api.arxiv.org/arXiv Query: size: 50; terms: AND title=universes; include_fields: ['canonical', 'title', 'paper_id', 'href', 'version', 'paper_id_v', 'abstract', 'submitted_date', 'updated_date', 'comments', 'journal_ref', 'doi', 'primary_classification', 'secondary_classification', 'authors']2019-06-04T06:01:31.365740+00:00python-feedgen5060http://127.0.0.1:5000/astro-ph/0311033v4A new paradigm for the universe2019-06-04T06:01:31.366602+00:00This book provides a completely new approach to understanding the universe. The main idea is that the principal objects in the universe form a spectrum unified by the presence of a massive or hypermassive black hole. These objects are variously called quasars, active galaxies and spiral galaxies. The key to understanding their dynamics is angular momentum and the key tool, and main innovative idea of this work, is a proper formulation of "Mach's principle" using Sciama's ideas. In essence, what is provided here is a totally new paradigm for the universe. In this paradigm, there is no big bang, and the universe is many orders of magnitude older than current estimates for its age. Indeed there is no natural limit for its age.2017-12-21T13:11:38-05:00198 pages, 81 figures (including jpg's). Version 4 has a good sketch for the source of the CMB (see appendix F)Colin Rourke
```
--------------------------------
### Basic API Search Query
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
Use this URL to search for articles containing a specific term in the title or abstract. This is a simple GET request.
```url
http://export.arxiv.org/api/query?search_query=all:electron
```
--------------------------------
### Fetch arXiv API data with Ruby
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
Uses the net/http and uri modules from the Ruby standard library to retrieve data from the arXiv API. These are included in default Ruby installations.
```default
require 'net/http'
require 'uri'
url = URI.parse('http://export.arxiv.org/api/query?search_query=all:electron&start=0&max_results=1')
res = Net::HTTP.get_response(url)
print res.body
```
--------------------------------
### JSON Response from New Search API
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/migration.md
Example of a JSON response from the new arXiv Search API, illustrating metadata and search results. This format is preferred for modern web development.
```json
{
"metadata": {
"end": 6,
"query": [
{
"parameter": "title",
"value": "universes"
}
],
"size": 50,
"start": 0,
"total": 6
},
"results": [
{
"canonical": "https://arxiv.org/abs/1801.01865v2",
"href": "http://127.0.0.1:5000/1801.01865v2",
"paper_id": "1801.01865",
"paper_id_v": "1801.01865v2",
"title": "Massless Particle Creation in Bianchi I Universes",
"version": 2
}
]
}
```
--------------------------------
### Simple phrase search in title
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Searches for the exact word 'pineapple' within the title field. This is a basic example of using quotes for exact word matching.
```bash
curl -is https://export.arxiv.org/api/query?search_query=ti:%22pineapple%22 | gi ''
... 2109.12142v2
# Also works: q-fin.TR
# Does not works if cs.SD
# Also works: cat:q-fin. ਵੀ
curl -si http://localhost:8080/api/query?search_query=ti:%22Periodicity+in+Cryptocurrency+Volatility+and+Liquidity%22+AND+cat:q-fin.PR | gi ''
# Also works: q-fin.TR
curl -si http://localhost:8080/api/query?search_query=ti:%22Periodicity+in+Cryptocurrency+Volatility+and+Liquidity%22+AND+cat:q-fin.PR | gi ''
# Does not works: q-fin. ਵੀ
```
--------------------------------
### Run Test Suite with Integration Tests
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Executes the test suite, including integration tests, and generates a coverage report.
```bash
WITH_INTEGRATION=1 pipenv run nose2 --with-coverage
```
--------------------------------
### Atom Feed Link Element
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
The element provides a URL to retrieve the feed again. The URL represents a canonicalized version of the query and can be used for GET requests.
```xml
```
--------------------------------
### Indexing Agent Running Logs
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
View the log output once the indexing agent and localstack are running. This indicates successful connection and readiness to process records.
```bash
agent | application 12/Apr/2018:15:44:14 +0000 - search.agent.base - None - [arxiv:null] - ERROR: "Failed to get stream while waiting"
agent | application 12/Apr/2018:15:44:14 +0000 - search.agent.base - None - [arxiv:null] - INFO: "Could not connect to stream; attempting to create"
agent | application 12/Apr/2018:15:44:14 +0000 - search.agent.base - None - [arxiv:null] - INFO: "Created; waiting for MetadataIsAvailable again"
agent | application 12/Apr/2018:15:44:14 +0000 - search.agent.base - None - [arxiv:null] - ERROR: "Waiting for stream MetadataIsAvailable"
localstack | Ready.
agent | application 12/Apr/2018:15:44:24 +0000 - search.agent.base - None - [arxiv:null] - INFO: "Ready to start"
agent | application 12/Apr/2018:15:44:24 +0000 - search.agent.base - None - [arxiv:null] - INFO: "Starting processing from position 49583482132750299344823207796409748205413425533752967170 on stream MetadataIsAvailable and shard 0"
```
--------------------------------
### Search API Endpoint
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
This endpoint allows users to search for articles on arXiv. Results are returned in Atom 1.0 format. It can be accessed via HTTP GET or POST.
```APIDOC
## GET /api/query
### Description
Allows searching for articles on arXiv using various query parameters. Results are returned in Atom 1.0 format.
### Method
GET, POST
### Endpoint
http://export.arxiv.org/api/query
### Parameters
#### Query Parameters
- **search_query** (string) - Required - The query string to search for articles. Can include terms like 'all:electron', 'all:electron+AND+all:proton'.
### Request Example
```json
{
"example": "http://export.arxiv.org/api/query?search_query=all:electron"
}
```
### Response
#### Success Response (200)
- **response** (Atom 1.0 XML) - Contains the search results in Atom 1.0 format.
#### Response Example
```json
{
"example": "[Atom 1.0 XML content]"
}
```
```
--------------------------------
### Submit Search Query via POST Request
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Demonstrates how to submit a search query using an HTTP POST request. This method is suitable for longer or more complex queries that might exceed URL length limits.
```bash
curl -X POST http://localhost:8080/api/query -d "search_query=ti:pineappl"
```
--------------------------------
### Run Elasticsearch in Docker
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Builds a Docker image for Elasticsearch and runs it, mapping ports 9200 and 9300 to the host. This is necessary for the arXiv search service to connect to Elasticsearch.
```bash
docker build -t "arxiv/elasticsearch" -f ./Dockerfile-elasticsearch .
docker run -it \
-e "http.host=0.0.0.0" \
-e "transport.host=127.0.0.1" \
-p 9200:9200 -p 9300:9300 arxiv/elasticsearch
echo $ES_BASE_URL; # http://127.0.0.1:9200
curl "${ES_BASE_URL}/_cat/health?v";
```
--------------------------------
### Extract Lucene implementation version
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Extracts the MANIFEST.MF file from lucene.jar and prints the Implementation-Version.
```shell
cd arxiv-httpd/java/lucene_search/lib
jar xf lucene.jar META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF | grep Implementation-Version
Implementation-Version: 2.3.2 652650 - buschmi - 2008-05-01 13:30:57
```
--------------------------------
### Run Pylint for Code Linting
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Executes Pylint on the 'search' package to assess code quality, aiming for a score of 9/10 or better.
```bash
pipenv run pylint search
```
--------------------------------
### Run Pre-commit Hooks Manually
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Manually executes all configured pre-commit hooks on the project's changed files.
```bash
pipenv run pre-commit run
```
--------------------------------
### Example Error Response for Malformed ID
Source: https://github.com/arxiv/arxiv-search/blob/develop/docs/source/classic_api.md
This snippet shows the XML Atom feed returned when an API call contains a malformed ID. The error details are found within the `` tag.
```default
ArXiv Query: search_query=&id_list=1234.12345http://arxiv.org/api/kvuntZ8c9a4Eq5CF7KY03nMug+Q2007-10-12T00:00:00-04:00101http://arxiv.org/api/errors#incorrect_id_format_for_1234.12345Errorincorrect id format for 1234.123452007-10-12T00:00:00-04:00arXiv api core
```
--------------------------------
### Populate Index with Specific Paper ID
Source: https://github.com/arxiv/arxiv-search/blob/develop/README.md
Populates the search index with papers defined in tests/data/sample.json. This script can take several minutes to run. Optionally, specify a single paper ID using the --paper_id parameter.
```bash
FLASK_APP=app.py FLASK_DEBUG=1 ELASTICSEARCH_SERVICE_HOST=127.0.0.1 pipenv run python bulk_index.py --paper_id
```
--------------------------------
### Search by Category and Submission Date
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Shows how to filter search results by category and a specific submission date range.
```shell
curl -si http://localhost:8080/api/query?search_query=cat:q-fin.%2A+AND+submittedDate:%22201602070000+TO+201602072359%22 | gi ''
```
--------------------------------
### Search for multi-last names with spaces and underscores
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Demonstrates various ways to search for authors with multi-part last names like 'del Maestro', using spaces, underscores, and quotes.
```bash
curl -si https://export.arxiv.org/api/query?search_query=au:del+maestro | egrep '
```
--------------------------------
### Title Search with Explicit OR
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Demonstrates searching within titles for one of two terms using the explicit OR operator. Note the URL encoding for the OR operator.
```bash
curl -is https://export.arxiv.org/api/query?search_query=ti:("hawaii+OR+pineapple") | gi ' 1 %} {{ pagination(metadata, url_for_page) }} {% endif %}
{# Start index is 0-based. #} {% for result in results %}NaN. {%- set display_paper_id = result.paper_id if is_current(result) else result.paper_id_v -%} [arXiv:{{ display_paper_id }}]({{ url_for('abs_by_id', paper_id=display_paper_id) }}) {{ paper_format_links(result, display_paper_id) }}
{{ result.primary_classification.category.id }} {% if result.secondary_classification %} {% for secondary in result.secondary_classification %} {{ secondary.category.id }} {% endfor %} {% endif -%}
{% if result.doi %} {% for doi in result.doi %}
doi [{{ doi }}](https://doi.org/{{ doi }})
{% endfor %} {% endif %}
{# Note: mathjax class should be applied to any element that requires MathJax processing #}
{% if result.highlight.title %} {{ result.highlight.title | safe }} {% else %} {{ result.title }} {% endif %}
Authors: {% for author in result.authors[0:25] %} {% if author %}[{{ author.first_name }} {{ author.last_name }}{% if author.suffix %} {{ author.suffix }}{%- endif -%}]({{ url_for_author_search(author.first_name, author.last_name) }}){{ ", " if not loop.last }}{% endif %} {% endfor -%} {% if result.authors | length > 25 %}, et al. ({{ result.authors | length - 25 }} additional authors not shown){% endif %}
{% if not hide_abstracts %}
Abstract: {{ result.preview.abstract | safe }} {%if result.truncated.abstract %}▽ More{% endif %} {% if result.highlight.abstract %}{{ result.highlight.abstract | safe }}{% else %}{{ result.abstract }}{% endif %} △ Less
{% endif %}
Submitted {{ result.submitted_date.strftime('%-d %B, %Y') }}; {% if result.version > 1 %}v1 submitted {{ result.submitted_date_first.strftime('%-d %B, %Y') }};{% endif %} originally announced {{ result.announced_date_first.strftime('%B %Y') }}. {% if not is_current(result) %}Latest version: [{{ result.latest }}]({{ url_for('abs_by_id', paper_id=result.latest) }}).{% endif %}
{% if result.comments %}
Comments: {% if result.highlight.comments %}{{ result.highlight.comments | safe }}{% else %}{{ result.comments }}{% endif %}
{% endif %} {% if result.report_num or result.acm_class or result.msc_class %}
{% if result.report_num %} Report number: {% if result.highlight.report_num %}{{ result.highlight.report_num | safe }}{% else %}{{ result.report_num }}{% endif %} {% endif %} {% if result.msc_class %} MSC Class: {% if result.highlight.msc_class %}{{ result.highlight.msc_class | safe }} ({{ result.msc_class }}){% else %}{{ result.msc_class }}{% endif %} {% endif %} {% if result.acm_class %} ACM Class: {% if result.highlight.acm_class %}{{ result.highlight.acm_class | safe }} ({{ result.acm_class }}){% else %}{{ result.acm_class }}{% endif %} {% endif %}
{% endif %} {% if result.journal_ref %}
```
--------------------------------
### Search by DOI with wildcard
Source: https://github.com/arxiv/arxiv-search/blob/develop/search/domain/classic_api/README_classic_search_query.md
Shows how to use an asterisk (*) as a wildcard in a DOI search query. Quotes are not required for the DOI when using a wildcard.
```shell
curl https://export.arxiv.org/api/query?search_query=doi:10.1038/418838a*
```