Pure Storage Authorization API

Pure Storage uses the OAuth 2.0 Token Exchange authorization grant and JSON Web Tokens (JWTs) to authenticate to the Pure Storage REST API. Before you can exchange the ID token for an access token, create and enable the API client to generate the `key_id`, `id`, and `issuer` values. These values will be used as JWT claims for the `subject_token` parameter.

Documentation

Specifications

Code Examples

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/flasharray-rest-api-array-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/flasharray-rest-api-volume-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/flasharray-rest-api-host-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-structure/flasharray-rest-api-array-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-structure/flasharray-rest-api-volume-structure.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/flashblade-rest-api-file-system-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/flashblade-rest-api-bucket-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/flashblade-rest-api-array-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-structure/flashblade-rest-api-file-system-structure.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-structure/flashblade-rest-api-bucket-structure.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/pure1-cloud-api-array-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/pure1-cloud-api-metric-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-schema/pure1-cloud-api-alert-schema.json
📊
JSONStructure
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-structure/pure1-cloud-api-array-structure.json

Other Resources

🔗
SDKs
https://pypi.org/project/py-pure-client/
🔗
SDKs
https://github.com/PureStorage-OpenConnect/PureStorage.Pure1
🔗
SDKs
https://github.com/PureStorage-OpenConnect/powershell-toolkit-3
🔗
SDKs
https://github.com/PureStorage-OpenConnect/rest-client
🔗
Integrations
https://github.com/PureStorage-OpenConnect/terraform-provider-flash
🔗
Integrations
https://github.com/PureStorage-OpenConnect/pure-fa-openmetrics-exporter
🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-ld/pure-storage-flasharray-rest-api-context.jsonld
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/examples/flasharray-rest-api-volume-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/examples/flasharray-rest-api-array-example.json
🔗
SDKs
https://github.com/PureStorage-OpenConnect/flashblade-powershell
🔗
SDKs
https://github.com/purestorage/purity_fb_python_client
🔗
Integrations
https://github.com/PureStorage-OpenConnect/pure-fb-openmetrics-exporter
🔗
Tools
https://github.com/PureStorage-OpenConnect/flashblade-mcp-server
🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-ld/pure-storage-flashblade-rest-api-context.jsonld
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/examples/flashblade-rest-api-file-system-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/examples/flashblade-rest-api-bucket-example.json
🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/json-ld/pure-storage-pure1-cloud-api-context.jsonld
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/pure-storage/refs/heads/main/examples/pure1-cloud-api-array-example.json

OpenAPI Specification

pure-storage-authorization-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: FlashArray REST Active Directory Authorization API
  version: '2.52'
  description: 'Active Directory configuration authenticates users for NFS using Kerberos or SMB using Kerberos

    or New Technology LAN Manager (NTLM). Active Directory is also used to authorize users by

    mapping identities across the NFS and SMB protocols by using LDAP queries.

    '
servers:
- url: /
tags:
- name: Authorization
  description: 'Pure Storage uses the OAuth 2.0 Token Exchange authorization grant and JSON Web Tokens (JWTs)

    to authenticate to the Pure Storage REST API.

    Before you can exchange the ID token for an access token, create and enable the API client

    to generate the `key_id`, `id`, and `issuer` values.

    These values will be used as JWT claims for the `subject_token` parameter.

    '
