// Validate OpenAPI, Swagger, and GraphQL schemas match backend implementation. Detect breaking changes, generate TypeScript clients, and ensure API documentation stays synchronized. Use when working with API spec files (.yaml, .json, .graphql), reviewing API changes, generating frontend types, or validating endpoint implementations.
| name | API Contract Sync Manager |
| description | Validate OpenAPI, Swagger, and GraphQL schemas match backend implementation. Detect breaking changes, generate TypeScript clients, and ensure API documentation stays synchronized. Use when working with API spec files (.yaml, .json, .graphql), reviewing API changes, generating frontend types, or validating endpoint implementations. |
| allowed-tools | Read, Grep, Glob, RunTerminalCmd |
Maintain synchronization between API specifications and their implementations, detect breaking changes, and generate client code to ensure contracts stay reliable across frontend and backend teams.
Use this skill when:
.yaml, .json).graphql, .gql)Validate API specification files for correctness and completeness:
OpenAPI/Swagger Validation:
GraphQL Validation:
Validation Approach:
$ref)Cross-reference API specifications with actual code implementations:
For REST APIs:
app.get(), router.post(), etc.@app.get(), @router.post()path(), urlpatterns@GetMapping, @PostMappingFor GraphQL:
Implementation Matching Steps:
1. Parse spec โ extract endpoints/operations
2. Use Grep to find route handlers in codebase
3. Compare and categorize:
- โ Matched: spec and implementation align
- โ Drift: partial match with differences
- โ Missing: documented but not implemented
- โ Undocumented: implemented but not in spec
4. Generate coverage report
Compare two versions of an API spec to detect breaking vs. non-breaking changes:
Breaking Changes (require version bump):
Non-Breaking Changes (safe to deploy):
Change Detection Process:
Generate type-safe client code from API specifications:
TypeScript Interfaces:
// From OpenAPI schema
interface User {
id: string;
email: string;
name?: string;
createdAt: Date;
}
interface CreateUserRequest {
email: string;
name?: string;
}
interface CreateUserResponse {
user: User;
token: string;
}
API Client Functions:
// HTTP client with proper typing
async function createUser(
data: CreateUserRequest
): Promise<CreateUserResponse> {
const response = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
return response.json();
}
React Query Hooks:
// Auto-generated hooks for data fetching
function useUser(userId: string) {
return useQuery(['user', userId], () =>
fetch(`/api/users/${userId}`).then(r => r.json())
);
}
function useCreateUser() {
return useMutation((data: CreateUserRequest) =>
fetch('/api/users', {
method: 'POST',
body: JSON.stringify(data)
}).then(r => r.json())
);
}
Generation Steps:
Identify gaps between documentation and implementation:
Analysis Report Structure:
API Coverage Report
==================
Documented Endpoints: 45
Implemented Endpoints: 42
Coverage: 93%
Missing Implementations:
- DELETE /api/users/{id} (documented but not found)
- POST /api/users/{id}/suspend (documented but not found)
Undocumented Endpoints:
- GET /api/internal/health (found in code, not in spec)
- POST /api/debug/reset (found in code, not in spec)
Mismatched Signatures:
- POST /api/users
Spec expects: { email, name, role }
Code accepts: { email, name } (missing 'role')
Coverage Analysis Process:
Create upgrade guides when API versions change:
Migration Guide Template:
# API v2.0 Migration Guide
## Breaking Changes
### 1. User Creation Endpoint
**Change**: Required `role` field added to POST /api/users
**Impact**: All user creation calls will fail without this field
**Action Required**:
- Update all POST /api/users calls to include `role`
- Default to 'member' if no specific role needed
Before:
```json
{ "email": "user@example.com", "name": "John" }
After:
{ "email": "user@example.com", "name": "John", "role": "member" }
Change: JWT tokens now use RS256 instead of HS256 Impact: Token validation must be updated Action Required:
**Guide Generation Steps**:
1. Detect all breaking changes (see section 3)
2. Group changes by endpoint or feature
3. For each change, document:
- What changed and why
- Impact on existing clients
- Required code updates with before/after examples
- Timeline for deprecation
4. Add general upgrade instructions
## Best Practices
### For OpenAPI Specs
1. **Use $ref liberally**: Define schemas once, reference everywhere
2. **Version your APIs**: Use `/v1/`, `/v2/` prefixes or version headers
3. **Add examples**: Include request/response examples in spec
4. **Document errors**: Define all possible error responses
5. **Security first**: Always specify security requirements
### For GraphQL Schemas
1. **Use descriptions**: Document all types, fields, and arguments
2. **Deprecate, don't remove**: Use `@deprecated` directive
3. **Input validation**: Use custom scalars for validated types
4. **Pagination patterns**: Use connection/edge patterns consistently
5. **Error handling**: Define custom error types
### For Breaking Changes
1. **Version bump**: Major version for breaking changes
2. **Deprecation period**: Maintain old version for transition
3. **Clear communication**: Document changes prominently
4. **Backward compatibility**: Provide adapters when possible
5. **Client coordination**: Ensure clients can update before removal
## Common Workflows
### Workflow 1: Validate Existing Spec
### Workflow 2: Check Implementation Match
### Workflow 3: Detect Breaking Changes
### Workflow 4: Generate TypeScript Types
### Workflow 5: Find Coverage Gaps
## Tools and Commands
### Validation Tools
When validation tools are available, use them:
- **OpenAPI**: `npx @stoplight/spectral-cli lint openapi.yaml`
- **GraphQL**: `npx graphql-inspector validate schema.graphql`
### Comparison Tools
For advanced diff analysis:
- **OpenAPI**: `npx openapi-diff old.yaml new.yaml`
- **GraphQL**: `npx graphql-inspector diff old.graphql new.graphql`
### Code Generation
Recommend these tools for automated generation:
- **openapi-typescript**: Generate TypeScript from OpenAPI
- **graphql-code-generator**: Generate TypeScript from GraphQL
- **orval**: Generate React Query hooks from OpenAPI
## Error Handling
When encountering issues:
**Invalid Spec File**:
- Report specific syntax errors with line numbers
- Suggest corrections based on spec version
- Provide valid example structure
**Missing Implementation**:
- List file locations where handlers should exist
- Suggest framework-specific code to implement
- Estimate implementation effort
**Type Mismatches**:
- Show expected vs. actual types clearly
- Explain impact of the mismatch
- Suggest type coercion or spec updates
## Additional Resources
For more detailed information on specific topics, see:
- [REFERENCE.md](REFERENCE.md) - Technical details on OpenAPI and GraphQL structures
- [EXAMPLES.md](EXAMPLES.md) - Real-world usage scenarios and code samples
## Requirements
This skill works best with:
- API spec files in the codebase
- Structured routing in backend code
- TypeScript for type generation (optional but recommended)
No additional packages are required for basic validation and comparison. Advanced features may suggest installing validation tools via npm.