Skill Tracer
Skills › Scientific Agent Skills › paper-lookup › arxiv.md

arxiv.md

280 lines · skills/paper-lookup/references/arxiv.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# arXiv API
2
3arXiv is a preprint server for physics, mathematics, computer science, quantitative biology, quantitative finance, statistics, electrical engineering, and economics.
4
5**Important:** The arXiv API returns **Atom XML**, not JSON. There is no JSON option.
6

arXiv API

arXiv is a preprint server for physics, mathematics, computer science, quantitative biology, quantitative finance, statistics, electrical engineering, and economics.

Important: The arXiv API returns Atom XML, not JSON. There is no JSON option.

Raw lines 1 to 6
7## Base URL
8
9```
10https://export.arxiv.org/api/query
11```

Base URL

https://export.arxiv.org/api/query
Raw lines 7 to 12
13## Authentication
15None required. Fully public.

Authentication

None required. Fully public.

Raw lines 13 to 16
17## Query Parameters
19```
20GET https://export.arxiv.org/api/query?search_query={query}&start={n}&max_results={n}
21```
23| Parameter | Required | Default | Description |
24|-----------|----------|---------|-------------|
25| `search_query` | Yes* | -- | Search using field prefixes + boolean operators |
26| `id_list` | Yes* | -- | Comma-separated arXiv IDs (e.g., `2103.15348,2005.14165`) |
27| `start` | No | 0 | Pagination offset (0-based) |
28| `max_results` | No | 10 | Use slices of at most 2,000; refine searches exceeding 1,000. The manual describes a 30,000-result query limit |
29| `sortBy` | No | `relevance` | `relevance`, `lastUpdatedDate`, `submittedDate` |
30| `sortOrder` | No | `descending` | `ascending` or `descending` |
32*At least one of `search_query` or `id_list` must be provided. They can be combined (intersection).

Query Parameters

GET https://export.arxiv.org/api/query?search_query={query}&start={n}&max_results={n}
ParameterRequiredDefaultDescription
search_queryYes*--Search using field prefixes + boolean operators
id_listYes*--Comma-separated arXiv IDs (e.g., 2103.15348,2005.14165)
startNo0Pagination offset (0-based)
max_resultsNo10Use slices of at most 2,000; refine searches exceeding 1,000. The manual describes a 30,000-result query limit
sortByNorelevancerelevance, lastUpdatedDate, submittedDate
sortOrderNodescendingascending or descending

*At least one of search_query or id_list must be provided. They can be combined (intersection).

Raw lines 17 to 33
34## Search Field Prefixes
36| Prefix | Searches |
37|--------|----------|
38| `ti:` | Title |
39| `au:` | Author |
40| `abs:` | Abstract |
41| `co:` | Comment |
42| `jr:` | Journal reference |
43| `cat:` | Subject category |
44| `rn:` | Report number |
45| `all:` | All fields |

Search Field Prefixes

PrefixSearches
ti:Title
au:Author
abs:Abstract
co:Comment
jr:Journal reference
cat:Subject category
rn:Report number
all:All fields
Raw lines 34 to 46
47## Boolean Operators
49- `AND` -- both conditions
50- `OR` -- either condition
51- `ANDNOT` -- exclude
52- Parentheses for grouping (URL-encode as `%28` / `%29`)
53- Quoted phrases (URL-encode as `%22`)

Boolean Operators

  • AND -- both conditions
  • OR -- either condition
  • ANDNOT -- exclude
  • Parentheses for grouping (URL-encode as %28 / %29)
  • Quoted phrases (URL-encode as %22)
