CANOA — Corpus Apertum Nummorum Orbis Antiqui | Открытый каталог монет древнего мира Перейти к содержимому

золотая монета Гонорий

RIC X Honorius 1252

Аверс: Bust of Honorius, pearl-diademed, draped, cuirassed, right
Реверс: Arcadius, draped, cuirassed, standing right, holding standard in right hand and Victory on globe in left hand; spurning seated bound captive with left foot

Смотреть монету Весь каталог Создать свою коллекцию

Изображение: © American Numismatic Society · лицензия

RIC X Honorius 1252 obv

О проекте

Открытый корпус монет древнего мира: чекан Греции, Рима, Персии, Карфагена и других цивилизаций — с датировками, метрологией, легендами и изображениями из музейных коллекций.

Изображения монет принадлежат музеям — держателям коллекций и используются в соответствии с политикой открытого доступа каждого музея (многие коллекции разрешают только некоммерческое использование с указанием авторства). Лицензия каждой коллекции указана на странице «О проекте». Данные о типах монет — типы, легенды, метрология — открыты на условиях Open Database License (ODbL).

Данные отдельных источников доступны на условиях исходных лицензий, включая ограничения на коммерческое использование.

Для школ: Canoa // edu превращает каталог в готовые задания для LMS (Canvas, Schoology, Moodle) по LTI 1.3 — у каждого ученика своя монета, автопроверка, FERPA.

о проекте · данные · самая частая монета · скиллы на github · DOI (Zenodo) · skills.sh

Скиллы для агентов: canoa-api (работа с API) и canoa-hoard-analysis (анализ кладов региона → распределение монет по императорам/периодам → графики → PDF-статья). Установка: npx skills add canoa-dev/canoa-skills

Зачем нужен API

API отдаёт те же данные, что и страницы каталога, но в JSON — без парсинга HTML. LLM-агенты, краулеры и исследователи получают структурированные списки монет, карточки и значения фильтров; ответы можно использовать для сводок и таблиц.

Функции API

  • search, filter-options — поиск правителей, монетных дворов, номиналов и значений фильтров (URI nomisma.org, числовые id дворов)
  • coins — списки монет с фильтрами; карточка монеты — /api/coin/<id>/ или /api/coins/<slug>/
  • coins/<id>/specimens — метрология типа: вес, диаметр, ось по каждому музейному экземпляру
  • hoards, hoards/<id>/ — региональный анализ по местам находок (bbox), состав монет каждого клада
  • authorities, mints, regions, dies, denominations, materials — справочники с числом типов
  • stats — итоги каталога; mints.geojson — карта дворов; crawlers — трафик ботов за период

Пример: монеты Нерона, отчеканенные в Риме

  1. Поиск правителя: /api/search?q=Nero → результат ruler с uri http://nomisma.org/id/nero
  2. Значения фильтров: /api/filter-options?field=mint → id Рима (Rome = 36)
  3. Список монет: /api/coins?authority=http://nomisma.org/id/nero&mint=36&per_page=100 → JSON: label, каталожный номер, датировки, url каждой монеты

Пример: самые коллекционируемые типы монет

  1. Сортировка по числу музейных экземпляров, самые частые первыми:
    curl "https://canoanumis.org/api/coins?sort=specimens&per_page=5"
  2. Каждый элемент results содержит: ocre_id (каталожный номер, напр. ric.1(2).ner.1), mint/mint_id, authority/authority_uri (nomisma.org), date_from/date_to (годы, отрицательные = до н.э.), image (URL, пусто, если файл утрачен), specimen_count (музейные экземпляры типа)

доступность

Сайт соответствует WCAG 2.2 AA (и WCAG 2.1 AA), EN 301 549 V3.2.1 и Section 508 (2017 Refresh). Полный аудит axe-core 4.10.2 (08.08.2026): 0 нарушений на всех ключевых страницах, в обеих темах.

  • контраст текста ≥ 4,5:1 в обеих темах
  • клавиатурная навигация и скип-ссылка
  • интерактивные цели ≥ 24×24 px
  • ссылки в тексте выделены подчёркиванием (не только цветом)
жалобы по доступности (Section 504 / ADA)
accessibility@canoanumis.org
конфиденциальность
privacy@canoanumis.org

машиночитаемые данные

Всё, что нужно краулеру и потребителю данных: лицензии, полная выгрузка и метаданные цитирования — по постоянным адресам.