paths:
  /oauth2/1.0/token:
    post:
      tags:
      - Authorization
      summary: Pure Storage Get Access Token
      description: 'Exchanges an ID Token for an OAuth 2.0 access token.

        '
      parameters:
      - name: X-Request-ID
        in: header
        description: 'Supplied by client during request or generated by server.

          '
        schema:
          type: string
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              required:
              - grant_type
              - subject_token
              - subject_token_type
              type: object
              properties:
                grant_type:
                  $ref: '#/components/schemas/OauthGrantType'
                subject_token:
                  $ref: '#/components/schemas/OauthSubjectToken'
                subject_token_type:
                  $ref: '#/components/schemas/OauthSubjectTokenType'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/OauthToken200'
        '400':
          $ref: '#/components/responses/OauthToken400'
        '401':
          $ref: '#/components/responses/OauthToken401'
      security: []
  /api/api_version:
    get:
      tags:
      - Authorization
      summary: Pure Storage List Available API Versions
      description: 'Returns a list of available API versions. No authentication is required to access this endpoint.

        '
      parameters:
      - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api_versionResponse'
      security: []
  /api/2.52/login:
    post:
      tags:
      - Authorization
      summary: Pure Storage Create a User Session
      description: 'Creates a user session and returns a session token, using either the user''s API token or

        their username and password. `api-token` is passed in a header, with the request

        body empty. Otherwise `username` and `password` are passed in the request body,

        without an `api-token` header.


        Storing user passwords client-side is not recommended. The username-password

        authentication option should only be used as necessary for initial retrieval of

        an API token, which should be securely stored and used for all subsequent logins.

        '
      parameters:
      - name: api-token
        in: header
        description: 'API token for a user.

          '
        schema:
          type: string
        example: 0f2e2884-9486-c6c2-438c-f50418f2aac3
      - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginPost'
        required: false
        x-codegen-request-body-name: login
      responses:
        '200':
          description: OK
          headers:
            x-auth-token:
              description: Session token for a user.
              schema:
                type: string
                example: 3be3d489-55c6-4643-90ac-a476dbc98812
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UsernameResponse'
      x-codegen-request-body-name: login
  /api/2.52/logout:
    post:
      tags:
      - Authorization
      summary: Pure Storage POST Logout (Placeholder)
      description: 'Invalidate a session token.

        '
      parameters:
      - name: x-auth-token
        in: header
        description: Session token for a user.
        schema:
          type: string
        example: 3be3d489-55c6-4643-90ac-a476dbc98812
      - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: OK
          content: {}
  /api/login:
    post:
      tags:
      - Authorization
      summary: Pure Storage Log in a User
      description: 'Logs in a user and returns a session token, using either the user''s API token or their username and password. `api-token` is passed in a header, with the request body empty. Otherwise `username` and `password` are passed in the request body, without an `api-token` header.

        Storing user passwords client-side is not recommended. The username-password authentication option should only be used as necessary for initial retrieval of an API token, which should be securely stored and used for all subsequent logins.

        '
      parameters:
      - name: api-token
        in: header
        description: 'API token for a user.

          '
        schema:
          type: string
        example: 0f2e2884-9486-c6c2-438c-f50418f2aac3
      - $ref: '#/components/parameters/XRequestId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginPost_2'
        required: false
        x-codegen-request-body-name: login
      responses:
        '200':
          description: OK
          headers:
            X-Request-ID:
              description: Supplied by client during request or generated by server.
              schema:
                type: string
            x-auth-token:
              description: Session token for a user.
              schema:
                type: string
                example: 3be3d489-55c6-4643-90ac-a476dbc98812
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Login'
      x-codegen-request-body-name: login
  /api/logout:
    post:
      tags:
      - Authorization
      summary: Pure Storage POST Logout
      description: 'Invalidate a REST session token.

        '
      parameters:
      - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: OK
          headers:
            X-Request-ID:
              description: Supplied by client during request or generated by server.
              schema:
                type: string
          content: {}
  /api/login-banner:
    get:
      tags:
      - Authorization
      summary: Pure Storage GET Login_banner
      description: 'Get the login banner for the array. No authentication is required to access this endpoint.

        '
      parameters:
      - $ref: '#/components/parameters/XRequestId'
      responses:
        '200':
          description: OK
          headers:
            X-Request-ID:
              description: Supplied by client during request or generated by server.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginBannerGetResponse'
      security: []