Raw lines 47 to 54
55## Example Queries
57**Search all fields:**
58```
59https://export.arxiv.org/api/query?search_query=all:transformer+attention&max_results=5
60```
62**Author + category:**
63```
64https://export.arxiv.org/api/query?search_query=au:hinton+AND+cat:cs.LG&max_results=10
65```
67**Title search:**
68```
69https://export.arxiv.org/api/query?search_query=ti:%22attention+is+all+you+need%22
70```
72**By ID:**
73```
74https://export.arxiv.org/api/query?id_list=2103.15348
75```
77**Multiple IDs:**
78```
79https://export.arxiv.org/api/query?id_list=2103.15348,2005.14165,1706.03762
80```
82**Date range** -- the brackets **must** be percent-encoded as `%5B` / `%5D`:
83```
84https://export.arxiv.org/api/query?search_query=cat:cs.AI+AND+submittedDate:%5B202401010000+TO+202412312359%5D
85```
87Passing literal `[` and `]` to `curl` fails before the request is even sent: curl reads them as a
88globbing range and exits **3** (`bad range specification`) with no output and no HTTP status to
89diagnose. Verified 2026-07-27:
91```bash
92# exit 3, nothing fetched, no error body to read
93curl -s "https://export.arxiv.org/api/query?search_query=submittedDate:[202401010000+TO+202401020000]"
95# exit 0, totalResults 35 -- either fix works
96curl -s "https://export.arxiv.org/api/query?search_query=cat:cs.AI+AND+submittedDate:%5B202401010000+TO+202401020000%5D"
97curl -sg "https://export.arxiv.org/api/query?search_query=cat:cs.AI+AND+submittedDate:[202401010000+TO+202401020000]"
98```
100Prefer the encoded form over `curl -g`: it is what the API expects, and it survives being copied
101into a fetch tool, a Python client, or a shell that is not curl. Timestamps are `YYYYMMDDHHMM` in
102UTC and the range is inclusive on both ends.

Example Queries

Search all fields:

https://export.arxiv.org/api/query?search_query=all:transformer+attention&max_results=5

Author + category:

https://export.arxiv.org/api/query?search_query=au:hinton+AND+cat:cs.LG&max_results=10

Title search:

https://export.arxiv.org/api/query?search_query=ti:%22attention+is+all+you+need%22

By ID:

https://export.arxiv.org/api/query?id_list=2103.15348

Multiple IDs:

https://export.arxiv.org/api/query?id_list=2103.15348,2005.14165,1706.03762

Date range -- the brackets must be percent-encoded as %5B / %5D:

https://export.arxiv.org/api/query?search_query=cat:cs.AI+AND+submittedDate:%5B202401010000+TO+202412312359%5D

Passing literal [ and ] to curl fails before the request is even sent: curl reads them as a globbing range and exits 3 (bad range specification) with no output and no HTTP status to diagnose. Verified 2026-07-27:

# exit 3, nothing fetched, no error body to read
curl -s "https://export.arxiv.org/api/query?search_query=submittedDate:[202401010000+TO+202401020000]"

# exit 0, totalResults 35 -- either fix works
curl -s  "https://export.arxiv.org/api/query?search_query=cat:cs.AI+AND+submittedDate:%5B202401010000+TO+202401020000%5D"
curl -sg "https://export.arxiv.org/api/query?search_query=cat:cs.AI+AND+submittedDate:[202401010000+TO+202401020000]"

Prefer the encoded form over curl -g: it is what the API expects, and it survives being copied into a fetch tool, a Python client, or a shell that is not curl. Timestamps are YYYYMMDDHHMM in UTC and the range is inclusive on both ends.

Raw lines 55 to 103
104## Response Format (Atom XML)
106```xml
107<feed xmlns="http://www.w3.org/2005/Atom">
108 <opensearch:totalResults>1234</opensearch:totalResults>
109 <opensearch:startIndex>0</opensearch:startIndex>
110 <opensearch:itemsPerPage>10</opensearch:itemsPerPage>
112 <entry>
113 <id>http://arxiv.org/abs/1706.03762v7</id> <!-- http, while the links below are https -->
114 <title>Attention Is All You Need</title>
115 <summary>The dominant sequence transduction models are based on...</summary>
116 <published>2017-06-12T17:57:34Z</published>
117 <updated>2023-08-02T00:00:12Z</updated>
118 <author><name>Ashish Vaswani</name></author>
119 <author><name>Noam Shazeer</name></author>
120 <!-- more authors -->
121 <category term="cs.CL" scheme="http://arxiv.org/schemas/atom"/>
122 <arxiv:primary_category term="cs.CL"/>
123 <link rel="alternate" type="text/html" href="https://arxiv.org/abs/1706.03762v7"/>
124 <link rel="related" type="application/pdf" title="pdf" href="https://arxiv.org/pdf/1706.03762v7"/>
125 <arxiv:comment>15 pages, 5 figures</arxiv:comment>
126 <!-- <arxiv:doi> and <arxiv:journal_ref> appear only when the author registered them.
127 1706.03762 has neither. -->
128 </entry>
129</feed>
130```

