REST API client builder with authentication, error handling, retry logic, and request management. Supports OAuth, JWT, API keys. Use when building API integrations, creating API clients, or working with REST services.
61
73%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/skill-builder-generic/examples/api-client-skill/SKILL.mdBuild robust REST API clients with authentication, comprehensive error handling, automatic retries, and request/response management.
const client = new APIClient({
baseURL: 'https://api.example.com',
apiKey: process.env.API_KEY
});
const response = await client.get('/users');
console.log(response.data);Create client with base configuration:
const client = new APIClient({
baseURL: 'https://api.example.com',
timeout: 5000,
retries: 3
});See references/authentication-guide.md for all methods.
API Key:
client.setAuth({
type: 'apiKey',
key: process.env.API_KEY
});OAuth 2.0:
client.setAuth({
type: 'oauth',
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET
});// GET request
const users = await client.get('/users');
// POST request
const newUser = await client.post('/users', {
name: 'John Doe',
email: 'john@example.com'
});
// PUT request
const updated = await client.put('/users/123', {
name: 'Jane Doe'
});
// DELETE request
await client.delete('/users/123');try {
const response = await client.get('/users');
console.log(response.data);
} catch (error) {
if (error.status === 401) {
console.error('Authentication failed');
} else if (error.status === 429) {
console.error('Rate limit exceeded');
} else {
console.error('Request failed:', error.message);
}
}const client = new APIClient({
// Base configuration
baseURL: 'https://api.example.com',
timeout: 5000, // Request timeout (ms)
// Retry configuration
retries: 3, // Number of retries
retryDelay: 1000, // Initial retry delay (ms)
retryMult iplier: 2, // Exponential backoff multiplier
// Authentication (see references/authentication-guide.md)
auth: {
type: 'apiKey',
key: process.env.API_KEY
},
// Headers
headers: {
'Content-Type': 'application/json',
'Custom-Header': 'value'
},
// Logging
logging: true, // Enable request/response logging
logLevel: 'info' // debug, info, warn, error
});See templates/api-config-template.json for complete configuration template.
client.setAuth({
type: 'apiKey',
key: process.env.API_KEY,
header: 'X-API-Key' // Optional, default: 'Authorization'
});See references/authentication-guide.md#oauth for complete OAuth flow.
See references/authentication-guide.md#jwt for JWT implementation.
Errors are classified into categories for appropriate handling:
| Status Code | Category | Retry? | Action |
|---|---|---|---|
| 400 | Client Error | No | Fix request |
| 401 | Auth Error | No | Refresh token |
| 403 | Permission | No | Check permissions |
| 404 | Not Found | No | Check endpoint |
| 429 | Rate Limit | Yes | Wait and retry |
| 500 | Server Error | Yes | Retry |
| 503 | Unavailable | Yes | Retry |
See references/error-handling.md for complete error handling strategies.
Validate API configuration before using:
python scripts/validate-config.py config.jsonCopy templates from templates/ directory:
api-config-template.json - Complete configurationerror-handler-template.js - Error handling coderetry-logic-template.js - Retry implementationVersion: 1.0 Last Updated: October 25, 2025 Example Type: Complex skill (full structure)
93ed392
Also appears in
since Sep 12, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.