Palo Alto Networks Sites API

Onboarding Sites information

OpenAPI Specification

palo-alto-networks-sites-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Palo Alto Networks Sites API
  version: 2.0.0
  contact:
    email: support@paloaltonetworks.com
    name: Palo Alto Networks Technical Support
    url: https://support.paloaltonetworks.com
  license:
    name: MIT
    url: https://opensource.org/license/mit
  termsOfService: https://www.paloaltonetworks.com/content/dam/pan/en_US/assets/pdf/legal/palo-alto-networks-end-user-license-agreement-eula.pdf
  description: 'Operations tagged Sites across 2 of this provider''s published API definitions: palo-alto-scm-config-cloudngfw-setup-device-onboarding-device-onboarding-updated-openapi.yaml, palo-alto-scm-config-sase-deployment-deployment-services-june-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.strata.paloaltonetworks.com/config/setup/device-onboarding/v1
  description: Current
- url: https://api.strata.paloaltonetworks.com/config/deployment/v1
  description: Current
- url: https://api.sase.paloaltonetworks.com/sse/config/v1
  description: Legacy
security:
- scmToken: []
tags:
- name: Sites
  description: Onboarding Sites information
paths:
  /sites:
    post:
      tags:
      - Sites
      summary: Create sites
      description: 'Creates one or more sites with All-or-Nothing semantics. All sites must pass validation,

        or none will be created. Validates uniqueness, required fields, and property constraints.

        '
      operationId: createSites
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_sites_request'
      responses:
        '201':
          description: Sites created successfully
          content:
            application/json:
              schema:
                type: object
                required:
                - status
                properties:
                  status:
                    type: string
                    enum:
                    - success
                    description: Response status indicator
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: Site ID
                        name:
                          type: string
                          description: Site name
                  message:
                    type: string
                    description: Human-readable message
                  request_id:
                    type: string
                    format: uuid
                    description: Unique request identifier for troubleshooting
        '400':
          $ref: '#/components/responses/BadRequest'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      tags:
      - Sites
      summary: List sites
      description: 'Retrieves all sites for the tenant with optional filtering by status, site group, and site names.

        Includes claims and resolution history for each site.


        **Filter Priority**: If multiple filters are provided, the priority is:

        1. `name` - Filter by specific site names (highest priority)

        2. `site-group` - Filter by site group name

        3. `status` - Filter by claim status (applied after other filters)

        '
      operationId: listSites
      parameters:
      - name: name
        in: query
        description: 'Filter sites by name. Multiple values supported (e.g., `?name=A&name=B`).

          Returns only sites matching the specified names.

          '
        schema:
          type: array
          items:
            type: string
        style: form
        explode: true
      - name: status
        in: query
        description: Filter sites by claim status
        schema:
          type: string
          enum:
          - all
          - claimed
          - unclaimed
          default: all
      - name: site-group
        in: query
        description: Filter sites by site group name
        schema:
          type: string
      responses:
        '200':
          description: Sites retrieved successfully
          content:
            application/json:
              schema:
                type: object
                required:
                - status
                properties:
                  status:
                    type: string
                    enum:
                    - success
                    description: Response status indicator
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/site_with_claims'
                    description: Array of sites with their claims and resolution history
                  message:
                    type: string
                    description: Human-readable message
                  request_id:
                    type: string
                    format: uuid
                    description: Unique request identifier for troubleshooting
        '500':
          $ref: '#/components/responses/InternalServerError'
    servers:
    - url: https://api.strata.paloaltonetworks.com/config/setup/device-onboarding/v1
      description: Current
  /sites/{id}:
    get:
      tags:
      - Sites
      summary: Get a site
      description: Retrieves a single site by UUID with its claims and resolution history
      operationId: getSiteByID
      parameters:
      - $ref: '#/components/parameters/site_id'
      responses:
        '200':
          description: Site retrieved successfully
          content:
            application/json:
              schema:
                type: object
                required:
                - status
                properties:
                  status:
                    type: string
                    enum:
                    - success
                    description: Response status indicator
                  data:
                    $ref: '#/components/schemas/site_with_claims'
                    description: Site with claims and resolution history
                  message:
                    type: string
                    description: Human-readable message
                  request_id:
                    type: string
                    format: uuid
                    description: Unique request identifier for troubleshooting
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
      - Sites
      summary: Update a site
      description: 'Updates a site''s name, site group, or property values. Site must be unclaimed

        to be updated.

        '
      operationId: updateSiteByID
      parameters:
      - $ref: '#/components/parameters/site_id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_site_request'
      responses:
        '200':
          description: Site updated successfully
          content:
            application/json:
              schema:
                type: object
                required:
                - status
                properties:
                  status:
                    type: string
                    enum:
                    - success
                    description: Response status indicator
                  data:
                    $ref: '#/components/schemas/site'
                    description: Updated site
                  message:
                    type: string
                    description: Human-readable message
                  request_id:
                    type: string
                    format: uuid
                    description: Unique request identifier for troubleshooting
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
      - Sites
      summary: Delete a site
      description: 'Deletes a site by ID. Site must be unclaimed unless force=true is specified.

        '
      operationId: deleteSiteByID
      parameters:
      - $ref: '#/components/parameters/site_id'
      - name: force
        in: query
        description: Force delete even if site is claimed
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Site deleted successfully - returns deleted resource
          content:
            application/json:
              schema:
                type: object
                required:
                - status
                properties:
                  status:
                    type: string
                    enum:
                    - success
                    description: Response status indicator
                  data:
                    $ref: '#/components/schemas/site'
                    description: Deleted site
                  message:
                    type: string
                    description: Human-readable message
                  request_id:
                    type: string
                    format: uuid
                    description: Unique request identifier for troubleshooting
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
    servers:
    - url: https://api.strata.paloaltonetworks.com/config/setup/device-onboarding/v1
      description: Current
