# Send Didit Phone Verification to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- 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.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "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": {
    "downloadUrl": "/downloads/didit-phone-verification",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=didit-phone-verification",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md",
      "scripts/verify_phone.py"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "didit-phone-verification",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-02T13:23:27.162Z",
      "expiresAt": "2026-05-09T13:23:27.162Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=didit-phone-verification",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=didit-phone-verification",
        "contentDisposition": "attachment; filename=\"didit-phone-verification-1.3.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "didit-phone-verification"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "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."
      ]
    }
  },
  "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"
  }
}
```
## Documentation

### Overview

Two-step phone verification via one-time code:

Send a verification code to a phone number
Check the code the user provides

Key constraints:

Code expires after 5 minutes
Maximum 3 verification attempts per code (then must resend)
Maximum 2 resend requests within 24 hours
Rate limit: 4 sends per hour per phone number
Phone must be in E.164 format (e.g. +14155552671)
You must call Send before Check

Delivery channels: SMS (default fallback), WhatsApp, Telegram, voice call. Falls back to SMS if preferred channel unavailable.

Capabilities: Detects disposable/temporary numbers, VoIP numbers, carrier info, and duplicate numbers. Supports fraud signals for risk scoring.

API Reference: Send Code | Check Code
Feature Guide: https://docs.didit.me/core-technology/phone-verification/overview

### Authentication

All requests require an API key via the x-api-key header.

How to obtain: Didit Business Console → API & Webhooks → Copy API key, or via programmatic registration (see below).

x-api-key: your_api_key_here

### Getting Started (No Account Yet?)

If you don't have a Didit API key, create one in 2 API calls:

Register: POST https://apx.didit.me/auth/v2/programmatic/register/ with {"email": "you@gmail.com", "password": "MyStr0ng!Pass"}
Check email for a 6-character OTP code
Verify: POST https://apx.didit.me/auth/v2/programmatic/verify-email/ with {"email": "you@gmail.com", "code": "A3K9F2"} → response includes api_key

To add credits: GET /v3/billing/balance/ to check, POST /v3/billing/top-up/ with {"amount_in_dollars": 50} for a Stripe checkout link.

See the didit-verification-management skill for full platform management (workflows, sessions, users, billing).

### Request

POST https://verification.didit.me/v3/phone/send/

### Headers

HeaderValueRequiredx-api-keyYour API keyYesContent-Typeapplication/jsonYes

### Body (JSON)

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

### Example

import requests

response = requests.post(
    "https://verification.didit.me/v3/phone/send/",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "phone_number": "+14155552671",
        "options": {"preferred_channel": "sms", "code_size": 6},
        "vendor_data": "session-abc-123",
    },
)

const response = await fetch("https://verification.didit.me/v3/phone/send/", {
  method: "POST",
  headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    phone_number: "+14155552671",
    options: { preferred_channel: "sms", code_size: 6 },
  }),
});

### Status Values & Handling

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

### Error Responses

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

### Step 2: Check Phone Code

Must be called after a successful Send. Optionally auto-declines risky numbers.

### Request

POST https://verification.didit.me/v3/phone/check/

### Body (JSON)

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

### Example

response = requests.post(
    "https://verification.didit.me/v3/phone/check/",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "phone_number": "+14155552671",
        "code": "123456",
        "disposable_number_action": "DECLINE",
        "voip_number_action": "DECLINE",
    },
)

### Response (200 OK)

{
  "request_id": "e39cb057-...",
  "status": "Approved",
  "message": "The verification code is correct.",
  "phone": {
    "status": "Approved",
    "phone_number_prefix": "+1",
    "phone_number": "4155552671",
    "full_number": "+14155552671",
    "country_code": "US",
    "country_name": "United States",
    "carrier": {"name": "ATT", "type": "mobile"},
    "is_disposable": false,
    "is_virtual": false,
    "verification_method": "sms",
    "verification_attempts": 1,
    "verified_at": "2025-08-24T09:12:39.662232Z",
    "warnings": [],
    "lifecycle": [...]
  }
}

### Status Values & Handling

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

### phone Object

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}

### Warning Tags

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

### Basic Phone Verification

1. POST /v3/phone/send/   → {"phone_number": "+14155552671"}
2. Wait for user to provide the code
3. POST /v3/phone/check/  → {"phone_number": "+14155552671", "code": "123456"}
4. If "Approved"            → phone is verified
   If "Failed"              → retry (up to 3 attempts)
   If "Expired or Not Found"→ resend (step 1)

### Strict Security Verification

1. POST /v3/phone/send/   → include signals.ip, signals.device_platform, channel: "sms"
2. POST /v3/phone/check/  → set disposable_number_action + voip_number_action to "DECLINE"
3. If "Declined" → check phone.warnings, block or warn user

### Utility Scripts

export DIDIT_API_KEY="your_api_key"

python scripts/verify_phone.py send +14155552671 --channel sms
python scripts/verify_phone.py check +14155552671 123456 --decline-voip
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: rosasalberto
- Version: 1.3.0
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-02T13:23:27.162Z
- Expires at: 2026-05-09T13:23:27.162Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/didit-phone-verification)
- [Send to Agent page](https://openagent3.xyz/skills/didit-phone-verification/agent)
- [JSON manifest](https://openagent3.xyz/skills/didit-phone-verification/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/didit-phone-verification/agent.md)
- [Download page](https://openagent3.xyz/downloads/didit-phone-verification)