Response Format (Atom XML)

<feed xmlns="http://www.w3.org/2005/Atom">
  <opensearch:totalResults>1234</opensearch:totalResults>
  <opensearch:startIndex>0</opensearch:startIndex>
  <opensearch:itemsPerPage>10</opensearch:itemsPerPage>

  <entry>
    <id>http://arxiv.org/abs/1706.03762v7</id>   <!-- http, while the links below are https -->
    <title>Attention Is All You Need</title>
    <summary>The dominant sequence transduction models are based on...</summary>
    <published>2017-06-12T17:57:34Z</published>
    <updated>2023-08-02T00:00:12Z</updated>
    <author><name>Ashish Vaswani</name></author>
    <author><name>Noam Shazeer</name></author>
    <!-- more authors -->
    <category term="cs.CL" scheme="http://arxiv.org/schemas/atom"/>
    <arxiv:primary_category term="cs.CL"/>
    <link rel="alternate" type="text/html" href="https://arxiv.org/abs/1706.03762v7"/>
    <link rel="related" type="application/pdf" title="pdf" href="https://arxiv.org/pdf/1706.03762v7"/>
    <arxiv:comment>15 pages, 5 figures</arxiv:comment>
    <!-- <arxiv:doi> and <arxiv:journal_ref> appear only when the author registered them.
         1706.03762 has neither. -->
  </entry>
</feed>
Raw lines 104 to 131
132### Key XML elements per entry
134| Element | Description |
135|---------|-------------|
136| `<id>` | arXiv URL: `http://arxiv.org/abs/{id}` |
137| `<title>` | Paper title |
138| `<summary>` | Abstract |
139| `<published>` | Original submission date (ISO 8601) |
140| `<updated>` | Date of latest version |
141| `<author><name>` | One per author |
142| `<category term="...">` | Subject categories |
143| `<arxiv:primary_category>` | Primary classification |
144| `<link rel="alternate">` | Abstract page URL |
145| `<link rel="related" title="pdf">` | PDF URL |
146| `<arxiv:doi>` | The **journal** DOI, and only when the author registered one -- see below |
147| `<arxiv:comment>` | Author comments |
148| `<arxiv:journal_ref>` | Journal reference, same conditional presence |

Key XML elements per entry

ElementDescription
<id>arXiv URL: http://arxiv.org/abs/{id}
<title>Paper title
<summary>Abstract
<published>Original submission date (ISO 8601)
<updated>Date of latest version
<author><name>One per author
<category term="...">Subject categories
<arxiv:primary_category>Primary classification
<link rel="alternate">Abstract page URL
<link rel="related" title="pdf">PDF URL
<arxiv:doi>The journal DOI, and only when the author registered one -- see below
<arxiv:comment>Author comments
<arxiv:journal_ref>Journal reference, same conditional presence
Raw lines 132 to 149
150### `<arxiv:doi>` is not the arXiv DOI
152`<arxiv:doi>` carries the DOI of the *published journal version*
153(`10.1103/PhysRevD.50.43`), and it is **absent** for any preprint that was never
154published or whose author never registered it. Verified 2026-07-27: `id_list=1706.03762`
155("Attention Is All You Need") returns **no** `<arxiv:doi>` element at all.
157arXiv also mints its own DOI, conventionally `10.48550/arXiv.{id}`, but **the API never returns it**,
158and constructing one is only sometimes a usable key. Verified 2026-07-27 for `1706.03762`:
160| Where you send `10.48550/arXiv.1706.03762` | Result |
161|---|---|
162| `doi.org` | **200** -- it resolves |
163| Crossref `/works/10.48550%2FarXiv.1706.03762` | **404** `Resource not found` -- it is a DataCite DOI, not registered with Crossref |
164| OpenAlex `/works/doi:10.48550/arXiv.1706.03762` | **404**, and `filter=doi:...` gives `count: 0` |
166The OpenAlex miss is not a case problem -- `doi:10.48550/arxiv.2102.05095` and
167`doi:10.48550/arXiv.2102.05095` both return 200, so the lookup is case-insensitive and *does* work for
168many arXiv preprints. It is that **not every arXiv paper is under a `10.48550` DOI there**:
169OpenAlex holds "Attention Is All You Need" as `W2626778328` with DOI `10.65215/2q58a426`, a prefix
170arXiv now also uses.
172So do not treat a constructed arXiv DOI as an identifier that works everywhere, and do not report a
173404 from it as "paper not found". Cross-reference by the **arXiv ID** instead -- Semantic Scholar's
174`ARXIV:{id}` prefix (see `references/semantic-scholar.md`) -- or by title search, and fall back to a
175constructed DOI only after that fails.

