sumsub/agent-skills

sumsub-create-questionnaire

Create or update a Sumsub KYC questionnaire definition.

소스 보기

사용 방법

  1. 설치 명령을 복사하고 자신의 에이전트 환경에 설치하기 전에 소스 패키지를 확인하세요.
  2. 필요한 도구, 인증 정보, 지원 환경은 원본 문서에서 확인하세요.
  3. 입력과 원하는 산출물을 설명하고 출처와 결과를 대조하세요.
npx skills add https://github.com/sumsub/agent-skills --skill sumsub-create-questionnaire

시작 전 확인

  • 설치에는 모델 구독, API 한도, 파일 접근 권한이 포함되지 않습니다.
  • 별점 수와 설치 수는 활동 지표이며 독립적인 품질·보안 검증이 아닙니다.
원본 Skill 문서

원본 저장소의 제목, 예시, 코드, 표, 링크, 이미지를 유지해 표시합니다.

Sumsub — Create Questionnaire

Builds a questionnaire definition JSON payload from a compact spec, POSTs it to the Sumsub API, and reports the resulting id (client-supplied slug) and _id (server-assigned identifier).

Endpoints

MethodPathWhen
POST/resources/api/agent/questionnairesCreate a new questionnaire. Fails with `409 CONFLICT` if id already exists.
PATCH/resources/api/agent/questionnairesUpdate an existing questionnaire (by id in body). Fails with `404 NOT_FOUND` if no such questionnaire.
GET/resources/api/agent/questionnaires/{id}Read one questionnaire (verify what landed; resolve title from a known id).
GET/resources/api/questionnaires/listList all questionnaires. (Stays on the non-agent path.)
GET/resources/api/questionnaires/usedByLevelsList questionnaires with the levels that reference them. (Stays on the non-agent path.)

All require permission manageClientSettings. Body shape is the questionnaire schema — client-settable fields only (clientId, createdAt, audit metadata are server-managed).

POST vs PATCH — these are now strict. POST refuses an existing id; 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).

Auth — App Token + secret (sandbox only)

This skill talks to the public Sumsub API and signs each request per the authentication reference. The full how-it-works writeup lives in the `sumsub-api-auth` skill — read it if you hit 401 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/home?sbx=true> (Connect Sumsub to your AI agent -> Build & configure -> Generate token). 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:.
VarExample
SUMSUB_APP_TOKENsbx:... — sandbox App Token from the dashboard.
SUMSUB_SECRET_KEYThe paired secret shown once at token creation.
SUMSUB_BASEOptional. Defaults to https://api.sumsub.com.

If the user has already supplied credentials in conversation, reuse them; otherwise ask once before running. Never echo the secret back.

Tenant entitlements

Creating a questionnaire requires the QUESTIONNAIRE entitlement. Before doing anything else, invoke the sumsub-check-permissions skill and verify that QUESTIONNAIRE is present as a key in the allowedChecks map.

If `QUESTIONNAIRE` is not in `allowedChecks` — stop immediately. Do not build or POST the questionnaire. Tell the user the entitlement is missing and that they need to contact their CSM or Sumsub support to get it enabled.

Procedure

  1. Fetch tenant entitlements — see section above.
  2. Gather spec. Map the user's questions into the compact spec format below — never hand-write the full localized payload.
  3. Validate — confirm id is a unique slug, every item has a supported type, every conditional reference points to a real <sectionId>.<itemId>.
  4. Generate payload by running ${CLAUDE_SKILL_DIR}/scripts/build_questionnaire.py with the spec on stdin. Inspect the output briefly.
  5. Create vs. update — POST/PATCH scripts accept the payload as a path argument or on stdin (pipe it from build_questionnaire.py for a one-liner):
  • New — POST via ${CLAUDE_SKILL_DIR}/scripts/post_questionnaire.sh <payload.json> (or … | post_questionnaire.sh -). If the user already supplied an id they used before, GET it first via ${CLAUDE_SKILL_DIR}/scripts/get_questionnaire.sh to avoid a 409 CONFLICT.
  • Update existing — GET via ${CLAUDE_SKILL_DIR}/scripts/get_questionnaire.sh first so the user sees what they're overwriting; then PATCH via ${CLAUDE_SKILL_DIR}/scripts/patch_questionnaire.sh <payload.json>.
  1. Build the dashboard link. Read id and clientId from the response body (both fields are present on the persisted questionnaire) and format:
   https://cockpit.sumsub.com/checkus/sdkIntegrations/questionnaireDetails/<id>?clientId=<clientId>&sbx=true

