Operations
This section contains operational documentation for maintaining and updating the Datto RMM API clients.
Regular Maintenance
Section titled “Regular Maintenance”Updating the OpenAPI Spec
Section titled “Updating the OpenAPI Spec”The Datto RMM API may be updated periodically. To sync the latest spec:
# Fetch latest spec from Datto RMMpnpm sync:openapi
# Check what changedgit diff specs/datto-rmm-openapi.json
# Regenerate clientspnpm generate:api
# Build and testpnpm build && pnpm typecheckChanging the Spec Platform
Section titled “Changing the Spec Platform”By default, the spec is fetched from Merlot. To use a different platform:
DATTO_PLATFORM=pinotage pnpm sync:openapiAll platforms should have identical specs.
CI/CD Integration
Section titled “CI/CD Integration”Recommended CI Steps
Section titled “Recommended CI Steps”# Example GitHub Actions workflow- name: Install dependencies run: pnpm install
- name: Generate API clients run: pnpm generate:api
- name: Build run: pnpm build
- name: Type check run: pnpm typecheck
- name: Test run: pnpm test
- name: Build Rust run: cargo build -p datto-apiCaching
Section titled “Caching”Cache these directories for faster CI:
node_modules/- pnpm dependencies.turbo/- Turborepo cache~/.cargo/- Cargo registry and cachetarget/- Rust build artifacts
Monitoring API Changes
Section titled “Monitoring API Changes”Detecting Breaking Changes
Section titled “Detecting Breaking Changes”When updating the OpenAPI spec:
- Compare the new spec with the old one
- Look for removed endpoints or changed parameters
- Check for schema changes in response types
- Run the full test suite
# Show spec differencesgit diff specs/datto-rmm-openapi.json | head -100Version Tracking
Section titled “Version Tracking”The spec includes version information:
# Check current spec versionjq '.info.version' specs/datto-rmm-openapi.jsonTroubleshooting
Section titled “Troubleshooting”API Authentication Errors
Section titled “API Authentication Errors”401 Unauthorized
- Verify API key and secret are correct
- Check if credentials have been revoked
- Ensure you’re using the correct platform
403 Forbidden
- Verify API permissions in Datto RMM portal
- Check if the endpoint requires specific permissions
Token Refresh Issues
Section titled “Token Refresh Issues”Both clients cache tokens and refresh proactively. If you see token issues:
- Check token expiry (Datto tokens expire after 100 hours)
- Verify the token endpoint is accessible
- Check for rate limiting
Network Issues
Section titled “Network Issues”Connection Timeouts
- Verify network connectivity to Datto API servers
- Check firewall rules for outbound HTTPS
- Verify DNS resolution for
*.centrastage.net
Generation Failures
Section titled “Generation Failures”TypeScript generation fails
- Ensure the spec is valid JSON
- Check openapi-typescript version compatibility
Rust generation fails
- progenitor doesn’t yet support OpenAPI 3.1.0
- The crate will compile but without generated types
Platform Information
Section titled “Platform Information”API Endpoints
Section titled “API Endpoints”| Platform | API URL | Swagger UI |
|---|---|---|
| Pinotage | pinotage-api.centrastage.net | Swagger |
| Merlot | merlot-api.centrastage.net | Swagger |
| Concord | concord-api.centrastage.net | Swagger |
| Vidal | vidal-api.centrastage.net | Swagger |
| Zinfandel | zinfandel-api.centrastage.net | Swagger |
| Syrah | syrah-api.centrastage.net | Swagger |
Rate Limits
Section titled “Rate Limits”The Datto RMM API has rate limits. Check response headers:
X-RateLimit-Limit- Maximum requests per windowX-RateLimit-Remaining- Requests remainingX-RateLimit-Reset- Window reset time
Backup and Recovery
Section titled “Backup and Recovery”Spec Backup
Section titled “Spec Backup”The OpenAPI spec is committed to git in specs/. This ensures:
- Reproducible builds without network access
- Version history of API changes
- Easy rollback if needed
Recovering from Spec Issues
Section titled “Recovering from Spec Issues”If the spec becomes corrupted or incompatible:
# Revert to last known good specgit checkout HEAD~1 -- specs/datto-rmm-openapi.json
# Or fetch fresh from Dattopnpm sync:openapi