Source profileQuality 91/100

WYRE-AI/msp-claude-plugins/msp-claude-plugins/kaseya/datto-saas-protection/skills/api-patterns/SKILL.md

Datto SaaS Protection API Patterns

Datto SaaS Protection (formerly Backupify) REST API fundamentals: regional base URLs, bearer-token auth, the seat/tenant object model, backup status queries, and restore operations.

Source repository stars
42
Declared platforms
0
Static risk flags
1
Last source update
2026-08-28
Source checked
2026-08-28

Decision brief

What it does: where it fits

Datto SaaS Protection (formerly Backupify) REST API fundamentals: regional base URLs, bearer-token auth, the seat/tenant object model, backup status queries, and restore operations.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/kaseya/datto-saas-protection/skills/api-patterns"
    Safe inspection promptEditorial

    Inspect the Agent Skill "Datto SaaS Protection API Patterns" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/kaseya/datto-saas-protection/skills/api-patterns/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Status note

      The MCP server (datto-saas-protection-mcp) and SDK (@wyre-technology/node-datto-saas-protection) are in development.

      The MCP server (datto-saas-protection-mcp) and SDK (@wyre-technology/node-datto-saas-protection) are in development.
    2. 02

      Anti-triggers

      Spanning — Kaseya's other cloud-to-cloud backup product covers

      Spanning — Kaseya's other cloud-to-cloud backup product coversDatto's appliance backup — SIRIS/Alto image backup is BCDR, a- Spanning — Kaseya's other cloud-to-cloud backup product covers the same Microsoft 365 and Google Workspace workloads (plus Salesforce) under separate credentials and a separate API; use spanning-api-patterns. - Datto'…
    3. 03

      Authentication

      API key issued from the SaaS Protection partner portal:

      SaaS Protection portal → Settings → API → Create KeyOptional: scope key to specific clientsSend on every request:
    4. 04

      Object model

      Review the “Object model” section in the pinned source before continuing.

      Review and apply the “Object model” source section.
    5. 05

      Common endpoints

      Review the “Common endpoints” section in the pinned source before continuing.

      Review and apply the “Common endpoints” source section.

    Permission review

    Static risk signals and limitations

    Network access

    medium · line 17

    The documentation includes network, browsing, or remote request actions.

    https://api.datto.com/api/v1 (US)

    Network access

    medium · line 18

    The documentation includes network, browsing, or remote request actions.

    https://api.eu.datto.com/api/v1 (EU)

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score91/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars42SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    WYRE-AI/msp-claude-plugins
    Skill path
    msp-claude-plugins/kaseya/datto-saas-protection/skills/api-patterns/SKILL.md
    Commit
    5005f73ba2f52cd299f58aa6bb79f4e70ae87103
    License
    Apache-2.0
    Collected
    2026-08-28
    Default branch
    main
    View the original SKILL.md

    Datto SaaS Protection API Patterns

    Status note

    The MCP server (datto-saas-protection-mcp) and SDK (@wyre-technology/node-datto-saas-protection) are in development.

    Overview

    Datto SaaS Protection (rebranded Backupify, now also folded together with Spanning under the same product family) provides cloud-to-cloud backup for Microsoft 365 and Google Workspace tenants.

    Reference: https://saasprotection.datto.com/help/M365/Content/Other_Administrative_Tasks/using-rest-api-saas-protection.htm

    Base URLs (per region):

    https://api.datto.com/api/v1            (US)
    https://api.eu.datto.com/api/v1         (EU)
    

    The MCP server takes a region credential field (us or eu); never hard-code.

    Anti-triggers

    • Spanning — Kaseya's other cloud-to-cloud backup product covers the same Microsoft 365 and Google Workspace workloads (plus Salesforce) under separate credentials and a separate API; use spanning-api-patterns.
    • Datto's appliance backup — SIRIS/Alto image backup is BCDR, a different product and API; use datto-bcdr-api-patterns.

    Authentication

    API key issued from the SaaS Protection partner portal:

    1. SaaS Protection portal → Settings → API → Create Key
    2. Optional: scope key to specific clients
    3. Send on every request:
    Authorization: Bearer <api_key>
    

    Keys are long-lived; rotate from the same UI.

    Object model

    Partner
     └── Client (a customer organization)
          └── Domain (M365 tenant / Google domain)
               └── Seat (mailbox / OneDrive / SharePoint site / Google user)
                    └── Backup runs / restore points
    

    Common endpoints

    DomainEndpointNotes
    ClientsGET /clientsAll client orgs
    DomainsGET /clients/{clientId}/domainsM365/Google tenants
    SeatsGET /clients/{clientId}/domains/{domainId}/seatsActive + archived
    Single seatGET /seats/{seatId}
    Backup statusGET /seats/{seatId}/backupsMost recent backup runs
    Activity logGET /clients/{clientId}/activityOrg-level events
    Restore (request)POST /seats/{seatId}/restoresQueue restore
    Restore statusGET /restores/{restoreId}
    License usageGET /clients/{clientId}/usageSeat counts

    Pagination

    Cursor-based:

    GET /clients?limit=100
    → { items: [...], nextCursor: "abc123" }
    
    GET /clients?limit=100&cursor=abc123
    

    Default limit is 50, max is 250. Stop when nextCursor is missing or null.

    Restore operations

    Restores are async. The flow:

    1. POST /seats/{seatId}/restores   → { restoreId, status: "queued" }
    2. Poll GET /restores/{restoreId}  → status transitions queued → running → completed | failed
    3. On completed, fetch the result location (URL or destination metadata)
    

    Typical restore wall-clock: minutes to hours depending on data volume. Poll at 30-second intervals; do not poll faster.

    Rate limits

    60 req/min per API key under default policy. HTTP 429 includes Retry-After. Aggregate operations (list all seats across all clients) should use Promise.all with concurrency capped at 4.

    Error handling

    HTTPMeaningAction
    200OK
    400Bad requestValidate inputs
    401Bad / expired keyRotate key
    403Key lacks scope on this clientVerify scope
    404Unknown seatId / clientId / domainId
    409Restore already queued for this seatSurface; offer to cancel-and-retry
    429Rate limitedBack off per Retry-After
    500-503TransientExponential backoff

    Gotchas

    • Region selection is sticky: A US-region key cannot call EU endpoints. The error is a generic 401, not a 404 — surface a clear message asking the user to check the region credential.
    • Archived seats: By default, list endpoints return only active seats. Pass ?includeArchived=true to see seats whose source mailboxes were deleted but whose backups are retained.
    • Spanning vs. SaaS Protection: These are different products that share marketing branding. Spanning has its own API (spanning-mcp plugin) — don't conflate keys.
    • Restore destination quirks: Restoring an M365 mailbox to an existing user requires Graph API permissions on the target tenant; the SaaS Protection API surfaces the dependency as a 400 once the restore starts running, not at queue time.

    Related skills

    When the build-out lands, expect domain skills for: clients, seats, restores, activity-logs, license-usage.

    Frequently asked questions

    What to verify before installation and use

    What does the Datto SaaS Protection API Patterns source document cover?

    Datto SaaS Protection (formerly Backupify) REST API fundamentals: regional base URLs, bearer-token auth, the seat/tenant object model, backup status queries, and restore operations.

    How do I install Datto SaaS Protection API Patterns?

    The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/kaseya/datto-saas-protection/skills/api-patterns". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged network in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 10029,236

    garrytan/gbrain

    bulk-ingestion

    End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.

    Computed 10025,136

    alirezarezvani/claude-skills

    app-store-optimization

    App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist

    Computed 1005,277

    dotnet/skills

    migrate-vstest-to-mtp

    Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing

    Computed 100147

    oaustegard/claude-skills

    featuring

    Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre