GET /ideabank/changelog

List the idea bank’s published changelog — the proposals that have shipped (status implemented), newest-first. Only the fields needed to display a public changelog are returned; scores, votes, comments, and internal identifiers are never exposed.

The changelog is a fixed top-N list: it returns at most the configured maximum number of entries in a single response. It is not paginated — no cursor is accepted and none is returned.

Capability Gate

This endpoint is gated by canViewChangelog, which is true only when the idea bank is OPENand the changelog has been enabled for it. When the gate is closed the endpoint responds with 404 (the idea bank is indistinguishable from one that does not exist).

canViewChangelog is independent of proposal-viewing access. A panelist can be allowed to read the changelog of an internal idea bank (one whose proposals, voting, and comments are not panelist-accessible) using the same token. The single compound token drives every Panelist API surface; the per-surface capabilities are reported by GET /ideabank.

Request

GET /public/ideabank/changelog

Headers

HeaderRequiredDescription
AuthorizationYesCompound token from Tenant API

This endpoint takes no query parameters. Any cursor or limit parameter is ignored — the response size is fixed by the idea bank’s configured maximum.

Response

{
	"items": [
		{
			"title": "Dark mode",
			"description": "A full dark theme across the dashboard and reports.",
			"lastModified": 1718524800
		},
		{
			"title": "CSV export",
			"description": "Export any report to CSV from the toolbar.",
			"lastModified": 1718265600
		}
	]
}

Response Fields

FieldTypeDescription
itemsarrayImplemented proposals, newest-first (see below)

Item Object

FieldTypeDescription
titlestringProposal title
descriptionstringProposal description
lastModifiedintegerUnix timestamp (seconds) of the proposal’s last activity

Only title, description, and lastModified are returned. Proposal IDs, status, vote counts, comment counts, and scores are never included.

Ordering and Cap

Examples

cURL

curl -X GET \
  "https://api.votito.com/public/ideabank/changelog" \
  -H "Authorization: abc123:xyz789:ses456"

JavaScript

const loadChangelog = async (publicKey) => {
	const response = await fetch('https://api.votito.com/public/ideabank/changelog', {
		headers: { 'Authorization': publicKey }
	});

	if (!response.ok) {
		throw new Error(`Failed to load changelog: ${response.status}`);
	}

	return response.json();
};

// Usage
const { items } = await loadChangelog(publicKey);
items.forEach((entry) => {
	const shippedOn = new Date(entry.lastModified * 1000);
	console.log(`${entry.title}${shippedOn.toLocaleDateString()}`);
});

Python

import requests

def load_changelog(public_key):
    response = requests.get(
        "https://api.votito.com/public/ideabank/changelog",
        headers={"Authorization": public_key}
    )
    response.raise_for_status()
    return response.json()

# Usage
data = load_changelog(public_key)
for entry in data["items"]:
    print(f"{entry['title']} (updated {entry['lastModified']})")

Error Handling

StatusErrorDescription
401UnauthorizedMissing or invalid authorization token
404idea-bank-not-foundIdea bank does not exist, is closed, or changelog is disabled

Notes