components:
  schemas:
    resolved_variable:
      type: object
      required:
      - name
      - type
      - value
      properties:
        name:
          type: string
          description: Variable name
        type:
          type: string
          description: Variable type
        value:
          description: Resolved value (type varies)
    resource_validation_error:
      type: object
      required:
      - type
      - resource_id
      - resource_name
      - message
      properties:
        type:
          type: string
          enum:
          - site
          - rule
          - name_conflict
          description: Type of validation error
        resource_id:
          type: string
          description: ID of the affected resource
        resource_name:
          type: string
          description: Name of the affected resource
        message:
          type: string
          description: Detailed error message
    resource_validation_result:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Resource UUID
        name:
          type: string
          description: Resource name
        validation_errors:
          type: array
          items:
            $ref: '#/components/schemas/resource_validation_error'
    site_with_claims:
      type: object
      properties:
        site:
          $ref: '#/components/schemas/site'
        claims:
          type: array
          items:
            $ref: '#/components/schemas/claim_with_resolved_history'
    site:
      type: object
      required:
      - id
      - tenant_id
      - name
      - site_group
      properties:
        id:
          type: string
          format: uuid
          description: Site UUID
        tenant_id:
          type: string
          description: Tenant identifier
        name:
          type: string
          description: Site name (unique within tenant)
          maxLength: 255
        site_group:
          type: string
          description: Site group name
        address:
          type: string
          description: 'Physical address of the site. When a site is created with an address,

            the system automatically fetches latitude/longitude coordinates in the

            background using Google Maps Geocoding API.

            '
          example: 123 Market St, San Francisco, CA 94103
        latitude:
          type:
          - number
          - 'null'
          format: double
          description: 'Latitude coordinate. Automatically populated when site has an address.

            Used for proximity filtering and distance calculations.

            '
          minimum: -90
          maximum: 90
          example: 37.7749
        longitude:
          type:
          - number
          - 'null'
          format: double
          description: 'Longitude coordinate. Automatically populated when site has an address.

            Used for proximity filtering and distance calculations.

            '
          minimum: -180
          maximum: 180
          example: -122.4194
        property_values:
          type: object
          additionalProperties: true
          description: Key-value pairs of property names to values
        created_at:
          type: string
          format: date-time
        last_updated:
          type: string
          format: date-time
    resolution_rule:
      type: object
      required:
      - expression
      properties:
        expression:
          type: string
          description: Expression to resolve the variable (can reference properties with ${property_name})
    update_site_request:
      type: object
      properties:
        name:
          type: string
          maxLength: 255
        site_group:
          type: string
        property_values:
          type: object
          additionalProperties: true
    resolved_onboarding_rule:
      type: object
      properties:
        id:
          type: string
          format: uuid
        tenant_id:
          type: string
        name:
          type: string
        description:
          type: string
        enabled:
          type: boolean
        rule_type:
          type: string
        site_group:
          type: string
        match_criteria:
          type: object
          additionalProperties: true
        actions:
          type: object
          additionalProperties: true
        variables:
          type: array
          items:
            $ref: '#/components/schemas/variable'
          description: Original variables with resolution expression
        resolved_variables:
          type: array
          items:
            $ref: '#/components/schemas/resolved_variable'
          description: Variables resolved to their actual values
        resolution_errors:
          type: array
          items:
            type: string
          description: Errors encountered during variable resolution
        generated_at:
          type: string
    claim:
      type: object
      required:
      - id
      - tenant_id
      - site_id
      - serial_number
      - device_role
      properties:
        id:
          type: string
          format: uuid
        tenant_id:
          type: string
        site_id:
          type: string
          format: uuid
        serial_number:
          type: string
          description: Device serial number
        device_role:
          type: string
          enum:
          - standalone
          - primary
          - secondary
          description: Device role in HA configuration
        onboarding_rule_id:
          type: string
          format: uuid
        claimed_by:
          type: string
          description: User or service that claimed the device
        claimed_at:
          type: string
          format: date-time
    create_sites_request:
      type: object
      required:
      - sites
      properties:
        sites:
          type: array
          minItems: 1
          items:
            type: object
            required:
            - name
            - site_group
            properties:
              name:
                type: string
                maxLength: 255
              site_group:
                type: string
              address:
                type: string
                description: Physical address of the site
              property_values:
                type: object
                additionalProperties: true
    claim_with_resolved_history:
      type: object
      properties:
        claim:
          $ref: '#/components/schemas/claim'
        resolution_rule:
          $ref: '#/components/schemas/resolved_onboarding_rule'
    variable:
      type: object
      required:
      - name
      - resolution_rule
      properties:
        name:
          type: string
          description: Variable name
        resolution_rule:
          $ref: '#/components/schemas/resolution_rule'
    sites:
      type: object
      required:
      - name
      properties:
        id:
          type: string
          description: The UUID of the site
          readOnly: true
          example: 123e4567-e89b-12d3-a456-426655440000
        name:
          type: string
          description: The name of the site
          maxLength: 63
          example: Bengaluru
        type:
          type: string
          description: The site type
          enum:
          - prisma-sdwan
          - third-party-branch
          - third-party-discovered
        members:
          type: array
          items:
            type: object
            required:
            - name
            - mode
            properties:
              name:
                type: string
                description: The member name
                example: Connection A
              remote_network:
                type: string
                description: The remote network name
                example: Connection A
              mode:
                type: string
                description: The mode of the remote network
                enum:
                - active
                - backup
              id:
                type: string
                readOnly: true
                description: UUID of the remote network
                example: e51fa715-3da5-4f98-bb78-eb56757e7719
        country:
          type: string
          example: India
          description: The country in which the site exists
        city:
          type: string
          example: Bengaluru
          description: The city in which the site exists
        state:
          type: string
          example: Karnataka
          description: The state in which the site exists
        address_line_1:
          type: string
          description: The address in which the site exists
          example: 2nd Floor, Quay Building, Bagmane Tech Park
        address_line_2:
          type: string
          description: The address in which the site exists (continued)
          example: C V Raman Nagar
        latitude:
          type: string
          example: '12.978150'
          description: The latitude coordinate for the site
        longitude:
          type: string
          example: '77.665340'
          description: The longitude coordinate for the site
        zip_code:
          type: string
          example: '560093'
          description: The postal code in which the site exists
        qos:
          type: object
          properties:
            profile:
              type: string
              description: The name of the site QoS profile
              example: VoIP
            cir:
              type: number
              example: 10
              description: The CIR in Mbps. This is distributed equally for all tunnels in the site.
            backup_cir:
              type: number
              example: 10
              description: The backup CIR in Mbps. This is distributed equally for all tunnels in the site.
        license_type:
          type: string
          description: The license type of the site
          maxLength: 63
          enum:
          - FWAAS-SITE-25Mbps
          - FWAAS-SITE-50Mbps
          - FWAAS-SITE-250Mbps
          - FWAAS-SITE-1000Mbps
          - FWAAS-SITE-2500Mbps
    generic_error:
      type: object
      properties:
        _errors:
          $ref: '#/components/schemas/error_detail_cause_infos'
        _request_id:
          type: string
      x-examples: {}
    error_detail_cause_info:
      type: object
      title: Cause Info
      properties:
        code:
          type: string
        message:
          type: string
        details:
          oneOf:
          - type: string
          - type: object
        help:
          type: string
    error_detail_cause_infos:
      type: array
      items:
        $ref: '#/components/schemas/error_detail_cause_info'
      x-examples: {}
  responses:
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            type: object
            required:
            - status
            - error
            properties:
              status:
                type: string
                enum:
                - error
              error:
                type: string
                description: Error message
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            type: object
            required:
            - status
            - error
            properties:
              status:
                type: string
                enum:
                - error
              error:
                type: string
                description: Error message
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            type: object
            required:
            - status
            - error
            properties:
              status:
                type: string
                enum:
                - error
              data:
                type: array
                items:
                  $ref: '#/components/schemas/resource_validation_result'
              error:
                type: string
                description: Error message
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            type: object
            required:
            - status
            - error
            properties:
              status:
                type: string
                enum:
                - error
              data:
                type: array
                items:
                  $ref: '#/components/schemas/resource_validation_result'
              error:
                type: string
                description: Error message
    http_ok:
      description: OK
    not_found:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/generic_error'
          examples:
            object_not_present:
              $ref: '#/components/examples/json_404_panui_mgmt_object_not_present'
    default_errors:
      description: General Errors
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/generic_error'
          examples:
            version_not_supported:
              $ref: '#/components/examples/json_501_panui_restapi_version_not_supported'
            method_not_allowed:
              $ref: '#/components/examples/json_501_panui_restapi_method_not_supported'
            action_not_supported:
              $ref: '#/components/examples/json_405_panui_restapi_action_not_supported'
            bad_xpath:
              $ref: '#/components/examples/json_400_panui_mgmt_bad_xpath'
            invalid_command:
              $ref: '#/components/examples/json_400_panui_mgmt_invalid_command'
            malformed_command:
              $ref: '#/components/examples/json_400_panui_mgmt_malformed_command'
            session_timeout:
              $ref: '#/components/examples/json_504_panui_mgmt_session_timeout'
    bad_request_errors_basic_with_body:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/generic_error'
          examples:
            input_format_mismatch:
              $ref: '#/components/examples/json_400_panui_restapi_input_format_mismatch'
            output_format_mismatch:
              $ref: '#/components/examples/json_400_panui_restapi_output_format_mismatch'
            missing_query_parameter:
              $ref: '#/components/examples/json_400_panui_restapi_missing_query_parameter'
            invalid_query_parameter:
              $ref: '#/components/examples/json_400_panui_restapi_invalid_query_parameter'
            missing_body:
              $ref: '#/components/examples/json_400_panui_restapi_missing_body'
            invalid_object:
              $ref: '#/components/examples/json_400_panui_mgmt_invalid_object'
    bad_request_errors_basic:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/generic_error'
          examples:
            input_format_mismatch:
              $ref: '#/components/examples/json_400_panui_restapi_input_format_mismatch'
            output_format_mismatch:
              $ref: '#/components/examples/json_400_panui_restapi_output_format_mismatch'
            missing_query_parameter:
              $ref: '#/components/examples/json_400_panui_restapi_missing_query_parameter'
            invalid_query_parameter:
              $ref: '#/components/examples/json_400_panui_restapi_invalid_query_parameter'
    auth_errors:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/generic_error'
          examples:
            auth_not_authenticated:
              $ref: '#/components/examples/json_401_panui_auth_not_authenticated'
            invalid_credential:
              $ref: '#/components/examples/json_401_panui_auth_invalid_credential'
            key_too_long:
              $ref: '#/components/examples/json_401_panui_auth_key_too_long'
            key_expired:
              $ref: '#/components/examples/json_401_panui_auth_key_expired'
            need_password_change:
              $ref: '#/components/examples/json_401_panui_auth_need_password_change'
    conflict_errors:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/generic_error'
          examples:
            object_not_unique:
              $ref: '#/components/examples/json_409_panui_mgmt_object_not_unique'
            name_not_unique:
              $ref: '#/components/examples/json_409_panui_mgmt_name_not_unique'
            reference_not_zero:
              $ref: '#/components/examples/json_409_panui_mgmt_reference_not_zero'
    access_errors:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/generic_error'
          examples:
            auth_unauthorized:
              $ref: '#/components/examples/json_403_panui_auth_unauthorized'
  parameters:
    site_id:
      name: id
      in: path
      required: true
      description: Site UUID
      schema:
        type: string
        format: uuid
      example: 550e8400-e29b-41d4-a716-446655440000
    uuid:
      name: id
      in: path
      description: The UUID of the configuration resource
      required: true
      schema:
        type: string
    folder-remotenetworks:
      name: folder
      in: query
      description: 'The folder in which the resource is defined

        '
      required: true
      schema:
        enum:
        - Remote Networks
        default: Remote Networks
    name:
      name: name
      in: query
      description: The name of the configuration resource
      required: false
      schema:
        type: string
    limit:
      name: limit
      in: query
      description: The maximum number of results per page
      required: false
      schema:
        type: integer
        default: 200
    offset:
      name: offset
      in: query
      description: The offset into the list of results returned
      required: false
      schema:
        type: integer
        default: 0
  examples:
    json_401_panui_auth_key_expired:
      summary: Key Expired
      value:
        _errors:
        - code: E016
          message: Key Expired
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_501_panui_restapi_method_not_supported:
      summary: Method Not Supported
      value:
        _errors:
        - code: E012
          message: Method Not Supported
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_400_panui_restapi_input_format_mismatch:
      summary: Input Format Mismatch
      value:
        _errors:
        - code: E003
          message: 'Input Format Mismatch: input-format=json'
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_501_panui_restapi_version_not_supported:
      summary: Version Not Supported
      value:
        _errors:
        - code: E012
          message: Version Not Supported
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_409_panui_mgmt_object_not_unique:
      summary: Object Not Unique
      value:
        _errors:
        - code: E016
          message: Object Not Unique
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_409_panui_mgmt_name_not_unique:
      summary: Name Not Unique
      value:
        _errors:
        - code: E006
          message: Name Not Unique
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_404_panui_mgmt_object_not_present:
      summary: Object Not Present
      value:
        _errors:
        - code: E005
          message: Object Not Present
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_400_panui_restapi_missing_body:
      summary: Missing Body
      value:
        _errors:
        - code: E003
          message: Missing Body
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_409_panui_mgmt_reference_not_zero:
      summary: Reference Not Zero
      value:
        _errors:
        - code: E009
          message: Reference Not Zero
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_400_panui_mgmt_invalid_command:
      summary: Invalid Command
      value:
        _errors:
        - code: E003
          message: Invalid Command
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_400_panui_restapi_output_format_mismatch:
      summary: Output Format Mismatch
      value:
        _errors:
        - code: E003
          message: 'Output Format Mismatch: output-format=json Accept=xml'
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_401_panui_auth_not_authenticated:
      summary: Not Authenticated
      value:
        _errors:
        - code: E016
          message: Not Authenticated
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_401_panui_auth_invalid_credential:
      summary: Invalid Credential
      value:
        _errors:
        - code: E016
          message: Invalid Credential
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_403_panui_auth_unauthorized:
      summary: Unauthorized
      value:
        _errors:
        - code: E007
          message: Unauthorized
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_400_panui_restapi_missing_query_parameter:
      summary: Missing Query Parameter
      value:
        _errors:
        - code: E003
          message: 'Missing Query Parameter: name'
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_405_panui_restapi_action_not_supported:
      summary: Action Not Supported
      value:
        _errors:
        - code: E012
          message: 'Action Not Supported: move'
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_400_panui_restapi_invalid_query_parameter:
      summary: Invalid Query Parameter
      value:
        _errors:
        - code: E003
          message: 'Invalid Query Parameter: location=invalid'
          details: {}
        _request_id: 123e4567-e89b-12d3-a456-426655440000
    json_401_panui_auth_key_too_long:
      summary: Key Too Long
      value:
        _errors:
        - code: E016
 

# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/palo-alto-networks/refs/heads/main/openapi/palo-alto-networks-sites-api-openapi.yml