“Can we send our own surveys from here?”
Account admins want to ask their customers or staff questions without exporting contacts into a separate form tool.
Each customer account gets its own survey builder, forms, and results inside your app, with no second login and no survey UI for your team to maintain.
Example: Tallyworks is a fictional product and all numbers are sample data.
Needs Pro. No card required for the trial.
“Loved that I could answer without logging into anything else.”
The phone is live: tap through the Tallyworks survey.
B2B SaaS and vertical software whose customers want to survey their own customers, staff, or members.
Account admins want to ask their customers or staff questions without exporting contacts into a separate form tool.
A form with another logo and another domain in the middle of your product makes people hesitate.
Results belong next to the survey, visible only to the account that created it.
Your backend signs the customer account (tenant), the person (user), what they may do (capabilities), and an optional business object (subject) into a five-minute embed token, together with your theme. ResponseDock renders the survey list, the builder, and results in an iframe and checks every API request against that signed context, so a hidden button is never the security boundary.
When someone opens the surveys page, your backend asks ResponseDock for a five-minute embed URL with the account, the person, and what they may do. The secret key never reaches the browser.
const res = await fetch('https://api.responsedock.com/api/v1/auth/embed-token', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RESPONSEDOCK_SECRET_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
workspaceId: process.env.RESPONSEDOCK_WORKSPACE_ID,
role: 'admin',
mode: 'workspace',
allowedOrigin: 'https://app.yourplatform.com',
tenant: { id: account.id, name: account.name },
user: { id: user.id, name: user.name },
capabilities: ['questionnaire:create', 'questionnaire:edit',
'questionnaire:publish', 'results:view'],
subject: { type: 'account', id: account.id, label: account.name },
theme, // parsed from your version-controlled theme file
}),
});
const { embedUrl } = await res.json(); // { token, expiresIn: 300, embedUrl }Load the returned URL in an iframe. It sizes itself to its content through a resize message, so your page keeps control of scrolling.
<iframe id="surveys" src="EMBED_URL_FROM_YOUR_SERVER"
title="Surveys" style="width:100%;border:0" allow="clipboard-write"></iframe>
<script>
const frame = document.getElementById('surveys');
window.addEventListener('message', (event) => {
if (event.origin !== 'https://app.responsedock.com'
|| event.source !== frame.contentWindow) return;
if (event.data?.type === 'responsedock.lifecycle.resize') {
frame.style.height = event.data.payload.height + 'px';
}
});
</script>Store the IDs of new questionnaires against the account. When people should answer, request a respondent embed with their user ID and the surveys they may see.
if (event.data?.type === 'responsedock.questionnaire.created') {
saveSurvey(accountId, event.data.questionnaire.id);
}
// Later, for someone who should answer (server side):
// { role: 'respondent', allowedSurveyIds: [surveyId],
// externalUserId: member.id, allowedOrigin, workspaceId }ResponseDock supplies the survey engine. Your application keeps the relationship, context, and visual identity.
Your app signs the user, their account, and what they may do, and the survey list opens inside Tallyworks. No second login and no separate dashboard.
Example screens: Tallyworks is fictional and the data is sample data.
These are the template’s real questions. Tap through the phone, then change anything in the builder. The colors come from your theme, not from the template.
A survey feature your customers rely on is more than a form. Estimate the work with your own numbers.
| Question | Self-hosted survey component | Embed from a form tool | ResponseDock |
|---|---|---|---|
| A builder your customers use | Usually a form renderer; an editor, if the library has one, is yours to integrate and host | In the vendor’s app, with its own login | Embedded in your app, signed in through your session |
| Results per customer account | You build storage, results views, and exports | In the vendor’s accounts, outside your platform | Scoped to the signed tenant and subject |
| Your brand | Yes, you style it | Depends on the vendor’s plan | Your logo and colors on every plan; no ResponseDock branding from Pro; custom domain on Business |
| Who maintains it | Your team: updates, security, hosting | The vendor; you maintain the account mapping | ResponseDock; you maintain one token endpoint |
General categories, not specific products. Read all four approaches, including when ResponseDock is not the right choice.
Surveys inside your product, under your brand. $39 per month. Needs Pro. No card required for the trial.
50,000 responses / month · 200 surveys · 10 workspaces · 25 team members · 500 AI survey generations / month · 10,000 survey invitation emails / month · Full white-label, including a custom domain (set up with our team) · Option to send invitation emails without “via ResponseDock”
Survey limits across all tenants, full white-label and custom domain, DPA, and priority support. Price on request.
Your server signs the tenant and, optionally, a subject such as a customer account into the embed token. Every list, read, edit, publish, results, and export request is checked against that signed context on the API. Values in the URL or request body cannot widen it.
One server endpoint that calls POST /api/v1/auth/embed-token with your secret key, an iframe that loads the returned embedUrl, and, optionally, a listener that stores the IDs of questionnaires your customers create.
Pro ($39 per month) includes the embedded workspace, the SDK, API keys, webhooks, and basic white-label, and you can try it for 14 days without a card. Business adds full white-label with a custom domain and 10 workspaces. Platform sets limits across all your tenants and is priced on request.
Yes. Sessions signed with questionnaire:create get a “Start from a template” option next to the blank questionnaire, with the built-in templates and the ones saved in your workspace. The new questionnaire is filed under the signed subject and uses your brand, not colors from the template.
Yes. Public surveys open from a share link or QR code. For signed-in users of your product, request a respondent embed with the user’s ID so each person can answer once.
Needs Pro. No card required for the trial.