Backupify SaaS Protection API

The Backupify SaaS Protection REST API enables programmatic management of cloud-to-cloud backup for Microsoft 365 and Google Workspace. Covers domain listing, seat enumeration, and bulk seat licensing operations. Authentication uses HTTP Basic auth with API key credentials.

OpenAPI Specification

backupify-saas-protection-api.yaml Raw ↑
openapi: 3.0.3
info:
  title: Backupify SaaS Protection API
  description: >-
    The Backupify (Datto) SaaS Protection REST API provides programmatic access to manage
    cloud-to-cloud backup for Microsoft 365 and Google Workspace. It enables seat management,
    subscription configuration, and backup domain administration for MSPs and enterprise
    customers. Authentication uses HTTP Basic authentication with API key credentials.
  version: v1
  x-generated-from: documentation
  contact:
    name: Datto/Backupify Support
    url: https://www.backupify.com/
servers:
  - url: https://api.datto.com
    description: Datto SaaS Protection API
security:
  - BasicAuth: []
tags:
  - name: Domains
    description: SaaS domain and customer account management
  - name: Seats
    description: User and resource seat licensing and management
paths:
  /v1/saas/domains:
    get:
      operationId: listDomains
      summary: Backupify SaaS Protection API List Domains
      description: Retrieves a list of SaaS customer domains with their customer IDs and external subscription information for seat management configuration.
      tags:
        - Domains
      responses:
        '200':
          description: List of SaaS domains
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainsResponse'
              examples:
                ListDomains200Example:
                  summary: Default listDomains 200 response
                  x-microcks-default: true
                  value:
                    domains:
                      - saasCustomerId: cust-001
                        externalSubscriptionId: sub-abc123
                        domain: company.onmicrosoft.com
                        status: active
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/saas/{saasCustomerId}/seats:
    get:
      operationId: listSeats
      summary: Backupify SaaS Protection API List Seats
      description: Lists all seats (users, shared mailboxes, sites, team sites, teams) for a given SaaS customer. Returns remote IDs needed for licensing operations.
      tags:
        - Seats
      parameters:
        - name: saasCustomerId
          in: path
          required: true
          schema:
            type: string
          description: The unique SaaS customer identifier
          example: cust-001
      responses:
        '200':
          description: List of seats for the customer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SeatsResponse'
              examples:
                ListSeats200Example:
                  summary: Default listSeats 200 response
                  x-microcks-default: true
                  value:
                    seats:
                      - remoteId: user-abc123
                        displayName: John Smith
                        email: [email protected]
                        seatType: User
                        licenseStatus: Licensed
                        lastBackup: '2026-04-18T14:30:00Z'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Customer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/saas/{saasCustomerId}/externalSubscriptionId/bulkSeatChange:
    put:
      operationId: bulkSeatChange
      summary: Backupify SaaS Protection API Bulk Seat Change
      description: Updates multiple Microsoft 365 or Google Workspace seats simultaneously. Supports licensing, unlicensing, and pausing up to 100 seats per request. Supported seat types include User, SharedMailbox, Site, TeamSite, and Team.
      tags:
        - Seats
      parameters:
        - name: saasCustomerId
          in: path
          required: true
          schema:
            type: string
          description: The unique SaaS customer identifier
          example: cust-001
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkSeatChangeRequest'
            examples:
              BulkSeatChangeRequestExample:
                summary: Default bulkSeatChange request
                x-microcks-default: true
                value:
                  seats:
                    - remoteId: user-abc123
                      action: License
                      seatType: User
      responses:
        '200':
          description: Seat changes applied successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkSeatChangeResponse'
              examples:
                BulkSeatChange200Example:
                  summary: Default bulkSeatChange 200 response
                  x-microcks-default: true
                  value:
                    results:
                      - remoteId: user-abc123
                        success: true
                        message: Seat licensed successfully
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication using API public key as username and private key as password
  schemas:
    Domain:
      title: Domain
      type: object
      description: A SaaS customer domain with backup subscription information
      properties:
        saasCustomerId:
          type: string
          description: Unique SaaS customer identifier
          example: cust-001
        externalSubscriptionId:
          type: string
          description: External subscription identifier for seat management
          example: sub-abc123
        domain:
          type: string
          description: The domain name (e.g., company.onmicrosoft.com)
          example: company.onmicrosoft.com
        status:
          type: string
          description: Domain backup status
          example: active
    DomainsResponse:
      title: DomainsResponse
      type: object
      description: Response containing a list of SaaS domains
      properties:
        domains:
          type: array
          items:
            $ref: '#/components/schemas/Domain'
    Seat:
      title: Seat
      type: object
      description: A licensed or unlicensed seat (user, mailbox, site, or team)
      properties:
        remoteId:
          type: string
          description: Remote identifier for the seat in the source system
          example: user-abc123
        displayName:
          type: string
          description: Display name of the seat
          example: John Smith
        email:
          type: string
          format: email
          description: Email address for user seats
          example: [email protected]
        seatType:
          type: string
          enum:
            - User
            - SharedMailbox
            - Site
            - TeamSite
            - Team
          description: Type of seat
          example: User
        licenseStatus:
          type: string
          enum:
            - Licensed
            - Unlicensed
            - Paused
          description: Current license status
          example: Licensed
        lastBackup:
          type: string
          format: date-time
          description: Timestamp of last successful backup
          example: '2026-04-18T14:30:00Z'
    SeatsResponse:
      title: SeatsResponse
      type: object
      description: Response containing a list of seats for a customer
      properties:
        seats:
          type: array
          items:
            $ref: '#/components/schemas/Seat'
    SeatChange:
      title: SeatChange
      type: object
      description: A single seat change action
      properties:
        remoteId:
          type: string
          description: Remote identifier for the seat
          example: user-abc123
        action:
          type: string
          enum:
            - License
            - Unlicense
            - Pause
          description: Action to perform on the seat
          example: License
        seatType:
          type: string
          enum:
            - User
            - SharedMailbox
            - Site
            - TeamSite
            - Team
          description: Type of seat
          example: User
    BulkSeatChangeRequest:
      title: BulkSeatChangeRequest
      type: object
      description: Request to change multiple seat licenses
      properties:
        seats:
          type: array
          items:
            $ref: '#/components/schemas/SeatChange'
          description: List of seat changes (max 100 per request)
    SeatChangeResult:
      title: SeatChangeResult
      type: object
      description: Result of a single seat change operation
      properties:
        remoteId:
          type: string
          description: Remote identifier for the seat
          example: user-abc123
        success:
          type: boolean
          description: Whether the operation succeeded
          example: true
        message:
          type: string
          description: Description of the result
          example: Seat licensed successfully
    BulkSeatChangeResponse:
      title: BulkSeatChangeResponse
      type: object
      description: Results of bulk seat change operations
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/SeatChangeResult'
    ErrorResponse:
      title: ErrorResponse
      type: object
      description: API error response
      properties:
        code:
          type: integer
          description: HTTP status code
          example: 401
        message:
          type: string
          description: Error message
          example: Unauthorized