components:
  schemas:
    OauthSubjectToken:
      type: string
      description: 'An encoded security ID Token representing the identity of the party on behalf of

        whom the request is being made. The token must be issued by a trusted

        identity provider which must be either a registered application in Pure1

        or an enabled API client on the array. The token must be a JSON Web Token

        and must contain the following claims:


        > | JWT claim | Location | API Client Field | Description | Required By |


        > |-|-|-|-|-|


        > | kid | Header | key_id | Key ID of the API client that issues the identity token. | FlashArray

        and FlashBlade only. |


        > | aud | Payload | id | Client ID of the API client that issues the identity token. | FlashArray

        and FlashBlade only. |


        > | sub | Payload | | Login name of the array user for whom the token should be issued.

        This must be a valid user in the system. | FlashArray and FlashBlade only. |


        > | iss | Payload | issuer | Application ID for the Pure1 or API client''s trusted identity

        issuer on the array. | All products. |


        > | iat | Payload | | Timestamp of when the identity token was issued.

        Measured in milliseconds since the UNIX epoch. | All products. |


        > | exp | Payload | | Timestamp of when the identity token will expire.

        Measured in milliseconds since the UNIX epoch. | All products. |



        Each token must also be signed with the private key that is paired with the

        API client''s public key.


        '
    OauthGrantType:
      type: string
      description: 'The method by which the access token will be obtained.

        The Pure Storage REST API supports the OAuth 2.0 "token exchange" grant type,

        which indicates that a token exchange is being performed.

        Set `grant_type` to `urn:ietf:params:oauth:grant-type:token-exchange`.

        '
      default: urn:ietf:params:oauth:grant-type:token-exchange
    Login:
      allOf:
      - $ref: '#/components/schemas/Username'
      x-aliases:
      - LoginResponse
    LoginPost_2:
      type: object
      properties:
        password:
          description: 'User password. Used as an alternative to api-token.

            '
          type: string
        username:
          description: 'User to log in. Used as an alternative to api-token.

            '
          type: string
    LoginPost:
      type: object
      properties:
        password:
          description: 'The user password that is used as an alternative to an api-token.

            '
          type: string
        username:
          description: 'The username used to log in as an alternative to an api-token.

            '
          type: string
    OauthSubjectTokenType:
      type: string
      description: 'An identifier that indicates the type of security token specifed in the `subject_token` parameter.

        The Pure Storage REST API supports the JSON Web Token (JWT)

        as the means for requesting the access token.

        Set `subject_token_type` to `urn:ietf:params:oauth:token-type:jwt`.

        '
      default: urn:ietf:params:oauth:token-type:jwt
    _api_versions:
      description: A list of supported API versions.
      type: array
      items:
        type: string
      example:
      - '1.0'
      - '1.1'
      - '1.2'
      - '1.3'
      - '1.4'
      - '1.5'
      - '1.6'
      - '1.7'
      - '1.8'
      - '1.9'
      - '1.10'
      - '1.11'
      - '1.12'
      - '1.13'
      - '1.14'
      - '1.15'
      - '1.16'
      - '1.17'
      - '2.0'
    LoginBannerGetResponse:
      type: object
      properties:
        login_banner:
          description: The string to show as login banner.
          type: string
          example: Restricted area. Authorized personnel only.
    Api_versionResponse:
      type: object
      properties:
        version:
          $ref: '#/components/schemas/_api_versions'
    Username:
      type: object
      properties:
        username:
          description: The username of the user.
          type: string
          example: pureuser
    UsernameResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Username'
  responses:
    OauthToken400:
      description: BAD REQUEST
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: invalid_request
              error_description:
                type: string
                example: 'Unsupported subject_token_type: urn:ietf:params:oauth:token-'
    OauthToken401:
      description: UNAUTHORIZED
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: invalid_client
              error_description:
                type: string
                example: 'Invalid identity: JWT validation failed.'
    OauthToken200:
      description: OK
      content:
        application/json:
          schema:
            title: oauth_token_response
            type: object
            properties:
              access_token:
                description: 'The serialized OAuth 2.0 Bearer token used to perform authenticated requests.

                  The access token must be added to the Authorization header of all API calls.

                  '
                type: string
                example: eyJraWQiOiJqTlBzL1Ria2c4U2Vua3F3ZmkvbnI4bWxxQ3NPIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJhdWQiOiI5NDcyMTkwOC1mNzkyLTcxMmUtYTYzOS0wODM5ZmE4MzA5MjIiLCJzdWIiOiJqb2UiLCJyb2xlIjoic3RvcmFnZV9hZG1pbiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6OTAwMCIsImlhdCI6MTU0NDAzNjA1MiwiZXhwIjoxNTQ0MDcyMDUyLCJqdGkiOiJjOTg0MjgyNS1mNGM3LTRiNGUtODdkNy03OWFiZmIxYTUzNDgifQ.pnuYAx0CkmkIG0LDrMAQGRr5Ci4-t5yMto3A7BkmyKnAVHBXG5ZIWwvNkWDLhqbA4YjmG7LZmWHrCVehLy2zy2vRLahFURsd3GTnOaWSyWFIyrwpoO81jQRtOQATtseweuMT_-C8o3oa4MgBNBsuKrhwKQS3oDDpeRPaCRTGev1_xRDxh_K6CWJBTAeOP2pcR4LW6zIJkCLzzkMuyL4aTJWWUjSbl04mcFbyw8r8W1GURrmaDVOvvpT634Hk9-GGh9OMIRlS6OOq7cJKc-RRWn18IK2Gs53V_KYshXTBbnRr990Y_qOX8MaTWOJTqgzsojY02MSVuJ9XDJWoIU3TQytr4K1vM2EvwDZDgl7LuUYUn7vWhbKktFzpeZyyhOjq3eX-ViugYKpIjBcG2f_-fcTPceEWGV82rd6TyVNB5A-v9u2kxCdW198t_kesgVQfuupDeS02cZe0ABLCzEHPiVF17JfiVr6sjkciioxN7Wj_j18ga4U0mdSukauT8yhbgCW1ijTVTFu1VwWebW0s8z3BWMtXdTtZ3BhcZVAdKRF8bOq7nfEbUQGhTn9g7dK-yF050winjtp-VTL2oUtkF5j1v_N8vPNiN9ZdkGJZr7VVZ-qeOJZcjdaRbxL6YB__yT1wkTcKPh8RHz6GUq7Jbyw8VIlcBE2nvJ63d0tH9C4
              expires_in:
                description: 'The duration after which the access token will expire.

                  Measured in seconds. This differs from other duration

                  fields that are expressed in milliseconds.

                  '
                type: integer
                format: uint32
                example: 35999
              issued_token_type:
                description: 'The type of token that is issued.

                  The Pure Storage REST API supports OAuth 2.0 access tokens.

                  '
                type: string
                example: urn:ietf:params:oauth:token-type:access_token
              token_type:
                description: 'Indicates how the API client can use the access token issued.

                  The Pure Storage REST API supports the `Bearer` token.

                  '
                type: string
                example: Bearer
  parameters:
    XRequestId:
      name: X-Request-ID
      in: header
      description: 'Supplied by client during request or generated by server.

        '
      schema:
        type: string