POST /survey/dismiss

Record that a panelist dismissed a survey without responding. This updates the panelist’s activity timestamp and enables survey fatigue prevention.

Request

POST /public/survey/dismiss

Headers

HeaderRequiredDescription
AuthorizationYesCompound token from Tenant API

Request Body

No request body required.

Response

{
	"message": "dismiss recorded"
}

Response Fields

FieldTypeDescription
messagestringConfirmation message

Examples

JavaScript

const dismissSurvey = async (publicKey) => {
	const response = await fetch('https://api.votito.com/public/survey/dismiss', {
		method: 'POST',
		headers: {
			'Authorization': publicKey
		}
	});

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

	return response.json();
};

// Usage - when user clicks "Not now" or closes survey
closeButton.addEventListener('click', async () => {
	await dismissSurvey(publicKey);
	hideSurveyModal();
});

React Component

const SurveyModal = ({ publicKey, onClose }) => {
	const handleDismiss = async () => {
		try {
			await fetch('https://api.votito.com/public/survey/dismiss', {
				method: 'POST',
				headers: { 'Authorization': publicKey }
			});
		} catch (error) {
			console.error('Failed to record dismiss:', error);
		}
		onClose();
	};

	return (
		<div className="survey-modal">
			<button onClick={handleDismiss}>Not now</button>
			{/* Survey content */}
		</div>
	);
};

Python

import requests

def dismiss_survey(public_key):
    response = requests.post(
        "https://api.votito.com/public/survey/dismiss",
        headers={"Authorization": public_key}
    )
    response.raise_for_status()
    return response.json()

# Usage
dismiss_survey(public_key)

Use Case: Survey Fatigue Prevention

When a panelist dismisses a survey, the dismissedMostRecentUnixTs timestamp is updated. Your application can check this via the Tenant API before showing surveys:

// Before showing survey, check if recently dismissed
const { panelist } = await getTenantPanelistAccess(surveyId, panelistId);

if (panelist.dismissedMostRecentUnixTs) {
	const thirtyDaysAgo = Math.floor(Date.now() / 1000) - 30 * 24 * 60 * 60;
	if (panelist.dismissedMostRecentUnixTs > thirtyDaysAgo) {
		// Don't show - dismissed less than 30 days ago
		return;
	}
}

// Safe to show survey
showSurveyModal(panelist.hostedResponseUrl);

Error Responses

401 Unauthorized

Invalid or missing authorization token.

429 Too Many Requests

Server is busy. Retry after a short delay.

Notes