“An evaluation at the end of every course”
The same questions for every run, so this cohort can be compared with the last one, without copying the learner list into another tool.
Instructors build course evaluations and knowledge checks inside your LMS, filed under their course. Learners answer on your course pages, in their own language.
Example: Coursewell is a fictional product and all numbers are sample data.
Needs Pro. No card required for the trial.
“More worked examples before the module 3 assignment would have helped.”
The phone is live: tap through the Coursewell survey.
Learning management systems, course marketplaces, and corporate training platforms whose instructors want to ask learners questions.
The same questions for every run, so this cohort can be compared with the last one, without copying the learner list into another tool.
A few questions with an answer key and an explanation for each one, inside the lesson instead of on another site.
Each instructor sees the answers for their own course and exports them for the course review.
Your LMS signs the course as the subject of a five-minute embed token, together with the instructor and what they may do. Instructors get the survey list, the builder, and results for that course only. Learners answer in a respondent embed on the course page, signed with their learner ID, and a signed webhook tells your backend about every completed response, so the LMS can mark the evaluation as done.
When an instructor opens the course’s surveys tab, your backend signs the course as the subject, together with the instructor and what they may do. Everything they create is filed under that course.
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://lms.yourplatform.com',
tenant: { id: school.id, name: school.name },
user: { id: instructor.id, name: instructor.name },
capabilities: ['questionnaire:create', 'questionnaire:edit',
'questionnaire:publish', 'results:view'],
subject: { type: 'course', id: course.id, label: course.title },
theme, // parsed from your version-controlled theme file
}),
});
const { embedUrl } = await res.json(); // { token, expiresIn: 300, embedUrl }
// In the iframe page, file each new survey (blank or from a template)
// under the course: 'responsedock.survey.created' → event.data.survey.idAt the end of the course, request a respondent embed signed with the learner’s ID; with the “one per external user ID” rule, each learner answers once. Or send track('course_completed') with the browser SDK and let a trigger rule open the survey in a modal, or email the cohort from your dashboard.
const { embedUrl } = await fetch('https://api.responsedock.com/api/v1/auth/embed-token', {
method: 'POST',
headers,
body: JSON.stringify({
workspaceId,
role: 'respondent',
surveyId: course.evaluationSurveyId,
allowedSurveyIds: [course.evaluationSurveyId],
externalUserId: learner.id,
allowedOrigin: 'https://lms.yourplatform.com',
}),
}).then((res) => res.json());Subscribe a webhook to survey.response.completed. Verify the signature and timestamp, then mark the evaluation or knowledge check as done for that learner. The payload carries the learner’s ID, the answer count and, for quizzes, the score and pass result, never the answers themselves.
import { createHmac, timingSafeEqual } from 'node:crypto';
const secret = process.env.RESPONSEDOCK_WEBHOOK_SECRET;
const ts = Number(req.headers['x-responsedock-timestamp']);
const expected = 'sha256=' + createHmac('sha256', secret)
.update(`${ts}.${rawBody}`).digest('hex');
const received = String(req.headers['x-responsedock-signature-v2'] ?? '');
if (Math.abs(Date.now() - ts) > 5 * 60_000 || received.length !== expected.length
|| !timingSafeEqual(Buffer.from(received), Buffer.from(expected))) {
return res.status(401).end();
}
const { event, data } = JSON.parse(rawBody);
if (event === 'survey.response.completed' && data.externalUserId) {
await markCourseTaskDone({
learnerId: data.externalUserId,
surveyId: data.surveyId,
completedAt: data.completedAt,
});
}ResponseDock supplies the survey engine. Your application keeps the relationship, context, and visual identity.
Your app signs the user, their course, and what they may do, and the survey list opens inside Coursewell. No second login and no separate dashboard.
Example screens: Coursewell 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.
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.
Yes. Sign the course as the subject of the embed token. Questionnaires created in that session are filed under the course, and list, results, and export requests for other courses are refused on the API.
Request a respondent embed with the learner’s ID and the course’s survey, and show it on the last course page. Or load the browser SDK, send track('course_completed', { courseId }) and let a trigger rule with the once-per-context frequency open the survey in a modal, once per learner per course. You can also send email invitations with one reminder from your ResponseDock dashboard.
Yes. Set the survey to anonymous: responses are stored without the learner’s ID, source, or device, and the completed-response webhook carries no learner ID, so your LMS can count completions without seeing who said what.
If you want them to. With “Show score at the end” on, the thank-you screen shows their points, the percentage, and whether they passed. With “Show correct answers and explanations” on, it adds a review of every scored question. The score is calculated on the server, and the answer key never reaches the browser before the learner submits. The completed-response webhook carries the score too, so your LMS can record a grade.
Not yet. There is no LTI or SCORM package; the integration runs from your backend with a secret key, an iframe, and webhooks, so it works with any LMS or course platform you control.
Yes. Respondent screens are translated into 18 languages, including right-to-left Arabic and Hebrew. Translate your questions in the builder, by hand or with the AI survey designer.
Pro ($39 per month) includes the embedded workspace, the SDK, API keys, and webhooks, and you can try it for 14 days without a card. Business adds full white-label with a custom domain. Platform sets limits across all your tenants and is priced on request.
Needs Pro. No card required for the trial.