Quick prompts
Operations & monitoring (cross-app)- “Show me the last 5 in-review sessions across all my apps.” →
didit_session_searchwithstatus: "In Review",limit: 5 - “How many people tried phone verification but dropped off in the last 15 days?” →
didit_analyticswithlast_n_days: 15(one call; reads the feature funnel) - “Find the customer with vendor_data
user_8842and 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
- “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 saydocuments_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
- “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. (callsdidit_workflow_createwithworkflow_label: "Standard KYC",features: [{ "feature": "OCR" }, { "feature": "LIVENESS" }]) — Published “Standard KYC”,workflow_id = 6f2c…. Now a session to try it. (callsdidit_session_createwithworkflow_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:Thatx-api-keyis 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 ishttps://myapp.com/webhooks/didit.” Agent: (callsdidit_webhook_createwithlabel: "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 asDIDIT_WEBHOOK_SECRET. Verify theX-Signature-V2header 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: (callsdidit_verify_kyb_searchwithcountry_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: (callsdidit_verify_kyb_selectwith the candidate’skyb_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 addKYB_REGISTRYto a KYB workflow withdidit_workflow_create;didit_workflow_get_kyb_registry_catalogtells 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: (callsdidit_session_searchwithstatus: "In Review",limit: 10) — Four sessions across two apps are in review. Reading each decision. (callsdidit_session_get_decisionfor eachsession_id)You: “Approvea1f3— I’ve looked at the selfie and it’s the same person. Declineb7c2, expired document.” Agent: (callsdidit_session_update_statuswithsession_id: "a1f3…",new_status: "Approved", then withsession_id: "b7c2…",new_status: "Declined",comment: "Expired document") — Both updated. (callsdidit_session_add_reviewona1f3…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 withdidit_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: (callsdidit_transaction_rule_backtestwithconditionsonamount > 1000, anaggregationof 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 inTESTmode so it records matches without running any action? You: “Yes, TEST mode.” Agent: (callsdidit_transaction_rule_createwithtitle: "Velocity: 3+ transfers over $1,000 per hour",category: "aml_ctf",mode: "TEST", the sameconditionsandaggregation, and anactionslist that flags the subject) — Created. Watch it withdidit_transaction_rule_getafter a few days; when you are happy,didit_transaction_rule_updateswitchesmodetoACTIVE.didit_transaction_rule_library_listalso 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:
- A
status.updatedwebhook (recommended), or didit_session_get_decision(polling, as a fallback).
node_id per entry:
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.