GET /ideabanks/{ideaBankId}/panelists/{panelistId}

Retrieve ideabank panelist capabilities and generate a secure URL for directing panelists to an idea bank.

Request

GET /tenant/ideabanks/{ideaBankId}/panelists/{panelistId}

Path Parameters

ParameterTypeDescription
ideaBankIdstringThe idea bank ID (from your Votito dashboard)
panelistIdstringYour unique identifier for the panelist (e.g., customer ID, email hash)

Headers

HeaderRequiredDescription
X-API-KeyYesYour API key

Response

{
  "ideaBank": {
    "status": "OPEN",
    "title": "Product Ideas"
  },
  "panelist": {
    "canVote": true,
    "canSubmitProposal": true,
    "publicKey": "abc123:xyz789:ses456",
    "hostedIdeaBankUrl": "https://www.votito.com/public/ideabank/?key=abc123%3Axyz789%3Ases456"
  }
}

Response Fields

ideaBank object

FieldTypeDescription
statusstringIdea bank status: “OPEN”
titlestringIdea bank title

panelist object

FieldTypeDescription
canVotebooleanWhether the panelist can vote on proposals
canSubmitProposalbooleanWhether the panelist can submit new proposals
publicKeystringCompound token for Panelist API authentication
hostedIdeaBankUrlstringReady-to-use URL for the panelist to access the idea bank

Examples

cURL

curl -X GET \
  "https://api.votito.com/tenant/ideabanks/bank-123/panelists/customer-456" \
  -H "X-API-Key: vtt_your_api_key"

JavaScript

const getIdeaBankAccess = async (ideaBankId, panelistId) => {
  const response = await fetch(
    `https://api.votito.com/tenant/ideabanks/${ideaBankId}/panelists/${panelistId}`,
    {
      headers: { 'X-API-Key': process.env.VOTITO_API_KEY }
    }
  );

  if (!response.ok) {
    throw new Error(`API error: ${response.status}`);
  }

  return response.json();
};

// Usage
const { panelist, ideaBank } = await getIdeaBankAccess('bank-123', 'customer-456');
console.log(`Idea bank URL: ${panelist.hostedIdeaBankUrl}`);

Python

import requests
import os

def get_ideabank_access(ideabank_id, panelist_id):
    response = requests.get(
        f"https://api.votito.com/tenant/ideabanks/{ideabank_id}/panelists/{panelist_id}",
        headers={"X-API-Key": os.environ["VOTITO_API_KEY"]}
    )
    response.raise_for_status()
    return response.json()

# Usage
data = get_ideabank_access("bank-123", "customer-456")
print(f"Idea bank URL: {data['panelist']['hostedIdeaBankUrl']}")

Common Use Cases

Idea Bank Distribution

Generate unique idea bank URLs for each panelist in your CRM:

const response = await fetch(
  `https://api.votito.com/tenant/ideabanks/${ideaBankId}/panelists/${customerId}`,
  { headers: { 'X-API-Key': apiKey } }
);
const { panelist } = await response.json();

// Send panelist.hostedIdeaBankUrl to your customer
sendEmail(customer.email, panelist.hostedIdeaBankUrl);

Embedding in an IFrame

Render the idea bank directly in your application:

<iframe
  src="https://www.votito.com/public/ideabank/?key=abc123%3Axyz789%3Ases456"
  width="100%"
  height="600"
  frameborder="0">
</iframe>

Error Handling

StatusErrorDescription
403ForbiddenMissing or invalid API key
404idea_bank_not_foundIdea bank does not exist, is closed, or is internal

Notes

Panelist ID Best Practices

URL Expiration

The hostedIdeaBankUrl does not expire. The publicKey is valid as long as the idea bank remains OPEN with a panelist-accessible access level.

Access Levels

The endpoint only returns a successful response when the idea bank is OPEN and its access level allows panelist access. Idea banks with internal access level, or idea banks that are closed, return a 404 response.

The canVote and canSubmitProposal fields reflect the capabilities defined by the idea bank’s access level:

Access LevelcanVotecanSubmitProposal
open_votingtruetrue
closed_votingtruefalse
suggestion_boxfalsetrue