Loading...
Loading...
Create or update a Sumsub KYC questionnaire definition. POST `/resources/api/agent/questionnaires` to create new (fails 409 if id exists), PATCH same path to update (fails 404 if id is unknown), GET `/resources/api/agent/questionnaires/{id}` to read one back. TRIGGER when the user asks to "create / add / build / update / edit a Sumsub questionnaire", or supplies a list of questions / sections meant for a Sumsub applicant flow, or references a questionnaire id / definition to be POSTed or PATCHed. SKIP for other Sumsub entities (levels, workflows, applicants), questionnaire data (answers) submission, or non-Sumsub form builders.
npx skill4agent add sumsub/agent-skills sumsub-create-questionnaireid_id| Method | Path | When |
|---|---|---|
| | Create a new questionnaire. Fails with |
| | Update an existing questionnaire (by |
| | Read one questionnaire (verify what landed; resolve |
| | List all questionnaires. (Stays on the non-agent path.) |
| | List questionnaires with the levels that reference them. (Stays on the non-agent path.) |
manageClientSettingsclientIdcreatedAtPOST vs PATCH — these are now strict. POST refuses an existing; PATCH refuses a missing one. The pre-INT-4893 "single POST upsert" behavior is gone — always pick the right verb up front (call GET /{id} first if unsure whether the questionnaire exists).id
sumsub-api-auth401 Invalid signature⚠️ Sandbox tokens only. Do not accept or use a production App Token here. If the user offers one, refuse and ask them to generate a sandbox pair at https://cockpit.sumsub.com/checkus/devSpace/appTokens (toggle the workspace to Sandbox first, then Create). Token + secret are shown once — copy both before closing the dialog. The helper script enforces this — it rejects tokens that don't start with.sbx:
| Var | Example |
|---|---|
| |
| The paired secret shown once at token creation. |
| Optional. Defaults to |
QUESTIONNAIREsumsub-check-permissionsQUESTIONNAIREallowedQUESTIONNAIREallowedidtype<sectionId>.<itemId>${CLAUDE_SKILL_DIR}/scripts/build_questionnaire.pybuild_questionnaire.py${CLAUDE_SKILL_DIR}/scripts/post_questionnaire.sh <payload.json>… | post_questionnaire.sh -id${CLAUDE_SKILL_DIR}/scripts/get_questionnaire.sh409 CONFLICT${CLAUDE_SKILL_DIR}/scripts/get_questionnaire.sh${CLAUDE_SKILL_DIR}/scripts/patch_questionnaire.sh <payload.json>idclientIdhttps://cockpit.sumsub.com/checkus/sdkIntegrations/questionnaireDetails/<id>?clientId=<clientId>&xSNSEnv=sbxxSNSEnv=sbxtitleQuestionnaire ID (for level wiring / future PATCH): <id>description409 CONFLICTlocalizedTitlelocalizedDesccondition{
"id": "source-of-funds",
"title": "Source of Funds",
"desc": "Optional one-liner shown to applicants.",
"showTitleAsStepName": true,
"sections": [
{
"id": "primary",
"title": "Primary Source",
"desc": "Optional section description.",
"condition": null,
"items": [
{"id": "main", "title": "Main source?", "type": "select", "required": true,
"options": [["salary","Salary"],["business","Business"],["other","Other"]]},
{"id": "other", "title": "Specify", "type": "text",
"condition": "primary.main = other"}
]
}
]
}texttextAreadatedateTimeboolselectphoneselectDropdownmultiSelectcountrySelectcountryMultiSelectfileAttachmentmultiFileAttachmentsselectselectDropdownmultiSelectoptions: [[value, title], ...]titlecreatedAthttps://cockpit.sumsub.com/checkus/sdkIntegrations/questionnaireDetails/<id>?clientId=<clientId>&xSNSEnv=sbxidclientIdxSNSEnv=sbxQuestionnaire ID (slug, for level wiring / future PATCH): <id>descriptiontype409 CONFLICTtitleididQuestionnaire ID (slug): <id>questionnaireDefIdtitleidsumsub-create-levelidQUESTIONNAIREquestionnaireDefIdquestionnaireId{
"type": "QUESTIONNAIRE",
"questionnaireDefId": "<id from this skill>"
}sumsub-create-level/examples/with-presets.json