Home · Skills · Development
Phone verification
Verify phone numbers using SMS one-time codes via the Didit API.
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/research-tools/capabilities/phone-verification#main ~/.claude/skills/phone-verificationFor one project only, change the path to .claude/skills/phone-verification.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
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 |
Discussion
Alternatives
Also in Services & APIsContext7Pulls up-to-date, version-specific library docs and code examples into the prompt so the AI stops inventing old APIs.Adaptyv Bio Foundry APIHow to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`..NET Backend Development PatternsMaster C#/.NET backend development patterns for building robust APIs, MCP servers, and enterprise applications. Covers async/await, dependency injection, Entity Framework Core, Dapper, configuration, caching, and testing with xUnit. Use when developing .NET backends, reviewing C# code, or designing API architectures.Add AI protectionProtect AI chat and completion endpoints from abuse — detect prompt injection and jailbreak attempts, block PII and sensitive info from leaking in responses, and enforce token budget rate limits to control costs. Use this skill when the user is building or securing any endpoint that processes user prompts with an LLM, even if they describe it as "preventing jailbreaks," "stopping prompt attacks," "blocking sensitive data," or "controlling AI API costs" rather than naming specific protections.