<arxiv:doi> is not the arXiv DOI

<arxiv:doi> carries the DOI of the published journal version (10.1103/PhysRevD.50.43), and it is absent for any preprint that was never published or whose author never registered it. Verified 2026-07-27: id_list=1706.03762 ("Attention Is All You Need") returns no <arxiv:doi> element at all.

arXiv also mints its own DOI, conventionally 10.48550/arXiv.{id}, but the API never returns it, and constructing one is only sometimes a usable key. Verified 2026-07-27 for 1706.03762:

Where you send 10.48550/arXiv.1706.03762Result
doi.org200 -- it resolves
Crossref /works/10.48550%2FarXiv.1706.03762404 Resource not found -- it is a DataCite DOI, not registered with Crossref
OpenAlex /works/doi:10.48550/arXiv.1706.03762404, and filter=doi:... gives count: 0

The OpenAlex miss is not a case problem -- doi:10.48550/arxiv.2102.05095 and doi:10.48550/arXiv.2102.05095 both return 200, so the lookup is case-insensitive and does work for many arXiv preprints. It is that **not every arXiv paper is under a 10.48550 DOI there**: OpenAlex holds "Attention Is All You Need" as W2626778328 with DOI 10.65215/2q58a426, a prefix arXiv now also uses.

So do not treat a constructed arXiv DOI as an identifier that works everywhere, and do not report a 404 from it as "paper not found". Cross-reference by the arXiv ID instead -- Semantic Scholar's ARXIV:{id} prefix (see references/semantic-scholar.md) -- or by title search, and fall back to a constructed DOI only after that fails.

Raw lines 150 to 176
177## Parsing Tips
179Use `scripts/arxiv_atom.py` rather than re-deriving the parse:
181```bash
182curl -s "https://export.arxiv.org/api/query?id_list=1706.03762" | python3 scripts/arxiv_atom.py -
183```
185It emits one JSON record per entry (`arxiv_id`, `version`, `title`, `abstract`, `authors`,
186`categories`, `doi`, `pdf_url`, dates) plus the feed's `total_results`, with the namespaces and the
187traps below already handled.
189If you do parse it yourself: the namespace is `http://www.w3.org/2005/Atom`, with arXiv extensions in
190`http://arxiv.org/schemas/atom`. Four things bite:
192- **The feed has its own `<link>`.** Before the first `<entry>` there is a `<link
193 type="application/atom+xml">` pointing back at the query. Selecting "the first `<link>`" yields the
194 query URL, not a paper. Match on `rel`/`type`: the abstract page is `rel="alternate"
195 type="text/html"`, the PDF is `rel="related" type="application/pdf" title="pdf"`.
196- **The URL schemes are inconsistent within a single response.** Verified 2026-07-27 on
197 `id_list=1706.03762`: the entry's `<id>` is `http://arxiv.org/abs/1706.03762v7`, while the
198 `<link href>` values for the *same* pages are `https://arxiv.org/abs/...` and
199 `https://arxiv.org/pdf/...`, and the feed-level `<id>` is `https://arxiv.org/api/...`. Never
200 string-match on the scheme. Take the complete path after `/abs/`; legacy IDs such as `hep-th/9901001v1` contain a slash.
201- **The ID carries a version suffix.** `1706.03762v7`, not `1706.03762`. Strip the trailing `vN`
202 before comparing against a DOI, a Semantic Scholar `ARXIV:` lookup, or a user-supplied ID.
203- **`<title>` and `<summary>` arrive hard-wrapped**, with newlines and runs of spaces mid-sentence.
204 Collapse whitespace before display or comparison.

Parsing Tips

Use scripts/arxiv_atom.py rather than re-deriving the parse:

curl -s "https://export.arxiv.org/api/query?id_list=1706.03762" | python3 scripts/arxiv_atom.py -

