API de données de Nordic Crypto
Un flux JSON public du site, pour les applications et autres outils. Ni compte ni clé d’API. Il est régénéré à chaque construction du site.
Nœud Lightning Bitcoin#
Nordic Crypto exploite un nœud Lightning Bitcoin. L’alias est Nordic Crypto. L’implémentation est LND, en mode léger Neutrino. Ni compte ni clé d’API.
| Nœud | État | Implémentation |
|---|---|---|
| Bitcoin Nordic Crypto | synchronisation / pas encore ouvert aux canaux | LND (mode léger Neutrino) |
URI du nœud. Copiez une ligne. La première ligne est en IPv4. La seconde est le même nœud en IPv6, [2a01:4f8:c01e:36d9::1]:9735.
0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9@91.99.122.75:9735 0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9@[2a01:4f8:c01e:36d9::1]:9735
Clé publique.
0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9
Adresse de dépôt on-chain.
bc1p7zgqhev2zzn45mefzq59gq983379lr0rsymhl558rza9k05y7vsq9mglx7
Serveurs Electrum (BCH et Nexa)#
Nordic Crypto exploite des serveurs Electrum Rostrum pour Bitcoin Cash et Nexa. Portefeuilles et applications peuvent y lire soldes, transactions, UTXO, jetons et dernier bloc, et y diffuser des transactions. Ni compte ni clé d’API.
| Serveur | État | Hauteur de bloc | Temps de réponse | Version |
|---|---|---|---|---|
Bitcoin Cashwss://electrum-bch.nordiccrypto.no:50004 | – | – | – | – |
Nexawss://electrum-nexa.nordiccrypto.no:20004 | – | – | – | – |
Ils parlent le protocole Electrum (JSON-RPC) sur les ports standard : WebSocket avec TLS (wss) sur 20004 pour Nexa et 50004 pour Bitcoin Cash, et TLS sur TCP sur 20002 pour Nexa et 50002 pour Bitcoin Cash. Aucun port non chiffré n’est proposé. Dans une bibliothèque cliente, indiquez l’hôte, le port et le schéma (wss ou tcp_tls). Les méthodes sont listées dans la documentation du protocole Rostrum.
websocat wss://electrum-bch.nordiccrypto.no:50004
{"id":1,"method":"blockchain.headers.subscribe","params":[]}
Les serveurs font tourner leurs propres nœuds complets (Bitcoin Cash Node et Nexa) : leurs réponses ne dépendent d’aucun tiers. Un client qui ne fait aucune vérification SPV nous fait toutefois confiance quant au contenu de la chaîne. Aucune disponibilité n’est garantie. Gardez un second serveur dans votre liste et passez-y si l’un ne répond pas en quelques secondes.
Pour commencer#
- Index — tous les endpoints et des URL d’exemple.
- OpenAPI (aussi en YAML).
- llms.txt — instructions en langage courant.
- Catalogue d’API (linkset RFC 9727 ; copie .json).
Récupérer les actualités et une newsletter#
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
Les URL absolues pointent vers le site public, à la racine du domaine : https://nordiccrypto.no/api/v1/news.json.
Interroger les nouveaux articles#
/api/v1/news/latest.json contient les 25 articles publiés les plus récents, avec seulement id, published, country, source, source_name, language_code, own_story, les titres (title, title_en, title_i18n) et les liens (url, html_url, api_url). Les valeurs sont les mêmes que dans news.json, dans le même ordre (le plus récent d’abord). Le fichier reste petit quelle que soit la taille des archives, afin qu’une application ou un serveur push puisse l’interroger toutes les quelques minutes. Envoyez If-None-Match avec le dernier ETag ; GitHub Pages répond 304 Not Modified tant que le fichier est inchangé. Comparez les identifiants à ceux que vous avez déjà vus ; generated_at change à chaque construction.
curl -fsS https://nordiccrypto.no/api/v1/news/latest.json
Prix du marché#
Les prix des plateformes nordiques sont des données de marché, pas des conseils en investissement. /api/v1/markets.json liste chaque paire avec le symbole, la devise de base, la devise de cotation, le dernier prix, l’offre et la demande lorsque la plateforme les publie, l’identifiant, le nom et le pays de la plateforme, fetched_at, l’URL source et le volume lorsque la plateforme le publie. volume_base est exprimé dans l’actif de base, sans fenêtre de temps précisée (Firi). volume_base_24h et volume_quote_24h portent sur les dernières 24 heures (NBX). Un volume manquant vaut null, pas zéro. Les devises de cotation sont NOK, SEK, DKK et EUR. Une plateforme : /api/v1/markets/{exchange}.json (firi, nbx, coinmotion). Un actif : /api/v1/markets/by-asset/{symbol}.json. Les plateformes sans ticker public figurent sous skipped et ne reçoivent pas de prix inventé.
/api/v1/markets/aggregated.json contient une ligne par paire. BTC-NOK n’est pas moyenné avec BTC-EUR. last est la moyenne arithmétique des derniers prix publiés. mid est la moyenne de (bid+ask)/2 et n’est pas mélangé à last. price vaut last dès qu’un dernier prix existe, sinon mid. min et max utilisent cette même série. Il n’y a pas de VWAP. Le volume n’est additionné qu’au sein d’un même champ et d’une même paire. logo_url est un SVG issu de cryptocurrency-icons (CC0 1.0) lorsque ce jeu contient l’actif, servi à /api/v1/markets/logos/{symbol}.svg, et null sinon. Le fichier par actif reprend aggregated et le logo.
La construction du site interroge les plateformes. .github/workflows/markets-refresh.yml réécrit le JSON sur gh-pages environ une fois par heure, y compris le fichier agrégé et les icônes. La page des marchés recharge ce fichier et actualise Firi et Coinmotion dans le navigateur, car ces API envoient Access-Control-Allow-Origin: *. Ce n’est pas le cas de NBX, dont les lignes suivent donc le fichier. Le même document sur la branche 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
Statistiques de visite#
Visites et pages vues agrégées issues de Cloudflare Web Analytics (sans cookies). /api/v1/stats.json contient les lignes daily, weekly (ISO) et monthly, avec uniquement visits et pageviews. Les jours sont en UTC. Le fichier reste vide tant que le site Web Analytics et le jeton d’actualisation ne sont pas configurés. .github/workflows/stats-refresh.yml le réécrit sur gh-pages environ une fois par jour.
curl -fsS https://nordiccrypto.no/api/v1/stats.json
Conférences#
Les conférences publiques sur le bitcoin, les cryptomonnaies et la blockchain données en Norvège, en Suède, au Danemark, en Finlande, en Islande, aux îles Féroé, au Groenland et à Åland se trouvent dans /api/v1/talks.json, des plus récentes aux plus anciennes. Une conférence : /api/v1/talks/{id}.json. Un pays : /api/v1/talks/by-country/{country}.json (NO, SE, DK, FI, IS, FO, GL, AX). description est rédigé par nous. title, les dates, la durée, la chaîne et les intervenants proviennent de la plateforme indiquée par source_url. Un champ que la plateforme n’a pas renseigné vaut null. embed vaut true uniquement si la réponse oEmbed de la plateforme contient un lecteur. La page HTML ne charge le lecteur qu’après un clic : YouTube via youtube-nocookie.com, Vimeo via player.vimeo.com. event_id et calendar_event_id sont le même identifiant d’événement lorsque la conférence y est liée. Cet événement est à /api/v1/events/{id}.json (et dans /api/v1/events/previous.json s’il est passé) et sa page est /calendar/{id}/. talk_ids sur l’événement liste ces conférences. unlink_reason est renseigné lorsque la page vidéo n’indiquait ni jour ni lieu ; event_id vaut alors null. speaker_ids sont des identifiants de « Qui est qui », dans le même ordre que speakers. La fiche de la personne, à /api/v1/orgchart/{id}.json, liste ces conférences et toute affiliation indiquée par la page de la conférence.
Plusieurs médias, une seule actualité#
Une actualité a un média principal. Les autres médias ayant couvert le même événement figurent dans also_covered_by. sources liste d’abord le média principal, puis les autres. Chaque média a outlet, outlet_name, url, title (le titre de ce média), published, lang, country, source_type et logo. source_type vaut national, regional (régional et local), official (justice et institutions : police, parquet, tribunaux, régulateurs) ou international. coverage.count est le nombre de médias. coverage.by_country et coverage.by_source_type donnent les effectifs et les parts pour les barres. Chaque type de source est présent, y compris avec un effectif nul. html_url est notre page pour cette actualité. url est le média principal. Kaupr reste uniquement une source d’information.
Événements#
Les événements à venir et passés sont dans /api/v1/events.json. Les calendriers Luma proviennent de l’URL iCal publique d’abonnement de chaque source d’événements (ics). Les pages de ville, les pages de catégorie et l’API discover de Luma ne sont pas utilisées. Une page d’événement Luma individuelle est lue au format JSON-LD schema.org. Les organisateurs et lieux Eventbrite sont lus avec l’API v3 lorsque le serveur dispose de EVENTBRITE_TOKEN. Ce jeton ne figure pas dans ce flux et n’est pas versionné. Sans lui, le JSON-LD de la page d’événement est utilisé. Un même titre, une même date et un même lieu forment un seul événement. Les événements terminés restent dans le flux. description.text est le texte de l’organisateur lui-même, description.lang la langue de ce texte et description.source_url la page d’où il provient. description.i18n contient une traduction lorsque nous en avons une. Le champ vaut null lorsque la source n’avait pas de description. Les annonces de conférences prédatrices ne sont pas utilisées comme source. Kaupr n’est jamais sponsor.
Langues#
L’anglais est le champ par défaut (summary, title, text). Les traductions que nous avons publiées se trouvent dans summary_i18n, title_i18n, subtitle_i18n, note_i18n, text_i18n et about_i18n, avec les clés nn, nb, sv, da, fi et is. Les autres langues du site utilisent le champ anglais jusqu’à la publication d’une traduction. Pour une actualité, title reste le titre de la source, title_en est notre titre en anglais et title_i18n notre titre dans les langues nordiques du site. Les pages affichent d’abord le titre dans la langue de la page, puis le titre de la source en dessous s’ils diffèrent. Le titre propre à chaque média, dans sources, reste dans la langue de ce média. Les dates sont au format ISO 8601.
/api/v1/languages.json liste toutes les langues du site avec code, native_name, english_name, rtl, html_lang et home. /api/v1/geo-language.json est la correspondance pays → langue utilisée lors d’une première visite. Le pays de l’adresse IP provient du tipworker GET /api/geo (Cloudflare request.cf.country). Rien n’est enregistré. Le cookie nc_lang, défini par le sélecteur de langue, l’emporte toujours.
Logos des sources#
Chaque média de /api/v1/sources.json a logo_url (URL absolue PNG ou WebP, jamais SVG, ou null) et logo (kind, file_url (l’original, SVG ou WebP), raster_url (identique à logo_url), source_url, author, license, license_url, credit, ou null). Chaque actualité a source_logo_url, pour qu’une application puisse afficher le logo du média à côté du titre. Les logos proviennent de Wikimedia Commons (avec leur licence) ou du site de l’éditeur. Ce sont des marques des éditeurs, affichées uniquement pour identifier la source d’un titre. Un logo reste null tant que la rédaction ne l’a pas vérifié.
CORS#
GitHub Pages envoie Access-Control-Allow-Origin: * pour ces fichiers ; une page d’un autre site peut donc les récupérer avec fetch(). GitHub Pages n’applique pas de fichier d’en-têtes personnalisé. Utilisez le nom de fichier en .json ; ouvrir un répertoire ne renvoie pas le JSON.
Ligne éditoriale#
La signature est The Nordic Crypto team. Kaupr (kaupr.io) est uniquement une source d’information et n’est jamais sponsor. Rien ici ne constitue un conseil en investissement.
Comptes de la marque#
ios dans /api/v1/meta.json est l’invitation TestFlight publique pour l’application iOS de Nordic Crypto. Elle n’est pas sur l’App Store. apple_tv indique que la version TestFlight prend notamment en charge l’Apple TV. apple_tv_i18n contient cette courte phrase dans chaque langue du site. Le nom de la marque reste Nordic Crypto.
/api/v1/meta.json inclut social pour l’application iOS. social.telegram est le chat de Nordic Crypto à https://t.me/nordiccryptochat. social.x est le compte de la marque à https://x.com/nordiccryptobot (@nordiccryptobot), également listé dans urls.x. urls.telegram reprend l’URL du chat. urls.rss est le flux d’actualités en anglais à /rss.xml. Chaque page d’accueil de langue a son propre rss.xml. urls.newsletter est la page d’inscription sur ce site. label est le nom court (Telegram, X). name est le texte du lien en anglais. name_i18n contient nn, nb, sv, da, fi et is. Les autres langues du site utilisent name.
Notifications du navigateur#
Lorsque workers/push/public.json contient une URL de Worker, le bouton en bas de chaque page active Web Push. D’ici là, la page indique que le service n’est pas activé et n’appelle aucun Worker. Les abonnements résident sur un Cloudflare Worker, pas dans ce flux statique. Après une publication, GET /api/push/feed.json sur ce Worker liste les mêmes lots (titre, court résumé, URL, pays et traductions lorsque nous en avons). Une publication correspond à un lot. Le document indique "apns": "not implemented" : Apple Push Notification service n’est pas pris en charge. Une application iOS peut interroger le flux régulièrement. L’URL du Worker est définie lorsque workers/push/ est déployé ; ce n’est pas un chemin de ce site. Les abonnements ne figurent pas dans le flux. /api/v1/news.json de cette API reste la liste complète des actualités publiées.
Endpoints#
Chaque endpoint est un simple GET d’un fichier JSON statique.
| Chemin | Renvoie |
|---|---|
/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). |
Non inclus#
Les brouillons, la file de la rédaction, les actualités rejetées, les signalements de lecteurs, les adresses des abonnés à la newsletter, le jeton d’analytique et les données personnelles privées ne figurent pas dans ce flux. Un identifiant inconnu renvoie une page 404 normale du site, pas une erreur JSON.