NetStorage Configuration API v1

View and manage your ObjectStore-format configuration resources, including Storage Groups and the Upload Accounts you use to access them.

Learn more:


Overview

NetStorage is a managed service that provides persistent, replicated storage of web site content, including images, streaming media files, software, documents, and other digital objects. Content is replicated periodically to core network locations to make it highly available to, and easily accessible by, EdgePlatform servers. This makes NetStorage a great complement to multiple content delivery services.

You use NetStorage to upload and maintain content in provisioned spaces called “storage groups”, which are accessed via “upload accounts,” both of which you configure. This API is specifically used to configure with both of these entities.

Who should use this API

This is intended for NetStorage customers who would prefer working directly with an API to develop a custom application to interact with their NetStorage 4 (ObjectStore) format storage groups and associated upload accounts. Only those individuals that are experienced with the use of an API should attempt to use these components. All others should use the NetStorage Groups user interface that is available via the Luna Control Center (Configure ⇒ NetStorage ⇒ Configuration).

What functionality is offered with the API?

This API offers a limited set of operations that can be implemented to interact with your ObjectStore storage groups and upload accounts:

  • View all of your ObjectStore storage groups
  • View a specific ObjectStore storage group
  • View all of your upload accounts
  • View a specific upload account
  • Create a new storage group
  • Create a new upload account
  • Edit an existing storage group
  • Edit an existing upload account
  • View a list of geographic zones available to you for use in replication of your content (“replicas”)

NetStorage 3 (FileStore) storage groups are not supported

This API has been developed to support ObjectStore format storage groups. To work with your FileStore format groups, use the Luna Control Center.

The NetStorage HTTP API

The NetStorage HTTP API is separate from the current NetStorage Configuration API. Provisioned outside of Luna, you can use the HTTP API to interact with your content in NetStorage. Its operations allow you to upload, download, view, and manage the content within your storage groups. Integration of the NetStorage HTTP API along with other Akamai APIs available through Luna is planned for a future release. For more information, see the NetStorage HTTP API Developer Guide.

Getting started

To configure this API for the first time:

  • Contact your account representative to get NetStorage added to your contract.

  • Obtain your contractId, which you need for many API operations.

  • Review Get Started with APIs for details on how to set up client tokens to access any Akamai API. These tokens appear as custom hostnames that look like this: https://akzz-XXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX.luna.akamaiapis.net.

  • To enable this API, choose the API service named NetStorage, and set the access level to READ-WRITE.

  • The NetStorage network has a Propagation Time Requirement. Any action that adds (POST), updates (PUT) or removes (DELETE) an ObjectStore-related component takes upwards of 60 minutes to propagate. For example, creating a new upload account (POST) via the API requires propagation, which can take 60 minutes before the account is accessible for use.

  • You can use any of the following approaches to generate CP codes:

    • You can use the Property Manager API.

    • Contact your Account Representative for assistance generating the number of CP codes you need.

If you need help, provide feedback with Akamai’s developer community, or contact your Akamai representative for support.

API hypermedia

The API uses links to standard hypermedia objects to help clients locate related resources relevant within a set of JSON data. For example, the JSON below shows the sort of response you might get when you GET a specific storage group. Its links array is comprised of multiple objects, one for each applicable resource. Each rel represents the link relation. This can be self for links referring to the storage group, itself, uploadAccounts for an upload account, and zones for a geographic replication zone associated with the group. The associated href provides a navigable path to the resource, once you prefix it with your hostname token.

"links": [
    {
        "rel": "self",
        "href": "http://my.url.com/storage/api/v1/storage-groups/1234568"
    },
    {
        "rel": "uploadAccounts",
        "href": "http://my.url.com/storage/api/v1/upload-accounts?storageGroupId=1234568"
    },
    {
        "rel": "zones",
        "href": "http://my.url.com/storage/api/v1/zones"
    }
]

Resources

The NetStorage Configuration API allows you to view and manage various components used to configure your NetStorage instance.

The following describes the conceptual objects you deal with when interacting with this API.

  • Storage Group: This is the basic unit within a NetStorage instance. There is a limit on the number of storage groups you can maintain. This and other storage group limitations are covered in the NetStorage - Guidelines and Best Practices for ObjectStore (NS4). Each storage group is comprised of the following:

    • A unique name value: You provide this when creating the group.

    • A contractual amount of storage space: You negotiate this with Akamai.

    • At least one upload account: You can create an upload account using the API

    • At least two geographic replication zones

    • One or more content provider (CP) codes: These are used to define upload directories in the group.

    • One or more Upload Directories: This is the base destination for uploaded content. Multiple upload directories can exist in a single group, one per CP code.

  • Upload Account: You use this account to access a storage group to upload, download and manage content. You can configure a host of options that specify how you access the storage group. The API allows you to create and edit these accounts. There is a limit on the number of storage groups you can maintain. This and other storage group limitations are covered in the NetStorage - Guidelines and Best Practices for ObjectStore (NS4).

  • Geographic Replication Zone: Your content is replicated to nearby regions for added stability. For example, you might have access to regions such as West Coast + East Coast or East Coast + Europe. The default is two zones per storage group. You can choose the zones when creating a storage group.

API summary

Download the RAML descriptors for this API.

Operation Method Endpoint
List upload accounts GET /storage/v1/upload-accounts
Create a new upload account POST /storage/v1/upload-accounts
Get an upload account GET /storage/v1/upload-accounts/{uploadAccountId}
Edit an upload account PUT /storage/v1/upload-accounts/{uploadAccountId}
List storage groups GET /storage/v1/storage-groups{?cpcodeId,storageGroupPurpose}
Create a storage group POST /storage/v1/storage-groups
Get a storage group GET /storage/v1/storage-groups/{storageGroupId}
Edit a storage group PUT /storage/v1/storage-groups/{storageGroupId}
List zones GET /storage/v1/zones{?count}

List upload accounts

Get a list of upload accounts for all storage groups in your NetStorage instance.

GET /storage/v1/upload-accounts

Status 200 application/json

Response Body:

{
    "items": [
        {
            "uploadAccountId": "value",
            "storageGroupId": 1234568,
            "status": "ACTIVE",
            "isEditable": true,
            "ftpEnabled": true,
            "sshEnabled": true,
            "rsyncEnabled": true,
            "asperaEnabled": true,
            "hasFileManagerAccess": true,
            "hasHttpApiAccess": true,
            "hasPendingPropagation": true,
            "email": "your@email.com",
            "keys": {
                "ftp": [
                    {
                        "identity": "value",
                        "isActive": true,
                        "lastModifiedBy": "camlanders",
                        "lastModifiedDate": "2017-09-04T09:10:58Z"
                    }
                ],
                "ssh": [
                    {
                        "identity": "value",
                        "key": "ssh-rsa HASH your@hostname",
                        "isActive": true,
                        "lastModifiedBy": "camlanders",
                        "lastModifiedDate": "2017-09-04T09:10:58Z"
                    }
                ],
                "rsync": [
                    {
                        "identity": "value",
                        "key": "value",
                        "isActive": true,
                        "lastModifiedBy": "camlanders",
                        "lastModifiedDate": "2017-09-04T09:10:58Z"
                    }
                ],
                "aspera": [
                    {
                        "identity": "value",
                        "key": "ssh-rsa HASH your@hostname",
                        "isActive": true,
                        "lastModifiedBy": "camlanders",
                        "lastModifiedDate": "2017-09-04T09:10:58Z"
                    }
                ],
                "g2o": [
                    {
                        "identity": "value",
                        "user": "username",
                        "key": "value",
                        "isActive": true,
                        "lastModifiedBy": "camlanders",
                        "lastModifiedDate": "2017-09-04T09:10:58Z"
                    }
                ]
            },
            "accessConfig": {
                "hasReadOnlyAccess": false,
                "chrootDirectory": "/456789/j",
                "loginDirectory": "/456789/j",
                "cpcodes": [
                    {
                        "cpcodeId": 456789,
                        "subDirectoryRestrictions": [
                            "/456789/j/k/s"
                        ],
                        "lastModifiedBy": "camlanders",
                        "lastModifiedDate": "2017-09-04T09:10:58Z"
                    }
                ]
            },
            "bruteForceAttackConfig": {
                "failedLoginThreshold": 10,
                "lockDownDurationSeconds": 30
            },
            "technicalContactInfo": {
                "newTechnicalContact": {
                    "firstName": "j",
                    "lastName": "j",
                    "email": "j@j.com",
                    "phone": {
                        "countryCode": "+7",
                        "areaCode": "7",
                        "number": "767676767676"
                    }
                }
            },
            "ruleSetId": 19205,
            "changeHistory": [
                {
                    "changeType": "UPLOAD_ACCOUNT",
                    "action": "ADDED",
                    "propagated": false,
                    "lastModifiedBy": "camlanders",
                    "lastModifiedDate": "2017-09-04T09:10:58Z"
                },
                {
                    "changeType": "RULESET",
                    "action": "ADDED",
                    "propagated": false,
                    "lastModifiedBy": "camlanders",
                    "lastModifiedDate": "2017-09-04T09:10:58Z"
                }
            ],
            "lastModifiedBy": "camlanders",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        }
    ]
}