It emits one JSON record per entry (arxiv_id, version, title, abstract, authors, categories, doi, pdf_url, dates) plus the feed's total_results, with the namespaces and the traps below already handled.

If you do parse it yourself: the namespace is http://www.w3.org/2005/Atom, with arXiv extensions in http://arxiv.org/schemas/atom. Four things bite:

  • **The feed has its own <link>.** Before the first <entry> there is a <link type="application/atom+xml"> pointing back at the query. Selecting "the first <link>" yields the query URL, not a paper. Match on rel/type: the abstract page is rel="alternate" type="text/html", the PDF is rel="related" type="application/pdf" title="pdf".
  • The URL schemes are inconsistent within a single response. Verified 2026-07-27 on id_list=1706.03762: the entry's <id> is http://arxiv.org/abs/1706.03762v7, while the <link href> values for the same pages are https://arxiv.org/abs/... and https://arxiv.org/pdf/..., and the feed-level <id> is https://arxiv.org/api/.... Never string-match on the scheme. Take the complete path after /abs/; legacy IDs such as hep-th/9901001v1 contain a slash.
  • The ID carries a version suffix. 1706.03762v7, not 1706.03762. Strip the trailing vN before comparing against a DOI, a Semantic Scholar ARXIV: lookup, or a user-supplied ID.
  • **<title> and <summary> arrive hard-wrapped**, with newlines and runs of spaces mid-sentence. Collapse whitespace before display or comparison.
Raw lines 177 to 205
Runs code scripts/arxiv_atom.py :179
Runs code python3 scripts/arxiv_atom.py :182
206## Failure Modes
208None of these are HTTP errors. All verified 2026-07-27.
210**An unknown field prefix is silently rewritten to `all:`.** `search_query=badfield:xyz` does not
211fail -- arXiv reinterprets it and runs `all:badfield:xyz`, returning plausible hits for a query you
212did not ask for. The feed's own `<title>` echoes the query *as executed*:
214```xml
215<title>arXiv Query: search_query=all:badfield:xyz&amp;id_list=&amp;start=0&amp;max_results=1</title>
216```
218So a typo in a prefix (`author:` instead of `au:`, `abstract:` instead of `abs:`) degrades a targeted
219search into a full-text one with no warning. Use only the prefixes in the table above, and check the
220feed `<title>` against the query you sent before trusting the results.
222**A malformed parameter returns an error dressed as a result.** `start=notanumber` returns HTTP
223**200**, `<opensearch:totalResults>1</opensearch:totalResults>`, and one `<entry>`:
225```xml
226<entry><title>Error</title><summary>start must be an integer</summary></entry>
227```
229An agent that reads `totalResults` as 1 and takes `entry[0]` reports a paper titled "Error". Check
230for `<title>Error</title>` before treating any entry as a paper. (Omitting both `search_query` and
231`id_list` does return HTTP 400, with the same Error entry.)
233**Throttling is not XML.** Exceed the rate limit and arXiv replies with the bare plain-text body
234`Rate exceeded.` -- 14 bytes, no feed, no Atom envelope. It arrives with HTTP **429**, and under
235sustained throttling the connection is dropped outright (curl reports `HTTP=000`). Since `curl -s`
236without `-f` prints the body whatever the status, a pipeline that goes straight to a parser sees a
237syntax error at line 1 column 0, which reads like a corrupt response rather than a pacing problem.
238Check the status and the raw bytes before concluding the API is broken; the fix is to wait, not to
239retry harder.
241This is easy to trigger -- the limit is one request per **three** seconds -- and **malformed requests
242are penalized harder than valid ones**: observed 2026-07-27, valid queries were being served
243normally while a repeated `start=notanumber` request stayed throttled for over 30 minutes. Do not
244retry a request that arXiv rejected; fix it first.
246**A genuine no-match is quiet and correct:** `totalResults` 0 and zero `<entry>` elements. An
247unknown arXiv ID in `id_list` behaves the same way -- `id_list=9999.99999` gives `totalResults` 0, no
248entry, no error. Report that as "not found in arXiv", not as a failed request.
250`scripts/arxiv_atom.py` exits non-zero on the Error entry and reports the echoed query, so a
251rewritten prefix surfaces instead of passing silently.

Failure Modes

