Skip to main content
A few patterns that show what the Didit MCP is good at. Phrase things in plain language — the agent picks the tools. Every tool named below exists in the tools reference.

Quick prompts

Operations & monitoring (cross-app)
  • “Show me the last 5 in-review sessions across all my apps.” → didit_session_search with status: "In Review", limit: 5
  • “How many people tried phone verification but dropped off in the last 15 days?” → didit_analytics with last_n_days: 15 (one call; reads the feature funnel)
  • “Find the customer with vendor_data user_8842 and tell me which app and status.” → didit_vendor_user_search
  • “What’s my credit balance and this month’s conversion rate?” → didit_org_get_balance + didit_analytics
Configuration
  • “Create a KYC workflow with ID scan + liveness and give me a verification link.” → didit_workflow_create → didit_session_create
  • “Create an ID-verification workflow that only accepts passports, then a selfie liveness.” → didit_workflow_create — just say documents_allowed: ["PASSPORT"]; the MCP expands it to passport-only for every country (see Advanced → feature configs).
  • “New workflow: scan a passport; if the ID is declined, decline the session; if the stated profession is ≈ ‘Software Engineer’ (≥60%), run a liveness check; otherwise ask for proof of address in Spanish; then auto-decide.” → didit_workflow_get_field_definitions → didit_workflow_validate_graph → didit_workflow_set_graph
  • “In workflow 26d33c04…, after ID verification: if it’s declined, decline the session; if the profession is ≥80% similar to ‘Software Engineer’, add a proof-of-funds Document-AI step; then continue.” → didit_workflow_search → didit_workflow_get_graph → didit_workflow_edit_graph (small ops, saved as a reviewable draft)
  • “Which countries can I offer a BankID or MitID login instead of a document scan?” → didit_workflow_get_id_verification_methods_catalog
  • “Register a webhook destination for status updates on https://myapp.com/webhooks/didit.” → didit_webhook_create
Compliance
  • “Screen this wallet for AML and add it to the blocklist if it hits.” → didit_transaction_screen_wallet → didit_blocklist_add
  • “Open a case for session … and assign it to me.” → didit_case_create → didit_case_manage
  • “Is Acme Ltd a registered company in the UK, and who are its shareholders?” → didit_verify_kyb_search → didit_verify_kyb_select

1. Stand up verification

You: “Set up Didit identity verification for my app with ID scan and liveness, and give me a link I can try.” Agent: I’ll create the workflow first. (calls didit_workflow_create with workflow_label: "Standard KYC", features: [{ "feature": "OCR" }, { "feature": "LIVENESS" }]) — Published “Standard KYC”, workflow_id = 6f2c…. Now a session to try it. (calls didit_session_create with workflow_id: "6f2c…", vendor_data: "test-user-1") — Here is your link: https://verify.didit.me/session/…. Open it on your phone to run the flow. In production your backend creates sessions with the REST API:
That x-api-key is your application’s REST API key for your backend; it is separate from how you signed in to this MCP, which uses Log in with Didit. Want me to register the webhook destination too? You: “Yes — my endpoint is https://myapp.com/webhooks/didit.” Agent: (calls didit_webhook_create with label: "Production", url: "https://myapp.com/webhooks/didit", webhook_version: "v3", subscribed_events: ["status.updated"]) — Done. The signing secret is redacted in what I get back, so copy it from Webhooks in the console and store it as DIDIT_WEBHOOK_SECRET. Verify the X-Signature-V2 header on each delivery before trusting it.

2. KYB: check a company in the registry

You: “Is Acme Trading Ltd a real UK company? I have registration number 12345678.” Agent: (calls didit_verify_kyb_search with country_code: "GB", name: "Acme Trading Ltd", registration_number: "12345678") — One candidate: ACME TRADING LTD, incorporated 2019, status active, registered office in Manchester. Want the full record with officers and shareholders? You: “Yes, and tell me who the beneficial owners are.” Agent: (calls didit_verify_kyb_select with the candidate’s kyb_response_id) — Full record retrieved: two directors, one person with significant control holding 75%+ of shares and voting rights. The record includes the filing history and the registered address. This was a billable registry lookup (two credits-consuming calls). If you want this to happen for every business customer automatically, I can add KYB_REGISTRY to a KYB workflow with didit_workflow_create; didit_workflow_get_kyb_registry_catalog tells us which data tiers the UK registry sells.

3. Work the review queue

You: “What is waiting for my review, and what’s wrong with each one?” Agent: (calls didit_session_search with status: "In Review", limit: 10) — Four sessions across two apps are in review. Reading each decision. (calls didit_session_get_decision for each session_id) You: “Approve a1f3 — I’ve looked at the selfie and it’s the same person. Decline b7c2, expired document.” Agent: (calls didit_session_update_status with session_id: "a1f3…", new_status: "Approved", then with session_id: "b7c2…", new_status: "Declined", comment: "Expired document") — Both updated. (calls didit_session_add_review on a1f3… with the note “Manual selfie review: same person”) — Review note added so the audit trail shows why the score was overridden. The two AML and proof-of-address cases are still open; say the word and I’ll open a case for the PEP hit with didit_case_create.

4. Back-test a transaction rule before it goes live

You: “I want to flag anyone who makes more than 3 transfers over $1,000 in an hour. How noisy would that be?” Agent: (calls didit_transaction_rule_backtest with conditions on amount > 1000, an aggregation of count ≥ 3 over a 1-hour window, period_days: 90) — Over the last 90 days that rule would have fired on 14 transactions from 6 subjects; 2 of those subjects are already flagged. Want me to create it in TEST mode so it records matches without running any action? You: “Yes, TEST mode.” Agent: (calls didit_transaction_rule_create with title: "Velocity: 3+ transfers over $1,000 per hour", category: "aml_ctf", mode: "TEST", the same conditions and aggregation, and an actions list that flags the subject) — Created. Watch it with didit_transaction_rule_get after a few days; when you are happy, didit_transaction_rule_update switches mode to ACTIVE. didit_transaction_rule_library_list also has Didit’s preset velocity rules if you would rather install one.

Session results are asynchronous

didit_session_create returns a session_id, a session_token, and a hosted url — but the verification hasn’t happened yet. The user opens url and completes the flow. The final decision arrives via:
  1. A status.updated webhook (recommended), or
  2. didit_session_get_decision (polling, as a fallback).
Both share the same shape — always plural arrays with a node_id per entry:
Never read singular V2 keys (id_verification, liveness) — they only ship when a destination is explicitly pinned to webhook_version: "V2". See Data models for the per-feature field reference and Advanced → Webhooks for verification and retry rules.

Pair it with the one-prompt integration

The MCP is great for running Didit. To have an agent write a full integration (backend route + frontend SDK + webhook handler + DB schema), hand it the Integration Prompt — it walks the seven steps and calls MCP tools to create the workflow, session, and webhook live.

Tools reference

Everything the agent can call.

Advanced & troubleshooting

Roles, cross-app behavior, webhooks, self-hosting.
Last modified on October 28, 2026