Create a new upload account

Create an upload account for a storage group.

POST /storage/v1/upload-accounts

Content-Type: application/json;charset=UTF-8

Request Body:

{
    "uploadAccountId": "aka_ua",
    "storageGroupId": 1234568,
    "enableHttpApiAccess": true,
    "email": "your@email.com",
    "ruleSetId": "555551",
    "keys": {
        "ssh": [
            {
                "key": "ssh-rsa HASH your@hostname",
                "comments": "Added ssh key"
            }
        ],
        "ftp": [
            {
                "key": "value",
                "comments": "Added ftp password"
            }
        ],
        "rsync": [
            {
                "key": "value",
                "comments": "Added rsync key"
            }
        ],
        "g2o": [
            {
                "key": "value"
            }
        ]
    },
    "accessConfig": {
        "chrootDirectory": "/456789",
        "loginDirectory": "/456789",
        "hasReadOnlyAccess": false,
        "cpcodes": [
            {
                "cpcodeId": 456789
            }
        ]
    },
    "bruteForceAttackConfig": {
        "failedLoginThreshold": "10",
        "lockDownDurationSeconds": "30"
    },
    "technicalContactInfo": {
        "existingNetStorageTechnicalContact": {
            "primarySfPin": "value",
            "secondarySfPin": "value"
        }
    }
}

Status 201 application/json

Response Body:

{
    "uploadAccountId": "value",
    "storageGroupId": 1234568,
    "status": "ACTIVE",
    "isEditable": true,
    "ftpEnabled": true,
    "sshEnabled": true,
    "rsyncEnabled": true,
    "asperaEnabled": true,
    "hasFileManagerAccess": true,
    "hasHttpApiAccess": true,
    "hasPendingPropagation": true,
    "email": "your@email.com",
    "keys": {
        "ftp": [
            {
                "identity": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "ssh": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "rsync": [
            {
                "identity": "value",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "aspera": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "g2o": [
            {
                "identity": "value",
                "user": "myuploadaccount2",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "accessConfig": {
        "hasReadOnlyAccess": false,
        "chrootDirectory": "/456789/j",
        "loginDirectory": "/456789/j",
        "cpcodes": [
            {
                "cpcodeId": 456789,
                "subDirectoryRestrictions": [
                    "/456789/j/k/s"
                ],
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "bruteForceAttackConfig": {
        "failedLoginThreshold": 10,
        "lockDownDurationSeconds": 30
    },
    "technicalContactInfo": {
        "newTechnicalContact": {
            "firstName": "jane",
            "lastName": "doe",
            "email": "jadoe@email.com",
            "phone": {
                "countryCode": "+7",
                "areaCode": "7",
                "number": "767676767676"
            }
        }
    },
    "ruleSetId": 555551,
    "changeHistory": [
        {
            "changeType": "UPLOAD_ACCOUNT",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "jondoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        },
        {
            "changeType": "RULESET",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "janedoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        }
    ],
    "lastModifiedBy": "janedoe",
    "lastModifiedDate": "2017-09-04T09:10:58Z"
}
  1. Run the List storage groups GET operation.

  2. Locate the storage group that you want to access with the upload account.

  3. Store the storageGroupId associated with this storage group.

  4. In the cpcodes array for the same storage group, locate and store the cpcodeId associated with the desired upload directory.

  5. Form an object for the request using UploadAccount POST data as a reference for required and optional members.

  6. Include a name for the upload account as the uploadAccountId.

  7. The accessConfig object contains the stored values required for storageGroupId and cpcodeId members.

    Applying these values associates the upload account with the storage group and the selects the applicable upload directory via its associated CP code.

  8. POST the object to /storage/v1/upload-accounts.

Get an upload account

Retrieve a specific upload account based on its unique ID value.

GET /storage/v1/upload-accounts/{uploadAccountId}

Sample: /storage/v1/upload-accounts/123456

Parameter Type Sample Description
URL parameters
uploadAccountId String 123456 The unique ID associated with the target upload account. This value can be obtained by performing a GET of all of your accounts and obtaining this value for the desired account.

Status 200 application/json

Response Body:

{
    "uploadAccountId": "value",
    "storageGroupId": 1234568,
    "status": "ACTIVE",
    "isEditable": true,
    "ftpEnabled": true,
    "sshEnabled": true,
    "rsyncEnabled": true,
    "asperaEnabled": true,
    "hasFileManagerAccess": true,
    "hasHttpApiAccess": true,
    "hasPendingPropagation": true,
    "email": "your@email.com",
    "keys": {
        "ftp": [
            {
                "identity": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "ssh": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "rsync": [
            {
                "identity": "value",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "aspera": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "g2o": [
            {
                "identity": "value",
                "user": "myuploadaccount2",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "accessConfig": {
        "hasReadOnlyAccess": false,
        "chrootDirectory": "/456789/j",
        "loginDirectory": "/456789/j",
        "cpcodes": [
            {
                "cpcodeId": 456789,
                "subDirectoryRestrictions": [
                    "/456789/j/k/s"
                ],
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "bruteForceAttackConfig": {
        "failedLoginThreshold": 10,
        "lockDownDurationSeconds": 30
    },
    "technicalContactInfo": {
        "newTechnicalContact": {
            "firstName": "jane",
            "lastName": "doe",
            "email": "jadoe@email.com",
            "phone": {
                "countryCode": "+7",
                "areaCode": "7",
                "number": "767676767676"
            }
        }
    },
    "ruleSetId": 555551,
    "changeHistory": [
        {
            "changeType": "UPLOAD_ACCOUNT",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "jondoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        },
        {
            "changeType": "RULESET",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "janedoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        }
    ],
    "lastModifiedBy": "janedoe",
    "lastModifiedDate": "2017-09-04T09:10:58Z"
}
  1. Run the List upload accounts operation.

  2. Locate and store the uploadAccountId for the applicable group.

  3. Make a GET request to /storage/v1/upload-account/{uploadAccountId}.

Edit an upload account

Update an upload account based on its unique uploadAccountId.

PUT /storage/v1/upload-accounts/{uploadAccountId}

Sample: /storage/v1/upload-accounts/123456

Content-Type: application/json;charset=UTF-8

Request Body:

{
    "enableFileManagerAccess": false,
    "enableHttpApiAccess": true,
    "enableAspera": false,
    "isEditable": true,
    "isVisible": true,
    "email": "your@email.com",
    "ruleSetId": 12944,
    "accessConfig": {
        "chrootDirectory": "/456789",
        "hasReadOnlyAccess": false,
        "cpcodes": [
            {
                "cpcodeId": 456789,
                "subDirectoryRestrictions": [
                    "/456789/abc"
                ]
            }
        ]
    },
    "bruteForceAttackConfig": {
        "failedLoginThreshold": "10",
        "lockDownDurationSeconds": "30"
    },
    "technicalContactInfo": {
        "existingTechnicalContact": {
            "primarySfPin": "value",
            "secondarySfPin": "value"
        }
    }
}
Parameter Type Sample Description
URL parameters
uploadAccountId String 123456 The unique ID associated with the target upload account. This value can be obtained by performing a GET of all of your accounts and obtaining this value for the desired account.

Status 200 application/json

Response Body:

{
    "uploadAccountId": "value",
    "storageGroupId": 1234568,
    "status": "ACTIVE",
    "isEditable": true,
    "ftpEnabled": true,
    "sshEnabled": true,
    "rsyncEnabled": true,
    "asperaEnabled": true,
    "hasFileManagerAccess": true,
    "hasHttpApiAccess": true,
    "hasPendingPropagation": true,
    "email": "your@email.com",
    "keys": {
        "ftp": [
            {
                "identity": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "ssh": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "rsync": [
            {
                "identity": "value",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "aspera": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "g2o": [
            {
                "identity": "value",
                "user": "myuploadaccount2",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "accessConfig": {
        "hasReadOnlyAccess": false,
        "chrootDirectory": "/456789/j",
        "loginDirectory": "/456789/j",
        "cpcodes": [
            {
                "cpcodeId": 456789,
                "subDirectoryRestrictions": [
                    "/456789/j/k/s"
                ],
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "bruteForceAttackConfig": {
        "failedLoginThreshold": 10,
        "lockDownDurationSeconds": 30
    },
    "technicalContactInfo": {
        "newTechnicalContact": {
            "firstName": "jane",
            "lastName": "doe",
            "email": "jadoe@email.com",
            "phone": {
                "countryCode": "+7",
                "areaCode": "7",
                "number": "767676767676"
            }
        }
    },
    "ruleSetId": 555551,
    "changeHistory": [
        {
            "changeType": "UPLOAD_ACCOUNT",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "jondoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        },
        {
            "changeType": "RULESET",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "janedoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        }
    ],
    "lastModifiedBy": "janedoe",
    "lastModifiedDate": "2017-09-04T09:10:58Z"
}
  1. Run the List upload accounts operation.

  2. Locate and store the uploadAccountId for the applicable group.

  3. Modify the object using UploadAccount PUT data as a reference for required and optional members. Only include the objects that apply to what you want to update. You do not need to include the full example content.

  4. PUT the object to /storage/v1/upload-accounts/{uploadAccountId}.

List storage groups

Get a list of all of the storage groups in your NetStorage instance, optionally filtered by CP code or the storage group’s categorized purpose.

GET /storage/v1/storage-groups{?cpcodeId,storageGroupPurpose}

Sample: /storage/v1/storage-groups?cpcodeId=123456&storageGroupPurpose=NETSTORAGE

Parameter Type Sample Description
Optional query parameters
cpcodeId Integer 123456 Include a specific CP code to filter response output to the storage group using it for an upload directory.
storageGroupPurpose Enumeration NETSTORAGE Include the desired value to filter results to only that Storage Group purpose. NETSTORAGE indicates a universal NetStorage Storage Group. EDGESTREAM indicates a group provisioned for universal streaming via Edge Servers. EDGESTREAM_IPHONE indicates a group provisioned for iPhone (HLS) 2.1 streaming via Edge Servers. ADAPTIVEEDGE indicates a group provisioned for Adaptive Media Delivery via Edge Servers. AD_INSERTION indicates a group provisioned for Ad Insertion use. CONTENT_PREPARATION indicates a group provisioned for use with Media Services on Demand: Content Preparation. MSL_ORIGIN indicates a group provisioned for use as an Origin for Media Services Live. FEO indicates a group provisioned for use with Front End Optimization.

Status 200 application/json

Response Body:

{
    "items": [
        {
            "contractId": "5-555V556",
            "storageGroupId": 1234568,
            "storageGroupName": "aka_storage",
            "storageGroupType": "OBJECTSTORE",
            "storageGroupPurpose": "NETSTORAGE",
            "domainPrefix": "akastorage",
            "asperaEnabled": false,
            "pciEnabled": false,
            "estimatedUsageGB": 0,
            "allowEdit": true,
            "migrationStatus": "-",
            "provisionStatus": "PROVISIONED",
            "cpcodes": [
                {
                    "cpcodeId": 456789,
                    "downloadSecurity": "ALL_EDGE_SERVERS",
                    "useSsl": false,
                    "serveFromZip": true,
                    "sendHash": true,
                    "quickDelete": false,
                    "numberOfFiles": -1,
                    "numberOfBytes": -1,
                    "lastChangesPropagated": false,
                    "requestUriCaseConversion": "NO_CONVERSION",
                    "queryStringConversion": {
                        "queryStringConversionMode": "STRIP_ALL_INCOMING_QUERY"
                    },
                    "pathCheckAndConversion": "DISALLOW_ALL_IMPROPER_PATHS",
                    "encodingConfig": {
                        "enforceEncoding": true,
                        "encoding": "UTF_8"
                    },
                    "dirListing": {
                        "indexFileName": "index.html",
                        "maxListSize": 1,
                        "searchOn404": "LOOK_FOR_EXPLICIT_DIR_ONLY"
                    },
                    "ageDeletions": [
                        {
                            "ageDeletionDirectory": "/456789/EN",
                            "ageDeletionDays": 200,
                            "ageDeletionSizeBytes": 10000000,
                            "ageDeletionRecursivePurge": true,
                            "ageDeletionExclusionRegex": ".zip*",
                            "ageDeletionSelectionRegex": ".*"
                        }
                    ],
                    "lastModifiedBy": "carndt",
                    "lastModifiedDate": "2018-08-07T09:25:35Z"
                }
            ],
            "zones": [
                {
                    "zoneName": "AU",
                    "allowUpload": "YES",
                    "allowDownload": "YES",
                    "noCapacityAction": "SPILL_OUTSIDE",
                    "lastModifiedBy": "carndt",
                    "lastModifiedDate": "2018-08-07T09:25:35Z"
                },
                {
                    "zoneName": "IN",
                    "allowUpload": "YES",
                    "allowDownload": "YES",
                    "noCapacityAction": "SPILL_OUTSIDE",
                    "lastModifiedBy": "carndt",
                    "lastModifiedDate": "2018-08-07T09:25:35Z"
                }
            ],
            "propagationStatus": {
                "status": "PENDING",
                "pendingChanges": [
                    "PORTAL_COBRA_METADATA",
                    "PORTAL_PLANNER_METADATA",
                    "PLANNER_PLACEMENT",
                    "CNAMES"
                ],
                "activeChanges": []
            },
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z",
            "links": [
                {
                    "rel": "self",
                    "href": "http://iamakamai.qaextranet.akamai.com/storage-services/api/v1/storage-groups/1234568"
                },
                {
                    "rel": "uploadAccounts",
                    "href": "http://iamakamai.qaextranet.akamai.com/storage-services/api/v1/upload-accounts?storageGroupId=1234568"
                },
                {
                    "rel": "zones",
                    "href": "http://iamakamai.qaextranet.akamai.com/storage-services/api/v1/zones"
                }
            ]
        }
    ]
}

This operation can be used to list your storage groups in multiple ways.

List All Storage Groups

  1. Make a GET request to /storage/v1/storage-groups

You can filter the results

Results can be filtered with the storageGroupPurpose and cpcodeId query parameters.

  1. If you want to filter by category, specify the storageGroupPurpose query parameter.

  2. If you want to filter by CP code, specify a cpcodeId. If you don’t already have a value, they’re available in this operation’s unfiltered response, where each storage group in items features its own cpcodes array.

  3. Make a GET request to /storage/v1/storage-groups{?cpcodeId,storageGroupPurpose}

Create a storage group

This operation creates a new storage group to house your content.

POST /storage/v1/storage-groups

Content-Type: application/json;charset=UTF-8

Request Body:

{
    "contractId": "5-555V556",
    "storageGroupName": "aka_storage",
    "domainPrefix": "akastorage",
    "cpcodes": [
        {
            "cpcodeId": "456789",
            "downloadSecurity": "ALL_EDGE_SERVERS",
            "useSsl": false,
            "requestUriCaseConversion": "NO_CONVERSION",
            "queryStringConversion": {
                "queryStringConversionMode": "STRIP_ALL_INCOMING_QUERY"
            },
            "pathCheckAndConversion": "DISALLOW_ALL_IMPROPER_PATHS",
            "encodingConfig": {
                "enforceEncoding": true,
                "encoding": "UTF_8"
            },
            "serveFromZip": true,
            "dirListing": {
                "indexFileName": "index.html",
                "maxListSize": 1,
                "searchOn404": "LOOK_FOR_EXPLICIT_DIR_ONLY"
            },
            "sendHash": true,
            "enableQuickDelete": false,
            "ageDeletions": [
                {
                    "ageDeletionDirectory": "/456789/EN",
                    "ageDeletionDays": 200,
                    "ageDeletionSizeBytes": 10000000,
                    "ageDeletionRecursivePurge": true,
                    "ageDeletionExclusionRegex": ".zip*",
                    "ageDeletionSelectionRegex": ".*"
                }
            ]
        }
    ],
    "zones": [
        {
            "zoneName": "AU",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE"
        },
        {
            "zoneName": "IN",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE"
        }
    ]
}

Status 201 application/json

Response Body:

{
    "contractId": "5-555V556",
    "storageGroupId": 1234568,
    "storageGroupName": "aka_storage",
    "storageGroupType": "OBJECTSTORE",
    "storageGroupPurpose": "NETSTORAGE",
    "domainPrefix": "akastorage",
    "asperaEnabled": false,
    "pciEnabled": false,
    "estimatedUsageGB": 0,
    "allowEdit": true,
    "migrationStatus": "-",
    "provisionStatus": "PROVISIONED",
    "cpcodes": [
        {
            "cpcodeId": 456789,
            "downloadSecurity": "ALL_EDGE_SERVERS",
            "useSsl": false,
            "serveFromZip": true,
            "sendHash": true,
            "quickDelete": false,
            "numberOfFiles": -1,
            "numberOfBytes": -1,
            "lastChangesPropagated": false,
            "requestUriCaseConversion": "NO_CONVERSION",
            "queryStringConversion": {
                "queryStringConversionMode": "STRIP_ALL_INCOMING_QUERY"
            },
            "pathCheckAndConversion": "DISALLOW_ALL_IMPROPER_PATHS",
            "encodingConfig": {
                "enforceEncoding": true,
                "encoding": "UTF_8"
            },
            "dirListing": {
                "indexFileName": "index.html",
                "maxListSize": 1,
                "searchOn404": "LOOK_FOR_EXPLICIT_DIR_ONLY"
            },
            "ageDeletions": [
                {
                    "ageDeletionDirectory": "/456789/EN",
                    "ageDeletionDays": 200,
                    "ageDeletionSizeBytes": 10000000,
                    "ageDeletionRecursivePurge": true,
                    "ageDeletionExclusionRegex": ".zip*",
                    "ageDeletionSelectionRegex": ".*"
                }
            ],
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "zones": [
        {
            "zoneName": "AU",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        },
        {
            "zoneName": "IN",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "propagationStatus": {
        "status": "PENDING",
        "pendingChanges": [
            "PORTAL_COBRA_METADATA",
            "PORTAL_PLANNER_METADATA",
            "PLANNER_PLACEMENT",
            "CNAMES"
        ],
        "activeChanges": []
    },
    "lastModifiedBy": "carndt",
    "lastModifiedDate": "2018-08-07T09:25:35Z",
    "links": [
        {
            "rel": "self",
            "href": "http://my.url.com/storage-services/api/v1/storage-groups/1234568"
        },
        {
            "rel": "uploadAccounts",
            "href": "http://my.url.com/storage-services/api/v1/upload-accounts?storageGroupId=1234568"
        },
        {
            "rel": "zones",
            "href": "http://my.url.com/storage-services/api/v1/zones"
        }
    ]
}
  1. Generate a CP code with the Property Manager API

  2. Form a StorageGroup POST object.

  3. POST the object to /storage/v1/storage-groups

Get a storage group

Retrieve a specific storage group based on its unique ID value.

GET /storage/v1/storage-groups/{storageGroupId}

Sample: /storage/v1/storage-groups/654321

Parameter Type Sample Description
URL parameters
storageGroupId Integer 654321 The unique ID associated with the target Storage Group.

Status 200 application/json

Response Body:

{
    "contractId": "5-555V556",
    "storageGroupId": 1234568,
    "storageGroupName": "aka_storage",
    "storageGroupType": "OBJECTSTORE",
    "storageGroupPurpose": "NETSTORAGE",
    "domainPrefix": "akastorage",
    "asperaEnabled": false,
    "pciEnabled": false,
    "estimatedUsageGB": 0,
    "allowEdit": true,
    "migrationStatus": "-",
    "provisionStatus": "PROVISIONED",
    "cpcodes": [
        {
            "cpcodeId": 456789,
            "downloadSecurity": "ALL_EDGE_SERVERS",
            "useSsl": false,
            "serveFromZip": true,
            "sendHash": true,
            "quickDelete": false,
            "numberOfFiles": -1,
            "numberOfBytes": -1,
            "lastChangesPropagated": false,
            "requestUriCaseConversion": "NO_CONVERSION",
            "queryStringConversion": {
                "queryStringConversionMode": "STRIP_ALL_INCOMING_QUERY"
            },
            "pathCheckAndConversion": "DISALLOW_ALL_IMPROPER_PATHS",
            "encodingConfig": {
                "enforceEncoding": true,
                "encoding": "UTF_8"
            },
            "dirListing": {
                "indexFileName": "index.html",
                "maxListSize": 1,
                "searchOn404": "LOOK_FOR_EXPLICIT_DIR_ONLY"
            },
            "ageDeletions": [
                {
                    "ageDeletionDirectory": "/456789/EN",
                    "ageDeletionDays": 200,
                    "ageDeletionSizeBytes": 10000000,
                    "ageDeletionRecursivePurge": true,
                    "ageDeletionExclusionRegex": ".zip*",
                    "ageDeletionSelectionRegex": ".*"
                }
            ],
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "zones": [
        {
            "zoneName": "AU",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        },
        {
            "zoneName": "IN",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "propagationStatus": {
        "status": "PENDING",
        "pendingChanges": [
            "PORTAL_COBRA_METADATA",
            "PORTAL_PLANNER_METADATA",
            "PLANNER_PLACEMENT",
            "CNAMES"
        ],
        "activeChanges": []
    },
    "lastModifiedBy": "carndt",
    "lastModifiedDate": "2018-08-07T09:25:35Z",
    "links": [
        {
            "rel": "self",
            "href": "http://my.url.com/storage-services/api/v1/storage-groups/1234568"
        },
        {
            "rel": "uploadAccounts",
            "href": "http://my.url.com/storage-services/api/v1/upload-accounts?storageGroupId=1234568"
        },
        {
            "rel": "zones",
            "href": "http://my.url.com/storage-services/api/v1/zones"
        }
    ]
}

Edit a storage group

Update storage group based on its unique ID value.

PUT /storage/v1/storage-groups/{storageGroupId}

Sample: /storage/v1/storage-groups/654321

Content-Type: application/json;charset=UTF-8

Request Body:

{
    "storageGroupName": "aka_storage",
    "cpcodes": [
        {
            "cpcodeId": 456789,
            "downloadSecurity": "ALL_EDGE_SERVERS",
            "useSsl": false,
            "requestUriCaseConversion": "NO_CONVERSION",
            "queryStringConversion": {
                "queryStringConversionMode": "STRIP_ALL_INCOMING_QUERY"
            },
            "pathCheckAndConversion": "DISALLOW_ALL_IMPROPER_PATHS",
            "encodingConfig": {
                "enforceEncoding": true,
                "encoding": "UTF_8"
            },
            "serveFromZip": true,
            "dirListing": {
                "indexFileName": "index.html",
                "maxListSize": 1,
                "searchOn404": "LOOK_FOR_EXPLICIT_DIR_ONLY"
            },
            "sendHash": true,
            "enableQuickDelete": false,
            "ageDeletions": [
                {
                    "ageDeletionDirectory": "/456789/EN",
                    "ageDeletionDays": 200,
                    "ageDeletionSizeBytes": 10000000,
                    "ageDeletionRecursivePurge": true,
                    "ageDeletionExclusionRegex": ".zip*",
                    "ageDeletionSelectionRegex": ".*"
                }
            ]
        }
    ],
    "zones": [
        {
            "zoneName": "AU",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE"
        },
        {
            "zoneName": "IN",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE"
        }
    ]
}
Parameter Type Sample Description
URL parameters
storageGroupId Integer 654321 The unique ID associated with the target Storage Group.

Status 200 application/json

Response Body:

{
    "contractId": "5-555V556",
    "storageGroupId": 1234568,
    "storageGroupName": "aka_storage",
    "storageGroupType": "OBJECTSTORE",
    "storageGroupPurpose": "NETSTORAGE",
    "domainPrefix": "akastorage",
    "asperaEnabled": false,
    "pciEnabled": false,
    "estimatedUsageGB": 0,
    "allowEdit": true,
    "migrationStatus": "-",
    "provisionStatus": "PROVISIONED",
    "cpcodes": [
        {
            "cpcodeId": 456789,
            "downloadSecurity": "ALL_EDGE_SERVERS",
            "useSsl": false,
            "serveFromZip": true,
            "sendHash": true,
            "quickDelete": false,
            "numberOfFiles": -1,
            "numberOfBytes": -1,
            "lastChangesPropagated": false,
            "requestUriCaseConversion": "NO_CONVERSION",
            "queryStringConversion": {
                "queryStringConversionMode": "STRIP_ALL_INCOMING_QUERY"
            },
            "pathCheckAndConversion": "DISALLOW_ALL_IMPROPER_PATHS",
            "encodingConfig": {
                "enforceEncoding": true,
                "encoding": "UTF_8"
            },
            "dirListing": {
                "indexFileName": "index.html",
                "maxListSize": 1,
                "searchOn404": "LOOK_FOR_EXPLICIT_DIR_ONLY"
            },
            "ageDeletions": [
                {
                    "ageDeletionDirectory": "/456789/EN",
                    "ageDeletionDays": 200,
                    "ageDeletionSizeBytes": 10000000,
                    "ageDeletionRecursivePurge": true,
                    "ageDeletionExclusionRegex": ".zip*",
                    "ageDeletionSelectionRegex": ".*"
                }
            ],
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "zones": [
        {
            "zoneName": "AU",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        },
        {
            "zoneName": "IN",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "propagationStatus": {
        "status": "PENDING",
        "pendingChanges": [
            "PORTAL_COBRA_METADATA",
            "PORTAL_PLANNER_METADATA",
            "PLANNER_PLACEMENT",
            "CNAMES"
        ],
        "activeChanges": []
    },
    "lastModifiedBy": "carndt",
    "lastModifiedDate": "2018-08-07T09:25:35Z",
    "links": [
        {
            "rel": "self",
            "href": "http://my.url.com/storage-services/api/v1/storage-groups/1234568"
        },
        {
            "rel": "uploadAccounts",
            "href": "http://my.url.com/storage-services/api/v1/upload-accounts?storageGroupId=1234568"
        },
        {
            "rel": "zones",
            "href": "http://my.url.com/storage-services/api/v1/zones"
        }
    ]
}
  1. Run the List storage groups GET operation.

  2. Locate and store the storageGroupId for the applicable group.

  3. Modify the object using StorageGroup PUT data as a reference for required and optional members. Only include the objects that apply to what you want to update. (You do not need to include the full example content.)

  4. PUT the object to /storage/v1/storage-groups/{storageGroupId}.

List zones

Get a list of the geographic regions (“zones”) that are available to you for use in replicating your content.

GET /storage/v1/zones{?count}

Sample: /storage/v1/zones?count=5

Parameter Type Sample Description
Optional query parameters
count Integer 5 An integer that serves as the maximum number of Zones in the response. By default, all available Zones are revealed.

Status 200 application/json

Response Body:

{
    "zones": [
        {
            "zoneName": "CA-nearby"
        },
        {
            "zoneName": "JP"
        },
        {
            "zoneName": "asia"
        },
        {
            "zoneName": "australia"
        },
        {
            "zoneName": "europe"
        },
        {
            "zoneName": "global"
        }
    ]
}

Data

This section provides you with the data model for the NetStorage Configuration API.

Download the JSON schemas for this API.

The data schema tables below list membership requirements as follows:

Member is required in requests, or always present in responses, even if its value is empty or null.
Member is optional, and may be omitted in some cases.
Member is out of scope, and irrelevant to the specified interaction context. If you include the member in that context, it either triggers an error, or is ignored.

StorageGroup

Encapsulates the configuration of a group. You can list, and get details of a group.

Download schema: PostStorageGroup.json, PutStorageGroup.json, GetStorageGroup.json

Sample GET:

{
    "contractId": "5-555V556",
    "storageGroupId": 1234568,
    "storageGroupName": "aka_storage",
    "storageGroupType": "OBJECTSTORE",
    "storageGroupPurpose": "NETSTORAGE",
    "domainPrefix": "akastorage",
    "asperaEnabled": false,
    "pciEnabled": false,
    "estimatedUsageGB": 0,
    "allowEdit": true,
    "migrationStatus": "-",
    "provisionStatus": "PROVISIONED",
    "cpcodes": [
        {
            "cpcodeId": 456789,
            "downloadSecurity": "ALL_EDGE_SERVERS",
            "useSsl": false,
            "serveFromZip": true,
            "sendHash": true,
            "quickDelete": false,
            "numberOfFiles": -1,
            "numberOfBytes": -1,
            "lastChangesPropagated": false,
            "requestUriCaseConversion": "NO_CONVERSION",
            "queryStringConversion": {
                "queryStringConversionMode": "STRIP_ALL_INCOMING_QUERY"
            },
            "pathCheckAndConversion": "DISALLOW_ALL_IMPROPER_PATHS",
            "encodingConfig": {
                "enforceEncoding": true,
                "encoding": "UTF_8"
            },
            "dirListing": {
                "indexFileName": "index.html",
                "maxListSize": 1,
                "searchOn404": "LOOK_FOR_EXPLICIT_DIR_ONLY"
            },
            "ageDeletions": [
                {
                    "ageDeletionDirectory": "/456789/EN",
                    "ageDeletionDays": 200,
                    "ageDeletionSizeBytes": 10000000,
                    "ageDeletionRecursivePurge": true,
                    "ageDeletionExclusionRegex": ".zip*",
                    "ageDeletionSelectionRegex": ".*"
                }
            ],
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "zones": [
        {
            "zoneName": "AU",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        },
        {
            "zoneName": "IN",
            "allowUpload": "YES",
            "allowDownload": "YES",
            "noCapacityAction": "SPILL_OUTSIDE",
            "lastModifiedBy": "carndt",
            "lastModifiedDate": "2018-08-07T09:25:35Z"
        }
    ],
    "propagationStatus": {
        "status": "PENDING",
        "pendingChanges": [
            "PORTAL_COBRA_METADATA",
            "PORTAL_PLANNER_METADATA",
            "PLANNER_PLACEMENT",
            "CNAMES"
        ],
        "activeChanges": []
    },
    "lastModifiedBy": "carndt",
    "lastModifiedDate": "2018-08-07T09:25:35Z",
    "links": [
        {
            "rel": "self",
            "href": "http://my.url.com/storage-services/api/v1/storage-groups/1234568"
        },
        {
            "rel": "uploadAccounts",
            "href": "http://my.url.com/storage-services/api/v1/upload-accounts?storageGroupId=1234568"
        },
        {
            "rel": "zones",
            "href": "http://my.url.com/storage-services/api/v1/zones"
        }
    ]
}

StorageGroup members

Member Type POST PUT GET Description
allowEdit Boolean Whether this group is enabled for editing.
asperaEnabled Boolean Whether Aspera Upload Acceleration has been enabled in an upload account that has access to this group.
comments Array Individual comments that briefly describe the last update made to the group.
contractId String The unique identifier set for the contract that contains your instance of NetStorage and this group.
cpcodes StorageGroup.cpcodes[] Encapsulates CP codes associated with a group.
domainPrefix String Your unique Domain Prefix (subdomain) value that the NetStorage system applies to the Domain Names used to access the group.
estimatedUsageGB Number The current volume of the group, in gigabytes.
groupId Integer The unique identifier for the group in the Luna portal under which you want to provision
lastModifiedBy String The user who last modified the group.
lastModifiedDate String The date the group was last modified.
links StorageGroup.links Hypermedia links to the specific group, as well as any upload accounts or geographic replication zones associated with it.
migrationStatus String The current migration status from FileStore format to ObjectStore format, if migration has been initiated.
pciEnabled Boolean Whether Payment Card Industry (PCI) Data Security Standard support has been enabled for the storage group. These standards are designed to ensure that all companies that accept, process, store or transmit credit card information maintain a secure environment.
postFileDomainEnabled Boolean Whether a postfile domain, {domain prefix}.postfile.akamai.com has been enabled for use with this group. The {domain prefix} variable is set up by you during creation of the group.
propagationStatus StorageGroup.propagationStatus The current propagation status of the group.
provisionStatus Enumeration The current provisioning status of the group. PROVISIONED indicates the group is ready for use. MARKED_FOR_DEPROVISIONING indicates that deprovisioning has been requested, but the group is still accessible. DEPROVISIONED indicates that deprovisioning has completed, and the group is no longer available. NOT_PROVISIONED indicates the group has not been requested for provisioning.
storageGroupId Integer The unique identifier that is automatically set for the group.
storageGroupName String The name you have set for the group.
storageGroupPurpose Enumeration This is the specific purpose defined for the group. NETSTORAGE indicates a universal storage group. EDGESTREAM indicates the group is provisioned for universal streaming via Edge Servers. EDGESTREAM_IPHONE indicates the group is provisioned for iPhone (HLS) 2.1 streaming via Edge Servers. ADAPTIVEEDGE indicates the group is provisioned for Adaptive Media Delivery via Edge Servers. AD_INSERTION indicates the group is provisioned for Ad Insertion use. CONTENT_PREPARATION indicates the group is provisioned for use with Media Services on Demand: Content Preparation. MSL_ORIGIN indicates the group is provisioned for use as an Origin for Media Services Live. FEO indicates the group is provisioned for use with Front End Optimization.
uploadDomain String The Upload Domain Name for this group. It is used to access the group to upload content. This is automatically constructed using the Domain Prefix that you define when creating the group.
zones StorageGroup.zones[] The geographic replication zones configured for use with this group. These are also referred to as replicas.
StorageGroup.cpcodes[]: Encapsulates CP codes associated with a group.
ageDeletions StorageGroup.cpcodes[].ageDeletions[] Automatic Purge Routines that have been set up for the group.
cpcodeId Integer A CP code assigned to the group, and used to identify requests to a specific upload directory. The CP code serves as the root for upload directory. This is also referred to as the CP code root.
deprovisionStatus Enumeration If the upload directory (CP code) is being deprovisioned, this is the status of that deprovisioning. DEPROVISION_INITIATED indicates the the process initiated. DEPROVISION_INITIATED_PROPAGATING indicates the initiation process for deprovisioning is propagating. DEPROVISION_INITIATED_REVERTED indicates that deprovisioning was requested, but was reverted, and the upload directory was returned to active status. DEPROVISION_COMPLETE_INITIATE indicates that the completion phase of deprovisioning has initiated. DEPROVISION_COMPLETE_PROPAGATING indicates that the completion phase of the deprovision is propagating. DEPROVISION_COMPLETE_COMPLETED indicates that the process is completed, and the upload directory has been deprovisioned.
dirListing StorageGroup.cpcodes[].dirListing Specifies the file to serve if a request does not end in a specific file name and extension.
downloadSecurity Enumeration The level of security to obtain download access to the group. ALL_EDGE_SERVERS allows requests from all Edge Servers. STREAMING_SERVERS_ONLY only allows requests from edge servers dedicated to streaming media. G_2_O_AND_ALL_EDGE_SERVERS allows requests from all edge servers, but a warning is issued; it also allows all requests that include a valid G2O token, G_2_O_ONLY requires inclusion of a valid G2O token.
enableQuickDelete Boolean Whether the quick-delete operation is available in the NetStorage HTTP API and the CMShell. Targets a specific directory in this group and recursively deletes all of its contents.
encodingConfig StorageGroup.cpcodes[].encodingConfig The type of encoding to use when displaying paths in XML-aware contexts.
f2hConfig StorageGroup.cpcodes[].f2hConfig FTP to HTTP (F2H) conversion for FTP download efficiency.
g2o StorageGroup.cpcodes[].g2o Keys you can use to access the group with the NetStorage HTTP API.
lastChangesPropagated Boolean When you create or modify an upload directory and changes are propagated to the NetStorage network, true indicates propagation is complete.
lastModifiedBy String The user who last modified the upload directory.
lastModifiedDate String The date the upload directory was last modified.
numberOfBytes Integer The total number of bytes used by the upload directory.
numberOfFiles Integer The total number of files contained in the upload directory.
pathCheckAndConversion Enumeration Specifies the action taken when analyzing the request path. With DISALLOW_ALL_IMPROPER_PATHS, paths using naming conventions outside of what is supported for use as an explicit or implicit directory name are blocked, and an error message is displayed. With DISALLOW_IMPROPER_PATHS_ON_UPLOAD_ONLY, as previous, but only for upload requests. Download requests are translated to canonical. With TRANSLATE_TO_CANONICAL, a forward slash (/) is seen as a path delimiter and repeat instances are treated as a single instance in a path. For example, if an upload request is sent to target the directory, //files/new///mp4/movie1.mp4, the file is uploaded to /files/new/mp4/movie1.mp4. (And, non-existent directories within the path are auto-generated to exist as explicit ones). With DO_NOT_CHECK_PATHS, paths are not checked and are interpreted exactly as they are sent.
queryStringConversion StorageGroup.cpcodes[].queryStringConversion Specifies how query strings appended to request paths to this group are handled.
quickDelete Boolean Whether the quick-delete operation is available in the NetStorage HTTP API and the CMShell. Targets a specific directory in this group and recursively deletes all of its contents.
requestUriCaseConversion Enumeration Standardizes case usage for filenames uploaded to your selected upload directory. NO_CONVERSION, CONVERT_TO_UPPER and CONVERT_TO_LOWER are self-explanatory. STREAM_OS indicates case requirements are applied to support the Stream OS product. This is only seen in a very limited number of legacy groups.
rootDirectory String The CP code root for the upload directory.
sendHash Boolean Whether a content item’s MD5 digest values is sent in the HTTP Content-MD5 response header.
serveFromZip Boolean Whether NetStorage dynamically examines archived files to directly serve individual files from within the archive.
useSsl Boolean Whether the contents within the upload directory are replicated securely via Secure Sockets Layer (SSL).
StorageGroup.cpcodes[].ageDeletions[]: Automatic Purge Routines that have been set up for the group.
ageDeletionDays Integer When the ageDeletionSizeBytes value is reached for the target directory, this number is subtracted from the current date to determine a timestamp. Files older than this timestamp are purged.
ageDeletionDirectory String The target directory for an Automatic Purge Routine.
ageDeletionExclusionRegex String POSIX regular expression pattern matching the filenames to exclude from the purge.
ageDeletionInclusionRegex String POSIX regular expression pattern matching the filenames to include in the purge.
ageDeletionRecursivePurge Boolean Whether subdirectories within the target directory are also included in the purge. If false, only files within the target directory are purged.
ageDeletionSelectionRegex String POSIX regular expression pattern matching the filenames to include in the purge.
ageDeletionSizeBytes Integer Automatic purge occurs when the target directory reaches this size, in bytes.
StorageGroup.cpcodes[].dirListing: Specifies the file to serve if a request does not end in a specific file name and extension.
indexFileName String If a request does not specifically end in a file name and extension, this specifies the default file that is served.
maxListSize Integer Whether the file path is truncated or hidden in the file path displayed in the HTML directory listing for the Index Name file. -1 indicates the full path is displayed, 0 indicates directory listings are not served, but the search for the requested Index Name file continues, and an integer greater than zero indicates directory listings in the path are limited to this number.
searchOn404 Enumeration The action taken in the event of a 404 error. (The client was able to access NetStorage, but the requested content or directory could not be found.) DO_NOT_SEARCH stops additional searches, and returns a 404 error, LOOK_FOR_EXPLICIT_DIR_ONLY looks for an explicit directory matching the path specified in the request, and LOOK_FOR_IMPLICIT_AND_EXPLICIT_DIR looks for both an explicit and implicit directory that may match a path defined in the request.
StorageGroup.cpcodes[].encodingConfig: The type of encoding to use when displaying paths in XML-aware contexts.
encoding Enumeration The selected encoding format, either ISO_8859_1 which are 8-bit, single-byte coded graphic character sets, or UTF_8 which are variable length, 8-bit code units via UTF–8 character encoding.
enforceEncoding Boolean Whether upload operations verify that all path values defined within the URL for target content are properly formatted using the selected encoding method.
StorageGroup.cpcodes[].f2hConfig: FTP to HTTP (F2H) conversion for FTP download efficiency.
f2hCookies Array A listing of cookies generated in support of F2H for this group.
f2hDirectories Array A listing of directories in the group that have been set up to support F2H.
StorageGroup.cpcodes[].g2o: Keys you can use to access the group with the NetStorage HTTP API.
key String The G2O key. This is the key set in the upload account named as the user. It is used with the NetStorage HTTP API to access this group.
lastModifiedBy String The user who added or last modified the key.
lastModifiedDate String The ISO 8601 timestamp that represents when the G2O key was last modified.
user String The G2O user upload account. This is the name of an upload account for this group that has enabled access to the NetStorage HTTP API.
StorageGroup.cpcodes[].queryStringConversion: Specifies how query strings appended to request paths to this group are handled.
queryStringConversionExclude String A list of query string values that have been explicitly set to be excluded from conversion. Only applicable if APPLY_ACS_QUERY_CONVERSION is set as the queryStringConversionMode.
queryStringConversionKeyOrder String If APPLY_ACS_QUERY_CONVERSION is set as the queryStringConversionMode, this specifies a list of query string values that should be included for ACS Query String Conversion, in the specific order they should be interpreted.
queryStringConversionMode Enumeration Specifies how upload and download request query strings should be transformed before processing the request. With STRIP_ALL_INCOMING_QUERY, all query strings are stripped and ignored. With APPLY_ACS_QUERY_CONVERSION, the key is reviewed and stripped down using settings defined for queryStringConversionKeyOrder and queryStringConversionExclude; a hash of the string is also applied and used for matching at request time. With LEAVE_INCOMING_QUERY_AS_IS, the string is left as is.
queryStringConversionVersion String The version in use for queryStringConversion with this group.
StorageGroup.propagationStatus: The current propagation status of the group.
status Enumeration Propagation statuses can be PENDING which indicates the item is in queue or ACTIVE which indicates the group is propagated.
StorageGroup.zones[]: The geographic replication zones configured for use with this group. These are also referred to as replicas.
allowDownload Enumeration How this Zone has been configured to support direct downloads (rather than just for replication use). YES download from the Zone is supported, NO not supported, and FAILOVER if other Zones are not available.
allowUpload Enumeration How this Zone has been configured to support direct uploads (rather than just for replication use). YES indicates uploads are supported. NO indicates uploads are not supported. FAILOVER indicates that uploads are supported to this Zone only if no other Zones are available.
lastModifiedBy String The user who last modified Zone settings for this group.
lastModifiedDate String The date these Zone settings were last modified.
noCapacityAction Enumeration The action taken if the Zone has no capacity for additional upload content. SPILL_OUTSIDE indicates content is temporarily uploaded outside the Zone, to another Zone configured for the group. DENY_UPLOADS indicates that the Zone does not support uploads for a noCapacityAction.
overrideReason String The reason that a Zone should be overridden for another Zone.
overrideZoneName String The Zone that is used for override to accommodate the noCapacityAction operation, if applicable.
zoneName String The name of the geographic replication zone.

UploadAccount

Encapsulates the configuration of an account. You can list, create and get details of an account.

Download schema: PostUploadAccount.json, PutUploadAccount.json, GetUploadAccount.json

Sample GET:

{
    "uploadAccountId": "value",
    "storageGroupId": 1234568,
    "status": "ACTIVE",
    "isEditable": true,
    "ftpEnabled": true,
    "sshEnabled": true,
    "rsyncEnabled": true,
    "asperaEnabled": true,
    "hasFileManagerAccess": true,
    "hasHttpApiAccess": true,
    "hasPendingPropagation": true,
    "email": "your@email.com",
    "keys": {
        "ftp": [
            {
                "identity": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "ssh": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "rsync": [
            {
                "identity": "value",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "aspera": [
            {
                "identity": "value",
                "key": "ssh-rsa HASH jdoe@hostname",
                "isActive": true,
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ],
        "g2o": [
            {
                "identity": "value",
                "user": "myuploadaccount2",
                "key": "value",
                "isActive": true,
                "lastModifiedBy": "jondoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "accessConfig": {
        "hasReadOnlyAccess": false,
        "chrootDirectory": "/456789/j",
        "loginDirectory": "/456789/j",
        "cpcodes": [
            {
                "cpcodeId": 456789,
                "subDirectoryRestrictions": [
                    "/456789/j/k/s"
                ],
                "lastModifiedBy": "janedoe",
                "lastModifiedDate": "2017-09-04T09:10:58Z"
            }
        ]
    },
    "bruteForceAttackConfig": {
        "failedLoginThreshold": 10,
        "lockDownDurationSeconds": 30
    },
    "technicalContactInfo": {
        "newTechnicalContact": {
            "firstName": "jane",
            "lastName": "doe",
            "email": "jadoe@email.com",
            "phone": {
                "countryCode": "+7",
                "areaCode": "7",
                "number": "767676767676"
            }
        }
    },
    "ruleSetId": 555551,
    "changeHistory": [
        {
            "changeType": "UPLOAD_ACCOUNT",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "jondoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        },
        {
            "changeType": "RULESET",
            "action": "ADDED",
            "propagated": false,
            "lastModifiedBy": "janedoe",
            "lastModifiedDate": "2017-09-04T09:10:58Z"
        }
    ],
    "lastModifiedBy": "janedoe",
    "lastModifiedDate": "2017-09-04T09:10:58Z"
}

UploadAccount members

Member Type POST PUT GET Description
accessConfig UploadAccount.accessConfig Specifies the settings for the upload directory that has been selected for this account.
asperaEnabled Boolean Whether Aspera Upload Acceleration was enabled as an access method during creation of the account. Aspera Upload Acceleration makes use of a third party client application from AsperaSoft that offers expedited uploads to a storage group.
bruteForceAttackConfig UploadAccount.bruteForceAttackConfig Configures how to prevent brute force attacks over FTP. This protects the target storage group from excessive incorrect FTP login attempts.
changeHistory UploadAccount.changeHistory[] Lists each change made to the account.
email String The primary contact email address set up for the account.
enableAspera Boolean Configure Aspera access for this account.
enableFileManagerAccess Boolean Configure File Manager access for this account.
enableHttpApiAccess Boolean Configure HTTP API access for this account.
ftpEnabled Boolean Whether FTP was enabled as an access method during creation of the account. This allows the account to access the storage group using FTP and a unique password you have set up for use with FTP.
globalUploadAccount Boolean Indicates the upload account is globally mapped.
hasFileManagerAccess Boolean Whether access to FileManager was enabled during creation of the account. FileManager is a NetStorage interface that allows you to perform basic file management operations from the Luna Control Center. If enabled, this account can be used to access the storage group via FileManager.
hasHttpApiAccess Boolean Whether access to the NetStorage HTTP API was enabled during creation of the account. This API is used to interact with your content, including operations such as upload, download, move and delete. If enabled, this account can be used to access the storage group via this API.
hasPendingPropagation Boolean Whether the account is currently being propagated. As changes are made to an account, it is propagated to the NetStorage network. This can take upwards of 60 minutes.
isEditable Boolean Whether this account is enabled for editing. Editing of an account is currently only supported in the Luna Control Center.
isVisible Boolean Configure if this account is visible.
keys UploadAccount.keys The various keys and passwords configured for the access methods set in this account.
lastModifiedBy String The user who last modified the account.
lastModifiedDate String The ISO 8601 timestamp labeling when the account was last modified.
multiFactorAuthConfig UploadAccount.multiFactorAuthConfig Two-factor authentication settings for the account.
quickDelete Boolean Whether quick-delete functionality is enabled in the storage group that this account has been configured to access.
rsyncEnabled Boolean Whether non-secure Rsync was enabled as an access method during creation of the account. This allows the account to access the storage group using the Rsync protocol and a unique password you have set up for use with Rsync.
ruleSetId Integer The unique ID associated with the Access Control List (ACL) Rule Set for the account, if applicable. These rule sets are comprised of a list of IP Addresses or Geographic Regions that are allowed or blocked from access. The appropriate ID integer is set as the type for the ruleSetId object for the account.
sshEnabled Boolean Whether Secure Shell (SSH) is enabled as an access method for the account, through application of an SSH key during creation of the account. This allows access to the storage group via this account using SFTP, SecureCopy, Secure Rsync, Aspera Upload Acceleration and the NetStorage CMShell.
status Enumeration The activation status and availability of the account. INACTIVE indicates the account has been deactivated. NEW indicates the account is being propagated for use. ACTIVATIONSENT indicates the initial activation email has been sent to the Contact on the account, and NetStorage is awaiting a confirmation it was received. ACTIVE indicates the account has complete propagation is is available for use.
storageGroupId Integer The unique identifier for the storage group that this account has been configured to access.
storageGroupName String The upload account has been configured to access this specific storage group.
storageGroupType Enumeration The format or migration status of the storage group that this account has been configured to access. FILESTORE indicates an NS3 format group. OBJECTSTORE indicates an NS4 format group. MIGRATING indicates the group is being migrated from NS3 to NS4.
technicalContactInfo UploadAccount.technicalContactInfo Technical Contact information set up for the account.
uploadAccountId String The name you have set for the account. This is referred to as the Id in Luna.
uploadAccountStatus Enumeration Set the upload account status. Valid options are ACTIVE and INACTIVE.
uploadAccountType Enumeration Configure the account type. Valid options are NORMAL and AGEDELETION.
UploadAccount.accessConfig: Specifies the settings for the upload directory that has been selected for this account.
chrootDirectory String The directory set up to serve as the Directory Limit, if applicable. This is a directory other than the storage group’s actual CP code root, that has been set up as the root for the account. Access for the account is limited to this directory and any existing subdirectories.
cpcodes UploadAccount.accessConfig.cpcodes[] The upload directory associated with this account. The CP code for the upload directory is set as the cpcodeId via the cpcodes array for the account.
hasDirectoryLimit Boolean Whether a Directory Limit has been established for the account.
hasReadOnlyAccess Boolean The Read-Write vs. Read-only setting for the account. A value of true indicates that the account can only view content in its associated storage group.
loginDirectory String Specifies the Default Directory for the account, if configured. Whenever the account connects with the storage group, the directory named here will be the default point of access. If not configured, loginDirectory is blank.
UploadAccount.accessConfig.cpcodes[]: The upload directory associated with this account. The CP code for the upload directory is set as the cpcodeId via the cpcodes array for the account.
cpcodeId Integer The CP code serving as an upload directory.
lastModifiedBy String The user who last modified this upload directory.
lastModifiedDate String The ISO 8601 timestamp labeling when this upload directory was last modified.
subDirectoryRestrictions Array A Subdirectory Restriction limits management operations to the specified directory. The account can only upload, download, move, or delete content within that directory, or its children. Multiple Subdirectory Restrictions can be applied to a single account.
UploadAccount.bruteForceAttackConfig: Configures how to prevent brute force attacks over FTP. This protects the target storage group from excessive incorrect FTP login attempts.
failedLoginThreshold Integer The number of failed login attempts to trigger the lockdown for an offending client IP address.
lockDownDurationSeconds Integer The number of seconds an offending IP address is blocked from FTP access once the failedLoginThreshold total is reached.
UploadAccount.changeHistory[]: Lists each change made to the account.
action Enumeration The action performed with the change. ADDED indicates the account was actually added. DELETED indicates the account was deleted. ENABLED or DISABLED indicates the change was made to affect the availability of the account. ROTATED indicates a password or key associated with an access method was rotated to a new instance. UPDATED indicates an option or setting was changed in the account.
changeType Enumeration The option or functionality that was modified. CPCODE indicates the change applied to the application of a CP code for use in an upload directory. FTP indicates the change applied to FTP Authentication access. SSH_KEY indicates the change applied to SSH Authentication access. RSYNC indicates the change applied to Rsync (Password) Authentication. ASPERA indicates the change applied to Aspera Upload Accelerations settings. SUBDIR_RESTRICTION indicates the change applied to a Subdirectory Restriction. CHROOT indicates the change applied to a Directory Limit. LOGINDIR indicates the change applied to a Default Directory. CMS indicates the change applied to settings for the Content Management (CM) Shell. FM indicates the change applied to FileManager access. HTTP_UPLOAD_OPTIONS indicates the change applied to HTTP Upload Service. FTP_DOWNLOAD_OPTIONS indicates the change applied to FTP Download Services. UPLOAD_ACCOUNT indicates the change applied to general account settings. ACCESS indicates the change applied to some form of access for the account. G2O indicates the change applied to the G2O Key used for access to the NetStorage HTTP API. RULESET indicates the change applied to and Access Control Group (ACL) Rule Set. BFA indicates the change applied to BFA. IP indicates the change applied to IP. SERVICE_VARIABLE indicates the change applied to a service variable. MFA_CONFIG indicates the change applied to the actual configuration settings Two-factor authentication. MFA_SECRET indicates the change applied to the ftpSecrets associated with Two-factor authentication for the account.
lastModifiedBy String The user who made the change.
lastModifiedDate String The ISO 8601 timestamp labeling when the change occurred.
propagated Boolean Whether the change has completed propagation to the NetStorage network. Propagation can take upwards of 60 minutes.
UploadAccount.keys: The various keys and passwords configured for the access methods set in this account.
aspera UploadAccount.keys.aspera[] Settings pertaining to Aspera Upload Acceleration.
ftp UploadAccount.keys.ftp[] Settings applied for the FTP access method.
g2o UploadAccount.keys.g2o[] Information pertaining to the G2O Key applied to the account for use with the NetStorage HTTP API.
rsync UploadAccount.keys.rsync[] Settings applied for the non-secure Rsync access method.
ssh UploadAccount.keys.ssh[] Settings applied for the SSH access method.
UploadAccount.keys.aspera[]: Settings pertaining to Aspera Upload Acceleration.
comments String Any optional notes made for the SSH key.
id String A unique identifier for Aspera Upload Acceleration.
isActive Boolean Whether Aspera Upload Acceleration has been enabled for this account.
key String The SSH key applied to the account that has been associated with Aspera. SSH–2 RSA and SSH–2 DSA formats are supported.
lastModifiedBy String The user who last modified the SSH key.
lastModifiedDate String The ISO 8601 timestamp labeling when the SSH key was last modified.
UploadAccount.keys.ftp[]: Settings applied for the FTP access method.
comments String Any optional notes made for the FTP password.
id String A unique identifier generated for FTP Authentication.
isActive Boolean Whether the FTP password is active for the account. When added to an account, an FTP password is active by default.
key String Configure the password for FTP access. Various requiremens apply to a non-secure passwords as outlined in the NetStorage Configuration Guide on learn.akamai.com
lastModifiedBy String The user who last modified the FTP password.
lastModifiedDate String The ISO 8601 timestamp labeling when the FTP password was last modified.
UploadAccount.keys.g2o[]: Information pertaining to the G2O Key applied to the account for use with the NetStorage HTTP API.
id String A unique identifier for the G2O Key.
isActive Boolean Whether the NetStorage HTTP API has been enabled for use with this account.
key String Token used for G2O authentication. Various requiremens apply as outlined in the NetStorage Configuration Guide on learn.akamai.com
lastModifiedBy String The user who last modified the G2O Key settings.
lastModifiedDate String The ISO 8601 timestamp labeling when the G2O Key settings were last modified.
user String The name of the upload account. This is referred to as the “Id” in the Luna interface. It serves as the Key-name when used in the NetStorage HTTP API.
UploadAccount.keys.rsync[]: Settings applied for the non-secure Rsync access method.
comments String Any optional notes made for Rsync password.
id String A unique identifier generated for Rsync password Authentication.
isActive Boolean Whether the non-secure Rsync password is active for the account. When added to an account, this password is active by default.
key String Configure the password for Rsync access. Various requiremens apply as outlined in the NetStorage Configuration Guide on learn.akamai.com
lastModifiedBy String The user who last modified the Rsync password.
lastModifiedDate String The ISO 8601 timestamp labeling when the Rsync password was last modified.
UploadAccount.keys.ssh[]: Settings applied for the SSH access method.
comments String Any optional notes made for the SSH key.
emailId String The NetStorage technical contact email address set up for this upload account.
id String A unique identifier generated for SSH Authentication.
isActive Boolean Whether the SSH key is active for the account. When added to an account, an SSH key is active by default.
key String Configure the key for SSH access. Various requiremens apply to the generation and use of SSH keys as outlined in the NetStorage Configuration Guide on learn.akamai.com
lastModifiedBy String The user who last modified the SSH key.
lastModifiedDate String The ISO 8601 timestamp labeling when the SSH key was last modified.
UploadAccount.multiFactorAuthConfig: Two-factor authentication settings for the account.
ftpMode Enumeration The current enabled or disabled status of Two-factor authentication for the account. NONE indicates it is disabled. STRICT Two-factor authentication is enabled. OPTIONAL indicates the account owner can access via FTP by providing only the FTP username and password, or providing the FTP username and password with the applicable time-based one time password (TOTP) appended to it.
ftpSecrets UploadAccount.multiFactorAuthConfig.ftpSecrets[] This is revealed if the shared secret for Two-factor authentication is to be generated manually.
generateSecret Boolean Whether Akamai automatically generates the shared secret to be used with Two-factor authentication for this account.
UploadAccount.multiFactorAuthConfig.ftpSecrets[]: This is revealed if the shared secret for Two-factor authentication is to be generated manually.
comment String Manually defined comment text included for the key. This content is used in the generation of the shared secret, but is optional. If left out, placeholder content is automatically generated.
key String The manual entry set to serve as the shared secret. The key is exactly 16 characters in length and uses BASE–32 alphanumeric characters. This includes uppercase letters (A-Z), and numbers within the 2 - 7 range.
secretGeneratedBy Enumeration How the shared secret was rotated. CLIENT indicates it was defined manually. For example, the key member was used and a shared secret was manually input. SERVER indicates it was automatically generated. For example, the "generateSecret": "true" pair was used.
secretProvisionedBy String The user account that was used to generate the shared secret.
UploadAccount.technicalContactInfo: Technical Contact information set up for the account.
existingNetStorageTechnicalContact UploadAccount.technicalContactInfo.existingNetStorageTechnicalContact The overall NetStorage technical contacts are selected to serve as the contacts for this upload account. These are established in the NETSTORAGE CONTACTS functionality within the Contact Management tool in Luna.
existingTechnicalContact UploadAccount.technicalContactInfo.existingTechnicalContact A pair of existing Luna Control Center User Accounts have been selected as Technical Contacts for the account. Contact information for these accounts is set up using the Luna Control Center.
newTechnicalContact UploadAccount.technicalContactInfo.newTechnicalContact All details for the contact have been manually applied.
UploadAccount.technicalContactInfo.existingNetStorageTechnicalContact: The overall NetStorage technical contacts are selected to serve as the contacts for this upload account. These are established in the NETSTORAGE CONTACTS functionality within the Contact Management tool in Luna.
primarySfPin String The Luna Control Center user account selected as the primary point of contact for the upload account.
secondarySfPin String The Luna Control Center user account selected as the secondary point of contact for the upload account.
UploadAccount.technicalContactInfo.existingTechnicalContact: A pair of existing Luna Control Center User Accounts have been selected as Technical Contacts for the account. Contact information for these accounts is set up using the Luna Control Center.
primarySfPin String The Luna Control Center User Account selected as the Primary point of contact for the account.
secondarySfPin String The Luna Control Center User Account selected as the Secondary point of contact for the account.
UploadAccount.technicalContactInfo.newTechnicalContact: All details for the contact have been manually applied.
email String The email address for the contact.
firstName String The first name of the contact.
lastName String The last name (surname) of the contact.
phone UploadAccount.technicalContactInfo.newTechnicalContact.phone Phone number details for the contact.
UploadAccount.technicalContactInfo.newTechnicalContact.phone: Phone number details for the contact.
areaCode String The applicable area code for the contact phone number.
countryCode String The applicable country code for the contact phone number.
number String The contact phone number.

Zones

Encapsulates the geographic replication zones available for use with a storage group.

Download schema: Zones.json

Sample GET:

{
    "zones": [
        {
            "zoneName": "CA-nearby"
        },
        {
            "zoneName": "JP"
        },
        {
            "zoneName": "asia"
        },
        {
            "zoneName": "australia"
        },
        {
            "zoneName": "europe"
        },
        {
            "zoneName": "global"
        }
    ]
}

Zones members

Member Type Required Description
zones Zones.zones[] The individual geographic replication zones available for use. These are also referred to as replicas.
Zones.zones[]: The individual geographic replication zones available for use. These are also referred to as replicas.
zoneName String An individual zone available for use in replication.

Hypermedia

Hypermedia links to the specific group, as well as any upload accounts or geographic replication zones associated with it.

Download schema: GetStorageGroup.json

Hypermedia members

Member Type Required Description
href String A navigable path to the specific rel resource, once you prefix it with your hostname token.
rel Enumeration This represents the link relation to the storage group resource. This can be either self for a link referring to the storage group itself, uploadAccounts for a link to an associated upload account, or zones for a geographic replication zone that can be used with the group.

Errors

This section provides details on the data object that reflects the API’s common response to error cases, and lists the API’s range of response status codes for both error and success cases.

Error responses

The NetStorage Configuration API responds with HTTP problem error objects that provide details useful for debugging. The response revealed is contingent on a number of factors, including the type operation you are performing and the specific error.

The following is an example of a response with a validation error.

{
    "type": "validation-error",
    "title": "Validation failure",
    "instance": "ea4afa39-29f1-4213-9d83-0a6b73a26edf",
    "status": 400,
    "detail": "Validation failed. Please review the errors.",
    "errors": [
        {
            "type": "error-types/not.accessible",
            "title": "Not accessible",
            "detail": "You don't have permission to access the given storage group.",
            "field": "storageGroupId",
            "value": 123456
        }
    ]
}

The status member offers the applicable HTTP error code, the various detail members contain a basic description of the issue, and the instance member offers a unique ID value that may be used in troubleshooting the issue with technical support.

HTTP status codes

The following lists the range of HTTP response codes the API may produce for both success and error cases:

Code Description
200 The operation was successful.
201 Resource created.
400 Badly formatted JSON. Compare with the schema.
401 Unauthorized Request.
403 Application permission error.
429 The maximum request count for a specific time duration for this resource has been reached.

Last modified: 8/24/2018