Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Design and validate REST and GraphQL APIs with OpenAPI/GraphQL schema generation, security hardening, and OWASP API Security compliance.
.claude/skills/williamzujkowski-api-design-validator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 190% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 262% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 220% | 0% |
Trigger conditions:
Not for:
Time normalization:
NOW_ET using NIST/time.gov semantics (America/New_York, ISO-8601): 2025-10-25T21:30:36-04:00NOW_ET for all citation access datesInput validation:
api_type must be exactly "REST" or "GraphQL"api_spec if provided must be valid JSON/YAML for REST or SDL string for GraphQLvalidation_tier must be: T1 or T2security_requirements if provided must be valid object with boolean flagsversioning_strategy must be one of: none, path, header, query (for REST only)Source freshness:
Fast path for 80% of schema validation cases:
api_spec provided: parse and validate syntaxOutput: Schema validation report with severity-ranked findings
Token budget: ≤2k tokens (schema parsing + basic validation rules)
Extended validation with OWASP API Security Top 10 compliance:
/resources?cursor=xyz&limit=20/resources?offset=40&limit=20_links.next.href/users?filter[status]=active&filter[role]=admin?sort=-created_at,name (- prefix for descending)?fields=id,name,email (sparse fieldsets)/v1/resources (most common, cache-friendly)Accept: application/vnd.api.v1+json (flexible)/resources?version=1 (least recommended)edges, node, pageInfo structurehasNextPage, hasPreviousPage, startCursor, endCursor@auth directives or resolver-level checksOutput: Complete API design package with security-hardened schema and implementation guidance
Token budget: ≤6k tokens (T1 + OWASP checks + design patterns + 4-6 authoritative sources)
This skill implements T1 and T2 tiers only. For advanced scenarios requiring:
Defer to:
security-assessment-framework (T3) for comprehensive threat modelingmicroservices-pattern-architect for API gateway patternsGraphQL-federation-architect (Phase 3) for federated GraphQL schemasToken budget: N/A (not implemented in this skill)
Ambiguity thresholds:
api_type not specified: ABORT with error "api_type is required: REST or GraphQL"Tier selection:
Abort conditions:
When to invoke dependent skills:
security-assessment-framework (ref CLAUDE.md §3)security-assessment-framework IAM domainSchema types:
typescriptinterface ValidationReport { api_type: "REST" | "GraphQL"; tier: "T1" | "T2"; status: "pass" | "fail" | "warning"; findings: Finding[]; schema?: object | string; // OpenAPI object or GraphQL SDL string security_recommendations?: SecurityRecommendation[]; design_patterns?: DesignPatterns; } interface Finding { severity: "critical" | "high" | "medium" | "low"; category: "syntax" | "security" | "best-practice" | "performance"; message: string; location?: string; // JSON path or GraphQL type/field remediation?: string; owasp_mapping?: string; // e.g., "API1:2023" } interface SecurityRecommendation { owasp_id: string; // API1:2023 through API10:2023 title: string; description: string; current_status: "compliant" | "non-compliant" | "unknown"; action_items: string[]; references: string[]; } interface DesignPatterns { pagination?: object; filtering?: object; sorting?: object; error_handling?: object; versioning?: object; }
Required fields:
api_type, tier, status, findings (always)schema (if T2 or generation requested)security_recommendations, design_patterns (if T2)Data validation:
Example 1: REST API validation (T1)
yamlInput: api_type: "REST" api_spec: openapi: "3.1.0" info: title: "User API" version: "1.0" paths: /users: get: parameters: - name: password in: query responses: 200: description: OK Output: status: "fail" findings: - severity: "critical" category: "security" message: "Sensitive parameter 'password' in query string" location: "/paths/~1users/get/parameters/0" remediation: "Move to request body or header" owasp_mapping: "API8:2023"
Token budgets (mandatory enforcement):
Safety:
Auditability:
Determinism:
Authoritative specifications (accessed 2025-10-25T21:30:36-04:00):
Best practices (accessed 2025-10-25T21:30:36-04:00):
Templates and schemas:
/skills/api-design-validator/resources/templates/ for OpenAPI starter templates/skills/api-design-validator/resources/schemas/ for GraphQL schema examplesSecurity references:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 19,922 | 25,667 | +29% | 1 | 1 | 0% | 5,143 | 7,358 | +43% | 0 | 0 | — |
case-02 | fail→fail | 16,887 | 21,237 | +26% | 1 | 1 | 0% | 2,704 | 6,226 | +130% | 0 | 0 | — |
case-03 | fail→pass | 8,982 | 7,061 | -21% | 1 | 1 | 0% | 2,628 | 5,193 | +98% | 0 | 0 | — |
case-04 | fail→pass | 15,013 | 9,782 | -35% | 1 | 1 | 0% | 3,389 | 5,615 | +66% | 0 | 0 | — |
case-05 | fail→fail | 12,365 | 11,238 | -9% | 1 | 1 | 0% | 3,010 | 5,849 | +94% | 0 | 0 | — |
case-06 | fail→pass | 6,718 | 4,847 | -28% | 1 | 1 | 0% | 1,527 | 4,428 | +190% | 0 | 0 | — |
case-07 | fail→fail | 3,916 | 5,754 | +47% | 1 | 1 | 0% | 1,012 | 4,731 | +367% | 0 | 0 | — |
case-08 | fail→pass | 17,705 | 18,100 | +2% | 1 | 1 | 0% | 1,392 | 5,035 | +262% | 0 | 0 | — |
case-09 | fail→fail | 10,982 | 13,223 | +20% | 1 | 1 | 0% | 2,499 | 6,640 | +166% | 0 | 0 | — |
case-10 | pass→pass | 8,034 | 5,547 | -31% | 1 | 1 | 0% | 1,757 | 4,577 | +161% | 0 | 0 | — |
case-11 | pass→pass | 7,961 | 6,871 | -14% | 1 | 1 | 0% | 1,651 | 5,056 | +206% | 0 | 0 | — |
case-12 | pass→pass | 10,782 | 11,864 | +10% | 1 | 1 | 0% | 2,157 | 6,004 | +178% | 0 | 0 | — |
case-13 | pass→pass | 9,965 | 5,797 | -42% | 1 | 1 | 0% | 1,850 | 4,449 | +140% | 0 | 0 | — |
case-14 | pass→pass | 8,920 | 4,667 | -48% | 1 | 1 | 0% | 1,650 | 4,259 | +158% | 0 | 0 | — |
case-15 | pass→pass | 3,618 | 4,189 | +16% | 1 | 1 | 0% | 647 | 4,204 | +550% | 0 | 0 | — |
case-16 | pass→pass | 4,752 | 9,315 | +96% | 1 | 1 | 0% | 953 | 5,380 | +465% | 0 | 0 | — |
case-17 | fail→pass | 9,174 | 13,767 | +50% | 1 | 1 | 0% | 2,184 | 6,994 | +220% | 0 | 0 | — |
case-18 | fail→pass | 7,689 | 3,611 | -53% | 1 | 1 | 0% | 1,573 | 4,235 | +169% | 0 | 0 | — |
case-19 | pass→pass | 4,472 | 4,264 | -5% | 1 | 1 | 0% | 1,052 | 4,368 | +315% | 0 | 0 | — |
case-20 | fail→pass | 28,692 | 4,900 | -83% | 1 | 1 | 0% | 6,186 | 4,460 | -28% | 0 | 0 | — |
case-21 | pass→pass | 4,949 | 5,093 | +3% | 1 | 1 | 0% | 1,179 | 4,431 | +276% | 0 | 0 | — |
case-22 | pass→pass | 10,776 | 7,175 | -33% | 1 | 1 | 0% | 2,317 | 4,961 | +114% | 0 | 0 | — |
case-23 | pass→pass | 4,124 | 5,386 | +31% | 1 | 1 | 0% | 852 | 4,536 | +432% | 0 | 0 | — |
case-24 | pass→pass | 4,569 | 6,229 | +36% | 1 | 1 | 0% | 654 | 4,709 | +620% | 0 | 0 | — |
case-25 | pass→pass | 11,922 | 8,011 | -33% | 1 | 1 | 0% | 2,517 | 5,038 | +100% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +28 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.