Verify phone numbers using SMS one-time codes
Phone verification

Verify phone numbers using SMS one-time codes via the Didit API. Use when you need to confirm a user owns a phone number, implement SMS-based 2FA, or validate phone during signup/onboarding flows.
---
name: phone-verification
description: Verify phone numbers using SMS one-time codes via the Didit API. Use when you need to confirm a user owns a phone number, implement SMS-based 2FA, or validate phone during signup/onboarding flows.
source: orthogonal
---
# Phone Verification
## Setup
Read your credentials from ~/.gooseworks/credentials.json:
```bash
export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
```
If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login`Overview
If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login
Manual install (npx, ZIP)
npx skills add gooseworks-ai/goose-skills --skill phone-verification -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \
| tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/research-tools/capabilities/phone-verificationNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/cf75f9d335de5b6d340f/phone-verification.zip" -OutFile "$env:TEMP\phone-verification.zip"; Expand-Archive "$env:TEMP\phone-verification.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md3.3 KBskill.meta.json291 B
Read the files here
gooseworks-ai/
Show the full text129 lines
Phone Verification
Setup
Read your credentials from ~/.gooseworks/credentials.json:
export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login
All endpoints use Bearer auth: -H "Authorization: Bearer $GOOSEWORKS_API_KEY"
Verify phone numbers by sending SMS one-time verification codes via Didit.
Quick Start
# Send verification code via SMS
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"didit","path":"/v3/phone/send","body":{"phone_number":"+14155551234"}}'
# Verify the code user provides
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"didit","path":"/v3/phone/check","body":{"phone_number":"+14155551234","code":"123456"}}'
Workflow
1. Send Verification Code
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"didit","path":"/v3/phone/send"}'
-d '{"phone_number": "+14155551234"}'
Request format:
- Phone must be in E.164 format (e.g.,
+14155551234) - Include country code with
+prefix
Response:
{
"success": true,
"message": "Verification code sent"
}
2. Verify Code
When the user provides the code they received:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"didit","path":"/v3/phone/check"}'
-d '{"phone_number": "+14155551234", "code": "123456"}'
Response (success):
{
"success": true,
"verified": true
}
Phone Number Format
Always use E.164 format:
- US:
+14155551234 - UK:
+447911123456 - Germany:
+4915123456789
Use Cases
- User signup: Verify phone before creating account
- SMS 2FA: Add phone-based second factor authentication
- Account recovery: Verify ownership via SMS
- Delivery confirmation: Confirm contact number for orders
Integration Example (TypeScript)
import Orthogonal from "@orth/sdk";
const orthogonal = new Orthogonal({
});
// Send verification code via SMS
const sendResult = await orthogonal.run({
api: "didit",
path: "/v3/phone/send",
body: { phone_number: "+14155551234" }
});
// Verify the code
const verifyResult = await orthogonal.run({
api: "didit",
path: "/v3/phone/check",
body: {
phone_number: "+14155551234",
code: "123456"
}
});
if (verifyResult.data.verified) {
console.log("Phone verified!");
}
| 1 | |
| 2 | name phone-verification |
| 3 | description Verify phone numbers using SMS one-time codes via the Didit API. Use when you need to confirm a user owns a phone number, implement SMS-based 2FA, or validate phone during signup/onboarding flows. |
| 4 | source orthogonal |
| 5 | |
| 6 | |
| 7 | |
| 8 | # Phone Verification |
| 9 | |
| 10 | ## Setup |
| 11 | |
| 12 | Read your credentials from ~/.gooseworks/credentials.json: |
| 13 | |
| 14 | export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])") |
| 15 | export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))") |
| 16 | |
| 17 | |
| 18 | If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login` |
| 19 | |
| 20 | All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"` |
| 21 | |
| 22 | |
| 23 | Verify phone numbers by sending SMS one-time verification codes via Didit. |
| 24 | |
| 25 | ## Quick Start |
| 26 | |
| 27 | |
| 28 | # Send verification code via SMS |
| 29 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 30 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 31 | -H "Content-Type: application/json" \ |
| 32 | -d '{"api":"didit","path":"/v3/phone/send","body":{"phone_number":"+14155551234"}}' |
| 33 | |
| 34 | # Verify the code user provides |
| 35 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 36 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 37 | -H "Content-Type: application/json" \ |
| 38 | -d '{"api":"didit","path":"/v3/phone/check","body":{"phone_number":"+14155551234","code":"123456"}}' |
| 39 | |
| 40 | |
| 41 | ## Workflow |
| 42 | |
| 43 | ### 1. Send Verification Code |
| 44 | |
| 45 | |
| 46 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 47 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 48 | -H "Content-Type: application/json" \ |
| 49 | -d '{"api":"didit","path":"/v3/phone/send"}' |
| 50 | -d '{"phone_number": "+14155551234"}' |
| 51 | |
| 52 | |
| 53 | **Request format:** |
| 54 | Phone must be in E.164 format (e.g., `+14155551234`) |
| 55 | Include country code with `+` prefix |
| 56 | |
| 57 | **Response:** |
| 58 | |
| 59 | { |
| 60 | "success": true, |
| 61 | "message": "Verification code sent" |
| 62 | } |
| 63 | |
| 64 | |
| 65 | ### 2. Verify Code |
| 66 | |
| 67 | When the user provides the code they received: |
| 68 | |
| 69 | |
| 70 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 71 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 72 | -H "Content-Type: application/json" \ |
| 73 | -d '{"api":"didit","path":"/v3/phone/check"}' |
| 74 | -d '{"phone_number": "+14155551234", "code": "123456"}' |
| 75 | |
| 76 | |
| 77 | **Response (success):** |
| 78 | |
| 79 | { |
| 80 | "success": true, |
| 81 | "verified": true |
| 82 | } |
| 83 | |
| 84 | |
| 85 | ## Phone Number Format |
| 86 | |
| 87 | Always use E.164 format: |
| 88 | US: `+14155551234` |
| 89 | UK: `+447911123456` |
| 90 | Germany: `+4915123456789` |
| 91 | |
| 92 | ## Use Cases |
| 93 | |
| 94 | **User signup:** Verify phone before creating account |
| 95 | **SMS 2FA:** Add phone-based second factor authentication |
| 96 | **Account recovery:** Verify ownership via SMS |
| 97 | **Delivery confirmation:** Confirm contact number for orders |
| 98 | |
| 99 | ## Integration Example (TypeScript) |
| 100 | |
| 101 | |
| 102 | import Orthogonal from "@orth/sdk"; |
| 103 | |
| 104 | const orthogonal = new Orthogonal({ |
| 105 | |
| 106 | }); |
| 107 | |
| 108 | // Send verification code via SMS |
| 109 | const sendResult = await orthogonal.run({ |
| 110 | api: "didit", |
| 111 | path: "/v3/phone/send", |
| 112 | body: { phone_number: "+14155551234" } |
| 113 | }); |
| 114 | |
| 115 | // Verify the code |
| 116 | const verifyResult = await orthogonal.run({ |
| 117 | api: "didit", |
| 118 | path: "/v3/phone/check", |
| 119 | body: { |
| 120 | phone_number: "+14155551234", |
| 121 | code: "123456" |
| 122 | } |
| 123 | }); |
| 124 | |
| 125 | if (verifyResult.data.verified) { |
| 126 | console.log("Phone verified!"); |
| 127 | } |
| 128 | |
| 129 |
Details
- Updated
- Sep 21, 2026
- License
- MIT
- Stars on the repo
- ★ 1,220
- Checked
- Source
- gooseworks-ai/goose-skills ↗
- Creator
- gooseworks-ai · 206 listings
Made with phone-verification

Similar skills
See all →
SkillGuides stable API and interface design
MCPPulls up-to-date, version-specific library docsContext7
SkillFetch up-to-date documentation and code examples for anyContext7 Documentation Lookup
SkillHow to use the Adaptyv Bio Foundry API and Python SDK
SkillMaster C/.NET backend development patterns for building
SkillGuides the usage of Gemini Interactions API on GeminiGemini Interactions API SkillMore from gooseworks-ai
SkillMine the highest-converting ad angles from customer reviewsAd angle miner
SkillAnalyze ad campaign performance data to identify what'sAd campaign analyzer
SkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzer
SkillAnalyze the message match between your ads and landing pagesAd to landing page auditor
SkillCheck and improve your brand's visibility across AI searchAeo
SkillSearch Amazon products - find items, compare pricesAmazon Product Search