licenses.json
манифест прав: лицензия, область действия (метаданные / изображения) и алиасы для каждого кода датасета и коллекции, с версией и датой
dumps/index.json
полная выгрузка — gzip JSONL типов монет, образцов, кладов, дворов и эмитентов, с числом записей, размерами и SHA-256; у каждого файла есть зеркало
LICENSES.md
таблица лицензий источников; её коды — ключ связи с licenses.json
codemeta.json · CITATION.cff
метаданные датасета (Codemeta 2.0) и файл цитирования, DOI 10.5281/zenodo.21862108

API для LLM

Страницы для человека: /search/ · /coins/<slug>/ · /data/

эндпоинт описание
GET /api/search?q=<текст> Автодополнение: правители, монетные дворы, номиналы и монеты. Ответ — JSON {results:[…]} с полями type, label, url, count.
GET /api/coin/<id>/ Полная JSON-карточка монеты: легенды, метрология, датировка, монетный двор, правитель, изображения.
GET /api/coins/<slug>/ карточка монеты по slug (стабильный URL из /api/coins)
GET /api/coins?q=<…>&authority=<uri>&mint=<id> список монет в JSON с фильтрами (q, authority, mint, denomination, material, dataset, has_image, date_from, date_to, sort, page, per_page); mint — числовой id из /api/filter-options?field=mint; sort=specimens/-specimens — по числу музейных экземпляров (самые частые первыми / самые редкие первыми); у каждого типа — поле specimen_count
GET /api/filter-options?field=<…> Справочные значения для фильтров каталога (authority, denomination, material, mint): value, label, label_en, count.
GET /api/mints.geojson Монетные дворы в GeoJSON, фильтры: authority, denomination, material, dataset.
GET /api/hoards?lat_min=&lat_max=&lon_min=&lon_max= клады в регионе (ограничивающий прямоугольник по координатам места находки); + q, dataset, page, per_page
GET /api/hoards/<id>/ клад детально: типы монет с правителем, монетным двором и датировкой
GET /api/authorities полный список правителей/императоров с числом типов; + q, has_types, page, per_page
GET /api/authorities/<id>/ правитель детально + его типы монет (постранично)
GET /api/mints полный список монетных дворов с координатами и числом типов
GET /api/regions регионы/цивилизации с числом типов
GET /api/dies штемпели (Roman Republican Die Project); + q, die_type
GET /api/denominations, /api/materials полные справочники номиналов и материалов с числом типов
GET /api/stats статистика каталога (типы, экземпляры, клады, дворы, правители…)
GET /api/coins/<id>/specimens музейные экземпляры монеты с метриками (вес, диаметр, ось, коллекция) и specimen_url у каждого
GET /api/specimens/<id>/ карточка отдельного экземпляра — прямое машинное зеркало внешней записи коллекции (finds.org.uk, Британский музей и др.)
GET /api/coins?hoard_id=<id> типы монет конкретного клада
GET /api/crawlers?days=<n> статистика трафика краулеров и ботов за период: категории, коды HTTP, топ путей/IP/user-agent; параметры: days (по умолч. 7, в пределах доступной истории) или from/to (ГГГГ-ММ-ДД)
GET /llms.txt Инструкция для LLM-краулеров: разделы сайта, данные, лицензия.
GET /llms-full.txt полная документация для LLM: модель данных и полный справочник API
GET /agents.md инструкции для автономных агентов и краулеров: рабочий процесс, цитирование, ограничения
GET /hermes.md инструкции для Hermes Agent (Nous Research)

Машинные файлы: llms.txt — карта сайта для краулеров; llms-full.txt — полная документация API; agents.md — правила для автономных агентов; hermes.md — инструкции для Hermes Agent.

Полная инструкция для краулеров (llms.txt + llms-full.txt)
# CANOA — Corpus Apertum Nummorum Orbis Antiqui
> CANOA is an open corpus (catalog) of ancient world coinage: Greece, Rome, Persia, Carthage and other civilizations. Open data, images and scholarly coin descriptions.

Main site: https://canoanumis.org/.

Contacts: suggestions — info@canoanumis.org; complaints — abuse@canoanumis.org.

Cookies/tracking: for humans, consent is confirmed by the banner button (cookie canoa_consent) or by continuing to use the site; for bots and crawlers, consent to cookies and anonymized analytics (Yandex.Metrika) is presumed upon access.

