{"description":"What changed in the Commons Hub Brussels open dataset, newest first.","documentation":"https://commonshub.brussels/opendata","entries":[{"id":"praise-feed","date":"2026-10-06","title":"Praise feed, and the text of contributions","kind":"added","body":"- Each month has `praise.json`: the thank-yous posted in 💝praise, newest first, in the same shape as\n  `contributions.json` (who, whom they mentioned, when, the text, reactions, photos). Bots and empty messages are left out.\n- `contributions.json` and `praise.json` now carry the message `content` (mentions as @Name, Discord codes resolved,\n  IBANs and personal emails masked), `reactions` with each emoji and count, and the `avatarUrl` of authors and mentions.\n- `latest/public/praise.json` covers the last 60 days. Both channels are public by the community's choice.","source":{"chb":"3.34.1"},"url":"https://commonshub.brussels/opendata/changelog#praise-feed"},{"id":"members-from-odoo","date":"2026-10-06","title":"Members from Odoo subscriptions","kind":"changed","breaking":true,"body":"- `members.json` now follows the Odoo subscriptions (Stripe only for members not yet on one).\n- Each member's `status` is `active`, `grace` (unpaid or paused, still a member until `graceEndsAt`, 15 days at\n  most) or `lapsed`; Stripe's raw statuses (`past_due`, `canceled`, …) are no longer used. `statusSince` says\n  since when.\n- `summary.activeMembers` counts members in good standing (active + grace); new `graceMembers` and `lapsedMembers`.\n- The public file names organisation members only (`organizationName`); individuals are counted, and named only\n  in the members tier.","source":{"chb":"3.32.1","site":141},"url":"https://commonshub.brussels/opendata/changelog#members-from-odoo"},{"id":"members-restored","date":"2026-10-06","title":"Members are back","kind":"fixed","body":"- Every month's `members.json` had been empty since 2 October (the membership data was not being fetched). It is\n  restored for the whole history, and active subscriptions count in every month they were active.\n- No `members.json` is written for months that have not started.","source":{"chb":"3.31.3","site":139},"url":"https://commonshub.brussels/opendata/changelog#members-restored"},{"id":"activity-photos","date":"2026-10-06","title":"Photos from the potluck, heartbeat and park cleaning","kind":"added","body":"- Photos posted in #potluck, #heartbeat and #park-cleaning are now public, like #contributions and #general:\n  in `images.json` and `YYYY/MM/public/images/`.","source":{"chb":"3.31.0"},"url":"https://commonshub.brussels/opendata/changelog#activity-photos"},{"id":"room-prices-2026-10","date":"2026-10-05","title":"New room prices","kind":"changed","body":"- `rooms.md`: Ostrom €130, Satoshi €60, Mush Room €40, Angel €50 per hour, excluding VAT.","source":{"chb":"3.28.1","site":134},"url":"https://commonshub.brussels/opendata/changelog#room-prices-2026-10"},{"id":"tokens-issued","date":"2026-10-05","title":"Tokens issued","kind":"added","body":"- Each month has `tokens-issued.json`: every community token minted, with when, how many, to whom (Discord\n  name) and why (from the token bot's annotation). `latest/public/tokens-issued.json` covers the last 60 days.\n- No wallet addresses or transaction ids are published.","source":{"chb":"3.28.0"},"url":"https://commonshub.brussels/opendata/changelog#tokens-issued"},{"id":"contributions-feed","date":"2026-10-04","title":"Contributions feed","kind":"added","body":"- Each month has `contributions.json`: the #contributions messages, newest first, with who posted, who was\n  mentioned (thanked), when, reactions and the public photos. No message text.\n- `latest/public/contributions.json` covers the last 60 days.","source":{"chb":"3.27.0"},"url":"https://commonshub.brussels/opendata/changelog#contributions-feed"},{"id":"excluded-transactions","date":"2026-10-03","title":"Excluded transactions (test mints)","kind":"added","body":"- A transaction can be excluded from every total while staying listed for transparency: `metadata.excluded`\n  holds the reason.\n- Exclusions come from trusted Nostr annotations (`[\"exclude\",\"<reason>\"]`) or chb's settings.\n- The 2025 CHT test mints (1 million in January, 2 trillion in September) and their burns are excluded: token\n  totals in `summary.json` and `contributors.json` drop from about 2 trillion to the real figures (2025: 4,032.5\n  minted, 1,102.2 burnt).","source":{"chb":"3.26.0","site":109},"url":"https://commonshub.brussels/opendata/changelog#excluded-transactions"},{"id":"members-annotations","date":"2026-10-03","title":"Members' annotations count","kind":"added","body":"Annotations signed by a member's browser key now count when the website attests that key (kind 31926) with\nthe `member` or `steward` role for the Commons Hub Discord server. Removing the role or the key from the\nattestation revokes it at the next hourly pull. Members reclassify transactions from the year and month\nreports: every category opens its transactions.","source":{"chb":"3.25.0","site":108},"url":"https://commonshub.brussels/opendata/changelog#members-annotations"},{"id":"categories-from-the-books","date":"2026-10-03","title":"Categories from the books, a published taxonomy, and coverage","kind":"added","body":"- Transactions left uncategorised by rules take their category from how the bank line is booked in Odoo\n  (the invoice, bill, journal entry or account it is reconciled with): `metadata.categorySource: \"odoo\"`, and\n  the matched documents' URIs in `metadata.documents`. Bills settling an invoice accrued the year before get\n  `accrual` (\"Previous-year invoices\").\n- VAT payments, local taxes, salaries and outgoing refunds are categorised by their reference while Odoo has\n  not reconciled them.\n- The taxonomy (slug, label, direction, group, PCMN accounts) is at `https://commonshub.brussels/opendata/latest/categories.json`.\n- Each month's `summary.json` reports `coverage` (`uncategorisedShare`, 0–1). For 2025, uncategorised money fell\n  from about €116k in / €185k out to €6k / €1k.\n- A bank journal's opening-balance row is no longer counted as income (`opening_balance`, type `INTERNAL`).","source":{"chb":"3.24.0, 3.24.1, 3.24.2"},"url":"https://commonshub.brussels/opendata/changelog#categories-from-the-books"},{"id":"role-accounts-private","date":"2026-10-03","title":"Role accounts are private in the ledger","kind":"changed","body":"Accounts named after a role that one person holds (e.g. \"Current account director\", \"C/C gérant\") are now\ntreated like accounts named after a person: in `accounts-chart.json` they are labelled \"Account of an\nindividual\" (`individual: true`) and in `ledger-balances.json` they are merged into their group's\n\"individuals\" row. Totals are unchanged.","source":{"chb":"3.23.0"},"url":"https://commonshub.brussels/opendata/changelog#role-accounts-private"},{"id":"chart-of-accounts","date":"2026-10-03","title":"Chart of accounts and ledger balances","kind":"added","body":"- `https://commonshub.brussels/opendata/latest/accounts-chart.json`: the full chart of accounts used in Odoo (Belgian PCMN), with labels in\n  English, French and Dutch, class and group; `used` marks the accounts with entries.\n- `https://commonshub.brussels/opendata/{YYYY}/ledger-balances.json`: for every account, the opening balance, debit, credit and closing\n  balance of posted entries that year, refreshed hourly from Odoo.\n- Accounts named after a person (current accounts, a person's fees) are merged per group with a neutral\n  label, and payroll is a single line, so no individual amount can be read. Totals are exact and identical\n  for every audience.","source":{"chb":"3.22.0"},"url":"https://commonshub.brussels/opendata/changelog#chart-of-accounts"},{"id":"annual-accounts","date":"2026-10-03","title":"Annual accounts filed with the National Bank","kind":"added","body":"New file `annual-accounts.json` per year (under the year the fiscal period **ends**) and in `/latest/`\n(every fiscal year): period, filing status, NBB register status, key figures and every figure by NBB code, the\nfiled abbreviated balance sheet and profit and loss as PDF (`https://commonshub.brussels/opendata/2025/annual-accounts/…`, with sha256), and\nconsistency checks. Published: fiscal year 2025, and fiscal year \"2023\" (1 July 2023 – 31 December 2024) under\n`/2024/` with class totals only (`figuresSource: \"internal-balance\"`). **Read `checks[]` before using the\nfigures**: both years have known inconsistencies under review.","source":{"chb":"3.20.0, 3.21.0","site":102},"url":"https://commonshub.brussels/opendata/changelog#annual-accounts"},{"id":"odoo-uris","date":"2026-10-03","title":"One identifier per accounting document: its Odoo URI","kind":"changed","breaking":true,"body":"Every bill, credit note, invoice and expense claim is identified everywhere by\n`odoo:<host>:<db>:<model>:<id>` (`account.move`, or `hr.expense` for a claim not booked yet):\n- new `uri` on every entry of `expenses.json` and `pending-bills.json`, and on `bookings.json` `rentals[]`;\n- `customers.json`: `invoices` is now the **list of invoice URIs**; the count moved to `invoiceCount` (breaking);\n- `id` (`b-…`, `x-…`) is deprecated and will be removed in a later chb release: use `uri`.","source":{"chb":"3.18.0"},"url":"https://commonshub.brussels/opendata/changelog#odoo-uris"},{"id":"trusted-annotations","date":"2026-10-03","title":"Community annotations reach the published files","kind":"changed","body":"Tags published on Nostr (kind 1111 with a lowercase `i`: `category`, `collective`, `event`, `spread`,\ndescription) are applied by chb at the next hourly run to `transactions.json` (description in\n`metadata.note`), `expenses.json`, `pending-bills.json` and room rentals, when the author is trusted: the\nwebsite's key, chb's key, or anyone they follow. Comments (uppercase `I`) are never applied. How to annotate:\nthe *Contribute back* section of the skill. This removes the \"Nostr tags do not reach the published files\"\nknown bug.","source":{"chb":"3.18.0, 3.19.0","site":97},"url":"https://commonshub.brussels/opendata/changelog#trusted-annotations"},{"id":"opendata-html","date":"2026-10-03","title":"The skill is now at /opendata.md; /opendata is a web page","kind":"changed","body":"`https://commonshub.brussels/opendata` is now the same documentation rendered as HTML. Agents load the markdown skill from\n`https://commonshub.brussels/opendata.md` (also still at `https://commonshub.brussels/opendata/SKILL.md`). The JSON API under `https://commonshub.brussels/opendata/…` is unchanged.","source":{"site":99},"url":"https://commonshub.brussels/opendata/changelog#opendata-html"},{"id":"monthly-and-annotations","date":"2026-10-03","title":"Monthly time series, data annotations and summaries","kind":"added","body":"- `https://commonshub.brussels/opendata/monthly.json` and `https://commonshub.brussels/opendata/{YYYY}/monthly.json`: one row per month (money in/out without internal\n  transfers, expenses, invoiced income, bookings, events, door, members, tokens) and `coverage` per section.\n- `https://commonshub.brussels/opendata/annotations.json`: known one-off events in the data (test mints, incidents, changes of method) and\n  known bugs at the source, also attached to the monthly rows as `notes[]`.\n- `https://commonshub.brussels/finance.md`, `https://commonshub.brussels/economy.md`, `https://commonshub.brussels/community.md`: the last twelve months as markdown.\n- `https://commonshub.brussels/DATA.md` now redirects to the open data; `/data/` and `/api/` are internal to the website.","source":{"site":96},"url":"https://commonshub.brussels/opendata/changelog#monthly-and-annotations"},{"id":"complete-file-set","date":"2026-10-02","title":"Every month and every year has every file","kind":"changed","body":"From the first month of data to the last, every month has every month file and every year every year\nfile, older months included; a period with nothing to report has the file with empty lists\n(`\"expenses\": []`). A 404 now only means the period is not generated yet, or the path is not part of the open\ndataset.","source":{"chb":"3.17.0"},"url":"https://commonshub.brussels/opendata/changelog#complete-file-set"},{"id":"odbl","date":"2026-10-02","title":"Licensed under the Open Database License (ODbL 1.0)","kind":"added","body":"`license` in `index.json` and a `Link: <…>; rel=\"license\"` header on every response. Attribution and\nshare-alike apply to derived databases; see the *Licence* section of the skill.","source":{"site":94},"url":"https://commonshub.brussels/opendata/changelog#odbl"},{"id":"accounting-files","date":"2026-10-02","title":"Expenses, vendors, customers and bookings; month bills.json removed","kind":"added","breaking":true,"body":"New per month and per year: `expenses.json` (every bill, credit note and expense claim, line by line),\n`vendors.json`, `customers.json` and `bookings.json` (room occupancy and rental revenue). Organisations\nare named; private individuals appear by type only. The month `bills.json` is **removed**: read\n`expenses.json`. Privacy fix: public `transactions.json` no longer carries bank narrations (payer names,\naccount numbers).","source":{"chb":"3.16.0"},"url":"https://commonshub.brussels/opendata/changelog#accounting-files"},{"id":"launch","date":"2026-10-02","title":"Open-data API and skill","kind":"added","body":"The public tier of the chb dataset as a read-only JSON API at `https://commonshub.brussels/opendata`, with a skill for agents. Included\nfrom the start: transactions, summaries, events, door and membership counts, `vat.json` (quarterly VAT\nreturns), `pending-bills.json` (bills still to pay) and `hashes.json` (integrity manifests).","source":{"site":94},"url":"https://commonshub.brussels/opendata/changelog#launch"}]}