The sbx=true query param targets the Sandbox workspace — it is the canonical sandbox link param shared across all skills.

  1. Report — lead with the human-readable title:
  • title, section/item count, country/lang coverage if relevant.
  • Dashboard link as a clickable markdown link.
  • Final line: Questionnaire ID (for level wiring / future PATCH): <id>.

Surface any 4xx with the description field from the error body. For 409 CONFLICT on POST — suggest PATCH instead.

Compact spec format

JSON or YAML accepted on stdin. English titles are auto-wrapped into localizedTitle / localizedDesc. Use condition strings for show/hide logic — see references/questionnaire-schema.md for syntax.

json
{
  "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"}
      ]
    }
  ]
}

Supported item types

text, textArea, date, dateTime, bool, select, phone, selectDropdown, multiSelect, countrySelect, countryMultiSelect, fileAttachment, multiFileAttachments.

select / selectDropdown / multiSelect require options: [[value, title], ...].

Outputs

On success, lead with the human-readable info:

  • title, section/item count, createdAt.
  • Dashboard link: https://cockpit.sumsub.com/checkus/sdkIntegrations/questionnaireDetails/<id>?clientId=<clientId>&sbx=true. Render as a clickable markdown link so the user can jump to the entity. Both id and clientId are in the POST response body; sbx=true targets the Sandbox workspace.
  • Finally, on its own line: Questionnaire ID (slug, for level wiring / future PATCH): <id>.

On failure: print HTTP status + description/type from the error envelope; do not retry blindly. On 409 CONFLICT from POST — suggest PATCH for an update.

Names, not ids, in user-facing messages

This applies to every message about the questionnaire — pre-POST summary, mid-flow status updates, diagnostics — not only the final report:

  • Refer to the questionnaire by title ("Applicant basics"), not by its id slug, in prose.
  • The slug id belongs only on the final dedicated line (Questionnaire ID (slug): <id>) — that line is the one place a raw id is correct, because the user needs to copy it into a level's questionnaireDefId.
  • When mentioning sections or items, prefer their title over their id.

Hand-off to sumsub-create-level

The id returned here (the questionnaire slug) is what you pass on a level's QUESTIONNAIRE doc-set. The level skill accepts it as questionnaireDefId (canonical) or questionnaireId (alias):

json
{
  "type": "QUESTIONNAIRE",
  "questionnaireDefId": "<id from this skill>"
}

See `sumsub-create-level/examples/with-presets.json`.

See also

관련 작업

같은 저장소의 Skills

더 많은 Skills

모든 Skills
sumsub
커뮤니티

sumsub-integrate-travel-rule

End-to-end recipe for integrating Sumsub Travel Rule — deciding which of the three exchange flows applies, identifying the counterparty VASP, submitting the transfer, reading the exchange status, finalising or cancelling it, answering requests other VASPs send you, handling the unhosted-wallet path when no VASP is attributed, and finding existing transactions (deduplication before after-settlement exchanges). TRIGGER when the user asks to "integrate / add / implement Travel Rule", "send Travel R

설치 수
1
GitHub Stars
7
업데이트
10월 2일
sumsub
커뮤니티

sumsub-manage-wallet-address-book

Register the crypto wallet addresses an organisation controls, so Sumsub can resolve address ownership without a human. Bulk-imports addresses into the Wallet Address Book via POST /resources/kyt/walletAddress/import, and registers a single address against a specific applicant via POST /resources/api/applicants/{applicantId}/payments. TRIGGER when the user asks to "upload / import / register our wallet addresses", "add addresses to the Wallet Address Book", "register a user's crypto wallet as a

설치 수
1
GitHub Stars
7
업데이트
10월 2일
sumsub
커뮤니티

sumsub-manage-webhooks

Manage Sumsub clientWebhooks (event subscriptions for applicantReviewed / applicantPending / kytTxn / etc.) — reads via /resources/api/clientWebhooks, writes via /resources/api/agent/clientWebhooks. Sandbox only — production webhooks must be created by a human directly in the Sumsub dashboard. TRIGGER when the user asks to "list / retrieve / show webhooks", "create / add / register a webhook", or "update / edit / change a webhook target / event list / secret / signature algorithm" against their

설치 수
1
GitHub Stars
7
업데이트
10월 2일
sumsub
커뮤니티

sumsub-analyze-regulation

Analyze a regulation document (PDF or text) and produce a Sumsub configuration plan — mapping regulatory requirements to Sumsub entities (levels, questionnaires, PoA presets, TM rules, workflows, AML resolution rules). TRIGGER when the user provides a regulation PDF, legal act, or compliance requirement document and wants to know what to configure in Sumsub. Acts as the entry point before invoking sumsub-create-level, sumsub-create-questionnaire, sumsub-create-poa-preset, sumsub-create-workflow,

설치 수
2
GitHub Stars
7
업데이트
10월 2일