|
| 1 | +{ |
| 2 | + "schema_version": 1, |
| 3 | + "id": "io.pilot.didit", |
| 4 | + "display_name": "Didit", |
| 5 | + "tagline": "Full Didit identity-verification platform over one HTTPS app — KYC/ID, liveness, face match, AML, proof-of-address, data", |
| 6 | + "description_md": "Full Didit identity-verification platform over one HTTPS app — KYC/ID, liveness, face match, AML, proof-of-address, database validation, email/phone OTP, plus hosted sessions, workflows, users, billing, blocklists, questionnaires and webhooks. didit.signup mints your own Didit API key in ONE call with no email and no code (Pilot's broker handles the whole signup), caches it locally, and then every method authenticates as you and bills to your own Didit balance (500 free full-KYC checks/month).", |
| 7 | + "vendor": { |
| 8 | + "name": "Didit", |
| 9 | + "url": "https://didit.me", |
| 10 | + "contact": "hello@didit.me", |
| 11 | + "agent_usage": "An agent onboards with a single argument-less call — didit.signup {} — which mints and caches its own Didit API key with no email and no code (Pilot's broker provisions a mailbox, runs Didit's signup, and reads the OTP server-side). It then creates a workflow and a hosted session, hands the user the returned URL, and polls didit.get_decision (or receives a webhook) for the Approved/Declined result — running KYC/ID, liveness, face match, AML, proof-of-address, and email/phone OTP without ever handling document images. Standalone JSON checks (aml, database_validation, email/phone OTP) run directly. The signup is idempotent per Pilot identity, so a fresh install re-fetches the same account. Verifications bill to the agent's own Didit balance; account/session/management calls are free.", |
| 12 | + "capabilities": "signup (one-call broker-minted Didit key — no email, no code) + account (retrieve the cached email + key); workflows CRUD; sessions (create/get-decision/list/update-status/delete/batch-delete/share/import/reviews); standalone aml + database_validation; email + phone OTP verification; billing balance + top-up; blocklist add/remove/list; questionnaires CRUD; users list/get/update/batch-delete; webhook get/update. Documents in help: ID verification, NFC, liveness, face match, face search, age estimation, proof of address, KYB, transaction monitoring, wallet screening — with per-endpoint pricing.", |
| 13 | + "publisher_pubkey": "ed25519:ii6QAc8qZB4NvbOXqnLfnv+OhPqepuK0BISAv9jM5x0=" |
| 14 | + }, |
| 15 | + "source_url": "https://github.com/pilot-protocol/app-template/tree/main/submissions/io.pilot.didit", |
| 16 | + "license": "", |
| 17 | + "categories": [], |
| 18 | + "size": { |
| 19 | + "bundle_bytes": 5130067 |
| 20 | + }, |
| 21 | + "methods": [ |
| 22 | + { |
| 23 | + "name": "didit.signup", |
| 24 | + "summary": "Get your own Didit API key in ONE call — no email, no code, no human step. This signs a keyless request to Pilot's Didit broker, which provisions a mailbox on Pilot infrastructure, registers a Didit account, reads the emailed one-time code server-side, verifies it, and returns your account's api_key. The adapter caches {email, api_key} to $APP/secrets.json, and from then on EVERY other didit.* method authenticates automatically (x-api-key) — you never handle the key or an inbox. Idempotent: the broker mints at most one account per Pilot identity, so a repeat call (or a fresh install) returns the SAME account. Run this ONCE before any other method. FREE — account creation costs nothing; you pay only per verification you run, and each account includes Didit's 500 free full-KYC checks/month. The account (email + key) is retrievable any time via didit.account. Takes no arguments." |
| 25 | + }, |
| 26 | + { |
| 27 | + "name": "didit.account", |
| 28 | + "summary": "Retrieve your cached Didit account — the email the broker provisioned for you and your api_key — plus a signed_up flag. Local, instant, FREE (reads $APP/secrets.json; no backend call). Use it to confirm you're signed up or to read your key. If signed_up is false, call didit.signup first." |
| 29 | + }, |
| 30 | + { |
| 31 | + "name": "didit.billing_balance", |
| 32 | + "summary": "Check your remaining Didit credit balance (and auto-refill settings). FREE. Returns {balance, auto_refill_enabled, auto_refill_amount, auto_refill_threshold}. Verifications draw down this balance; check it before a batch of checks." |
| 33 | + }, |
| 34 | + { |
| 35 | + "name": "didit.billing_topup", |
| 36 | + "summary": "Add credit to your Didit balance. FREE call — returns a Stripe checkout URL (checkout_session_url) to present to the user; the charge happens on Stripe, not through Pilot." |
| 37 | + }, |
| 38 | + { |
| 39 | + "name": "didit.create_workflow", |
| 40 | + "summary": "Create a verification workflow — the reusable template that defines which checks a hosted session runs, in order. FREE to create; you're billed per feature only when a session actually runs it. Returns {uuid} — pass it as workflow_id to didit.create_session. The v3 API takes a `features` ARRAY (in the order users complete them); each item is {feature, config?} where feature is one of OCR, NFC, LIVENESS, FACE_MATCH, PROOF_OF_ADDRESS, QUESTIONNAIRE, DOCUMENT_AI, PHONE_VERIFICATION, EMAIL_VERIFICATION, DATABASE_VALIDATION, AML, IP_ANALYSIS, AGE_ESTIMATION, KYB_REGISTRY, KYB_DOCUMENTS, KYB_KEY_PEOPLE. Example: [{\"feature\":\"OCR\"},{\"feature\":\"LIVENESS\",\"config\":{\"face_liveness_method\":\"PASSIVE\"}},{\"feature\":\"FACE_MATCH\"}]. The API uses a strict field whitelist — any undeclared key (e.g. workflow_type) is a 400. Max 50 workflows per account." |
| 41 | + }, |
| 42 | + { |
| 43 | + "name": "didit.list_workflows", |
| 44 | + "summary": "List your verification workflows with their features and total_price. FREE." |
| 45 | + }, |
| 46 | + { |
| 47 | + "name": "didit.get_workflow", |
| 48 | + "summary": "Get one workflow by id. FREE." |
| 49 | + }, |
| 50 | + { |
| 51 | + "name": "didit.update_workflow", |
| 52 | + "summary": "Update a workflow (partial — send only the fields to change; same field set as create_workflow, e.g. a replacement `features` array, workflow_label, status, is_default). FREE." |
| 53 | + }, |
| 54 | + { |
| 55 | + "name": "didit.delete_workflow", |
| 56 | + "summary": "Delete a workflow. FREE. Existing sessions are unaffected. Returns 204." |
| 57 | + }, |
| 58 | + { |
| 59 | + "name": "didit.create_session", |
| 60 | + "summary": "Start a hosted verification session for a user and get a URL to send them to. This is Didit's recommended path for ID/liveness/face-match/AML/PoA/etc. — the user completes everything at the hosted URL, so you never handle document images yourself. COST is the sum of the features the workflow enables (e.g. a full KYC bundle ≈ $0.33/check; 500 full-KYC checks/month are free), charged to your Didit balance when the session runs. Returns {session_id, session_token, url, status}. Poll didit.get_decision or set a webhook for the result. Nested objects (contact_details, expected_details) are passed as JSON objects." |
| 61 | + }, |
| 62 | + { |
| 63 | + "name": "didit.get_decision", |
| 64 | + "summary": "Get the full decision and extracted data for a session — status plus id_verifications, liveness_checks, face_matches, aml_screenings, phone/email verifications, poa_verifications, database_validations, ip_analyses, and reviews. FREE (reading results). Image URLs in the response expire after 60 minutes. Statuses: Not Started | In Progress | In Review | Approved | Declined | Abandoned | Expired | Resubmitted." |
| 65 | + }, |
| 66 | + { |
| 67 | + "name": "didit.list_sessions", |
| 68 | + "summary": "List/filter your sessions (paginated). FREE." |
| 69 | + }, |
| 70 | + { |
| 71 | + "name": "didit.update_session_status", |
| 72 | + "summary": "Manually override a session's status (approve/decline/resubmit) — the programmatic-review action. FREE. For Resubmitted, pass nodes_to_resubmit; the session must be Declined, In Review, or Abandoned." |
| 73 | + }, |
| 74 | + { |
| 75 | + "name": "didit.delete_session", |
| 76 | + "summary": "Permanently delete a session and all its data. FREE. Returns 204." |
| 77 | + }, |
| 78 | + { |
| 79 | + "name": "didit.batch_delete_sessions", |
| 80 | + "summary": "Delete many sessions at once by number (or all). FREE." |
| 81 | + }, |
| 82 | + { |
| 83 | + "name": "didit.share_session", |
| 84 | + "summary": "Generate a share_token so a partner can import a finished session (B2B KYC reuse). FREE. Works only for finished sessions." |
| 85 | + }, |
| 86 | + { |
| 87 | + "name": "didit.import_session", |
| 88 | + "summary": "Import a session shared by a partner via its share_token. FREE." |
| 89 | + }, |
| 90 | + { |
| 91 | + "name": "didit.list_reviews", |
| 92 | + "summary": "List the manual-review activity for a session (status changes, notes). FREE." |
| 93 | + }, |
| 94 | + { |
| 95 | + "name": "didit.create_review", |
| 96 | + "summary": "Add a manual review decision to a session (Approved/Declined/In Review). FREE." |
| 97 | + }, |
| 98 | + { |
| 99 | + "name": "didit.aml", |
| 100 | + "summary": "Screen a person or company against sanctions, PEP, and adverse-media watchlists (standalone, no session). COST $0.20/check on your Didit balance. Returns matches with scores and categories." |
| 101 | + }, |
| 102 | + { |
| 103 | + "name": "didit.database_validation", |
| 104 | + "summary": "Cross-check identity fields against government / authoritative databases (standalone). COST from $0.05/check (1x1, single source) to $0.30 (2x2, two-source cross-validation); varies by country/source. Covers 1,000+ sources across 18+ countries." |
| 105 | + }, |
| 106 | + { |
| 107 | + "name": "didit.email_send", |
| 108 | + "summary": "Send a one-time verification code to an email address. Part of email verification ($0.03 per completed verification, charged to your Didit balance)." |
| 109 | + }, |
| 110 | + { |
| 111 | + "name": "didit.email_check", |
| 112 | + "summary": "Verify the email OTP the user received. Completes an email verification ($0.03)." |
| 113 | + }, |
| 114 | + { |
| 115 | + "name": "didit.phone_send", |
| 116 | + "summary": "Send a one-time code by SMS / WhatsApp / Telegram. Part of phone verification (from $0.03 per completed verification, varies by channel)." |
| 117 | + }, |
| 118 | + { |
| 119 | + "name": "didit.phone_check", |
| 120 | + "summary": "Verify the phone OTP the user received. Completes a phone verification (from $0.03)." |
| 121 | + }, |
| 122 | + { |
| 123 | + "name": "didit.blocklist_add", |
| 124 | + "summary": "Add a session's face/document/phone/email to your blocklist so future matches auto-flag (FACE_IN_BLOCKLIST, etc.). FREE." |
| 125 | + }, |
| 126 | + { |
| 127 | + "name": "didit.blocklist_remove", |
| 128 | + "summary": "Remove items from your blocklist. FREE." |
| 129 | + }, |
| 130 | + { |
| 131 | + "name": "didit.blocklist_list", |
| 132 | + "summary": "List your blocklisted items. FREE." |
| 133 | + }, |
| 134 | + { |
| 135 | + "name": "didit.create_questionnaire", |
| 136 | + "summary": "Create a custom form (7 element types) to attach to a questionnaire_verification workflow. FREE." |
| 137 | + }, |
| 138 | + { |
| 139 | + "name": "didit.list_questionnaires", |
| 140 | + "summary": "List your questionnaires. FREE." |
| 141 | + }, |
| 142 | + { |
| 143 | + "name": "didit.get_questionnaire", |
| 144 | + "summary": "Get one questionnaire. FREE." |
| 145 | + }, |
| 146 | + { |
| 147 | + "name": "didit.update_questionnaire", |
| 148 | + "summary": "Update a questionnaire (partial). FREE." |
| 149 | + }, |
| 150 | + { |
| 151 | + "name": "didit.delete_questionnaire", |
| 152 | + "summary": "Delete a questionnaire. FREE. Returns 204." |
| 153 | + }, |
| 154 | + { |
| 155 | + "name": "didit.list_users", |
| 156 | + "summary": "List verified individuals (grouped by vendor_data) with status and session counts. FREE." |
| 157 | + }, |
| 158 | + { |
| 159 | + "name": "didit.get_user", |
| 160 | + "summary": "Get one user by your vendor_data. FREE." |
| 161 | + }, |
| 162 | + { |
| 163 | + "name": "didit.update_user", |
| 164 | + "summary": "Update a user's display name / manual status / metadata. FREE." |
| 165 | + }, |
| 166 | + { |
| 167 | + "name": "didit.batch_delete_users", |
| 168 | + "summary": "Delete many users by vendor_data (or all). FREE." |
| 169 | + }, |
| 170 | + { |
| 171 | + "name": "didit.get_webhook", |
| 172 | + "summary": "Get your webhook configuration (url, version, HMAC secret_shared_key, capture_method). FREE." |
| 173 | + }, |
| 174 | + { |
| 175 | + "name": "didit.update_webhook", |
| 176 | + "summary": "Set/rotate your webhook config programmatically — no console needed. FREE." |
| 177 | + } |
| 178 | + ], |
| 179 | + "changelog": [ |
| 180 | + { |
| 181 | + "version": "1.0.0", |
| 182 | + "notes": [ |
| 183 | + "Published v 1.0.0" |
| 184 | + ] |
| 185 | + } |
| 186 | + ] |
| 187 | +} |
0 commit comments