API даних Nordic Crypto
Відкритий JSON-фід сайту для застосунків та інших інструментів. Без облікового запису й без API-ключа. Він створюється заново під час кожного збирання сайту.
Вузол Bitcoin Lightning#
Nordic Crypto підтримує вузол Bitcoin Lightning. Псевдонім — Nordic Crypto. Реалізація — LND, у легкому режимі клієнта Neutrino. Без облікового запису й без API-ключа.
| Вузол | Стан | Реалізація |
|---|---|---|
| Bitcoin Nordic Crypto | синхронізація / канали ще не відкриті | LND (легкий клієнт Neutrino) |
URI вузла. Скопіюйте рядок. Перший рядок — IPv4. Другий — той самий вузол через IPv6, [2a01:4f8:c01e:36d9::1]:9735.
0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9@91.99.122.75:9735 0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9@[2a01:4f8:c01e:36d9::1]:9735
Публічний ключ.
0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9
Адреса для поповнення в ланцюгу.
bc1p7zgqhev2zzn45mefzq59gq983379lr0rsymhl558rza9k05y7vsq9mglx7
Сервери Electrum (BCH і Nexa)#
Nordic Crypto підтримує сервери Electrum на основі Rostrum для Bitcoin Cash і Nexa. Гаманці та застосунки можуть отримувати з них баланси, транзакції, UTXO, токени й останній блок, а також надсилати транзакції в мережу. Без облікового запису й без API-ключа.
| Сервер | Стан | Висота блоку | Відгук | Версія |
|---|---|---|---|---|
Bitcoin Cashwss://electrum-bch.nordiccrypto.no:50004 | – | – | – | – |
Nexawss://electrum-nexa.nordiccrypto.no:20004 | – | – | – | – |
Вони працюють за протоколом Electrum (JSON-RPC) на стандартних портах: WebSocket із TLS (wss) — 20004 для Nexa і 50004 для Bitcoin Cash; TLS поверх TCP — 20002 для Nexa і 50002 для Bitcoin Cash. Незашифрованих портів немає. У клієнтській бібліотеці вкажіть хост, порт і схему (wss або tcp_tls). Методи перелічено в документації протоколу Rostrum.
websocat wss://electrum-bch.nordiccrypto.no:50004
{"id":1,"method":"blockchain.headers.subscribe","params":[]}
Сервери працюють на власних повних вузлах (Bitcoin Cash Node і Nexa), тож їхні відповіді не залежать від третіх сторін. Клієнт, який не виконує SPV-перевірок, однаково довіряє нам щодо вмісту ланцюжка. Гарантії доступності немає. Тримайте у списку другий сервер і перемикайтеся, якщо один не відповідає протягом кількох секунд.
З чого почати#
- Каталог — усі ендпоїнти та приклади URL.
- OpenAPI (також у форматі YAML).
- llms.txt — інструкції простою мовою.
- Каталог API (linkset за RFC 9727; копія в .json).
Отримати новини й розсилку#
curl -fsS https://nordiccrypto.no/api/v1/news.json curl -fsS https://nordiccrypto.no/api/v1/newsletters.json curl -fsS https://nordiccrypto.no/api/v1/newsletters/002.json
Абсолютні URL вказують на публічний сайт, від кореня домену: https://nordiccrypto.no/api/v1/news.json.
Опитування нових матеріалів#
/api/v1/news/latest.json містить 25 найновіших опублікованих матеріалів, лише з id, published, country, source, source_name, language_code, own_story, заголовками (title, title_en, title_i18n) і посиланнями (url, html_url, api_url). Значення ті самі, що в news.json, у тому самому порядку (спочатку нові). Файл лишається невеликим, хоч би як ріс архів, тож застосунок або push-сервер може опитувати його кожні кілька хвилин. Надішліть If-None-Match з останнім ETag; GitHub Pages відповідає 304 Not Modified, доки файл не змінився. Порівнюйте id з тими, що ви вже бачили; generated_at змінюється під час кожного збирання.
curl -fsS https://nordiccrypto.no/api/v1/news/latest.json
Ринкові ціни#
Ціни північних бірж — це ринкові дані, а не інвестиційна порада. /api/v1/markets.json перелічує кожну пару: символ, базову валюту й валюту котирування, останню ціну, bid і ask (якщо біржа їх публікує), id, назву й країну біржі, fetched_at, URL джерела та обсяг (якщо біржа його публікує). volume_base — обсяг у базовому активі без зазначеного періоду (Firi). volume_base_24h і volume_quote_24h — за останні 24 години (NBX). Відсутній обсяг дорівнює null, а не нулю. Валюти котирування: NOK, SEK, DKK і EUR. Одна біржа: /api/v1/markets/{exchange}.json (firi, nbx, coinmotion). Один актив: /api/v1/markets/by-asset/{symbol}.json. Майданчики без публічного тикера перелічено в skipped, і вигаданої ціни для них немає.
/api/v1/markets/aggregated.json містить один рядок на пару. BTC-NOK не усереднюється з BTC-EUR. last — середнє арифметичне опублікованих останніх цін. mid — середнє значення (bid+ask)/2, воно не змішується з last. price дорівнює last, якщо є хоч одна остання ціна, інакше mid. min і max беруться з того самого ряду. VWAP немає. Обсяг підсумовується лише в межах того самого поля й тієї самої пари. logo_url — SVG із набору cryptocurrency-icons (CC0 1.0), якщо актив у ньому є; віддається за адресою /api/v1/markets/logos/{symbol}.svg, інакше null. Файл для активу повторює aggregated і логотип.
Збирання запитує дані в бірж. .github/workflows/markets-refresh.yml перезаписує JSON у gh-pages приблизно раз на годину, разом з агрегованим файлом та іконками. Сторінка ринків перезавантажує цей файл і оновлює Firi та Coinmotion просто в браузері, бо їхні API надсилають Access-Control-Allow-Origin: *. NBX цього не робить, тож її рядки беруться з файлу. Той самий документ у гілці gh-pages: raw.githubusercontent.com/jQrgen/nordic-crypto/gh-pages/api/v1/markets.json.
curl -fsS https://nordiccrypto.no/api/v1/markets.json curl -fsS https://nordiccrypto.no/api/v1/markets/aggregated.json
Статистика відвідувань#
Сумарні відвідування й перегляди сторінок із Cloudflare Web Analytics (без cookie). /api/v1/stats.json містить рядки daily, weekly (ISO) і monthly лише з visits і pageviews. Дні рахуються за UTC. Файл порожній, доки не налаштовано сайт Web Analytics і токен оновлення. .github/workflows/stats-refresh.yml перезаписує його в gh-pages приблизно раз на добу.
curl -fsS https://nordiccrypto.no/api/v1/stats.json
Доповіді#
Публічні доповіді про біткоїн, криптовалюти й блокчейн, проведені в Норвегії, Швеції, Данії, Фінляндії, Ісландії, на Фарерських островах, у Гренландії та на Аландських островах, містяться в /api/v1/talks.json, від нових до старих. Одна доповідь: /api/v1/talks/{id}.json. Одна країна: /api/v1/talks/by-country/{country}.json (NO, SE, DK, FI, IS, FO, GL, AX). description написано нами. title, дати, тривалість, канал і доповідачі беруться з платформи за адресою source_url. Поле, яке платформа не вказала, дорівнює null. embed дорівнює true, лише якщо відповідь oEmbed платформи містить плеєр. HTML-сторінка завантажує плеєр лише після кліку: YouTube через youtube-nocookie.com, Vimeo через player.vimeo.com. event_id і calendar_event_id — той самий id події, якщо доповідь до неї прив’язано. Ця подія міститься в /api/v1/events/{id}.json (і в /api/v1/events/previous.json, якщо вона вже минула), а її сторінка — /calendar/{id}/. talk_ids у події перелічує ці доповіді. unlink_reason заповнюється, якщо на сторінці відео не вказано день або місце; тоді event_id дорівнює null. speaker_ids — id з розділу «Хто є хто» в тому самому порядку, що й speakers. Картка особи за адресою /api/v1/orgchart/{id}.json перелічує ці доповіді та будь-яку афіліацію, зазначену на сторінці доповіді.
Кілька видань, одна новина#
Новина має одне основне видання. Інші видання, що писали про ту саму подію, вказано в also_covered_by. sources перелічує спершу основне видання, потім решту. Кожне видання має outlet, outlet_name, url, title (заголовок цього видання), published, lang, country, source_type і logo. source_type має значення national, regional (регіональні й місцеві), official (правосуддя й державні органи: поліція, прокуратура, суди, регулятори) або international. coverage.count — кількість видань. coverage.by_country і coverage.by_source_type — кількості й частки для діаграм. Кожен тип джерела присутній, навіть із нульовою кількістю. html_url — наша сторінка цієї новини. url — основне видання. Kaupr залишається лише джерелом новин.
Події#
Майбутні й минулі події містяться в /api/v1/events.json. Календарі Luma беруться з публічної iCal-адреси підписки кожного джерела подій (ics). Сторінки міст, сторінки категорій і discover API Luma не використовуються. Окрема сторінка події Luma читається як JSON-LD schema.org. Організаторів і місця Eventbrite читають через API v3, якщо на сервері є EVENTBRITE_TOKEN. Цього токена немає ні у фіді, ні в репозиторії. Без нього використовується JSON-LD сторінки події. Однакові назва, дата й місце — це одна подія. Завершені події залишаються у фіді. description.text — власний текст організатора, description.lang — мова цього тексту, а description.source_url — сторінка, звідки його взято. description.i18n містить переклад, якщо він у нас є. Поле дорівнює null, якщо джерело не мало опису. Оголошення хижацьких конференцій не є джерелом. Kaupr ніколи не буває спонсором.
Мови#
Англійська — поле за замовчуванням (summary, title, text). Опубліковані нами переклади містяться в summary_i18n, title_i18n, subtitle_i18n, note_i18n, text_i18n і about_i18n з ключами nn, nb, sv, da, fi і is. Інші мови сайту використовують англійське поле, доки не опубліковано переклад. У новині title залишається заголовком джерела, title_en — наш англійський заголовок, а title_i18n — наш заголовок північними мовами сайту. Сторінки показують спершу заголовок мовою сторінки, а під ним — заголовок джерела, якщо вони різняться. Власний заголовок кожного видання в sources залишається мовою цього видання. Дати — у форматі ISO 8601.
/api/v1/languages.json перелічує всі мови сайту з полями code, native_name, english_name, rtl, html_lang і home. /api/v1/geo-language.json — відповідність «країна → мова», яка використовується під час першого відвідування. Країну за IP повідомляє tipworker GET /api/geo (Cloudflare request.cf.country). Нічого не зберігається. Cookie nc_lang, яку встановлює перемикач мови, завжди має пріоритет.
Логотипи джерел#
Кожне видання в /api/v1/sources.json має logo_url (абсолютний URL PNG або WebP, ніколи не SVG, або null) і logo (kind, file_url (оригінал, SVG або WebP), raster_url (те саме, що logo_url), source_url, author, license, license_url, credit, або null). Кожна новина має source_logo_url, щоб застосунок міг показати логотип видання поруч із заголовком. Логотипи взято з Wikimedia Commons (з ліцензією) або з сайту самого видавця. Це торговельні марки видавців; їх показують лише для того, щоб указати джерело заголовка. Логотип залишається null, доки редактор його не перевірить.
CORS#
GitHub Pages віддає ці файли із заголовком Access-Control-Allow-Origin: *, тож сторінка на іншому сайті може отримати їх через fetch(). GitHub Pages не застосовує власний файл заголовків. Використовуйте ім’я файлу з .json: відкриття каталогу не повертає JSON.
Редакційна політика#
Підпис — The Nordic Crypto team. Kaupr (kaupr.io) — лише джерело новин і ніколи не спонсор. Ніщо тут не є інвестиційною порадою.
Облікові записи бренду#
ios у /api/v1/meta.json — публічне запрошення TestFlight до iOS-застосунку Nordic Crypto. В App Store його немає. apple_tv повідомляє, що версія в TestFlight особливо підтримує Apple TV. apple_tv_i18n містить це коротке речення всіма мовами сайту. Назва бренду завжди Nordic Crypto.
/api/v1/meta.json містить social для iOS-застосунку. social.telegram — чат Nordic Crypto за адресою https://t.me/nordiccryptochat. social.x — обліковий запис бренду за адресою https://x.com/nordiccryptobot (@nordiccryptobot), також указаний як urls.x. urls.telegram повторює URL чату. urls.rss — англійська стрічка новин за адресою /rss.xml. Головна сторінка кожної мови має власний rss.xml. urls.newsletter — сторінка підписки на цьому сайті. label — коротка назва (Telegram, X). name — текст посилання англійською. name_i18n містить nn, nb, sv, da, fi і is. Інші мови сайту використовують name.
Сповіщення в браузері#
Коли в workers/push/public.json указано URL Worker, кнопка внизу кожної сторінки вмикає Web Push. Доти сторінка повідомляє, що сервіс не ввімкнено, і не звертається до жодного Worker. Підписки зберігаються в Cloudflare Worker, а не в цьому статичному фіді. Після публікації GET /api/push/feed.json на цьому Worker перелічує ті самі пакети (заголовок, короткий опис, URL, країна й переклади, якщо вони є). Одна публікація — один пакет. У документі зазначено "apns": "not implemented": Apple Push Notification service не підтримується. iOS-застосунок може періодично опитувати фід. URL Worker задається під час розгортання workers/push/; це не шлях на цьому сайті. Підписок у фіді немає. /api/v1/news.json цього API залишається повним списком опублікованих новин.
Ендпоїнти#
Кожен ендпоїнт — простий GET-запит статичного JSON-файлу.
| Шлях | Повертає |
|---|---|
/api/v1/index.json | Discovery document: every endpoint, with example URLs. |
/api/v1/news.json | Published news and our own stories, newest first. |
/api/v1/news/latest.json | The 25 newest published stories with id, published, country, source and headlines only. For apps and notifiers that poll often; news.json is the full list. |
/api/v1/news/by-country/{country}.json | Published news for one country code: NO, SE, DK, FI, IS, NORDIC or EU. |
/api/v1/news/topics.json | Topic ids present in the published news, with counts. |
/api/v1/newsletters.json | Published newsletter issues, newest first. The list omits the HTML body; the issue URL includes text and html. |
/api/v1/events.json | Public events, soonest start first, including past events. |
/api/v1/events/upcoming.json | Events that have not ended, soonest first. Judged in the event's own offset. |
/api/v1/events/past.json | Finished public events, newest first. Finished events stay in the archive. |
/api/v1/events/previous.json | Previous events, newest finish first. Finished calendar events plus backfilled public events (source backfill). Backfill is not on the calendar or in upcoming or past. |
/api/v1/events/by-country/{country}.json | Public events for one country code. |
/api/v1/talks.json | Public talks on bitcoin, cryptocurrencies and blockchain in the Nordic countries, newest first. A player is embedded on the site only when embed is true (YouTube via youtube-nocookie.com, or the Vimeo player). Unknown fields are null. description is ours; title and the other details come from the platform. |
/api/v1/talks/by-country/{country}.json | Public talks for one country code: NO, SE, DK, FI, IS, FO (Faroe Islands), GL (Greenland) or AX (Åland). |
/api/v1/sources.json | News outlets, justice-system press pages, the public search terms, and event sources. coverage is national, regional, local or justice. region is the place. feed is null when no working RSS, sitemap or index page was verified. method is rss, html, sitemap, search or manual. Event sources name the intake method. Luma calendars use a public iCal subscribe URL. Eventbrite organizers and venues use the v3 API when the server has EVENTBRITE_TOKEN; the token is not in this feed. Without it, event pages are schema.org JSON-LD. icon_url is a public icon from the outlet when one was easy to find. logo_source is the URL the stored logo was fetched from. logo is the checked outlet image for that source id when one is on file, used only to identify the source. Kaupr is marked as a news source only and is never an event sponsor. |
/api/v1/academia.json | Editor-approved courses, student groups, publications and research. |
/api/v1/academia/courses.json | Academia section: courses. |
/api/v1/academia/groups.json | Academia section: groups. |
/api/v1/academia/publications.json | Academia section: publications. |
/api/v1/academia/research.json | Academia section: research. |
/api/v1/academia/{id}.json | One academia row. The id is in academia.json. |
/api/v1/books.json | Published books on bitcoin, crypto and blockchain by Nordic authors or about the Nordic countries. title is the original title. authors are as printed; author_role is "editors" for an edited volume. language is a code (nn, nb, sv, da, fi, en). source is the library catalogue or publisher page where the row was checked. about is our one-line description in English. No cover images. |
/api/v1/developers.json | Open-source developers: technical people in Nordic crypto with public crypto-related code (an own non-fork crypto repo, or merged commits or pull requests in a public crypto project). name is as shown on the code profile. profiles are the GitHub/GitLab/Codeberg/sourcehut profile links. notable has up to three items: kind "repo" (own repo: name, url, stars, language, description, last_push) or kind "contrib" (project, host, url, commits, merged_prs). Stars and counts are from the date in checked. nordic_source is where the Nordic link is shown. whoswho_id links the who's who entry. Only rows the editor approved; a preview build also has pending rows (status "pending"). |
/api/v1/orgchart.json | Published who's who: organisations, people, relations, regulation notes and caveats. A person named on a talk has talk_ids, event_ids and talks. affiliations lists the organisation the talk page stated for that talk, with the talk date when the page gave one, the source URL and the retrieval time. An affiliation the page did not state is omitted. |
/api/v1/orgchart/relations.json | Relations between published who's who entries. |
/api/v1/orgchart/regulation.json | Short regulation status for each Nordic country, as on the who's who page. |
/api/v1/orgchart/relations/{id}.json | One relation from the who's who. |
/api/v1/profiles.json | Public profile links (Wikipedia, X, Wikidata and similar) for people and organisations. |
/api/v1/images.json | Logos and photos used on the public who's who, with licence and credit. These are not newspaper photographs. |
/api/v1/illustrations.json | Pictures used on story cards and story pages. Each record has source, author, license and url. No photograph from another newspaper is included. Outlet logos are in images.json and on each news item as source_logo. |
/api/v1/changelog.json | Site changelog (product changes, not the news), newest first. |
/api/v1/rules.json | How EU crypto rules become law in the five countries. Simplified, not legal advice. Omitted while the page is still a placeholder. |
/api/v1/archive/articles.json | Append-only archive of stories that have been on the public site. removed is true when a story later left the site; the row stays. |
/api/v1/stats.json | Aggregate visitor counts from Cloudflare Web Analytics (no cookies): visits and page views per UTC day, ISO week and calendar month. updated_at is null and the lists are empty until the Web Analytics site and the refresh token are configured. |
/api/v1/markets.json | Nordic exchange prices. Market data, not investment advice. Each ticker names the exchange, fetched_at, the source URL and volume when the exchange published it. NOK, SEK, DKK and EUR only. aggregated is one row per pair. |
/api/v1/markets/aggregated.json | One price per base-quote pair. BTC-NOK is separate from BTC-EUR. last is the mean of published last prices. mid is the mean of bid/ask midpoints and is not blended into last. Volume is summed only within the same field and the same pair. logo_url is a CC0 icon when cryptocurrency-icons includes the asset, otherwise null. |
/api/v1/markets/{exchange}.json | Prices from one included exchange: firi (Norway), nbx (Norway) or coinmotion (Finland). |
/api/v1/markets/by-asset/{symbol}.json | Prices for one asset (the base symbol, such as BTC) on every included Nordic exchange, plus aggregated pairs for each quote currency and logo_url when an icon is available. |
/api/v1/languages.json | Site UI languages: code, native name, English name, rtl, html lang and home URL. |
/api/v1/geo-language.json | Country to default site language. An IP guess only; the nc_lang cookie from the language switcher wins. |
/api/v1/meta.json | Site name, languages, countries, page list, CORS, editorial notes and brand social accounts (social.telegram, social.x). |
Що не входить#
Чернетки, редакційна черга, відхилені новини, повідомлення читачів, адреси підписників розсилки, токен аналітики та приватні персональні дані до цього фіду не входять. Невідомий id повертає звичайну сторінку 404 сайту, а не помилку в JSON.