{
  "schemaVersion": "1.0",
  "item": {
    "slug": "didit-phone-verification",
    "name": "Didit Phone Verification",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/rosasalberto/didit-phone-verification",
    "canonicalUrl": "https://clawhub.ai/rosasalberto/didit-phone-verification",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/didit-phone-verification",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=didit-phone-verification",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/verify_phone.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/didit-phone-verification"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/didit-phone-verification",
    "agentPageUrl": "https://openagent3.xyz/skills/didit-phone-verification/agent",
    "manifestUrl": "https://openagent3.xyz/skills/didit-phone-verification/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/didit-phone-verification/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "Two-step phone verification via one-time code:\n\nSend a verification code to a phone number\nCheck the code the user provides\n\nKey constraints:\n\nCode expires after 5 minutes\nMaximum 3 verification attempts per code (then must resend)\nMaximum 2 resend requests within 24 hours\nRate limit: 4 sends per hour per phone number\nPhone must be in E.164 format (e.g. +14155552671)\nYou must call Send before Check\n\nDelivery channels: SMS (default fallback), WhatsApp, Telegram, voice call. Falls back to SMS if preferred channel unavailable.\n\nCapabilities: Detects disposable/temporary numbers, VoIP numbers, carrier info, and duplicate numbers. Supports fraud signals for risk scoring.\n\nAPI Reference: Send Code | Check Code\nFeature Guide: https://docs.didit.me/core-technology/phone-verification/overview"
      },
      {
        "title": "Authentication",
        "body": "All requests require an API key via the x-api-key header.\n\nHow to obtain: Didit Business Console → API & Webhooks → Copy API key, or via programmatic registration (see below).\n\nx-api-key: your_api_key_here"
      },
      {
        "title": "Getting Started (No Account Yet?)",
        "body": "If you don't have a Didit API key, create one in 2 API calls:\n\nRegister: POST https://apx.didit.me/auth/v2/programmatic/register/ with {\"email\": \"you@gmail.com\", \"password\": \"MyStr0ng!Pass\"}\nCheck email for a 6-character OTP code\nVerify: POST https://apx.didit.me/auth/v2/programmatic/verify-email/ with {\"email\": \"you@gmail.com\", \"code\": \"A3K9F2\"} → response includes api_key\n\nTo add credits: GET /v3/billing/balance/ to check, POST /v3/billing/top-up/ with {\"amount_in_dollars\": 50} for a Stripe checkout link.\n\nSee the didit-verification-management skill for full platform management (workflows, sessions, users, billing)."
      },
      {
        "title": "Request",
        "body": "POST https://verification.didit.me/v3/phone/send/"
      },
      {
        "title": "Headers",
        "body": "HeaderValueRequiredx-api-keyYour API keyYesContent-Typeapplication/jsonYes"
      },
      {
        "title": "Body (JSON)",
        "body": "ParameterTypeRequiredDefaultConstraintsDescriptionphone_numberstringYes—E.164 formatPhone number (e.g. +14155552671)options.code_sizeintegerNo6Min: 4, Max: 8Code lengthoptions.localestringNo—Max 5 charsLocale for message. e.g. en-USoptions.preferred_channelstringNo\"whatsapp\"See channels\"sms\", \"whatsapp\", \"telegram\", \"voice\"signals.ipstringNo—IPv4/IPv6User's IP for fraud detectionsignals.device_idstringNo—Max 255 charsUnique device identifiersignals.device_platformstringNo—Enum\"android\", \"ios\", \"ipados\", \"tvos\", \"web\"signals.device_modelstringNo—Max 255 charse.g. iPhone17,2signals.os_versionstringNo—Max 64 charse.g. 18.0.1signals.app_versionstringNo—Max 64 charse.g. 1.2.34signals.user_agentstringNo—Max 512 charsBrowser user agentvendor_datastringNo——Your identifier for session tracking"
      },
      {
        "title": "Example",
        "body": "import requests\n\nresponse = requests.post(\n    \"https://verification.didit.me/v3/phone/send/\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\", \"Content-Type\": \"application/json\"},\n    json={\n        \"phone_number\": \"+14155552671\",\n        \"options\": {\"preferred_channel\": \"sms\", \"code_size\": 6},\n        \"vendor_data\": \"session-abc-123\",\n    },\n)\n\nconst response = await fetch(\"https://verification.didit.me/v3/phone/send/\", {\n  method: \"POST\",\n  headers: { \"x-api-key\": \"YOUR_API_KEY\", \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({\n    phone_number: \"+14155552671\",\n    options: { preferred_channel: \"sms\", code_size: 6 },\n  }),\n});"
      },
      {
        "title": "Status Values & Handling",
        "body": "StatusMeaningAction\"Success\"Code sentWait for user to provide code, then call Check\"Retry\"Temporary issueWait a few seconds and retry (max 2 retries)\"Undeliverable\"Number cannot receive messagesInform user. Try a different number\"Blocked\"Number blocked (spam)Use a different number"
      },
      {
        "title": "Error Responses",
        "body": "CodeMeaningAction400Invalid request bodyCheck phone format (E.164) and parameters401Invalid or missing API keyVerify x-api-key header403Insufficient credits/permissionsCheck credits in Business Console429Rate limited (4/hour/number)Wait for cooldown period"
      },
      {
        "title": "Step 2: Check Phone Code",
        "body": "Must be called after a successful Send. Optionally auto-declines risky numbers."
      },
      {
        "title": "Request",
        "body": "POST https://verification.didit.me/v3/phone/check/"
      },
      {
        "title": "Body (JSON)",
        "body": "ParameterTypeRequiredDefaultValuesDescriptionphone_numberstringYes—E.164Same phone used in Step 1codestringYes—4-8 charsThe code the user receivedduplicated_phone_number_actionstringNo\"NO_ACTION\"\"NO_ACTION\" / \"DECLINE\"Decline if already verified by another userdisposable_number_actionstringNo\"NO_ACTION\"\"NO_ACTION\" / \"DECLINE\"Decline disposable/temporary numbersvoip_number_actionstringNo\"NO_ACTION\"\"NO_ACTION\" / \"DECLINE\"Decline VoIP numbers"
      },
      {
        "title": "Example",
        "body": "response = requests.post(\n    \"https://verification.didit.me/v3/phone/check/\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\", \"Content-Type\": \"application/json\"},\n    json={\n        \"phone_number\": \"+14155552671\",\n        \"code\": \"123456\",\n        \"disposable_number_action\": \"DECLINE\",\n        \"voip_number_action\": \"DECLINE\",\n    },\n)"
      },
      {
        "title": "Response (200 OK)",
        "body": "{\n  \"request_id\": \"e39cb057-...\",\n  \"status\": \"Approved\",\n  \"message\": \"The verification code is correct.\",\n  \"phone\": {\n    \"status\": \"Approved\",\n    \"phone_number_prefix\": \"+1\",\n    \"phone_number\": \"4155552671\",\n    \"full_number\": \"+14155552671\",\n    \"country_code\": \"US\",\n    \"country_name\": \"United States\",\n    \"carrier\": {\"name\": \"ATT\", \"type\": \"mobile\"},\n    \"is_disposable\": false,\n    \"is_virtual\": false,\n    \"verification_method\": \"sms\",\n    \"verification_attempts\": 1,\n    \"verified_at\": \"2025-08-24T09:12:39.662232Z\",\n    \"warnings\": [],\n    \"lifecycle\": [...]\n  }\n}"
      },
      {
        "title": "Status Values & Handling",
        "body": "StatusMeaningAction\"Approved\"Code correct, no policy violationsPhone verified — proceed\"Failed\"Code incorrectAsk user to retry (up to 3 attempts)\"Declined\"Code correct but policy violationCheck phone.warnings for reason\"Expired or Not Found\"No pending codeResend via Step 1"
      },
      {
        "title": "phone Object",
        "body": "FieldTypeDescriptionstatusstring\"Approved\", \"Failed\", \"Declined\"phone_number_prefixstringCountry prefix (e.g. +1)full_numberstringFull E.164 numbercountry_codestringISO 3166-1 alpha-2carrier.namestringCarrier namecarrier.typestring\"mobile\", \"landline\", \"voip\", \"unknown\"is_disposablebooleanDisposable/temporary numberis_virtualbooleanVoIP numberverification_methodstring\"sms\", \"whatsapp\", \"telegram\", \"voice\"verification_attemptsintegerCheck attempts made (max 3)warningsarray{risk, log_type, short_description, long_description}"
      },
      {
        "title": "Warning Tags",
        "body": "TagDescriptionAuto-DeclineVERIFICATION_CODE_ATTEMPTS_EXCEEDEDMax code attempts exceededYesPHONE_NUMBER_IN_BLOCKLISTPhone is in blocklistYesHIGH_RISK_PHONE_NUMBERIdentified as high riskYesDISPOSABLE_NUMBER_DETECTEDTemporary/disposable numberConfigurableVOIP_NUMBER_DETECTEDVoIP number detectedConfigurableDUPLICATED_PHONE_NUMBERAlready verified by another userConfigurable"
      },
      {
        "title": "Basic Phone Verification",
        "body": "1. POST /v3/phone/send/   → {\"phone_number\": \"+14155552671\"}\n2. Wait for user to provide the code\n3. POST /v3/phone/check/  → {\"phone_number\": \"+14155552671\", \"code\": \"123456\"}\n4. If \"Approved\"            → phone is verified\n   If \"Failed\"              → retry (up to 3 attempts)\n   If \"Expired or Not Found\"→ resend (step 1)"
      },
      {
        "title": "Strict Security Verification",
        "body": "1. POST /v3/phone/send/   → include signals.ip, signals.device_platform, channel: \"sms\"\n2. POST /v3/phone/check/  → set disposable_number_action + voip_number_action to \"DECLINE\"\n3. If \"Declined\" → check phone.warnings, block or warn user"
      },
      {
        "title": "Utility Scripts",
        "body": "export DIDIT_API_KEY=\"your_api_key\"\n\npython scripts/verify_phone.py send +14155552671 --channel sms\npython scripts/verify_phone.py check +14155552671 123456 --decline-voip"
      }
    ],
    "body": "Didit Phone Verification API\nOverview\n\nTwo-step phone verification via one-time code:\n\nSend a verification code to a phone number\nCheck the code the user provides\n\nKey constraints:\n\nCode expires after 5 minutes\nMaximum 3 verification attempts per code (then must resend)\nMaximum 2 resend requests within 24 hours\nRate limit: 4 sends per hour per phone number\nPhone must be in E.164 format (e.g. +14155552671)\nYou must call Send before Check\n\nDelivery channels: SMS (default fallback), WhatsApp, Telegram, voice call. Falls back to SMS if preferred channel unavailable.\n\nCapabilities: Detects disposable/temporary numbers, VoIP numbers, carrier info, and duplicate numbers. Supports fraud signals for risk scoring.\n\nAPI Reference: Send Code | Check Code Feature Guide: https://docs.didit.me/core-technology/phone-verification/overview\n\nAuthentication\n\nAll requests require an API key via the x-api-key header.\n\nHow to obtain: Didit Business Console → API & Webhooks → Copy API key, or via programmatic registration (see below).\n\nx-api-key: your_api_key_here\n\nGetting Started (No Account Yet?)\n\nIf you don't have a Didit API key, create one in 2 API calls:\n\nRegister: POST https://apx.didit.me/auth/v2/programmatic/register/ with {\"email\": \"you@gmail.com\", \"password\": \"MyStr0ng!Pass\"}\nCheck email for a 6-character OTP code\nVerify: POST https://apx.didit.me/auth/v2/programmatic/verify-email/ with {\"email\": \"you@gmail.com\", \"code\": \"A3K9F2\"} → response includes api_key\n\nTo add credits: GET /v3/billing/balance/ to check, POST /v3/billing/top-up/ with {\"amount_in_dollars\": 50} for a Stripe checkout link.\n\nSee the didit-verification-management skill for full platform management (workflows, sessions, users, billing).\n\nStep 1: Send Phone Code\nRequest\nPOST https://verification.didit.me/v3/phone/send/\n\nHeaders\nHeader\tValue\tRequired\nx-api-key\tYour API key\tYes\nContent-Type\tapplication/json\tYes\nBody (JSON)\nParameter\tType\tRequired\tDefault\tConstraints\tDescription\nphone_number\tstring\tYes\t—\tE.164 format\tPhone number (e.g. +14155552671)\noptions.code_size\tinteger\tNo\t6\tMin: 4, Max: 8\tCode length\noptions.locale\tstring\tNo\t—\tMax 5 chars\tLocale for message. e.g. en-US\noptions.preferred_channel\tstring\tNo\t\"whatsapp\"\tSee channels\t\"sms\", \"whatsapp\", \"telegram\", \"voice\"\nsignals.ip\tstring\tNo\t—\tIPv4/IPv6\tUser's IP for fraud detection\nsignals.device_id\tstring\tNo\t—\tMax 255 chars\tUnique device identifier\nsignals.device_platform\tstring\tNo\t—\tEnum\t\"android\", \"ios\", \"ipados\", \"tvos\", \"web\"\nsignals.device_model\tstring\tNo\t—\tMax 255 chars\te.g. iPhone17,2\nsignals.os_version\tstring\tNo\t—\tMax 64 chars\te.g. 18.0.1\nsignals.app_version\tstring\tNo\t—\tMax 64 chars\te.g. 1.2.34\nsignals.user_agent\tstring\tNo\t—\tMax 512 chars\tBrowser user agent\nvendor_data\tstring\tNo\t—\t—\tYour identifier for session tracking\nExample\nimport requests\n\nresponse = requests.post(\n    \"https://verification.didit.me/v3/phone/send/\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\", \"Content-Type\": \"application/json\"},\n    json={\n        \"phone_number\": \"+14155552671\",\n        \"options\": {\"preferred_channel\": \"sms\", \"code_size\": 6},\n        \"vendor_data\": \"session-abc-123\",\n    },\n)\n\nconst response = await fetch(\"https://verification.didit.me/v3/phone/send/\", {\n  method: \"POST\",\n  headers: { \"x-api-key\": \"YOUR_API_KEY\", \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({\n    phone_number: \"+14155552671\",\n    options: { preferred_channel: \"sms\", code_size: 6 },\n  }),\n});\n\nStatus Values & Handling\nStatus\tMeaning\tAction\n\"Success\"\tCode sent\tWait for user to provide code, then call Check\n\"Retry\"\tTemporary issue\tWait a few seconds and retry (max 2 retries)\n\"Undeliverable\"\tNumber cannot receive messages\tInform user. Try a different number\n\"Blocked\"\tNumber blocked (spam)\tUse a different number\nError Responses\nCode\tMeaning\tAction\n400\tInvalid request body\tCheck phone format (E.164) and parameters\n401\tInvalid or missing API key\tVerify x-api-key header\n403\tInsufficient credits/permissions\tCheck credits in Business Console\n429\tRate limited (4/hour/number)\tWait for cooldown period\nStep 2: Check Phone Code\n\nMust be called after a successful Send. Optionally auto-declines risky numbers.\n\nRequest\nPOST https://verification.didit.me/v3/phone/check/\n\nBody (JSON)\nParameter\tType\tRequired\tDefault\tValues\tDescription\nphone_number\tstring\tYes\t—\tE.164\tSame phone used in Step 1\ncode\tstring\tYes\t—\t4-8 chars\tThe code the user received\nduplicated_phone_number_action\tstring\tNo\t\"NO_ACTION\"\t\"NO_ACTION\" / \"DECLINE\"\tDecline if already verified by another user\ndisposable_number_action\tstring\tNo\t\"NO_ACTION\"\t\"NO_ACTION\" / \"DECLINE\"\tDecline disposable/temporary numbers\nvoip_number_action\tstring\tNo\t\"NO_ACTION\"\t\"NO_ACTION\" / \"DECLINE\"\tDecline VoIP numbers\nExample\nresponse = requests.post(\n    \"https://verification.didit.me/v3/phone/check/\",\n    headers={\"x-api-key\": \"YOUR_API_KEY\", \"Content-Type\": \"application/json\"},\n    json={\n        \"phone_number\": \"+14155552671\",\n        \"code\": \"123456\",\n        \"disposable_number_action\": \"DECLINE\",\n        \"voip_number_action\": \"DECLINE\",\n    },\n)\n\nResponse (200 OK)\n{\n  \"request_id\": \"e39cb057-...\",\n  \"status\": \"Approved\",\n  \"message\": \"The verification code is correct.\",\n  \"phone\": {\n    \"status\": \"Approved\",\n    \"phone_number_prefix\": \"+1\",\n    \"phone_number\": \"4155552671\",\n    \"full_number\": \"+14155552671\",\n    \"country_code\": \"US\",\n    \"country_name\": \"United States\",\n    \"carrier\": {\"name\": \"ATT\", \"type\": \"mobile\"},\n    \"is_disposable\": false,\n    \"is_virtual\": false,\n    \"verification_method\": \"sms\",\n    \"verification_attempts\": 1,\n    \"verified_at\": \"2025-08-24T09:12:39.662232Z\",\n    \"warnings\": [],\n    \"lifecycle\": [...]\n  }\n}\n\nStatus Values & Handling\nStatus\tMeaning\tAction\n\"Approved\"\tCode correct, no policy violations\tPhone verified — proceed\n\"Failed\"\tCode incorrect\tAsk user to retry (up to 3 attempts)\n\"Declined\"\tCode correct but policy violation\tCheck phone.warnings for reason\n\"Expired or Not Found\"\tNo pending code\tResend via Step 1\nResponse Field Reference\nphone Object\nField\tType\tDescription\nstatus\tstring\t\"Approved\", \"Failed\", \"Declined\"\nphone_number_prefix\tstring\tCountry prefix (e.g. +1)\nfull_number\tstring\tFull E.164 number\ncountry_code\tstring\tISO 3166-1 alpha-2\ncarrier.name\tstring\tCarrier name\ncarrier.type\tstring\t\"mobile\", \"landline\", \"voip\", \"unknown\"\nis_disposable\tboolean\tDisposable/temporary number\nis_virtual\tboolean\tVoIP number\nverification_method\tstring\t\"sms\", \"whatsapp\", \"telegram\", \"voice\"\nverification_attempts\tinteger\tCheck attempts made (max 3)\nwarnings\tarray\t{risk, log_type, short_description, long_description}\nWarning Tags\nTag\tDescription\tAuto-Decline\nVERIFICATION_CODE_ATTEMPTS_EXCEEDED\tMax code attempts exceeded\tYes\nPHONE_NUMBER_IN_BLOCKLIST\tPhone is in blocklist\tYes\nHIGH_RISK_PHONE_NUMBER\tIdentified as high risk\tYes\nDISPOSABLE_NUMBER_DETECTED\tTemporary/disposable number\tConfigurable\nVOIP_NUMBER_DETECTED\tVoIP number detected\tConfigurable\nDUPLICATED_PHONE_NUMBER\tAlready verified by another user\tConfigurable\nCommon Workflows\nBasic Phone Verification\n1. POST /v3/phone/send/   → {\"phone_number\": \"+14155552671\"}\n2. Wait for user to provide the code\n3. POST /v3/phone/check/  → {\"phone_number\": \"+14155552671\", \"code\": \"123456\"}\n4. If \"Approved\"            → phone is verified\n   If \"Failed\"              → retry (up to 3 attempts)\n   If \"Expired or Not Found\"→ resend (step 1)\n\nStrict Security Verification\n1. POST /v3/phone/send/   → include signals.ip, signals.device_platform, channel: \"sms\"\n2. POST /v3/phone/check/  → set disposable_number_action + voip_number_action to \"DECLINE\"\n3. If \"Declined\" → check phone.warnings, block or warn user\n\nUtility Scripts\nexport DIDIT_API_KEY=\"your_api_key\"\n\npython scripts/verify_phone.py send +14155552671 --channel sms\npython scripts/verify_phone.py check +14155552671 123456 --decline-voip"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/rosasalberto/didit-phone-verification",
    "publisherUrl": "https://clawhub.ai/rosasalberto/didit-phone-verification",
    "owner": "rosasalberto",
    "version": "1.3.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/didit-phone-verification",
    "downloadUrl": "https://openagent3.xyz/downloads/didit-phone-verification",
    "agentUrl": "https://openagent3.xyz/skills/didit-phone-verification/agent",
    "manifestUrl": "https://openagent3.xyz/skills/didit-phone-verification/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/didit-phone-verification/agent.md"
  }
}