GET /ideabank

Load an idea bank for display to a panelist. Returns the idea bank metadata plus a set of capability flags derived from the idea bank’s access level and feature configuration. Use the capability flags to decide which interface elements (proposal list, vote buttons, proposal form, comments, changelog, roadmap) to render.

Request

GET /public/ideabank

Headers

HeaderRequiredDescription
AuthorizationYesCompound idea-bank token from Tenant API

The token is the publicKey returned by the Tenant API’s ideabank panelist access endpoint. It encodes the tenant, the idea bank, and the panelist, so no path parameters are required.

Response

{
	"title": "Product Ideas",
	"description": "Tell us what to build next.",
	"canViewProposals": true,
	"canVote": true,
	"canSubmitProposal": true,
	"canComment": true,
	"canViewChangelog": true,
	"canViewRoadmap": true,
	"proposalCount": 42,
	"proposalFormLabels": {
		"title": "Your idea",
		"description": "Tell us more"
	},
	"contactInfoCollection": {
		"label": "email",
		"prompt": "Leave your email so we can follow up"
	},
	"existingContactInfo": "panelist@example.com",
	"roadmapSubtitle": "What we are working on",
	"roadmapTags": ["planned", "in-progress", "shipped"],
	"changelogSubtitle": "Recently shipped"
}

Response Fields

FieldTypeDescription
titlestringIdea bank title (always present)
descriptionstringIdea bank description (present only when the panelist can access proposals)
canViewProposalsbooleanWhether the panelist may list proposals
canVotebooleanWhether the panelist may vote on proposals
canSubmitProposalbooleanWhether the panelist may submit new proposals
canCommentbooleanWhether the panelist may read and post comments
canViewChangelogbooleanWhether the published changelog is available
canViewRoadmapbooleanWhether the published roadmap is available
proposalCountintegerNumber of proposals in the idea bank (present only when the panelist can access proposals)
proposalFormLabelsobject(Optional) Custom labels for the proposal submission form
contactInfoCollectionobject(Optional) Prompt configuration when the idea bank collects contact info with submissions
existingContactInfostring(Optional) Contact info the panelist previously provided, for pre-filling the form
roadmapSubtitlestring(Optional) Subtitle to show above the roadmap, present only when canViewRoadmap is true
roadmapTagsarray(Optional) Ordered list of roadmap tag values, present only when canViewRoadmap is true
changelogSubtitlestring(Optional) Subtitle to show above the changelog, present only when canViewChangelog is true

Capability Gating

The capability flags are the authoritative source for what the panelist may do. They are computed from the idea bank’s access level (suggestion_box, closed_voting, open_voting, community_forum) and its feature configuration. The access level maps to capabilities as follows:

Access LevelcanViewProposalscanVotecanSubmitProposalcanComment
suggestion_boxfalsefalsetruefalse
closed_votingtruetruefalsefalse
open_votingtruetruetruefalse
community_forumtruetruetruetrue

canViewChangelog and canViewRoadmap are independent of the access level; they are true when the corresponding feature is enabled on an open idea bank.

When a capability is false, the matching endpoint either returns an empty result or a 404. For example, calling list proposals when canViewProposals is false returns an empty items array rather than data. Always gate your UI on these flags rather than calling endpoints speculatively.

When the panelist has no proposal access at all (the access level forbids it), description, proposalCount, and the proposal-related capability flags are omitted. The response still includes canViewChangelog and canViewRoadmap so a changelog-only or roadmap-only idea bank can be rendered.

Examples

cURL

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

JavaScript

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

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

	return response.json();
};

// Usage - gate the UI on capabilities
const ideaBank = await loadIdeaBank(publicKey);
if (ideaBank.canViewProposals) {
	renderProposalList();
}
if (ideaBank.canSubmitProposal) {
	renderProposalForm(ideaBank.proposalFormLabels);
}

Python

import requests

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

# Usage
idea_bank = load_idea_bank(public_key)
if idea_bank["canComment"]:
    enable_comments()

Error Handling

StatusErrorDescription
401UnauthorizedMissing or invalid token
403ForbiddenToken expired or malformed
404idea-bank-not-foundIdea bank is closed, or the panelist has no access and neither the changelog nor the roadmap is available

Notes