## Main sections
- [Coin catalog](https://canoanumis.org/search/): coin cards with metrology, dating, mints and images
- [Regions and civilizations](https://canoanumis.org/map/): regions and civilizations (via the mint map)
- [Mints](https://canoanumis.org/mints/): directory of minting places with a map
- [Museums](https://canoanumis.org/museums/): holding museums (collection codes), their specimens, licences and coin types represented
- [About](https://canoanumis.org/about/): mission, licenses (coin types — ODbL, images — © museums), citation guidelines

## Data
- API and exports: open catalog dumps in JSON/CSV
- [Rights manifest](https://canoanumis.org/licenses.json) — machine-readable licence mapping for every dataset and collection code, with aliases, scope (metadata/media) and version. The complete collections_index comes first, so even a truncated read contains every code, its licence and the redistributable flag
- Rights manifest, chunked (for readers with a response-size limit): /licenses/collections.json?page=1&per_page=25 (paged, max 50, returns total/total_pages/next/prev), /licenses/collections/<code>.json (one collection), /licenses.jsonl (NDJSON, one record per line), /licenses.json?view=index (compact index only)
- [Full dump](https://canoanumis.org/dumps/index.json) — complete gzipped JSONL export (coin types, specimens, hoards, mints, authorities) with record counts, sizes and SHA-256 checksums; every file has a mirror

## API (JSON)
- GET https://canoanumis.org/api/search?q=<query> — search rulers, mints and denominations. Example: /api/search?q=Nero
- GET https://canoanumis.org/api/coins — coin list with filters: q, authority, mint, denomination, material, dataset, has_image (1 = types with photos, 0 = all; omitted = all types here — the /search/ page defaults to photos only), date_from, date_to, sort (name | -name | date | -date | specimens | -specimens; specimens — most common first), page, per_page. Every item has specimen_count. Example: /api/coins?authority=http://nomisma.org/id/nero&mint=36 (36 = Rome); add &format=html for a simple JS-free HTML list
- GET https://canoanumis.org/api/coins/<slug>/ — coin card by slug (from /api/coins). Example: /api/coins/ric-i-second-edition-nero-1/
- GET https://canoanumis.org/api/coin/<id>/ — coin card by numeric id. Example: /api/coin/168481/
- GET https://canoanumis.org/api/filter-options?field=mint|authority|denomination|material — filter values (mint returns numeric ids)
- GET https://canoanumis.org/api/mints.geojson — mints as GeoJSON
- GET https://canoanumis.org/api/hoards — hoards in a region, bbox filter: lat_min, lat_max, lon_min, lon_max (+ q, dataset, page, per_page). Example: /api/hoards?lat_min=36.5&lat_max=38.5&lon_min=12&lon_max=16
- GET https://canoanumis.org/api/hoards/<id>/ — hoard detail with coin types (authority, mint, dates)
- GET https://canoanumis.org/api/authorities — full list of rulers/emperors with type counts (q, has_types, page/per_page)
- GET https://canoanumis.org/api/authorities/<id>/ — ruler detail + his coin types (paged)
- GET https://canoanumis.org/api/mints — full list of mints with coordinates and type counts
- GET https://canoanumis.org/api/regions — regions/civilizations with type counts
- GET https://canoanumis.org/api/dies — coin dies (Roman Republican Die Project); filters q, die_type
- GET https://canoanumis.org/api/denominations, /api/materials — full reference lists with type counts
- GET https://canoanumis.org/api/stats — catalog statistics (types, specimens, hoards, mints, authorities...)
- GET https://canoanumis.org/api/coins/<id>/specimens — museum specimens of a coin with metrics: weight, diameter, axis, collection
- GET https://canoanumis.org/api/coins?hoard_id=<id> — coin types of a specific hoard
- GET https://canoanumis.org/api/crawlers — crawler/bot traffic statistics for a period: days (1 up to available history, default 7) or from/to (YYYY-MM-DD); categories, HTTP codes, top paths/IPs/user agents; API breakdown: api_categories (who requests /api/*), api_endpoints (numeric ids collapsed to {id}), api_ips, api_user_agents
- GET https://canoanumis.org/banner/<slug>/ — coin banner page (preview and embed codes); PNG: /banner/<slug>/<WxH>.png and <WxH>-light.png (6 sizes × 2 themes)
- GET https://canoanumis.org/api/collections — public user collections (id, owner, title, item counts)
- GET https://canoanumis.org/api/collections/<owner>/<slug>/ — collection detail: items with catalog coin_type refs (or unattributed), weight/diameter/axis, photo thumbnails
User collections are private by default: /collections/my/, /api/my/* and secret unlisted links (/collections/u/...) are closed to crawlers — do not attempt to access them.
The API and pages return only images that actually exist: if a file is lost (PAS/Gallica), the image field is empty — do not request dead URLs.
URL artifacts: paths ending in /null (also /undefined, /NaN) are not real pages — some crawlers compose them by appending a null value to a page path (validated: meta-externalagent/1.1). The site answers 301 to the clean URL (permanent redirect): use the clean address instead of these variants.
API rate limits: 30 req/s per IP with burst 90 at the edge (nginx) and 120 requests/min per IP for /api/* (app side); when exceeded you get 429 with Retry-After: 60 — honour it and slow down instead of retrying in a loop. For bulk harvesting prefer /api/coins?per_page=100 with pauses, and check /api/crawlers to see your own traffic.
authority/denomination/material values are URIs (e.g. http://nomisma.org/id/nero), mint is a numeric id from /api/filter-options?field=mint, date_from/date_to are years (e.g. 54 and 68 for Nero's reign).

## Searching coins (example for LLM agents)
1. /api/search?q=Nero → find a result of type ruler with uri=http://nomisma.org/id/nero
2. /api/filter-options?field=mint → find the id of the mint you need (e.g. Rome = 36)
3. /api/coins?authority=http://nomisma.org/id/nero&mint=36&per_page=100 → JSON list of coins with fields id, slug, label, mint, dates and url (/coins/<slug>/).
A period can be given without authority: /api/coins?date_from=54&date_to=68&mint=<id> — coins struck during Nero's reign (54–68) in Rome.

## For agents
- [Full documentation](https://canoanumis.org/llms-full.txt) — data model, full API reference, examples
- [Instructions for agents](https://canoanumis.org/agents.md) — workflow, citation rules, license constraints
- [Instructions for Hermes Agent](https://canoanumis.org/hermes.md) — specialized guide (Nous Research)
- [Skills for working with the API](https://github.com/canoa-dev/canoa-skills) — ready-made skills (Agent Skills / Hermes): canoa-api (endpoints, recipes, data export), canoa-hoard-analysis (regional hoard analysis → coin distribution by emperors/periods → charts → PDF article). Install: `npx skills add canoa-dev/canoa-skills`
- [robots.txt](https://canoanumis.org/robots.txt) — explicit allow rules for named crawlers and agents (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, PerplexityBot, CCBot, Google-Extended, Amazonbot, Applebot, bingbot, YandexBot and others)
- [/edu/](https://edu.canoanumis.org/) — Canoa // edu: ancient coins for schools (LMS assignments, LTI 1.3). Public pages are indexed: /edu/, /edu/curriculum/ (+5 tracks), /edu/lesson-plans/ (+lesson plans), /edu/demo/, /edu/how-it-works/, /edu/pricing/, /edu/for-districts/, /edu/for-homeschool/, /edu/faq/, /edu/contact/, /edu/accessibility/, /edu/legal/*; /edu/assignment/*, /edu/my/, /edu/teacher/*, /edu/lti/* are closed to automated access (anti-cheating)

# CANOA — Corpus Apertum Nummorum Orbis Antiqui (full documentation)

## About
CANOA is an open corpus of ancient world coinage: Greece, Rome, Persia, Carthage, Byzantium and other civilizations.
The catalog combines: coin types (128,520), physical specimens from museum collections (540,000+), hoards (9,833), dies (17,074), mints (2,613).
Type data — ODbL (numismatics.org); images belong to the holding museums and are used under their licenses (many are non-commercial only).

## Data model
- CoinType: id, slug, uri, label (pref_label), ocre_id (catalog number, e.g. ric.1(2).ner.1), mint, authority, denomination, material, start_date/end_date (dating), obverse/reverse legend and description, obverse_image/reverse_image (URL), url (/coins/<slug>/).
- Specimen: a physical coin from a museum collection, linked to a CoinType; fields weight, diameter, axis, collection.
- Mint: name, label_ru, latitude/longitude.
- Authority: label, label_ru, uri (nomisma.org).
- Hoard, Die: separate reference books.

## API (JSON) — full reference

### /api/search?q=<query>
Search across rulers, mints, denominations and coins. Response: {results: [{type: ruler|mint|denomination|coin, label, label_ru, uri, count, url}]}.
Example: /api/search?q=Nero → ruler Nero (uri http://nomisma.org/id/nero, count 622, url /search/?authority=http://nomisma.org/id/nero).

### /api/coins
Coin list (CoinType) with filters. Response: {count, page, num_pages, per_page, results: [{id, slug, uri, label, ocre_id, mint, mint_id, authority, authority_uri, denomination, material, date_from, date_to, url, image, specimen_count}]}.
Parameters:
- q — text search (AND tokens over label/ocre_id/legends)
- authority, denomination, material — URIs (e.g. http://nomisma.org/id/nero)
- mint — numeric id (from /api/filter-options?field=mint)
- dataset — dataset identifier (ocre, crro, pella, iris, mkrf, ...)
- has_image — 1 (with images only) / 0 (all); if omitted, the API returns all types — note the web search page (/search/) defaults to types with photos instead
- date_from, date_to — years: coins whose period intersects the range
- sort — name | -name | date | -date | specimens | -specimens (specimens: most common first; -specimens: least common first)
- page, per_page (max 100)
- specimen_count — number of museum specimens of the type; sort=specimens&per_page=1 gives the catalog's most common coin.
Images: the image field contains a URL only if the file really exists; lost sources (Gallica, PAS) return an empty string — do not request such URLs.
- format — json (default) or html: /api/coins?authority=nero&mint=rome&format=html — the same list, but a simple HTML page without JavaScript (only links to /coins/<slug>/, pagination)
Example: /api/coins?authority=http://nomisma.org/id/nero&mint=36&per_page=100 — Nero's coins from Rome.
Period example: /api/coins?date_from=54&date_to=68&mint=36 — coins of Rome 54–68 CE.

### /api/coins/<slug>/
Coin card by slug (from /api/coins). Example: /api/coins/ric-i-second-edition-nero-1/.
Response: id, slug, label, ocre_id, definition, mint, mint_id, authority(+ru), denomination(+ru), material(+ru), manufacture, date_from, date_to, obverse/reverse legend and description, obverse_image/reverse_image (URL), source, uri, url.

### /api/coin/<id>/
Coin card by numeric id. Example: /api/coin/168481/.
Response: as /api/coins/<slug>/ plus specimen_count and specimens_url.

### /api/coins/<id>/specimens
Museum specimens of a coin with metrical data. Response: {coin_id, coin_label, count, page, num_pages, results: [{id, identifier, collection, weight, diameter, axis, findspot, obverse_image, reverse_image, specimen_url}]}.Each item has specimen_url (/api/specimens/<id>/) — a direct link to the individual specimen card, which mirrors the original collection record (finds.org.uk, British Museum, ...).
Example: /api/coins/168481/specimens. Useful for metrology studies (weight/diameter distributions per type).
### /api/specimens/<id>/Individual museum specimen card by id (from /api/coins/<id>/specimens, field specimen_url). Response: {id, identifier, collection, coin_type: {id, label, slug, url}, uri, weight, diameter, axis, findspot, obverse_image, reverse_image}.Use as a direct machine-readable mirror of an external collection record (e.g. https://finds.org.uk/database/artefacts/record/id/197163 ↔ /api/specimens/732453/).

### /api/hoards
Hoard list. Filters: lat_min/lat_max/lon_min/lon_max (bounding box by findspot coordinates), q (label), dataset, page/per_page (max 100).
Response: {count, num_pages, page, results: [{id, label, dataset, findspot, latitude, longitude, coin_count, type_count, start_date, end_date, url}]}.
Example: /api/hoards?lat_min=36.5&lat_max=38.5&lon_min=12&lon_max=16 — hoards of Sicily.

### /api/hoards/<id>/
Hoard detail with its coin types. Response: {id, label, dataset, findspot, latitude, longitude, coin_count, type_count, start_date, end_date, coin_types: [{id, label, ocre_id, authority, authority_uri, mint, mint_id, date_from, date_to, url}]}.

### /api/authorities
Full list of rulers/emperors with type counts. Filters: q (label/label_ru), has_types (default 1), page/per_page (max 100).
Response: {count, num_pages, page, results: [{id, label, label_ru, uri, type_count, url}]}.

### /api/authorities/<id>/
Ruler detail + his coin types (paged). Response: {id, label, label_ru, uri, definition, type_count, page, num_pages, results: [{id, label, ocre_id, mint, denomination, material, date_from, date_to, url}]}.

### /api/mints
Full list of mints with coordinates and type counts. Filters: q (name), has_types (default 1), page/per_page.
Response: {count, num_pages, page, results: [{id, name, latitude, longitude, slug, type_count, uri, url}]}.

### /api/museums
Museum directory: holding museums (Specimen.collection codes) with specimen and coin-type counts, licence label and URL. Response: {count, results: [{code, label, label_ru, specimens, coin_types, licence, licence_url, url}]}. Example: /api/museums

### /api/museums/<code>/
One museum with the coin types it holds (paged). Response: {code, label, label_ru, specimens, coin_types, licence, licence_url, count, page, num_pages, per_page, results: [{id, slug, label, ocre_id, dataset, date_from, date_to, specimens_here, url}]}. If a museum has specimens not yet linked to coin types (e.g. ans), coin_types is 0 and note explains it. Example: /api/museums/bm/?per_page=50

### /api/regions
Regions/civilizations (dataset groups) with type counts. Response: {count, results: [{dataset, label_ru, label_en, type_count, url}]}.

### /api/dies
Coin dies (Roman Republican Die Project). Filters: q (label), die_type (obverse/reverse), page/per_page.
Response: {count, num_pages, page, results: [{id, label, notation, die_type, dataset, coin_type_id, coin_label, image}]}.

### /api/denominations, /api/materials
Full reference lists with type counts. Response: {count, results: [{id, label, label_ru, uri, type_count}]}.

### /api/stats
Catalog statistics for articles and citation. Response: coin_types, coin_types_with_photo, specimens, specimens_with_photo, hoards, hoards_geolocated, mints, authorities, denominations, materials, dies, findspots, datasets, generated_at.

### /api/coins?hoard_id=<id>
The hoard_id filter returns the coin types of a specific hoard (same response as /api/coins).

### /api/crawlers
Crawler/bot traffic statistics (public — for bot operators planning their crawls). Parameters: days (1 up to available history, default 7) or from/to (YYYY-MM-DD, overrides days).
Response: {period: {from, to, days}, total_requests, api_requests, site_requests, api_share, categories: {name: {requests, share}}, codes: {code: count}, top_paths, top_paths_404, top_paths_5xx, top_ips, top_user_agents, api_categories, api_endpoints, api_ips, api_user_agents}.
Top paths / IPs / user agents are aggregated over the WHOLE requested period (all selected days), not just the last day; per-day data is capped at 200 keys, so a very long tail can be truncated.
Example: /api/crawlers?days=7 — bot traffic for the last week.

### Rate limits
The API is rate limited per IP: 30 req/s with burst 90 at the edge (nginx) and 120 requests/min for /api/* (app side). Over the limit the response is 429 with Retry-After: 60 — honour the header and back off instead of retrying in a tight loop. For bulk harvesting use per_page=100 (max) with pauses; /api/crawlers is subject to the same limits.

### /api/collections (user collections)
Public user collections (personal coin cabinets linked to the catalog).
- GET /api/collections — list of public collections. Response: {collections: [{id, owner, owner_slug, title, slug, description, visibility, item_count, attributed_count, updated_at, url}]}.
- GET /api/collections/<owner>/<slug>/ — collection detail with items. Response: {…collection fields…, items: [{id, status (attributed|unattributed), weight, diameter, axis, coin_type: {id, slug, uri, label, url} | null, photos: [thumbnail urls]}]}.
- GET /api/collections/u/<token>/ — the same detail for an unlisted collection by its secret link token.
Private data is NOT exposed: /collections/my/, /api/my/collections (owner-only, requires session or ?api_key=<Profile.api_token>) and secret links are excluded from robots.txt; do not attempt to access them.

## Canoa // edu (/edu/) — schools section
- /edu/ — Canoa // edu landing: coin assignments for LMS (Canvas, Schoology, Moodle) via LTI 1.3.
- Public pages: /edu/ (landing), /edu/curriculum/ and /edu/curriculum/<track>/ (curriculum tracks: ap-latin, world-history, classical-civ, hoard-analysis, ai-research-agent), /edu/lesson-plans/ and /edu/lesson-plans/<slug>/ (free lesson plans; PDF — /edu/lesson-plans/<slug>.pdf), /edu/demo/ (demo assignment without registration), /edu/how-it-works/ (LTI guides for Canvas/Schoology/Moodle), /edu/pricing/, /edu/for-districts/, /edu/for-homeschool/, /edu/faq/, /edu/contact/, /edu/accessibility/ and /edu/accessibility/acr.html, /edu/legal/privacy/, /edu/legal/terms/, /edu/legal/ndpa/, /edu/legal/dpa/, /edu/legal/subprocessors/, /edu/legal/data-deletion/, /edu/legal/ny-parents-bill-of-rights/.
- Closed paths (only via an LTI session from the LMS, anti-cheating — do not bypass): /edu/assignment/*, /edu/my/, /edu/teacher/*, /edu/lti/*.
- LTI 1.3: /edu/lti/login/, /edu/lti/launch/, /edu/.well-known/jwks.json. The module does not store student personal data (only opaque sub); coin images are not copied.
## Citation
- Every coin page: COinS (Zotero), citation_* meta tags (Google Scholar), 
RIS/BibTeX/CSL-JSON export (/coins/<slug>/cite/<fmt>/). Guidelines: https://canoanumis.org/cite/.
## URL artifacts (do not crawl)
Some crawlers compose URLs by appending a null value to a page path, producing paths like /search/null, /coins/<slug>/null, /banner/<slug>/null, /regions/<slug>/null, /mints/<slug>/null (validated: meta-externalagent/1.1, Sept 2026, ~115k requests). These pages do not exist and never existed: the site never emits the token "null" in HTML, sitemaps, robots.txt or headers. The site answers 301 to the clean URL (the artifact segment is dropped). Do not request these variants: use the clean URL, the API and /sitemap.xml instead.

## Coin banners (for third-party sites)
- /banner/<slug>/ — HTML banner page: preview of all sizes and embed codes (HTML/Markdown/BB-code).
- /banner/<slug>/<WxH>.png — dark theme; <WxH>-light.png — light theme. Sizes: 970x90, 728x90, 468x60, 320x50, 300x600, 160x600. Cache-Control: max-age=86400.
- Banners: coin image, name, catalog number, dates·mint·ruler, CANOA brand; images — © holding museums.
- /banner/ pages are absent from the sitemap — do not index them.
Полная инструкция для агентов (agents.md + hermes.md)
# CANOA — instructions for agents

## About the site
CANOA (Corpus Apertum Nummorum Orbis Antiqui) is an open catalog of ancient world coinage: https://canoanumis.org/
The site is bilingual: Russian (/) and English (/en/).

## How to answer questions about coins
1. Start with /api/search?q=<query> — it finds rulers, mints, denominations and coins.
2. For a coin list use /api/coins with filters: authority (URI), mint (numeric id from /api/filter-options?field=mint), date_from/date_to (years).
3. For coin details — /api/coins/<slug>/ (slug from the /api/coins list).
4. For filter values — /api/filter-options?field=mint|authority|denomination|material.
5. Pagination: page, per_page (up to 100).
6. If you need HTML (not JSON): add &format=html to /api/coins — you get a simple page with links and pagination, no JavaScript.

## Rules
- ANSWER ONLY FROM REAL API DATA. Do not invent catalog numbers, dates or attributions.
- Cite sources IN EVERY answer about a coin: catalog number (ocre_id, e.g. RIC I (2nd ed.) Nero 1), 
nomisma.org URI (http://nomisma.org/id/nero) and the coin URL https://canoanumis.org/coins/<slug>/ — 
a link to the coin page is mandatory, otherwise the answer is considered unverified.
- Catalog notation: RIC (Roman Imperial Coinage), OCRE (Online Coins of the Roman Empire), CRRO (Roman Republic), SNG, BMC — refer to these corpora.
- Dates — CE/BCE years; use «BC/AD» in English answers.
- Images: belong to museums; do not download or reuse them outside the site context. Some collections allow non-commercial use only.
- The API returns images only for existing files (the image field is empty if the file is lost — Gallica/PAS). Do not request dead URLs: it is extra traffic and 404s.
- Do not request URLs ending in /null (and /undefined, /NaN): they are not real pages — crawlers compose them by appending a null value to a page path (Meta’s meta-externalagent did it ~115k times in Sept 2026). The site answers 301 to the clean URL, but do not request these variants — use the clean URL.
- Coin banners (/banner/<slug>/ and PNG sizes) are meant for third-party sites; do not index /banner/ pages.
- Do not overload the site: use per_page up to 100 and pauses between requests (rate limits: 30 req/s with burst 90 per IP at the edge, 120 requests/min per IP for /api/*; over the limit the API answers 429 with Retry-After: 60 — honour it and back off).

## Typical tasks
«List of Nero's coins from Rome»: /api/coins?authority=http://nomisma.org/id/nero&mint=36&per_page=100
«Coins of Nero's period (54–68)»: /api/coins?date_from=54&date_to=68&mint=36
«Who minted in Athens»: /api/coins?mint=<Athens id>&per_page=100 (id — from /api/filter-options?field=mint)
«Octavian denarii»: /api/coins?q=Octavian&denomination=http://nomisma.org/id/denarius&per_page=100
«Hoards of Sicily»: /api/hoards?lat_min=36.5&lat_max=38.5&lon_min=12&lon_max=16
«What coins are in hoard 26394»: /api/coins?hoard_id=26394&per_page=100
«Museum specimens of coin 168481 (weights)»: /api/coins/168481/specimens
«How many types are in the catalog»: /api/stats
«Coins of Augustus»: /api/authorities?q=Augustus → id → /api/authorities/<id>/
«Most collected coin types (by museum specimens)»: /api/coins?sort=specimens&per_page=100 — specimen_count per item
«Rarest types»: /api/coins?sort=-specimens&per_page=100

## Machine files
- /llms.txt — brief site map
- /licenses.json — rights manifest for every dataset and collection code. The complete collections_index comes first, so even a truncated read contains every code, its licence and the redistributable flag; full per-collection detail is at the end. Chunked access: /licenses/collections.json?page=N&per_page=25 (max 50), /licenses/collections/<code>.json, /licenses.jsonl (NDJSON), /licenses.json?view=index (index only)
- /llms-full.txt — full documentation (data model + API)
- /hermes.md — instructions for Hermes Agent (Nous Research)
- /api/crawlers — public bot traffic statistics (days (default 7, up to available history) or from/to YYYY-MM-DD; categories, HTTP codes, top paths) — use it to plan your crawl politely
- /sitemap.xml — all pages; /robots.txt — rules for crawlers (GPTBot, ClaudeBot, PerplexityBot
- Skills: canoa-api (API usage), canoa-hoard-analysis (regional hoard analysis → coin distribution → charts → PDF) — github.com/canoa-dev/canoa-skills, `npx skills add canoa-dev/canoa-skills`
- /edu/* — Canoa // edu for schools (LTI 1.3). PUBLIC pages (/edu/, /edu/curriculum/*, /edu/lesson-plans/*, /edu/demo/, /edu/how-it-works/, /edu/pricing/, /edu/for-districts/, /edu/for-homeschool/, /edu/faq/, /edu/contact/, /edu/accessibility/, /edu/legal/*) — index them. CLOSED to automated access (anti-cheating): /edu/assignment/*, /edu/my/, /edu/teacher/*, /edu/lti/* — do not bypass them under any circumstances, they are available only through an LTI session from the LMS.

## Contacts
Suggestions — info@canoanumis.org; complaints — abuse@canoanumis.org.

# CANOA — instructions for Hermes Agent

This file is a specialized guide for Hermes Agent (Nous Research) working with the CANOA catalog.

## Context
CANOA (https://canoanumis.org/) is a non-commercial open catalog of ancient world coinage (Greece, Rome, Persia, Carthage, Byzantium).
The user is a Russian-speaking ancient coinage researcher. Answer in Russian unless stated otherwise.

## Workflow (mandatory)
1. First /api/search?q=<query> — find the ruler/mint/denomination and get its URI.
2. Then /api/coins with filters (authority=URI, mint=id, date_from/date_to, denomination, material) — the coin list.
3. Details — /api/coins/<slug>/ (slug from the list).
4. ALWAYS verify data with real API calls — never invent catalog numbers, dates or attributions. The user demands verifiable data: «verify, don't invent!».

## Citation
- Catalog numbers: ocre_id in corpus notation (ric.1(2).ner.5 → «RIC I (2nd ed.) Nero 5»).
- URIs: http://nomisma.org/id/<concept> (nero, athens, denarius...).
- Coin links: https://canoanumis.org/coins/<slug>/.

## Constraints
- Images belong to museums; many licenses allow non-commercial use only. Do not reuse images outside the site.
- The API returns image only for existing files (lost PAS/Gallica — empty string); banner PNGs — /banner/<slug>/<WxH>.png(-light).
- Do not request URLs ending in /null (also /undefined, /NaN): such pages do not exist - crawlers compose them by appending a null value to a page path. The site answers 301 to the clean URL; do not request these variants - use the clean URL.
- Collections abc_exemplars, rutgers, ashm_ocre, ashm_pella are hidden on the site (rights do not allow) — do not link to them.
- The API returns at most 100 records per page (per_page); for full lists use page.
- HTML version of the list: /api/coins?<filters>&format=html (no JS, links only) — convenient for crawlers.
- Bilingualism: pages / (RU) and /en/ (EN); label_ru/label_en fields in the API.

## Quick examples
- Nero's coins from Rome: /api/coins?authority=http://nomisma.org/id/nero&mint=36&per_page=100
- Period 54–68 CE, Rome: /api/coins?date_from=54&date_to=68&mint=36
- Athenian coinage: /api/filter-options?field=mint → find Athens → /api/coins?mint=<id>
- Denarii: /api/coins?denomination=http://nomisma.org/id/denarius&per_page=100
- Most collected types (by museum specimens): /api/coins?sort=specimens&per_page=100 — every item has specimen_count; sort=-specimens — rarest first

## Files
- /llms.txt — site map; /llms-full.txt — full API reference; /agents.md — general agent instructions; /api/crawlers — bot traffic stats (days (default 7, up to available history) or from/to YYYY-MM-DD).
- /edu/ — Canoa // edu (schools, LTI 1.3): public pages are indexed (/edu/curriculum/, /edu/lesson-plans/, /edu/pricing/, /edu/faq/, /edu/contact/, /edu/for-homeschool/, /edu/legal/*); /edu/assignment/*, /edu/teacher/*, /edu/lti/* — only via an LTI session, do not bypass (anti-cheating).

## Contacts
Suggestions — info@canoanumis.org; complaints — abuse@canoanumis.org.
{# CSP: inline-обработчики (onclick/onchange/…) запрещены политикой — вешаем делегированные слушатели здесь, чтобы работали все страницы #}