Reduce time-to-first-API-call (TTFAC) by optimizing every step of the developer onboarding journey. This skill covers authentication simplification, sandbox environments, interactive documentation, and identifying and eliminating common failure points. Trigger phrases: "API...
npx skills add https://github.com/lingxling/awesome-skills-cn --skill api-onboarding
Use this skill when you need reduce time-to-first-API-call (TTFAC) by optimizing every step of the developer onboarding journey. This skill covers authentication simplification, sandbox environments, interactive documentation, and identifying and eliminating common failure points. Trigger phrases: "API...
The time between a developer discovering your API and successfully making their first call is the most critical window in your entire developer journey. Every minute of friction here costs you potential users.
Time-to-First-API-Call (TTFAC) is the single most predictive metric for developer adoption. Developers who succeed quickly become active users. Developers who struggle leave—often silently.
This skill covers:
Review the developer-audience-context skill to understand:
Your onboarding should meet developers where they are.
Time-to-First-API-Call measures the elapsed time from a developer's first interaction to their first successful API response. This includes:
| Rating | TTFAC | Developer Experience |
|--------|-------|---------------------|
| Excellent | < 5 min | "This is amazing" |
| Good | 5-15 min | "Pretty straightforward" |
| Acceptable | 15-30 min | "Got there eventually" |
| Poor | 30-60 min | "This is frustrating" |
| Failing | > 60 min | "I'll try something else" |
Instrumentation points:
// Track these events with timestamps
analytics.track('docs_quickstart_viewed');
analytics.track('signup_started');
analytics.track('signup_completed');
analytics.track('api_key_created');
analytics.track('sdk_installed'); // Via package manager data
analytics.track('first_api_call'); // Via API logs
analytics.track('first_successful_call');
Calculate:
Authentication is the #1 source of onboarding friction. Simplify ruthlessly.
The Approval Queue
❌ "Your API access request has been submitted.
You'll receive access within 2-3 business days."
Developers leave and find an alternative.
The Hidden Key
❌ Settings → Team → API → Credentials → Keys → Show Key
Make keys visible on dashboard home.
The Complex Token
❌ OAuth flow requiring:
- Client ID
- Client secret
- Redirect URI configuration
- Token exchange
- Token refresh handling
For getting started, provide simple API keys.
The Verification Gauntlet
❌ Sign up → Verify email → Verify phone →
Add payment → Verify payment → Then API key
Minimize friction for first API call.
Provide Test Keys Immediately
✅ "Here's your test API key: sk_test_abc123...
Use this in sandbox mode—no charges, no setup."
Support Multiple Auth Methods
✅ Quickstart: API key header
Production: OAuth when they need it
Pre-populate Examples
✅ # Your API key is pre-filled in these examples
curl -H "Authorization: Bearer sk_test_YOUR_KEY" ...
Delay Production Requirements
✅ Test mode: Instant access
Production mode: Add payment, verify identity (later)
A sandbox removes the fear of "breaking something" and lets developers experiment freely.
Instant Access: No approval, no payment, no complex setup
Realistic Behavior: Same API, same responses, same errors
Clear Boundaries: Obvious when in sandbox vs. production
Reset Capability: Easy way to start fresh
Generous Limits: Don't rate-limit experimentation
Separate Endpoints
Production: api.example.com
Sandbox: sandbox-api.example.com
Key Prefixes
Production key: sk_live_abc123...
Sandbox key: sk_test_xyz789...
Environment Parameter
curl -X POST https://api.example.com/v1/messages \
-H "Authorization: Bearer $API_KEY" \
-d '{"sandbox": true, ...}'
Pre-populated Test Data
// Sandbox comes with test users
const testUsers = await client.users.list();
// Returns: [
// { id: "usr_test_alice", name: "Alice (Test)" },
// { id: "usr_test_bob", name: "Bob (Test)" }
// ]
Magic Values
// Special values trigger specific behaviors
client.payments.create({
amount: 1000,
card: "4242424242424242" // Always succeeds
});
client.payments.create({
amount: 1000,
card: "4000000000000002" // Always declines
});
Documented Test Scenarios
## Test Card Numbers
| Number | Behavior |
|-----------------|----------------------|
| 4242424242424242 | Successful charge |
| 4000000000000002 | Declined |
| 4000000000009995 | Insufficient funds |
| 4000000000000069 | Expired card |
Let developers make API calls without leaving the browser.
Essential Features:
Implementation:
<div class="api-explorer">
<h3>Try it: Send a Message</h3>
<div class="request-editor">
<label>To Phone Number</label>
<input type="text" value="+15551234567" />
<label>Message Body</label>
<textarea>Hello from the API Explorer!</textarea>
<button onclick="sendRequest()">Send Request</button>
</div>
<div class="response-viewer">
<h4>Response</h4>
<pre><code id="response"></code></pre>
</div>
</div>
OpenAPI-Based:
Custom Platforms:
Go beyond single requests:
## Interactive Tutorial: Send Your First Message
### Step 1: Check your balance
<api-explorer endpoint="GET /account/balance" />
### Step 2: Send a message
<api-explorer endpoint="POST /messages"
body='{"to": "+15551234567", "body": "Hello!"}' />
### Step 3: Check message status
<api-explorer endpoint="GET /messages/{id}"
params='{"id": "{{previous.id}}"}' />
Track where developers fail and why:
// Instrument error events
api.on('request_error', (error, request) => {
analytics.track('api_error', {
error_type: error.type,
error_code: error.code,
endpoint: request.endpoint,
time_since_signup: timeSinceSignup(),
is_first_call: isFirstCall()
});
});
1. Authentication Errors (40% of first-call failures)
Problem: Wrong key, malformed header, missing auth
Fix:
- Clearer error messages: "API key should start with 'sk_test_'"
- Pre-filled code examples with actual key
- Auth header format shown with example
2. Request Format Errors (25%)
Problem: Wrong content type, malformed JSON, missing fields
Fix:
- Accept flexible content types on simple endpoints
- Return specific field-level errors
- Show exactly what was expected vs. received
3. Environment/Setup Errors (20%)
Problem: SDK not installed, wrong SDK version, missing dependencies
Fix:
- Version-specific installation instructions
- Compatibility matrix clearly visible
- Quick environment check script
4. Rate Limiting (10%)
Problem: Aggressive rate limits during exploration
Fix:
- Generous sandbox limits (or none)
- Clear rate limit errors with retry-after
- Don't count failed requests against limits
5. Networking Errors (5%)
Problem: Firewall, proxy, SSL issues
Fix:
- Connectivity test endpoint
- Clear networking troubleshooting guide
- Alternative ports/protocols if possible
Design error messages that recover the onboarding:
{
"error": {
"type": "authentication_error",
"message": "Invalid API key provided",
"code": "invalid_api_key",
"recovery": {
"steps": [
"Check that your API key starts with 'sk_test_' or 'sk_live_'",
"Ensure there are no extra spaces or newlines",
"Generate a new key at https://dashboard.example.com/keys"
],
"docs": "https://docs.example.com/authentication",
"support": "https://support.example.com/auth-issues"
}
}
}
Perform this audit quarterly (or after any onboarding changes):
As a New Developer:
Questions to Answer:
| Friction | Impact | Priority |
|----------|--------|----------|
| Must verify email before API key | High | Fix immediately |
| API key buried in settings | High | Fix immediately |
| No copy button on code examples | Medium | Fix this quarter |
| Quickstart assumes specific OS | Medium | Fix this quarter |
| Example uses outdated SDK version | Low | Fix when updating docs |
You are a dependency security expert specializing in vulnerability scanning, license compliance, and supply chain security. Analyze project dependencies for known vulnerabilities, licensing issues, outdated packages, and provide actionable remediation strategies.
Perform language and framework specific security best-practice reviews and suggest improvements. Trigger only when the user explicitly requests security best practices guidance, a security review/report, or secure-by-default coding help. Trigger only for supported languages (python, javascript/typescript, go). Do not trigger for general code review, debugging, or non-security tasks.
Implement authentication and authorization with Better Auth - a framework-agnostic TypeScript authentication framework. Features include email/password authentication with verification, OAuth providers (Google, GitHub, Discord, etc.), two-factor authentication (TOTP, SMS), passkeys/WebAuthn support, session management, role-based access control (RBAC), rate limiting, and database adapters. Use when adding authentication to applications, implementing OAuth flows, setting up 2FA/MFA, managing user sessions, configuring authorization rules, or building secure authentication systems for web applications.
Package entire code repositories into single AI-friendly files using Repomix. Capabilities include pack codebases with customizable include/exclude patterns, generate multiple output formats (XML, Markdown, plain text), preserve file structure and context, optimize for AI consumption with token counting, filter by file types and directories, add custom headers and summaries. Use when packaging codebases for AI analysis, creating repository snapshots for LLM context, analyzing third-party libraries, preparing for security audits, generating documentation context, or evaluating unfamiliar codebases.
Perform language and framework specific security best-practice reviews and suggest improvements. Use when the user explicitly requests security best practices guidance, a security review or report, or secure-by-default coding help. Supports Python, JavaScript/TypeScript, and Go. Do NOT use for general code review, debugging, threat modeling (use security-threat-model), or non-security tasks.
Configures API gateways for routing, authentication, rate limiting, and request transformation in microservice architectures. Use when setting up Kong, Nginx, AWS API Gateway, or Traefik for centralized API management.
Implement secure API design patterns including authentication, authorization, input validation, rate limiting, and protection against common API vulnerabilities
You are a dependency security expert specializing in vulnerability scanning, license compliance, and supply chain security. Analyze project dependencies for known vulnerabilities, licensing issues, outdated packages, and provide actionable remediation strategies.
Take lingxling/api-onboarding from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.