None of these are HTTP errors. All verified 2026-07-27.

**An unknown field prefix is silently rewritten to all:.** search_query=badfield:xyz does not fail -- arXiv reinterprets it and runs all:badfield:xyz, returning plausible hits for a query you did not ask for. The feed's own <title> echoes the query as executed:

<title>arXiv Query: search_query=all:badfield:xyz&amp;id_list=&amp;start=0&amp;max_results=1</title>

So a typo in a prefix (author: instead of au:, abstract: instead of abs:) degrades a targeted search into a full-text one with no warning. Use only the prefixes in the table above, and check the feed <title> against the query you sent before trusting the results.

A malformed parameter returns an error dressed as a result. start=notanumber returns HTTP 200, <opensearch:totalResults>1</opensearch:totalResults>, and one <entry>:

<entry><title>Error</title><summary>start must be an integer</summary></entry>

An agent that reads totalResults as 1 and takes entry[0] reports a paper titled "Error". Check for <title>Error</title> before treating any entry as a paper. (Omitting both search_query and id_list does return HTTP 400, with the same Error entry.)

Throttling is not XML. Exceed the rate limit and arXiv replies with the bare plain-text body Rate exceeded. -- 14 bytes, no feed, no Atom envelope. It arrives with HTTP 429, and under sustained throttling the connection is dropped outright (curl reports HTTP=000). Since curl -s without -f prints the body whatever the status, a pipeline that goes straight to a parser sees a syntax error at line 1 column 0, which reads like a corrupt response rather than a pacing problem. Check the status and the raw bytes before concluding the API is broken; the fix is to wait, not to retry harder.

This is easy to trigger -- the limit is one request per three seconds -- and malformed requests are penalized harder than valid ones: observed 2026-07-27, valid queries were being served normally while a repeated start=notanumber request stayed throttled for over 30 minutes. Do not retry a request that arXiv rejected; fix it first.

A genuine no-match is quiet and correct: totalResults 0 and zero <entry> elements. An unknown arXiv ID in id_list behaves the same way -- id_list=9999.99999 gives totalResults 0, no entry, no error. Report that as "not found in arXiv", not as a failed request.

scripts/arxiv_atom.py exits non-zero on the Error entry and reports the echoed query, so a rewritten prefix surfaces instead of passing silently.

Raw lines 206 to 252
Runs code scripts/arxiv_atom.py :250
253## Common Categories
255| Category | Field |
256|----------|-------|
257| `cs.AI` | Artificial Intelligence |
258| `cs.CL` | Computation and Language (NLP) |
259| `cs.CV` | Computer Vision |
260| `cs.LG` | Machine Learning |
261| `stat.ML` | Machine Learning (Statistics) |
262| `q-bio` | Quantitative Biology |
263| `physics` | Physics (all subcategories) |
264| `math` | Mathematics (all subcategories) |
265| `econ` | Economics |
266| `eess` | Electrical Engineering and Systems Science |
268Full list: https://arxiv.org/category_taxonomy

Common Categories

CategoryField
cs.AIArtificial Intelligence
cs.CLComputation and Language (NLP)
cs.CVComputer Vision
cs.LGMachine Learning
stat.MLMachine Learning (Statistics)
q-bioQuantitative Biology
physicsPhysics (all subcategories)
mathMathematics (all subcategories)
econEconomics
eessElectrical Engineering and Systems Science

Full list: https://arxiv.org/category_taxonomy

Raw lines 253 to 269
270## Rate Limits
272- **At least 3 seconds between requests**, per the API usage guidance
273- Single connection at a time
274- Search results are cached daily -- same query won't show new results within 24 hours
275- For bulk data, use the OAI-PMH interface instead

Rate Limits

  • At least 3 seconds between requests, per the API usage guidance
  • Single connection at a time
  • Search results are cached daily -- same query won't show new results within 24 hours
  • For bulk data, use the OAI-PMH interface instead
Raw lines 270 to 276
277## Official sources reviewed 2026-09-30
279- https://info.arxiv.org/help/api/user-manual.html
280- https://info.arxiv.org/help/api/tou.html

Official sources reviewed 2026-09-30

  • https://info.arxiv.org/help/api/user-manual.html
  • https://info.arxiv.org/help/api/tou.html
Raw lines 277 to 280