The public data files this site and the API use. Field names stay in English.
Schema version 2026-10-17 · 8959dbf
Last changed 2026-10-17T07:37:29+02:00
/api/v1/schema/index.json
Private stores
Reader tips are kept in a private Cloudflare D1 database. The text of a tip is not in the public files and is not served at /api/v1/.
Newsletter subscriber addresses are kept in a private Cloudflare D1 database. They are not in the public files and are not served at /api/v1/.
How the collections relate
Relations between the public collections NEWS News stories EVENTS Events SOURCES Sources NEWSLETTERS Newsletters SPONSORS Sponsors ACADEMIA Academia BOOKS Books MARKETS Markets PROFILES Profiles ORGCHART Who's who TALKS Talks DEVELOPERS Developers ILLUSTRATIONS Illustrations IMAGES Portraits LOGOS Outlet logos CHANGELOG Changelog RULES Rules map STATS Visitor stats CROWDFUNDING Crowdfunding BUDGET Budget ARTICLES Article archive TITLE_I18N Headline translations BLURBS Front-page blurbs EVENT_DESCRIPTIONS Event descriptions EVENT_REDIRECTS Event redirects REGULATION_VIDEOS Regulation videos
Mermaid source erDiagram
NEWS }|--|| SOURCES : source
NEWS }|--|| SOURCES : also_covered_by_.outlet
NEWS ||--|| TITLE_I18N : id
NEWS ||--|| BLURBS : id
EVENTS }|--|| SPONSORS : sponsored
EVENTS ||--o{ TALKS : id
EVENTS ||--|| EVENT_DESCRIPTIONS : id
EVENTS ||--|| EVENT_REDIRECTS : id
SOURCES ||--o{ NEWS : id
SPONSORS ||--o{ EVENTS : sponsored
PROFILES }|--|| ORGCHART : entity_id_object_key
ORGCHART }|--|| ORGCHART : relations_.from
ORGCHART }|--|| ORGCHART : relations_.to
ORGCHART }o--o{ TALKS : entities_.talk_ids
ORGCHART ||--o{ PROFILES : id
ORGCHART ||--o{ DEVELOPERS : id
TALKS }|--|| EVENTS : event_id
TALKS }o--o{ ORGCHART : speaker_ids
DEVELOPERS }|--|| ORGCHART : org_id
DEVELOPERS }|--|| ORGCHART : whoswho_id
ILLUSTRATIONS }o--o{ NEWS : assign_.id
IMAGES }|--|| ORGCHART : entity_id_object_key
LOGOS ||--|| SOURCES : id_object_key
ARTICLES }|--|| NEWS : articles_.id
TITLE_I18N }|--|| NEWS : items_key
BLURBS }|--|| NEWS : items_key
EVENT_DESCRIPTIONS }|--|| EVENTS : items_key
EVENT_REDIRECTS }|--|| EVENTS : removed_id_object_key
EVENT_REDIRECTS }|--|| EVENTS : value
Collections
News stories
Stories in data/news.json. status is the editorial state: pending, published, rejected or merged. The public API lists published stories that have a summary. Editor fields stay in the file and are left out of /api/v1/.
File data/news.json · JSON Schema
Page
API
Relations source → sources many-to-one — Outlet id in sources.jsonalso_covered_by[].outlet → sources many-to-one — Other outlets on the same eventid → title-i18n one-to-one — Our headlines, when we wrote themid → blurbs one-to-one — Front-page blurb, when one is written
Fields on the file
Field Type Status Allowed values Example Notes updatedstringRequired — "2026-10-14T01:43:32+00:00"
Story
Field Type Status Allowed values Example Notes idstringRequired — "d58de33a2af7"Stable id, 12 hex characters. urlstringRequired — "https://respawn.fi/gta-6-vuotajan-kryptovaluutta-romahti-yli-50-prosenttia"The story the reader follows. Absolute. titlestringRequired — "Bitcoin presses av rekordstore uttak"Source headline. title_enstring or nullRequired — "K33: Bitcoin outflows are heavy, but low leverage limits the downside"Our English headline, when the source headline is not English. Null when we did not write one. sourcestringRequired — "investornytt"Source id from sources.json. source_namestringRequired — "Investornytt"Outlet name as shown. countrystringRequired "NO" "SE" "DK" "FI" "IS" "NORDIC" "EU" "FO" "GL" "AX""NO"NO, SE, DK, FI, IS, NORDIC or EU. languagestring or nullRequired — "Norwegian"Language name of the source headline. viastringRequired · Left out of /api/v1/ — — seen_viaarray of stringRequired · Left out of /api/v1/ — — publishedstringRequired — "2026-10-13T15:04:51+00:00"When the outlet published it, ISO 8601. fetchedstringRequired · Left out of /api/v1/ — — topicsarray of stringRequired — ["bitcoin", "business"]Topic ids, such as bitcoin or regulation. matchedarray of stringRequired · Left out of /api/v1/ — — paywallbooleanRequired — falseTrue when the outlet may require a subscription. Article text is never fetched. statusstringRequired "pending" "published" "rejected" "merged""published"Editorial state. The public build uses published. summarystring or nullRequired — — Our English summary. Null until one is written. approved_bystringOptional · Left out of /api/v1/ — — approved_atstringOptional · Left out of /api/v1/ — — summary_i18nobjectOptional — — Our summary in nn, nb, sv, da, fi and is, when that translation is published. summary_i18n.nnstringRequired — — summary_i18n.nbstringRequired — — summary_i18n.svstringRequired — — summary_i18n.dastringRequired — — summary_i18n.fistringRequired — — summary_i18n.isstringRequired — — summary_i18n_reviewstringOptional · Left out of /api/v1/ — "approved"reject_reasonstringOptional · Left out of /api/v1/ — — published_unverifiedbooleanOptional — truesuggested_bystringOptional · Left out of /api/v1/ — — originstringOptional · Left out of /api/v1/ — "suggested by Kryptonytt"suggested_statusstringOptional · Left out of /api/v1/ — — suggested_atstringOptional · Left out of /api/v1/ — — primary_sourceobjectOptional — — Editor-recorded original document (name and url), such as a regulator press release. Not the lead outlet. primary_source.namestringRequired — "fi.se"primary_source.urlstringRequired — "https://mfn.se/all/a/ace-digital/aced-ace-digital-q3-2026-update"also_covered_byarray of object of string or boolean or nullOptional — — Other outlets on the same event. merged_intostringOptional — "5285674a58d8"Id of the story this item was merged into (status merged).
Events
Calendar events. data/events.json is the working list, archive/events.json is what the public calendar keeps, and data/events_backfill.json is the previous-events backfill. sponsored is null, false, true, or the sponsor's name, and is never Kaupr. The calendar status upcoming, ongoing or past is computed from start and end and is not stored.
File data/events.json, archive/events.json, data/events_backfill.json · JSON Schema
Page
API
Relations sponsored → sponsors many-to-one — Null, false, true, or the sponsor's nameid → talks one-to-many — Talks recorded at this eventid → event-descriptions one-to-one id → event-redirects one-to-one — A removed duplicate points at the kept id
Fields on the file
Field Type Status Allowed values Example Notes updatedstringOptional — "2026-10-13T02:13:07+00:00"_how_tostringOptional — — _notestringOptional — — calendar_statusstringComputed when the site is built, not stored in the file. upcoming ongoing past— Not stored. upcoming: start is in the future. ongoing: start is in the past and end is still ahead (an event with no end is never ongoing). past: the event has ended. The same split is published as /api/v1/events/upcoming.json, the ongoing array, and /api/v1/events/past.json.
Event
Field Type Status Allowed values Example Notes idstringRequired — "ccc2eea6b213"Stable id. titlestringRequired — "Göteborg Bitcoin Meetup #49"Event title. startstringRequired — "2026-10-08T18:00:00+02:00"Start, ISO 8601 with offset. endstring or nullRequired — "2026-10-08T21:00:00+02:00"End, ISO 8601 with offset. Null when the source gave no end. placestring or nullRequired — "Ölrepubliken, Kronhusgatan 2B, Göteborg"Venue. Null when the event is online or the venue was not stated. citystringRequired — "Göteborg"City name. countrystringRequired "NO" "SE" "DK" "FI" "IS" "NORDIC" "EU" "FO" "GL" "AX""SE"Country code. onlinebooleanRequired — falseTrue when the event is online. organiserstringRequired — "Swedish Bitcoin Meetups"Who runs it. urlstringRequired — "https://www.meetup.com/swedish-bitcoin-meetups/events/316047111/"The organiser's page. sourcestringRequired — "Swedish Bitcoin Meetups (Meetup.com)"Where we read the listing. backfill on rows from the previous-events file. source_urlstringOptional — "https://www.meetup.com/swedish-bitcoin-meetups/"paidboolean or nullOptional — — True, false, or null when the source did not say. sponsoredboolean or string or nullOptional — "Reese Legal"Null or false when there is no sponsor, true when it is sponsored without a named sponsor, or the sponsor's name. Never Kaupr. trusted_sourcebooleanOptional — truefoundstringOptional — "2026-10-03T15:23:20+00:00"statusstringRequired "pending" "published" "rejected""pending"Editorial state. The public calendar uses published. notestring or nullOptional — — Our short note, in English. descriptionobjectOptional — — The organiser's description. text is the original wording. description.textstringRequired — — description.langstringRequired — "en"description.source_urlstringRequired — "https://www.meetup.com/swedish-bitcoin-meetups/events/316047111/"description.source_namestringRequired — "Swedish Bitcoin Meetups (Meetup.com)"description.retrievedstringRequired — "2026-10-07T23:50:00+00:00"place_sourceobject or nullOptional — — place_source.namestringRequired — "Polyteknisk Forening (program)"place_source.urlstringRequired — "https://www.polyteknisk.no/program/crypto-killer-apps"place_source.retrievedstringRequired — "2026-10-12T03:50:28+00:00"title_origstring or nullOptional — "Krypto-skatt v/ Reese Legal"note_i18nobject or nullOptional — — That note in nn, nb, sv, da, fi and is. note_i18n.nnstringRequired — "Fell på første nyttårsdag: sjekk sida til arrangøren før du dreg."note_i18n.nbstringRequired — "Faller på første nyttårsdag: sjekk arrangørens side før du drar."note_i18n.svstringRequired — "Upplysning: talaren, Jørgen S. Notland, är utgivare av Nordic Crypto."note_i18n.dastringRequired — "Oplysning: foredragsholderen, Jørgen S. Notland, er udgiver af Nordic Crypto."note_i18n.fistringRequired — "Tiedoksi: puhuja Jørgen S. Notland on Nordic Crypton julkaisija."note_i18n.isstringRequired — "Til upplýsingar: fyrirlesarinn, Jørgen S. Notland, er útgefandi Nordic Crypto."attendeesnullOptional — — event_typestringOptional "conference" "meetup" "hackathon" "seminar""conference"languagestring or nullOptional — "is"backfillbooleanOptional — trueTrue on rows from data/events_backfill.json. Those rows are only in previous.json. speakers_countnullOptional — — videos_urlnullOptional — — creditsobjectOptional — — credits.titleobjectRequired — — credits.title.source_namestringRequired — "BTCX"credits.title.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.title.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.startobjectRequired — — credits.start.source_namestringRequired — "BTCX"credits.start.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.start.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.endobjectOptional — — credits.end.source_namestringRequired — "BTCX"credits.end.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.end.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.placeobjectOptional — — credits.place.source_namestringRequired — "BTCX"credits.place.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.place.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.cityobjectOptional — — credits.city.source_namestringRequired — "BTCX"credits.city.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.city.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.countryobjectRequired — — credits.country.source_namestringRequired — "BTCX"credits.country.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.country.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.organiserobjectRequired — — credits.organiser.source_namestringRequired — "BTCX"credits.organiser.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.organiser.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.urlobjectRequired — — credits.url.source_namestringRequired — "BTCX"credits.url.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.url.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.event_typeobjectRequired — — credits.event_type.source_namestringRequired — "BTCX"credits.event_type.source_urlstringRequired — "https://archive.cs.helsinki.fi/www.cs.helsinki.fi/en/events/79303.html"credits.event_type.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"credits.languageobjectOptional — — credits.language.source_namestringRequired — "Rafmyntaráð Íslands"credits.language.source_urlstringRequired — "https://info.btchel.com/index.html"credits.language.retrieved_atstringRequired — "2026-10-07T21:00:00+00:00"talk_idsarray of stringOptional — ["yt-zi2JsPOm5HE"]
Sources
News outlets and event sources in sources.json. type is how the fetcher reads the outlet. coverage is national, regional, local or justice. Kaupr is a news source and is never a sponsor.
File sources.json · JSON Schema
Page
API
Relations id → news one-to-many — Stories that cite this outlet
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — — user_agentstringRequired — "NordicCryptoBot/0.1 (+__SITE__about/; news headline bot)"Fetcher user agent. __SITE__ is replaced with the public site origin at fetch time. min_delay_secondsintegerRequired — 2Minimum wait between requests to the same host. fetch_workersintegerRequired — 6
Outlet
Field Type Status Allowed values Example Notes idstringRequired — "e24"Stable source id. namestringRequired — "E24"Outlet name. countrystringRequired "NO" "SE" "DK" "FI" "IS" "NORDIC" "EU" "FO" "GL" "AX""NO"kindstringRequired — "Newspaper"urlstringRequired — "https://e24.no"feedstring or nullRequired — "https://e24.no/rss2/"RSS, sitemap or index URL. Null when none was verified. typestringRequired "rss" "rss-all" "html" "sitemap" "bing" "search" "dok8""rss"How the fetcher reads it: rss, rss-all, html, sitemap, bing, search or dok8. paywallbooleanRequired — trueTrue when a story may sit behind a subscription. enabledbooleanRequired — trueFalse when the feed is blocked, duplicated or not worth reading. statusstringRequired — "ok"verifiedstringRequired — "2026-10-06"coveragestringRequired "national" "regional" "local" "justice""local"national, regional, local or justice. languagestringRequired — "Norwegian"logo_sourcestringOptional — "https://e24.no/vgc/gfx/icon-180x180-1.0.png"methodstringRequired "rss" "html" "sitemap" "search" "manual""rss"What the sources table shows: rss, html, sitemap, search or manual. search_fallbackbooleanOptional — truemax_new_per_runintegerOptional — 8outletstringOptional — "nrk"match_extraarray of stringOptional — ["kryptotillgång", "Mica", "kryptotjänst"]regionstringOptional — "Stockholm"link_patternstringOptional — "^/nyheter/"merged_fromstringOptional — "kryptonytt 2026-10-04"allowed_tldstringOptional — "reuters.com"queriesarray of stringOptional — — site_termsarray of stringOptional — — sitesarray of stringOptional — — directorystringOptional — "Amedia portfolio"logostringOptional — "https://r.acdn.no/local/v3/publications/www.avisenagder.no/gfx/square_logo.jpg"logo_notestringOptional — "robots.txt disallows the homepage, so no logo was fetched. Text only."
Event source
Field Type Status Allowed values Example Notes idstringRequired — "oslo-blockchain-meetup"namestringRequired — "Oslo Blockchain Meetup (Meetup.com)"urlstringRequired — "https://www.meetup.com/oslo-blockchain-meetup/"typestringRequired — "jsonld"trustedbooleanRequired — trueorganiserstringOptional — "Oslo Blockchain Meetup"citystringOptional — "Oslo"enabledbooleanRequired — truestatusstringRequired — "ok (JSON-LD on the group page)"countrystringRequired — "NO"link_patternstringOptional — "^(https://www\\.polyteknisk\\.no)?/program/[a-z0-9-]+$"icsstringOptional — "https://api.lu.ma/ics/get?entity=calendar&id=cal-8VLp9TOOwhxwPog"methodstringOptional — "Luma public iCal subscribe feed (calendar Subscribe .ics)"merged_fromstringOptional — "kryptonytt 2026-10-04"organizer_idstringOptional — "46541998283"event_pagesarray of stringOptional — — venuestringOptional — "Litteraturhuset"House or room name when the source is one venue. addressstringOptional — "Wergelandsveien 29"Street address of the venue. sitestringOptional — "https://www.litteraturhuset.no"Origin of the venue site. apistringOptional — "https://litthusfred.no/wp-json/wp/v2/event"Public programme API the fetcher reads. lang_pathstringOptional — "nb"Language segment on the venue site. keyword_profilestringOptional "crypto-money""crypto-money"Which keyword list keeps an event from this source. max_pagesintegerOptional — 4How many programme pages to read. max_linksintegerOptional — 8How many event pages to open. max_cardsintegerOptional — 40How many event cards to read from the listing.
Newsletters
Published issues in newsletter/published/issues.json. Drafts under newsletter/issues/ are not part of this schema. Subscriber addresses are a private store and are not in this file.
File newsletter/published/issues.json · JSON Schema
Page
API
Fields on the file
Field Type Status Allowed values Example Notes _how_tostringRequired — —
Issue
Field Type Status Allowed values Example Notes idstringRequired — "002"Issue id, such as 001. numberintegerRequired — 2Issue number. datestringRequired — "2026-10-12"Publication date, YYYY-MM-DD. periodarray of stringRequired — ["2026-10-05", "2026-10-12"]Start and end dates the issue covers, YYYY-MM-DD. langstringRequired — "en"titlestringRequired — "Nordic Crypto #1: Binance under scrutiny and Sweden's crypto sanctions warning"English title. subtitlestringRequired — "The Nordic crypto news our editor approved from 5 to 12 October 2026."English subtitle. storiesintegerRequired — 7eventsintegerRequired — 0videoobjectRequired — — Shared English video. video.mp4 is not committed; the build copies or downloads it. video.filestringRequired — "video.mp4"video.posterstringRequired — "thumbnail.png"video.subsstringRequired — "subs.vtt"video.durationintegerRequired — 131video.widthintegerRequired — 1920video.heightintegerRequired — 1080video.bytesintegerRequired — 1048576video.sha256stringRequired — "0f8966a443883e2ecb1e51a64b0fa8f35039bd2ddb76997c1143b93a9a4061f8"video.urlstringRequired — — video.youtubestringOptional — "https://www.youtube.com/watch?v=yqN3QaMdHhM"title_i18nobjectOptional — — Title in the Nordic site languages. title_i18n.nnstringRequired — — title_i18n.nbstringRequired — — title_i18n.svstringRequired — "Nordic Crypto #1: Binance granskas och Sveriges varning om krypto och sanktioner"title_i18n.dastringRequired — "Nordic Crypto #1: Binance under lup og Sveriges advarsel om krypto og sanktioner"title_i18n.fistringRequired — — title_i18n.isstringRequired — — subtitle_i18nobjectOptional — — subtitle_i18n.nnstringRequired — — subtitle_i18n.nbstringRequired — — subtitle_i18n.svstringRequired — — subtitle_i18n.dastringRequired — — subtitle_i18n.fistringRequired — — subtitle_i18n.isstringRequired — —
There is no sponsors file. A sponsor is the sponsored field on an event: null or false when there is no sponsor, true when it is sponsored without a named sponsor, or the sponsor's name. Kaupr is never a sponsor.
File — · JSON Schema
Page
API
Relations sponsored → events one-to-many — The event names its sponsor
Field Type Status Allowed values Example Notes sponsorsboolean or string or nullRequired — "Reese Legal"Null or false when there is no sponsor, true when it is sponsored without a named sponsor, or the sponsor's name. Never Kaupr.
Academia
Courses, student groups, publications and research groups in data/academia.json. The public page shows rows whose status is approved.
File data/academia.json · JSON Schema
Page
API
Fields on the file
Field Type Status Allowed values Example Notes updatedstringRequired — "2026-10-14"source_liststringRequired — — works_cataloguestringRequired — "research/academia/works.json"rulesarray of stringRequired — — Editorial rules for what may be listed. Prose, not a record.
Course
Field Type Status Allowed values Example Notes countrystringRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX""NO"institutionstringRequired — "NTNU"codestringRequired — "TTM4195"Course code at the institution. namestringRequired — "Blockchain Technologies and Cryptographic Tools"levelstringRequired — "Master, 7.5 ECTS"termstringRequired — "Autumn 2026"aboutstringRequired — — urlstringRequired — "https://www.ntnu.edu/studies/courses/TTM4195"sourcestringRequired — "https://www.ntnu.edu/studies/courses/TTM4195"checkedstringRequired — "2026-10-03"statusstringRequired "pending" "approved" "out" "unverified""approved"approved is shown on the public page. editor_notestringRequired — —
Student group
Field Type Status Allowed values Example Notes countrystringRequired — "SE"namestringRequired — "KTH Blockchain Initiative"institutionstringRequired — "KTH"aboutstringRequired — — activitystringRequired — "none dated (only a \"© 2026\" footer)"activebooleanRequired — falseurlstringRequired — "https://kthbci.org"sourcestringRequired — "https://kthbci.org"checkedstringRequired — "2026-10-05"statusstringRequired "pending" "approved" "out""pending"editor_notestringRequired — —
Publication
Field Type Status Allowed values Example Notes countrystringRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX""FI"titlestringRequired — "Crypto disruption: blockchain and digital currencies from a CFO’s perspective"authorsarray of stringRequired — ["Severi Seppä"]institutionarray of string or stringRequired — "JAMK University of Applied Sciences"yearinteger or nullRequired — 2026typestringRequired "master" "phd" "paper" "conference" "project""phd"master, project, phd, paper or conference. venuestringRequired — "PhD dissertation"doistring or nullRequired — "10.1016/j.ribaf.2024.102333"DOI when the catalogue gave one, otherwise null. urlstringRequired — "http://www.theseus.fi/bitstream/10024/922533/2/Seppa_Severi.pdf"dbstringRequired — "http://www.theseus.fi/bitstream/10024/922533/2/Seppa_Severi.pdf"db_namestringRequired — "openalex"sourcestringRequired — "http://www.theseus.fi/bitstream/10024/922533/2/Seppa_Severi.pdf"aboutstringOptional — — keywordsarray of stringOptional — ["blockchains", "finance", "central bank digital currency"]checkedstringRequired — "2026-10-14"statusstringRequired "pending" "approved" "out""pending"editor_notestringRequired — — originstringRequired — "research/academia/works.json"title_enstring or nullOptional — "The Minimum Hybrid Contract (MHC): Combining Legal and Blockchain Smart Contracts"English title when the original is in another language. languagestring or nullOptional — "English"Language of the work, as given by the catalogue.
Research group
Field Type Status Allowed values Example Notes countrystringRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX""NO"namestringRequired — "Blockchain-UiO"institutionstringRequired — "University of Oslo, Dept. of Informatics"aboutstringRequired — — urlstringRequired — "https://www.mn.uio.no/ifi/english/research/networks/blockchainlab/"sourcestringRequired — "https://www.mn.uio.no/ifi/english/research/networks/blockchainlab/"checkedstringRequired — "2026-10-05"statusstringRequired "pending" "approved" "out""approved"editor_notestringRequired — —
Books
Published books about bitcoin, crypto or blockchain by Nordic authors, or about the Nordic countries, in data/books.json. Titles stay in the original language. about is our one-line description in English.
File data/books.json · JSON Schema
Page
API
Fields on the file
Field Type Status Allowed values Example Notes updatedstringRequired — "2026-10-08"notestringRequired — —
Book
Field Type Status Allowed values Example Notes idstringRequired — "svalbard-pengar"titlestringRequired — "Svalbard! Pengar!"Title in the original language, as printed. authorsarray of stringRequired — ["Morten Søberg"]Names as printed. yearintegerRequired — 2022Year of the edition we checked. publisherstringRequired — "Spartacus"languagestringRequired "nn" "nb" "sv" "da" "fi" "is" "en""nn"nn, nb, sv, da, fi, is or en. countrystringRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX""NO"The author's country, or the country the book is about. isbnstring or nullRequired — "9788243014817"ISBN-13 when the catalogue gave one. aboutstringRequired — — sourcestringRequired — "https://www.nb.no/items/URN:NBN:no-nb_digibok_2022102848045"Catalogue or publisher page where the title, authors, year and publisher were checked. source_namestringRequired — "Nasjonalbiblioteket"more_sourcesarray of stringOptional — ["https://www.finna.fi/Record/3amk.284126"]subtitlestringOptional — "kryptovaluta, «smarte kontrakter» og andre eiendeler på blokkjeden"author_rolestringOptional "editors""editors"editors for an edited volume, otherwise omitted.
Markets
Nordic exchange prices written at build time to /api/v1/markets.json. This is not a file in data/. Market data, not investment advice. quote is NOK, SEK, DKK or EUR. Nothing is converted between currencies.
File — · JSON Schema
Page
API
Fields on the file
Field Type Status Allowed values Example Notes api_versionstringRequired — "1"namestringRequired — "Nordic Crypto"generated_atstringRequired — "2026-10-14T12:00:00+00:00"previewbooleanRequired — falsekindstringRequired — "markets"disclaimerstringRequired — — Market data, not investment advice. sign_offstringRequired — "The Nordic Crypto team"not_investment_advicebooleanRequired — truequotesarray of stringRequired — — NOK, SEK, DKK and EUR only. quote_notestringRequired — — aggregationobject of stringRequired — — refreshobjectRequired — — refresh.buildstringRequired — "Fetched when the site is built (./build.sh and ./publish.sh)."refresh.github_actionsstringRequired — — refresh.browserstringRequired — — refresh.browser_json_secondsintegerRequired — 900refresh.browser_exchange_secondsintegerRequired — 300refresh.actions_cronstringRequired — "17 * * * *"urlsobjectRequired — — urls.github_pagesstringRequired — "https://nordiccrypto.no/api/v1/markets.json"urls.raw_githubusercontentstringRequired — — urls.custom_domainstringRequired — "https://nordiccrypto.no/api/v1/markets.json"urls.aggregated_github_pagesstringRequired — "https://nordiccrypto.no/api/v1/markets/aggregated.json"urls.aggregated_custom_domainstringRequired — "https://nordiccrypto.no/api/v1/markets/aggregated.json"urls.logosstringRequired — "https://nordiccrypto.no/api/v1/markets/logos/"skippedarray of objectRequired — — skipped[].idstringRequired — "safello"skipped[].namestringRequired — "Safello"skipped[].countrystringRequired — "SE"skipped[].reasonstringRequired — "No public unauthenticated ticker API was found."countintegerRequired — 1aggregated_countintegerRequired — 1
Ticker
Field Type Status Allowed values Example Notes idstringRequired — "firi:BTC-NOK"symbolstringRequired — "BTC-NOK"exchange_symbolstringRequired — "BTCNOK"basestringRequired — "BTC"quotestringRequired "NOK" "SEK" "DKK" "EUR""NOK"laststringRequired — "100.5"bidstringRequired — "100"askstringRequired — "101"exchangeobjectRequired — — exchange.idstringRequired — "firi"exchange.namestringRequired — "Firi"exchange.countrystringRequired — "NO"fetched_atstringRequired — "2026-10-14T12:00:00+00:00"source_urlstringRequired — "https://api.firi.com/v2/markets/BTCNOK"volume_basestringRequired — "1"volume_quotenullRequired — — volume_base_24hnullRequired — — volume_quote_24hnullRequired — — highstringRequired — "101"lowstringRequired — "99"change_pctstringRequired — "0.1"exchange_timestring or nullOptional — — Timestamp from the exchange payload, when it sends one.
Aggregate
Field Type Status Allowed values Example Notes symbolstringRequired — "BTC-NOK"basestringRequired — "BTC"namestringRequired — "Bitcoin"quotestringRequired "NOK" "SEK" "DKK" "EUR""NOK"currencystringRequired "NOK" "SEK" "DKK" "EUR""NOK"updated_atstringRequired — "2026-10-14T12:00:00+00:00"oldest_fetched_atstringRequired — "2026-10-14T12:00:00+00:00"exchange_countintegerRequired — 1methodstringRequired "mean_last" "mean_bid_ask_mid""mean_last"method_notestringRequired — — pricestringRequired — "100.5"minstringRequired — "100.5"maxstringRequired — "100.5"laststringRequired — "100.5"last_countintegerRequired — 1last_minstringRequired — "100.5"last_maxstringRequired — "100.5"midstringRequired — "100.5"mid_countintegerRequired — 1mid_minstringRequired — "100.5"mid_maxstringRequired — "100.5"vwapnullRequired — — volume_used_for_pricebooleanRequired — falsevolumeobjectRequired — — volume.unitsobjectRequired — — volume.units.volume_basestringRequired — "base asset; window not named by the exchange"volume.units.volume_quotestringRequired — "quote currency; window not named by the exchange"volume.units.volume_base_24hstringRequired — "base asset; last 24 hours, as named by the exchange"volume.units.volume_quote_24hstringRequired — "quote currency; last 24 hours, as named by the exchange"volume.volume_basestringRequired — "1"volume.volume_base_exchangesintegerRequired — 1volume.volume_quotenullRequired — — volume.volume_quote_exchangesintegerRequired — 0volume.volume_base_24hnullRequired — — volume.volume_base_24h_exchangesintegerRequired — 0volume.volume_quote_24hnullRequired — — volume.volume_quote_24h_exchangesintegerRequired — 0contributorsarray of objectRequired — — contributors[].exchange_idstringRequired — "firi"contributors[].namestringRequired — "Firi"contributors[].countrystringRequired — "NO"contributors[].laststringRequired — "100.5"contributors[].bidstringRequired — "100"contributors[].askstringRequired — "101"contributors[].midstringRequired — "100.5"contributors[].included_in_lastbooleanRequired — truecontributors[].included_in_midbooleanRequired — truecontributors[].volume_basestringRequired — "1"contributors[].volume_quotenullRequired — — contributors[].volume_base_24hnullRequired — — contributors[].volume_quote_24hnullRequired — — contributors[].fetched_atstringRequired — "2026-10-14T12:00:00+00:00"contributors[].source_urlstringRequired — "https://api.firi.com/v2/markets/BTCNOK"contributors[].included_in_pricebooleanRequired — truelogo_urlstringRequired — "https://nordiccrypto.no/api/v1/markets/logos/btc.svg"logo_url_custom_domainstringRequired — "https://nordiccrypto.no/api/v1/markets/logos/btc.svg"logo_pathstringRequired — "api/v1/markets/logos/btc.svg"logoobject of stringRequired — —
Exchange
Field Type Status Allowed values Example Notes idstringRequired — "firi"namestringRequired — "Firi"countrystringRequired — "NO"websitestringRequired — "https://firi.com/"docs_urlstringRequired — "https://developers.firi.com/"source_urlstringRequired — "https://api.firi.com/v2/markets"corsbooleanRequired — truenotestringRequired — — statusstringRequired "ok" "error""ok"fetched_atstringRequired — "2026-10-14T17:10:34+00:00"errorstring or nullRequired — "fixture"ticker_countintegerRequired — 1
Profiles
Public profile links in data/profiles.json, keyed by who's who id. Each link needs a source_url that shows it belongs to that person or organisation. status published is what the site shows.
File data/profiles.json · JSON Schema
Page
API
Relations entity id (object key) → orgchart many-to-one
Fields on the file
Field Type Status Allowed values Example Notes _how_tostringRequired — —
Link
Field Type Status Allowed values Example Notes kindstringRequired "github" "linkedin" "wikidata" "wikipedia" "x""wikipedia"wikipedia, wikidata, x, linkedin or github. labelstringRequired — "Wikipedia (en)"urlstringRequired — "https://en.wikipedia.org/wiki/Erik_Thed%C3%A9en"The public profile. source_urlstringRequired — "https://www.wikidata.org/wiki/Q6207027"Page that shows the link belongs to this person or organisation. statusstringRequired "pending" "published""published"published is shown. pending waits for the editor. reviewedstringOptional — — notestringOptional — — addedstringOptional — "2026-10-09 (open-source developers research)"
Who's who
People and organisations in data/orgchart.json, the relations between them, and a short regulation note per country. status published is what the public page and the API show.
File data/orgchart.json · JSON Schema
Page
API
Relations relations[].from → orgchart many-to-one relations[].to → orgchart many-to-one entities[].talk_ids → talks many-to-many id → profiles one-to-many id → developers one-to-many — whoswho_id and org_id on a developer
Fields on the file
Field Type Status Allowed values Example Notes updatedstringRequired — "2026-10-03"no_export_datestringRequired — "03.10.2026"caveatsarray of stringRequired — —
Entity
Field Type Status Allowed values Example Notes idstringRequired — "stortinget-finanskomiteen"Stable who's who id. namestringRequired — "Storting (parliament) – Standing Committee on Finance"typestringRequired "person" "organisation""organisation"person or organisation. sectorstringRequired "private" "public""public"private or public. countrystring or nullRequired "NO" "SE" "DK" "FI" "IS" "NORDIC" "EU" "FO" "GL" "AX" null"NO"descriptionstring or nullRequired — — sourcesarray of objectRequired — — Pages the row was checked against. sources[].urlstringRequired — "https://www.regjeringen.no/no/dep/fin/id216/"sources[].titlestringRequired — "Stortinget"sources[].source_namestringRequired — "Stortinget"sources[].datestringRequired — "03.10.2026"imageobject or nullRequired — — image.filestringRequired — "assets/img/people/tuva-moflag.jpg"image.source_pagestringRequired — "https://commons.wikimedia.org/wiki/File:Tuva_Moflag.jpg"image.authorstringRequired — "Johannes Dalen Giske"image.licensestringRequired — "CC BY-SA 4.0"image.license_urlstringRequired — "https://creativecommons.org/licenses/by-sa/4.0"image.originstringRequired — "Wikimedia Commons"image.reviewstringRequired — "ok"image.notestringOptional — — image.checkedstringOptional — "2026-10-03"image.reviewedstringOptional — — caveatbooleanOptional — falseoriginstringRequired — "Kryptonytt industry map (approved for Norway)"groupstring or nullOptional — "Parliament & government"statusstringRequired "pending" "published" "rejected""published"published is shown. rejected stays in the file and is left off the public page. logoobjectOptional — — logo.sourcestringRequired — "Wikimedia Commons"logo.source_urlstringRequired — "https://www.finanstilsynet.no/Content/Favicons/apple-touch-icon-57x57.png"logo.licensestringOptional — "Public domain"logo.authorstring or nullOptional — "Worldlydev"logo.filestringRequired — "assets/img/logos/stortinget-finanskomiteen.svg"logo.wikidatastringOptional — "Q109016"logo.fetchedstringRequired — — logo.reviewstringRequired — "ok"logo.reviewedstringOptional — — logo.rasterstringOptional — "assets/img/logos/stortinget-finanskomiteen.png"logo.pagestringOptional — "https://www.finanstilsynet.no"logo.kindstringOptional — "touch"logo.notestringOptional — — logo.historyarray of objectOptional — — logo.history[].reviewstringRequired — "rejected"logo.history[].reasonstringRequired — "editor: outdated logo"logo.history[].datestringRequired — "2026-10-04"orgstring or nullOptional — "stortinget-finanskomiteen"rolestring or nullOptional — "Chair (Labour)"profile_urlstringOptional — "https://www.regjeringen.no/no/dep/fin/id216/"profilesarray of objectOptional — — profiles[].kindstringRequired — "wikipedia"profiles[].labelstringRequired — "Wikipedia (en)"profiles[].urlstringRequired — "https://en.wikipedia.org/wiki/Tuva_Moflag"profiles[].source_urlstringRequired — "https://www.wikidata.org/wiki/Q25427910"profiles[].statusstringRequired — "published"profiles[].reviewedstringOptional — — profiles[].notestringOptional — — profiles[].addedstringOptional — "2026-10-09 (open-source developers research)"talk_idsarray of stringOptional — ["yt-gn50NxhPk-0"]talksarray of objectOptional — — talks[].idstringRequired — "yt-gn50NxhPk-0"talks[].titlestringRequired — "Hvorfor og når får vi digitale sentralbankpenger og kryptovaluta?"talks[].video_urlstringRequired — "https://www.youtube.com/watch?v=gn50NxhPk-0"talks[].event_idstringOptional — "92041cfcb99c"talks[].datestringOptional — "2016-04-19"affiliationsarray of objectOptional — — affiliations[].talk_idstringRequired — "yt-RTcqp3MqRtU"affiliations[].organisationstringRequired — "NBX"affiliations[].source_urlstringRequired — "https://www.youtube.com/watch?v=RTcqp3MqRtU&hl=en"affiliations[].source_namestringRequired — "Nordic Blockchain Association"affiliations[].retrieved_atstringRequired — "2026-10-07T23:30:36+00:00"affiliations[].rolestringOptional — "PhD Student"affiliations[].event_idstringOptional — "92041cfcb99c"affiliations[].datestringOptional — "2016-04-19"urlstring or nullOptional — "https://www.fi.se"aliasesarray of stringOptional — ["BTCX", "Goobit AB", "Goobit Group AB"]reviewstringOptional — "pending"viastringOptional — — addedstringOptional — "2026-10-03"event_idsarray of stringOptional — ["92041cfcb99c"]from_talksbooleanOptional — true
Relation
Field Type Status Allowed values Example Notes idstringRequired — "r-greenmerc-northcrypto"fromstringRequired — "greenmerc"Entity id. tostringRequired — "northcrypto"Entity id. typestringRequired "collaboration" "licensed" "partner" "refused" "supervises" "uses licence""uses licence"collaboration, licensed, partner, refused, supervises or uses licence. labelstringRequired — "Uses Northcrypto's MiCA licence for Trijo customers"sourcesarray of objectRequired — — sources[].urlstringRequired — "https://www.meetup.com/swedish-bitcoin-meetups/"sources[].titlestringRequired — "GreenMerc trekker MiCA-klage og bruker Northcryptos lisens i Sverige"sources[].source_namestringRequired — "Kaupr"sources[].datestringRequired — "2026-10-03"statusstringRequired "pending" "published" "rejected""published"
Regulation note
Field Type Status Allowed values Example Notes countrystringRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX""NO"micastringRequired — — lawstringRequired — "Lov om kryptoeiendeler (Crypto-Assets Act, 27 May 2025 no. 20)."regulatorstringRequired — — statusstringRequired — — sourcesarray of objectRequired — — sources[].urlstringRequired — "https://lovdata.no/dokument/NL/lov/2025-05-27-20"sources[].titlestringRequired — "Lov om kryptoeiendeler"sources[].source_namestringRequired — "Lovdata"sources[].datestringRequired — "2026-10-03"
Talks
Public talks on bitcoin, cryptocurrencies and blockchain in the Nordic countries, in data/talks.json. description is ours. The other details come from the platform at source_url. A field the platform did not state is null.
File data/talks.json · JSON Schema
Page
API
Relations event_id → events many-to-one — Null when the talk could not be dated or placedspeaker_ids → orgchart many-to-many
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — —
Talk
Field Type Status Allowed values Example Notes idstringRequired — "yt-ZJHTEXcyePQ"video_urlstringRequired — "https://www.youtube.com/watch?v=ZJHTEXcyePQ"platformstringRequired "youtube" "vimeo" "university" "other""youtube"youtube, vimeo, university or other. titlestringRequired — "Nordic Blockchain Conference 2026: Market Abuse in Web3"speakersarray of stringRequired — ["Disha L. Dinesha"]event_namestring or nullRequired — "Nordic Blockchain Conference 2026"event_urlstring or nullRequired — "https://energy-markets-school.dk/"calendar_event_idstring or nullRequired — "30569783bb01"event_idstring or nullRequired — "30569783bb01"Calendar event id when the talk is linked. Same value as calendar_event_id. unlink_reasonstring or nullRequired — "the video page did not state the day"Why the talk is not linked to an event. Null when event_id is set. citystring or nullRequired — "Copenhagen"countrystring or nullRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX" null"DK"datestring or nullRequired — "2020-01-16"publishedstringRequired — "2026-08-24"durationstring or nullRequired — "PT11M38S"ISO 8601 duration when the platform states a length. languagenullRequired — — channelstringRequired — "DAAvern"descriptionstringRequired — — Short neutral summary in our own words. source_urlstringRequired — "https://www.youtube.com/watch?v=ZJHTEXcyePQ&hl=en"retrieved_atstringRequired — "2026-10-07T20:57:16Z"added_atstringRequired — "2026-10-07T20:57:16Z"embedbooleanRequired — trueTrue when the platform's oEmbed response includes an official player. speaker_idsarray of stringRequired — ["spk-disha-l-dinesha"]
Developers
Open-source developers in data/developers.json. Only public professional information: no addresses and no private details. The public page shows status published.
File data/developers.json · JSON Schema
Page
API
Relations
Fields on the file
Field Type Status Allowed values Example Notes updatedstringRequired — "2026-10-09"_how_tostringRequired — —
Developer
Field Type Status Allowed values Example Notes idstringRequired — "torkel-rogstad"namestringRequired — "Torkel Rogstad"Name as shown on the public code profile. rolestringRequired — "Co-founder; developer"orgstring or nullRequired — "Bare Bitcoin"org_idstring or nullRequired — "bare-bitcoin"whoswho_idstring or nullRequired — "torkel-rogstad"countrystringRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX""NO"profilesarray of objectRequired — — profiles[].kindstringRequired — "github"profiles[].urlstringRequired — "https://github.com/torkelrogstad"profiles[].loginstringRequired — "torkelrogstad"notablearray of objectRequired — — Up to three public repos or contributions. notable[].kindstringRequired "repo" "contrib""contrib"notable[].projectstringOptional — "lightningnetwork/lnd"notable[].hoststringOptional — "github"notable[].urlstringRequired — "https://github.com/torkelrogstad/lnd-fun"notable[].commitsinteger or nullOptional — 11notable[].merged_prsinteger or nullOptional — 4notable[].namestringOptional — "torkelrogstad/lnd-fun"notable[].starsintegerOptional — 6notable[].languagestring or nullOptional — "JavaScript"notable[].descriptionstring or nullOptional — — notable[].last_pushstringOptional — "2018-09-10"nordic_sourceobjectRequired — — Where the Nordic link was checked. nordic_source.urlstringRequired — "https://github.com/torkelrogstad"nordic_source.notestringRequired — — checkedstringRequired — "2026-10-09"YYYY-MM-DD the profile and counts were checked. statusstringRequired "pending" "published""pending"published is on the public page. pending waits for the editor. reviewstringRequired "editor" "ready_for_owner""editor"notestringOptional — —
Illustrations
Licensed pictures that may be assigned to a story, in data/illustrations.json. kind is original, commons or official-press. A newspaper photograph is never stored here.
File data/illustrations.json · JSON Schema
Page
API
Relations assign[].id → news many-to-many — Chosen from topics, then country
Fields on the file
Field Type Status Allowed values Example Notes _policystringRequired — — fallbackstringRequired — "original-crypto"Picture id used when no topic or country rule matches. countryobjectRequired — — country.NOstringRequired — "commons-no"country.SEstringRequired — "commons-se"country.DKstringRequired — "commons-dk"country.FIstringRequired — "commons-fi"country.ISstringRequired — "commons-is"assignarray of objectRequired — — Topic rules. The first match wins. assign[].topicsarray of stringOptional — ["crime"]assign[].idstringRequired — "commons-court"assign[].countriesarray of stringOptional — ["SE"]assign[].whystringOptional — —
Picture
Field Type Status Allowed values Example Notes idstringRequired — "original-bitcoin"kindstringRequired "original" "commons" "official-press""original"original (drawn for Nordic Crypto), commons (Wikimedia Commons) or official-press. filestringRequired — "assets/img/illustrations/original-bitcoin.webp"altstringRequired — "Abstract gold disc. Nordic Crypto illustration, not a photograph and not a logo."sourcestringRequired — "Nordic Crypto"authorstringRequired — "Nordic Crypto"licensestringRequired — "CC0 1.0"Licence name. license_urlstringRequired — "https://creativecommons.org/publicdomain/zero/1.0/"urlstringRequired — "https://cryptonordic.no/ethics/"The source page for the credit. widthintegerRequired — 960heightintegerRequired — 540modificationsstringOptional — "Cropped by Nordic Crypto to leave out a person at the edge of the frame."termsstringOptional — —
Portraits
Portrait files for the who's who, keyed by entity id, in data/images.json. Each record names the file, the author and the licence.
File data/images.json · JSON Schema
Page
API
Relations entity id (object key) → orgchart many-to-one
Portrait
Field Type Status Allowed values Example Notes filestringRequired — "assets/img/people/tuva-moflag.jpg"Path in the repo. source_pagestringRequired — "https://commons.wikimedia.org/wiki/File:Tuva_Moflag.jpg"Page the picture was taken from. authorstringRequired — "Johannes Dalen Giske"licensestringRequired — "CC BY-SA 4.0"Licence name, such as CC BY-SA 4.0. license_urlstringRequired — "https://creativecommons.org/licenses/by-sa/4.0"originstringRequired — "Wikimedia Commons"
Outlet logos
Outlet marks in assets/img/logos/logos.json, keyed by id. review ok is what the public API shows. A missing review counts as ok. pending is included only in a preview build. rejected is never shown. The marks are the publishers' trademarks, shown only to identify the source of a headline.
File assets/img/logos/logos.json · JSON Schema
API
Relations id (object key) → sources one-to-one
Fields on the file
Field Type Status Allowed values Example Notes _how_tostringRequired — — _how_to_sourcesstringRequired — — _source_aliasobject of stringRequired — — Source id to logo key, when the who's who id differs from the news source id.
Logo
Field Type Status Allowed values Example Notes sourcestringOptional — "Wikimedia Commons"source_urlstringRequired — "https://www.finanstilsynet.no/Content/Favicons/apple-touch-icon-57x57.png"Where the file was fetched. licensestringOptional — "Public domain"authorstring or nullOptional — "Worldlydev"filestringOptional — "assets/img/logos/stortinget-finanskomiteen.svg"Path of the original file, SVG or WebP. wikidatastringOptional — "Q109016"fetchedstringRequired — — reviewstringRequired "pending" "ok" "rejected""ok"pending, ok or rejected. The public build shows ok, and a missing review counts as ok. reviewedstringOptional — — rasterstringOptional — "assets/img/logos/stortinget-finanskomiteen.png"PNG rendering of an SVG, when one was made. pagestringOptional — "https://www.finanstilsynet.no"kindstringOptional — "touch"notestringOptional — — historyarray of objectOptional — — history[].reviewstringRequired — "rejected"history[].reasonstringRequired — "editor: outdated logo"history[].datestringRequired — "2026-10-04"reasonstringOptional — "editor: rejected (shows the owner Bitdeer's logo); left blank"usestringOptional — "nominative"source_idstringOptional — "e24"outletstringOptional — "E24"license_urlstringOptional — "https://creativecommons.org/licenses/by/4.0"same_asstringOptional — "nbx"
Changelog
Site changes in changelog.json (new pages, sections and features, not the daily news). review pending keeps an entry off the public page until it has a date.
File changelog.json · JSON Schema
Page
API
Fields on the file
Field Type Status Allowed values Example Notes _how_tostringRequired — — launch_datestringRequired — "2026-10-03"Set on the first publish. Entries with date launch use this day.
Entry
Field Type Status Allowed values Example Notes idstringRequired — "onion-tip-page"datestring or nullRequired — "2026-10-07"YYYY-MM-DD, launch, or null while the entry is still pending. reviewstringOptional "pending""pending"pending keeps the entry off the public page. titlestringRequired — "Tor onion tip page"descriptionstringRequired — — i18nobjectRequired — — title and description in nn, nb, sv, da, fi and is. i18n.nnobjectRequired — — i18n.nn.titlestringRequired — "Tor-onion-tipsside"i18n.nn.descriptionstringRequired — — i18n.nbobjectRequired — — i18n.nb.titlestringRequired — "Tor-onion-tipsside"i18n.nb.descriptionstringRequired — — i18n.svobjectOptional — — i18n.sv.titlestringRequired — "Tor-onion-tipssida"i18n.sv.descriptionstringRequired — — i18n.daobjectOptional — — i18n.da.titlestringRequired — "Tor-onion-tipside"i18n.da.descriptionstringRequired — — i18n.fiobjectOptional — — i18n.fi.titlestringRequired — "Tor-onion-vinkkisivu"i18n.fi.descriptionstringRequired — — i18n.isobjectOptional — — i18n.is.titlestringRequired — "Tor-onion-ábendingasíða"i18n.is.descriptionstringRequired — —
Rules map
The regulation map behind /rules/, in rules.json. Every node points at a primary source. review approved is what the public page shows.
File rules.json · JSON Schema
Page
API
Field Type Status Allowed values Example Notes _notestringRequired — — reviewstringRequired "pending" "approved""approved"approved is shown. pending leaves the public page as a short placeholder. checkedstringRequired — "2026-10-04"YYYY-MM-DD the claims were last checked. sourcesobjectRequired — — Primary sources, keyed by id. sources.micaobjectRequired — — sources.mica.urlstringRequired — "https://eur-lex.europa.eu/eli/reg/2023/1114/oj/eng"sources.mica.titlestringRequired — "Regulation (EU) 2023/1114 (MiCA), Art. 149 and closing formula"sources.mica.publisherstringRequired — "EUR-Lex"sources.tfrobjectRequired — — sources.tfr.urlstringRequired — "https://eur-lex.europa.eu/eli/reg/2023/1113/oj/eng"sources.tfr.titlestringRequired — "Regulation (EU) 2023/1113 (transfer of funds and certain crypto-assets), Art. 40"sources.tfr.publisherstringRequired — "EUR-Lex"sources.amlrobjectRequired — — sources.amlr.urlstringRequired — "https://eur-lex.europa.eu/eli/reg/2024/1624/oj/eng"sources.amlr.titlestringRequired — "Regulation (EU) 2024/1624 (AMLR), Art. 90"sources.amlr.publisherstringRequired — "EUR-Lex"sources.doraobjectRequired — — sources.dora.urlstringRequired — "https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng"sources.dora.titlestringRequired — "Regulation (EU) 2022/2554 (DORA), Art. 64"sources.dora.publisherstringRequired — "EUR-Lex"sources.esmaobjectRequired — — sources.esma.urlstringRequired — — sources.esma.titlestringRequired — "Markets in Crypto-Assets Regulation (MiCA) – interim MiCA register"sources.esma.publisherstringRequired — "ESMA"sources.is_actobjectRequired — — sources.is_act.urlstringRequired — "https://www.althingi.is/altext/stjt/2025.101.html"sources.is_act.titlestringRequired — "Lög nr. 101/2025 um markaði fyrir sýndareignir (Art. 1, 3 and 16)"sources.is_act.publisherstringRequired — "Alþingi"sources.no_actobjectRequired — — sources.no_act.urlstringRequired — "https://lovdata.no/dokument/NL/lov/2025-05-27-20"sources.no_act.titlestringRequired — "Lov om kryptoeiendeler (kryptoeiendelsloven), LOV-2025-05-27-20, § 2"sources.no_act.publisherstringRequired — "Lovdata"sources.se_actobjectRequired — — sources.se_act.urlstringRequired — — sources.se_act.titlestringRequired — — sources.se_act.publisherstringRequired — "Sveriges riksdag"sources.dk_actobjectRequired — — sources.dk_act.urlstringRequired — "https://www.retsinformation.dk/eli/lta/2024/1013"sources.dk_act.titlestringRequired — — sources.dk_act.publisherstringRequired — "Retsinformation"sources.fi_actobjectRequired — — sources.fi_act.urlstringRequired — "https://www.finlex.fi/fi/lainsaadanto/2024/402"sources.fi_act.titlestringRequired — — sources.fi_act.publisherstringRequired — "Finlex"sources.fi_fivaobjectRequired — — sources.fi_fiva.urlstringRequired — — sources.fi_fiva.titlestringRequired — "Crypto-asset service providers in Finland must be authorised in the EU"sources.fi_fiva.publisherstringRequired — "Finanssivalvonta"sources.no_amlobjectRequired — — sources.no_aml.urlstringRequired — "https://lovdata.no/dokument/NL/lov/2018-06-01-23"sources.no_aml.titlestringRequired — — sources.no_aml.publisherstringRequired — "Lovdata"sources.se_amlobjectRequired — — sources.se_aml.urlstringRequired — — sources.se_aml.titlestringRequired — — sources.se_aml.publisherstringRequired — "Sveriges riksdag"sources.fi_amlobjectRequired — — sources.fi_aml.urlstringRequired — "https://www.finlex.fi/fi/lainsaadanto/2017/444"sources.fi_aml.titlestringRequired — — sources.fi_aml.publisherstringRequired — "Finlex"sources.is_amlobjectRequired — — sources.is_aml.urlstringRequired — "https://www.althingi.is/lagas/nuna/2018140.html"sources.is_aml.titlestringRequired — — sources.is_aml.publisherstringRequired — "Alþingi"sources.dk_ftobjectRequired — — sources.dk_ft.urlstringRequired — — sources.dk_ft.titlestringRequired — — sources.dk_ft.publisherstringRequired — "Finanstilsynet (DK)"sources.fi_fiu_actobjectRequired — — sources.fi_fiu_act.urlstringRequired — "https://www.finlex.fi/fi/lainsaadanto/2017/445"sources.fi_fiu_act.titlestringRequired — — sources.fi_fiu_act.publisherstringRequired — "Finlex"sources.dk_fiuobjectRequired — — sources.dk_fiu.urlstringRequired — "https://hvidvask.dk/"sources.dk_fiu.titlestringRequired — "Hvidvasksekretariatet – National enhed for Særlig Kriminalitet (NSK)"sources.dk_fiu.publisherstringRequired — "Hvidvasksekretariatet"sources.dk_taxobjectRequired — — sources.dk_tax.urlstringRequired — — sources.dk_tax.titlestringRequired — "Skat på krypto: Kend reglerne, så du undgår et skattesmæk"sources.dk_tax.publisherstringRequired — "Skattestyrelsen (skat.dk)"sources.dk_tax_jvobjectRequired — — sources.dk_tax_jv.urlstringRequired — "https://info.skat.dk/data.aspx?oid=2395613"sources.dk_tax_jv.titlestringRequired — — sources.dk_tax_jv.publisherstringRequired — "Skattestyrelsen (info.skat.dk)"sources.no_taxobjectRequired — — sources.no_tax.urlstringRequired — — sources.no_tax.titlestringRequired — "Virtuelle eiendeler (kryptovaluta med mer)"sources.no_tax.publisherstringRequired — "Skatteetaten"sources.se_taxobjectRequired — — sources.se_tax.urlstringRequired — — sources.se_tax.titlestringRequired — "Kryptovalutor"sources.se_tax.publisherstringRequired — "Skatteverket"sources.fi_taxobjectRequired — — sources.fi_tax.urlstringRequired — "https://www.vero.fi/henkiloasiakkaat/omaisuus/sijoitukset/virtuaalivaluutat/"sources.fi_tax.titlestringRequired — "Kryptovarat"sources.fi_tax.publisherstringRequired — "Verohallinto (vero.fi)"sources.is_taxobjectRequired — — sources.is_tax.urlstringRequired — "https://www.skatturinn.is/einstaklingar/skattskylda/rafmynt/"sources.is_tax.titlestringRequired — "Rafmynt (no special provisions; general tax rules apply)"sources.is_tax.publisherstringRequired — "Skatturinn"euobjectRequired — — EU institutions, acts and agencies. eu.institutionsarray of objectRequired — — eu.institutions[].namestringRequired — "European Commission"eu.institutions[].rolestringRequired — "propose"eu.institutions[].srcstringRequired — "mica"eu.actsarray of objectRequired — — eu.acts[].namestringRequired — "MiCA"eu.acts[].refstringRequired — "Regulation (EU) 2023/1114"eu.acts[].appliesstringRequired — "2024-12-30"eu.acts[].note_keystringRequired — "act_mica"eu.acts[].srcstringRequired — "mica"eu.agenciesarray of objectRequired — — eu.agencies[].namestringRequired — "ESMA"eu.agencies[].orgstringRequired — "esma"eu.agencies[].note_keystringRequired — "ag_esma"eu.agencies[].srcstringRequired — "mica"eu.agencies[].src2stringOptional — "esma"countriesobjectRequired — — One object per Nordic country. countries.SEobjectRequired — — countries.SE.routestringRequired — "eu"countries.SE.lawstringRequired — "Lag (2024:1159)"countries.SE.law_srcstringRequired — "se_act"countries.SE.parliamentstringRequired — "Riksdagen"countries.SE.ministryobjectRequired — — countries.SE.ministry.namestringRequired — "Finansdepartementet"countries.SE.ministry.orgstringRequired — "se-finansdepartementet"countries.SE.supervisorobjectRequired — — countries.SE.supervisor.namestringRequired — "Finansinspektionen"countries.SE.supervisor.orgstringRequired — "se-fi"countries.SE.supervisor.srcstringRequired — "se_act"countries.SE.enforcearray of objectRequired — — countries.DKobjectRequired — — countries.DK.routestringRequired — "eu"countries.DK.lawstringRequired — "Lov om finansiel virksomhed § 332 c"countries.DK.law_srcstringRequired — "dk_act"countries.DK.parliamentstringRequired — "Folketinget"countries.DK.ministryobjectRequired — — countries.DK.ministry.namestringRequired — "Erhvervsministeriet"countries.DK.ministry.orgstringRequired — "dk-erhvervsministeriet"countries.DK.supervisorobjectRequired — — countries.DK.supervisor.namestringRequired — "Finanstilsynet"countries.DK.supervisor.orgstringRequired — "dk-finanstilsynet"countries.DK.supervisor.srcstringRequired — "dk_act"countries.DK.supervisor.src2stringRequired — "dk_ft"countries.DK.enforcearray of objectRequired — — countries.DK.note5stringRequired — "r12_dk"countries.DK.note5_srcarray of stringRequired — ["dk_fiu", "dk_tax", "dk_tax_jv"]countries.FIobjectRequired — — countries.FI.routestringRequired — "eu"countries.FI.lawstringRequired — "Laki 402/2024"countries.FI.law_srcstringRequired — "fi_act"countries.FI.parliamentstringRequired — "Eduskunta"countries.FI.ministryobjectRequired — — countries.FI.ministry.namestringRequired — "Valtiovarainministeriö"countries.FI.ministry.orgstringRequired — "fi-vm"countries.FI.supervisorobjectRequired — — countries.FI.supervisor.namestringRequired — "Finanssivalvonta"countries.FI.supervisor.orgstringRequired — "fi-fiva"countries.FI.supervisor.srcstringRequired — "fi_act"countries.FI.supervisor.src2stringRequired — "fi_fiva"countries.FI.enforcearray of objectRequired — — countries.FI.note4stringRequired — "r13_fi"countries.FI.note4_srcarray of stringRequired — ["fi_act"]countries.FI.note5stringRequired — "r14_fi"countries.FI.note5_srcarray of stringRequired — ["fi_aml", "fi_fiu_act"]countries.NOobjectRequired — — countries.NO.routestringRequired — "eea"countries.NO.lawstringRequired — "Lov om kryptoeiendeler (LOV-2025-05-27-20)"countries.NO.law_srcstringRequired — "no_act"countries.NO.parliamentstringRequired — "Stortinget"countries.NO.parliament_orgstringRequired — "stortinget-finanskomiteen"countries.NO.ministryobjectRequired — — countries.NO.ministry.namestringRequired — "Finansdepartementet"countries.NO.ministry.orgstringRequired — "finansdepartementet"countries.NO.supervisorobjectRequired — — countries.NO.supervisor.namestringRequired — "Finanstilsynet"countries.NO.supervisor.orgstringRequired — "finanstilsynet"countries.NO.supervisor.srcstringRequired — "no_act"countries.NO.enforcearray of objectRequired — — countries.ISobjectRequired — — countries.IS.routestringRequired — "eea"countries.IS.lawstringRequired — "Lög nr. 101/2025"countries.IS.law_srcstringRequired — "is_act"countries.IS.parliamentstringRequired — "Alþingi"countries.IS.ministryobjectRequired — — countries.IS.ministry.namestringRequired — "Fjármála- og efnahagsráðuneytið"countries.IS.ministry.orgstringRequired — "is-fjr"countries.IS.supervisorobjectRequired — — countries.IS.supervisor.namestringRequired — "Seðlabanki Íslands – Fjármálaeftirlit"countries.IS.supervisor.orgstringRequired — "is-fme"countries.IS.supervisor.srcstringRequired — "is_act"countries.IS.enforcearray of objectRequired — — eeaobjectRequired — — eea.decisionstringRequired — "EEA Joint Committee Decision No 41/2025 (20 February 2025)"eea.srcstringRequired — "is_act"approvedstringRequired — —
Visitor stats
Aggregate visits and page views in data/stats.json, from Cloudflare Web Analytics. No IP addresses, user agents, paths, referrers or countries. Days are UTC. Weeks are ISO weeks.
File data/stats.json · JSON Schema
Page
API
Fields on the file
Field Type Status Allowed values Example Notes api_versionstringRequired — "1"namestringRequired — "Nordic Crypto"generated_atnullRequired — — previewbooleanRequired — falsesourcestringRequired — "Cloudflare Web Analytics"statusstringRequired "pending" "ok""pending"ok when daily rows exist, otherwise pending. timezonestringRequired "UTC""UTC"notestringRequired — — schemaintegerRequired — 1Integer schema version of the stats document. first_datenullRequired — — last_datenullRequired — — updated_atnullRequired — —
Day
Field Type Status Allowed values Example Notes datestringRequired — "2026-10-01"UTC day, YYYY-MM-DD. visitsintegerRequired — 0pageviewsintegerRequired — 0partialbooleanOptional — — True while that day is still running.
Week
Field Type Status Allowed values Example Notes weekstringRequired — "2026-W41"ISO week, YYYY-Www. startstringRequired — "2026-10-05"endstringRequired — "2026-10-11"daysintegerRequired — — visitsintegerRequired — — pageviewsintegerRequired — — partialbooleanOptional — —
Month
Field Type Status Allowed values Example Notes monthstringRequired — "2026-10"Calendar month, YYYY-MM. daysintegerRequired — — visitsintegerRequired — — pageviewsintegerRequired — — partialbooleanOptional — —
Crowdfunding
The closed crowdfunding pilot in data/crowdfunding.json. Nordic Crypto does not hold keys or funds. The file has no donor data and no balances. demo true marks an example, not a live campaign.
File data/crowdfunding.json · JSON Schema
Page
API
Fields on the file
Field Type Status Allowed values Example Notes _docstringRequired — — pilotobjectRequired — — pilot.statusstringRequired "closed" "open""closed"closed or open. The pilot is closed. pilot.max_projectsintegerRequired — 5pilot.apply_emailnullRequired — — pilot.report_emailnullRequired — —
Campaign
Field Type Status Allowed values Example Notes idstringRequired — "demo-example"demobooleanRequired — trueTrue for an example with invalid addresses. titlestringRequired — "Example campaign (demo, not live)"ownerstringRequired — "Example project owner"owner_countrystringRequired "NO" "SE" "DK" "FI" "IS" "NORDIC" "EU" "FO" "GL" "AX""NO"owner_is_traderbooleanRequired — falsedescriptionstringRequired — — rewardstringRequired — — goalobjectRequired — — goal.bchnumberRequired — 2.5goal.nexaintegerRequired — 100000000goal.nok_approxnullRequired — — addressesobjectRequired — — The project's own addresses. Nordic Crypto does not hold them. addresses.bchstringRequired — "bitcoincash:DEMO-NOT-A-REAL-ADDRESS"addresses.nexastringRequired — "nexa:DEMO-NOT-A-REAL-ADDRESS"deadlinestringRequired — "2026-12-31"kyc_verifiedbooleanRequired — falselinksarray of objectRequired — — links[].labelstringRequired — "Project website (example)"links[].urlstringRequired — "https://example.org/"
Budget
Monthly hosting and domain costs in data/budget.json. The figures exclude labour. amount is the monthly figure in currency.
File data/budget.json · JSON Schema
Page
No public JSON file for this collection.
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — — as_ofstringRequired — "2026-10-13"YYYY-MM-DD the figures were written down. quotestringRequired "NOK""NOK"Currency the page converts into. rates_approximatebooleanRequired — trueratesarray of objectRequired — — Approximate conversion into the quote currency. rates[].currencystringRequired — "EUR"rates[].perstringRequired — "1"rates[].quote_amountstringRequired — "11.70"
Line
Field Type Status Allowed values Example Notes idstringRequired — "hetzner-electrum-1"kindstringRequired "server" "volume" "workers" "domains" "pages" "dns""server"server, volume, workers, domains, pages or dns. namestringOptional — "electrum-1"typestringOptional — "cx43"placestringOptional — "Falkenstein"runsstringOptional — "Electrum servers, Lightning node, Bitcoin/Nexa/BCH nodes, explorer"amountstringOptional — "15.99"Monthly amount, decimal string. currencystringOptional "EUR" "USD" "NOK""EUR"periodstringOptional — "month"amount_serverstringOptional — "8.49"amount_ipv4stringOptional — "0.50"gbstringOptional — "1500"unit_pricestringOptional — "0.0572"unit_currencystringOptional — "EUR"namesstringOptional — "nordiccrypto.no/.dk/.se/.fi/.is/.eu"vendorstringOptional — "Domeneshop"amount_yearstringOptional — "1578"vatstringOptional — "incl"hoststringOptional — "nordiccrypto.no"freebooleanOptional — true
Article archive
Stories the public site has shown, in archive/articles.json, including when a story was removed. removal_reason stays null in this public file.
File archive/articles.json · JSON Schema
API
Relations articles[].id → news many-to-one
Fields on the file
Field Type Status Allowed values Example Notes schemaintegerRequired — 2sitestringRequired — "nordic-crypto"exported_atstringRequired — "2026-10-14T07:38:23+02:00"
Archived story
Field Type Status Allowed values Example Notes sitestringRequired — "nordic-crypto"idstringRequired — "07e49032be5a"urlstringRequired — "https://www.kaupr.io/nyheter/nytt-nederlag-for-valuno-i-kampen-om-mica-lisens"canonical_urlstringRequired — "https://kaupr.io/nyheter/hilbert-finansierer-utlan-med-innskudd-pa-blokkjeden"titlestringRequired — "Safello åpner for at andre selskaper kan tilby kryptokjøp"sourcestringRequired — "kaupr"source_namestringRequired — "Kaupr"published_atstringRequired — "2026-09-24T12:00:00+00:00"When the outlet published the story. first_published_on_sitestringRequired — "2026-10-03T17:59:40+02:00"When it first appeared on Nordic Crypto. last_seen_on_sitestringRequired — "2026-10-14T07:38:23+02:00"languagesarray of stringRequired — — summariesobjectRequired — — summaries.enstringRequired — — summaries.nnstringRequired — — summaries.nbstringRequired — — summaries.svstringRequired — — summaries.dastringRequired — — summaries.fistringRequired — — summaries.isstringRequired — — titlesobjectRequired — — titles.enstringOptional — "Safello opens up so other companies can offer crypto purchases"titles.nnstringOptional — "Safello opnar for at andre selskap kan tilby kryptokjøp"titles.svstringOptional — "Safello öppnar för att andra bolag kan erbjuda kryptoköp"titles.dastringOptional — "Safello åbner for, at andre selskaber kan tilbyde kryptokøb"titles.fistringOptional — "Safello antaa muiden yhtiöiden tarjota kryptokauppaa"titles.isstringOptional — "Safello opnar á að önnur fyrirtæki geti boðið kaup á rafmyntum"titles.nbstringOptional — "Opplysninger: Tenåringer sølvteipet mann i jakt på kryptovaluta"topicsarray of stringRequired — ["business", "mica"]removedintegerRequired — 01 when the story was taken off the public site, otherwise 0. removed_atnullRequired — — removal_reasonnullRequired · Left out of /api/v1/ — — Not filled in this public file. updated_atstringRequired — "2026-10-14T07:38:23+02:00"countrystringRequired "NO" "SE" "DK" "FI" "IS" "NORDIC" "EU" "FO" "GL" "AX""SE"
Archive event
Field Type Status Allowed values Example Notes seqintegerRequired — 1sitestringRequired — "nordic-crypto"idstringRequired — "e6727b4858b5"atstringRequired — "2026-10-03T17:59:40+02:00"eventstringRequired "backfill" "publish" "published" "update" "updated" "remove""backfill"What the archive recorded for this row. detailstring or nullRequired — "summaries"
Headline translations
Our headlines by story id, in data/title_i18n.json. The source headline stays on the story. Keys are nn, nb, sv, da, fi and is, and only for languages that are not already the source headline.
File data/title_i18n.json · JSON Schema
No public JSON file for this collection.
Relations items key → news many-to-one
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — — langsarray of stringRequired — — Language codes this file translates into. itemsobject of headlinesRequired — —
Headlines for one story
Field Type Status Allowed values Example Notes sourcestringRequired — "Småsparere hamstret krypto under renteuro"nnstringRequired — "Småspararar hamstra krypto under renteuro"svstringOptional — "Småsparare hamstrade krypto under ränteoro"dastringOptional — "Småsparere hamstrede krypto under renteuro"fistringOptional — "Piensijoittajat hamstrasivat kryptoa korkoheilunnassa"isstringRequired — "Smásparifólk hamstraði rafmynt í vaxtaóróa"nbstringOptional — "Slik kan Sverige brukes til å finansiere kjernevåpen"
Front-page blurbs
Front-page blurbs by story id, in data/frontpage_blurbs.json. en is ours, in English. The Nordic site languages sit beside it when a translation is published.
File data/frontpage_blurbs.json · JSON Schema
No public JSON file for this collection.
Relations items key → news many-to-one
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — — langsarray of stringRequired — — itemsobject of blurbRequired — —
Blurb
Field Type Status Allowed values Example Notes enstringRequired — — nnstringRequired — — nbstringRequired — — svstringRequired — — dastringRequired — — fistringRequired — — isstringRequired — —
Event descriptions
Organiser descriptions and our translations, by event id, in data/event_description_i18n.json. source is the original wording. A language key is present only when that translation is written.
File data/event_description_i18n.json · JSON Schema
No public JSON file for this collection.
Relations items key → events many-to-one
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — — itemsobject of descriptionRequired — —
Description
Field Type Status Allowed values Example Notes sourcestringRequired — — nnstringOptional — — nbstringOptional — — svstringRequired — — dastringRequired — — fistringRequired — — isstringOptional — — enstringOptional — —
Event redirects
Merged duplicate events in data/event_redirects.json. Each key is a removed id and each value is the id that was kept. The old calendar URL refreshes to the kept event.
File data/event_redirects.json · JSON Schema
Page
No public JSON file for this collection.
Relations removed id (object key) → events many-to-one value → events many-to-one — The id that was kept
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — —
Kept id
Field Type Status Allowed values Example Notes event-redirectsstringRequired — "019f42a4506c"
Regulation videos
Country explainer slots in data/regulation-videos.json. status scripts_ready means the script and storyboard exist and the MP4 is not committed yet.
File data/regulation-videos.json · JSON Schema
Page
No public JSON file for this collection.
Fields on the file
Field Type Status Allowed values Example Notes _notestringRequired — —
Video
Field Type Status Allowed values Example Notes idstringRequired — "reg-no"countrystringRequired "NO" "SE" "DK" "FI" "IS" "FO" "GL" "AX""NO"duration_target_sintegerRequired — 165statusstringRequired "scripts_ready" "published""scripts_ready"scripts_ready until an MP4 is published. filestringRequired — "video-no.mp4"MP4 name under regulation-videos/media/. The file is not committed. posterstringRequired — "poster-no.png"subsstringRequired — "subs-no.vtt"scriptstringRequired — "scripts/no-script.txt"Path of the script, relative to regulation-videos/. storyboardstringRequired — "storyboards/no-storyboard.md"
Schema changelog
When Commit Change
2026-10-17 8959dbfSchema examples: avoid 8-digit values the privacy gate reads as phone numbers 2026-10-16 5e22089Document the public data model at /db/ (#153)