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

Parameter Type Description
ideaBankId string The idea bank ID (from your Votito dashboard)
panelistId string Your unique identifier for the panelist (e.g., customer ID, email hash)

Headers

Header Required Description
X-API-Key Yes Your 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

Field Type Description
status string Idea bank status: “OPEN”
title string Idea bank title

panelist object

Field Type Description
canVote boolean Whether the panelist can vote on proposals
canSubmitProposal boolean Whether the panelist can submit new proposals
publicKey string Compound token for Panelist API authentication
hostedIdeaBankUrl string Ready-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

Status Error Description
403 Forbidden Missing or invalid API key
404 idea_bank_not_found Idea 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 Level canVote canSubmitProposal
open_voting true true
closed_voting true false
suggestion_box false true