File Storage API Endpoints
Use the Storage API methods to upload and manage your app and any file dependencies required for testing.
Refer to Getting Started for Authentication and Server information.
What You'll Need
- A Sauce Labs account (Log in or sign up for a free trial license)
- Your Sauce Labs Username and Access Key
Get App Storage Files
GET /v1/storage/files
Parameters
q | | QUERY | OPTIONAL | STRING | Any search term (such as app name, file name, description, build number or version) by which you want to filter results. |
name | | QUERY | OPTIONAL | STRING | The file name (case-insensitive) by which you want to search files. |
kind | | QUERY | OPTIONAL | ARRAY of STRINGS | The app type associated with the file, such as |
file_id | | QUERY | OPTIONAL | ARRAY of STRINGS | One or more specific IDs of the files to return. |
sha256 | | QUERY | OPTIONAL | STRING | SHA-256 hexadecimal (64 chars) hash of the file to look for. |
icon_repr | | QUERY | OPTIONAL | STRING | Available values are:
base64 . If set to hash , then only the icon_hash field will be populated in the file metadata, while the icon field will always be null . This helps to reduce the overall size of the JSON response significantly. |
tag | | QUERY | OPTIONAL | ARRAY of STRINGS | One or more tags to only include files having these tags assigned into the resulting JSON. AND condition is applied if more than one tag is provided |
team_id | | QUERY | OPTIONAL | ARRAY of STRINGS | One or more IDs of teams with which the files are shared. |
org_id | | QUERY | OPTIONAL | ARRAY of STRINGS | One or more IDs of organizations with which the files are shared. |
page | | QUERY | OPTIONAL | INTEGER | Return results beginning with a specific page. Default is |
per_page | | QUERY | OPTIONAL | STRING | The number of results (max. 100) to be shown per page. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.us-west-1.saucelabs.com/v1/storage/files' | json_pp
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.eu-central-1.saucelabs.com/v1/storage/files' | json_pp
Responses
200 | Success. |
{
"items": [
{
"id": "eac15989-311a-4dde-9e77-b695323de369",
"owner": {
"id": "13ef3c9f777549aba58c29d9af4dfcbf",
"org_id": "d35a179b33394553ba0e35e0f22aabb3"
},
"name": "iOS-Simulator-MyRNDemoApp.1.3.0-162.zip",
"upload_timestamp": 1652180523,
"etag": "CLTu7Ynk1PcCEAE=",
"kind": "ios",
"group_id": 396353,
"size": 6743553,
"description": null,
"tags": [],
"metadata": {
"identifier": "com.saucelabs.mydemoapp.rn",
"name": "My Demo App",
"version": "162",
"is_test_runner": false,
"icon": "...",
"icon_hash": "...",
"short_version": "1.3.0",
"is_simulator": true,
"min_os": "12.0",
"target_os": "15.4",
"test_runner_plugin_path": null,
"device_family": [
"phone"
]
},
"access": {
"team_ids": [
"a4cd325b896c4b2db5dc7c853fed31c4"
],
"org_ids": []
},
"sha256": "a3925c6ece9e85695b3fba001560f8f59e4162cb511058c058bcbc2271429a6e"
},
{
"id": "591d8591-f9eb-42b7-903c-bf1ae189a358",
"owner": {
"id": "13ef3c9f777549aba58c29d9af4dfcbf",
"org_id": "d35a179b33394553ba0e35e0f22aabb3"
},
"name": "iOS-Simulator-MyRNDemoApp.1.3.0-162.zip",
"upload_timestamp": 1652180522,
"etag": "CLXq+ojk1PcCEAE=",
"kind": "ios",
"group_id": 396353,
"size": 6743553,
"description": null,
"tags": [],
"metadata": {
"identifier": "com.saucelabs.mydemoapp.rn",
"name": "My Demo App",
"version": "162",
"is_test_runner": false,
"icon": "...",
"icon_hash": "...",
"short_version": "1.3.0",
"is_simulator": true,
"min_os": "12.0",
"target_os": "15.4",
"test_runner_plugin_path": null,
"device_family": [
"phone"
]
},
"access": {
"team_ids": [
"a4cd325b896c4b2db5dc7c853fed31c4"
],
"org_ids": []
},
"sha256": "a3925c6ece9e85695b3fba001560f8f59e4162cb511058c058bcbc2271429a6e"
},
{
"id": "61c5d1f1-7baa-4e1f-84fd-371da916cd26",
"owner": {
"id": "13ef3c9f777549aba58c29d9af4dfcbf",
"org_id": "d35a179b33394553ba0e35e0f22aabb3"
},
"name": "iOS-Simulator-MyRNDemoApp.1.3.0-162.zip",
"upload_timestamp": 1652180517,
"etag": "CJ7jyYbk1PcCEAE=",
"kind": "ios",
"group_id": 396353,
"size": 6743553,
"description": null,
"tags": [],
"metadata": {
"identifier": "com.saucelabs.mydemoapp.rn",
"name": "My Demo App",
"version": "162",
"is_test_runner": false,
"icon": "...",
"icon_hash": "...",
"short_version": "1.3.0",
"is_simulator": true,
"min_os": "12.0",
"target_os": "15.4",
"test_runner_plugin_path": null,
"device_family": [
"phone"
]
},
"access": {
"team_ids": [
"a4cd325b896c4b2db5dc7c853fed31c4"
],
"org_ids": []
},
"sha256": "a3925c6ece9e85695b3fba001560f8f59e4162cb511058c058bcbc2271429a6e"
}
],
"links": {
"prev": null,
"next": null,
"self": "?q=162&page=1&per_page=25"
},
"page": 1,
"per_page": 25,
"total_items": 3
}
Get App Storage Groups
GET /v1/storage/groups
Parameters
q | | QUERY | OPTIONAL | STRING | Any search term (such as build number or file name) by which you want to filter results. |
kind | | QUERY | OPTIONAL | STRING | The app type associated with the group, such as |
group_id | | QUERY | OPTIONAL | ARRAY of STRINGS | One or more specific IDs of the groups to return. |
project_name | | QUERY | OPTIONAL | STRING | The project name of the groups to return. If no |
icon_repr | | QUERY | OPTIONAL | STRING | Available values are:
base64 . If set to hash , then only the icon_hash field will be populated in the file metadata, while the icon field will always be null . This helps to reduce the overall size of the JSON response significantly. |
page | | QUERY | OPTIONAL | INTEGER | Return results beginning with a specific page. Default is |
per_page | | QUERY | OPTIONAL | STRING | The number of results (max. 100) to be shown per page. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.us-west-1.saucelabs.com/v1/storage/groups' | json_pp
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.eu-central-1.saucelabs.com/v1/storage/groups' | json_pp
Responses
200 | Success. | |
404 | Not found. |
{
"items": [
{
"id": 64612,
"name": "com.saucelabs.SwagLabsMobileApp",
"project_path": "My Swag Project",
"recent": {
"id": "43732d5b-5275-4a79-a936-197e4b9cd2d4",
"owner": {
"id": "e5be7513ba224f6f9463c209cb4c5d83",
"org_id": "bed0a8a559404117b3d10d3bfff4c8ab"
},
"name": "iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa",
"upload_timestamp": 1618522437,
"etag": "184d1c399251e8849edcb0adfc079571",
"kind": "ios",
"group_id": 64612,
"description": null,
"tags": [],
"metadata": {
"identifier": "com.saucelabs.SwagLabsMobileApp",
"name": "SwagLabsMobileApp",
"version": "12",
"is_test_runner": false,
"icon": "...",
"icon_hash": "...",
"short_version": "2.7.1",
"is_simulator": false,
"min_os": "10.0",
"target_os": "14.2",
"test_runner_plugin_path": null
}
},
"access": {
"team_ids": [
"80d69d16ebdb4c018cc9d81ea911761a"
],
"org_ids": []
},
"count": 1,
"access": {...},
"settings": {
"proxy": {
"host": "",
"port": 0
},
"proxy_enabled": false,
"lang": "en_GB",
"orientation": null,
"resigning_enabled": true,
"resigning": {
"image_injection": true,
"group_directory": false,
"biometrics": true,
"sys_alerts_delay": false
}
}
}
],
"links": {...},
"page": 1,
"per_page": 25,
"total_items": 1
}
Get App Storage Group Settings
GET /v1/storage/groups/{group_id}/settings
Parameters
group_id | | PATH | REQUIRED | INTEGER | The unique identifier of the app group. You can look up group IDs using the Get App Storage Groups endpoint. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" \
--request GET 'https://api.us-west-1.saucelabs.com/v1/storage/groups/2175303/settings' | json_pp
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" \
--request GET 'https://api.eu-central-1.saucelabs.com/v1/storage/groups/2175303/settings' | json_pp
Responses
200 | Success. | |
404 | Not found. |
{
"settings": {
"proxy": {
"host": "",
"port": 0
},
"audio_capture": false,
"proxy_enabled": false,
"lang": "en_GB",
"orientation": null,
"resigning_enabled": true,
"resigning": {
"image_injection": true,
"group_directory": false,
"biometrics": false,
"sys_alerts_delay": false,
"network_capture": false
}
},
"kind": "ios",
"identifier": "com.saucelabs.mydemoapp.ios"
}
Edit App Storage Group Settings
PUT /v1/storage/groups/{group_id}/settings
Parameters
group_id | | PATH | REQUIRED | INTEGER | The unique identifier of the app group. You can look up group IDs using the Get App Storage Groups endpoint. |
json body | | BODY | REQUIRED | STRING | The app group's settings. See the sample response below for the available settings. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" \
--request PUT 'https://api.us-west-1.saucelabs.com/v1/storage/groups/2175303/settings' \
--header 'Content-Type: application/json' \
--data-raw '{"settings":{"resigning":{"image_injection":false}}}'\
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" \
--request PUT 'https://api.eu-central-1.saucelabs.com/v1/storage/groups/2175303/settings' \
--header 'Content-Type: application/json' \
--data-raw '{"settings":{"resigning":{"image_injection":false}}}'\
Responses
201 | Created. | |
400 | The provided group identifier is not a valid one or the provided settings object is invalid. | |
401 | Authorization failed. | |
403 | The current user does not have enough permissions to change the group. | |
404 | The group does not exist or is not accessible. | |
406 | The settings cannot be set for the given group type. |
{
"settings": {
"proxy": {
"host": "",
"port": 0
},
"audio_capture": false,
"proxy_enabled": false,
"lang": "en_GB",
"orientation": null,
"resigning_enabled": true,
"resigning": {
"image_injection": true,
"group_directory": false,
"biometrics": false,
"sys_alerts_delay": false,
"network_capture": false
}
},
"kind": "ios",
"identifier": "com.saucelabs.mydemoapp.ios"
}
Upload File to App Storage
POST /v1/storage/upload
Parameters
payload | | FORM-FILE | REQUIRED | STRING | The path to the file you want to upload. |
name | | FORM-TEXT | REQUIRED | STRING | The portion of the payload value that is the actual file name (including the type extension). |
description | | FORM-TEXT | OPTIONAL | STRING | A description to distinguish your app. |
tags | | FORM-TEXT | OPTIONAL | STRING | An optional list of comma-separated tag names assigned to the uploaded file. Each tag name length must be between 1 and 16 characters. Tag names must only consist of uppercase (A-Z), lowercase (a-z), digits (0-9), underscore ("_"), hyphen ("-"), and dot (".") characters. Tag names are case-sensitive. It is allowed to assign up to 10 tags to a single file. |
project_name | | FORM-TEXT | OPTIONAL | STRING | An optional name for the project you want the file (group) to be assigned to. If the project doesn't exist, it will be created. Project names can only consist of alphanumeric (uppercase and lowercase) characters, along with underscores ("_"), hyphens ("-"), periods ("."), and spaces (" "). Project names are case-sensitive and can be max 64 characters long. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request POST 'https://api.us-west-1.saucelabs.com/v1/storage/upload' \
--form 'payload=@"g16K4P8IX/iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa"' \
--form 'name="iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa"' \
--form 'description="iOS Test App v3"'
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request POST 'https://api.eu-central-1.saucelabs.com/v1/storage/upload' \
--form 'payload=@"g16K4P8IX/iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa"' \
--form 'name="iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa"' \
--form 'description="iOS Test App v3"'
Responses
201 | Created. | |
400 | Bad Request. | |
404 | Not found. |
{
"item": {
"id": "7a154f05-835f-469a-93cf-880647d3a8ab",
"owner": {
"id": "******",
"org_id": "******"
},
"name": "iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa",
"upload_timestamp": 1619035533,
"etag": "184d1c399251e8849edcb0adfc079571",
"kind": "ios",
"group_id": 64612,
"description": null,
"tags": [],
"metadata": {
"identifier": "com.saucelabs.SwagLabsMobileApp",
"name": "SwagLabsMobileApp",
"version": "12",
"is_test_runner": false,
"icon": "...",
"icon_hash": "...",
"short_version": "2.7.1",
"is_simulator": false,
"min_os": "10.0",
"target_os": "14.2",
"test_runner_plugin_path": null
},
"access": {...}
}
}
Download a File from App Storage
GET /v1/storage/download/{file_id}
Parameters
file_id | | PATH | REQUIRED | STRING | The Sauce Labs identifier of the stored file. You can look up file IDs using the Get App Storage Files endpoint. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.us-west-1.saucelabs.com/v1/storage/download/43732d5b-5275-4a79-a936-197e4b9cd2d4' --output SwagLabsMobileApp.ipa
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.eu-central-1.saucelabs.com/v1/storage/download/43732d5b-5275-4a79-a936-197e4b9cd2d4' --output SwagLabsMobileApp.ipa
Responses
200 | Success. | |
404 | Not found. |
PK
�����(BwQ��������������Payload/UX��a�_�a�_��PK
�����*BwQ��������������Payload/SwagLabsMobileApp.app/UX��a�_�b�_��PK
�����(BwQ������������-��Payload/SwagLabsMobileApp.app/_CodeSignature/UX��a�_�a�_��PK���*BwQ������������:��Payload/SwagLabsMobileApp.app/_CodeSignature/CodeResourcesUX��a�_�a�_���}i��H����_QS�3#ؼ$�Zt��x��(R�$�m�oR"���+�]6%R.WX,��+���$3##"#����,����MT���~���;���߾�5�����/�7J"��LW�Q�~'�ā#������2���Ҩ���j�=d��}����ö-�'�����֧O}t���@��ҫ����������1̏����n�����k�
...
Edit a Stored File
PUT /v1/storage/files/{file_id}
Parameters
file_id | | PATH | REQUIRED | STRING | The Sauce Labs identifier of the stored file. You can look up file IDs using the Get App Storage Files endpoint. |
description | | BODY | OPTIONAL | STRING | A description to more clearly distinguish the stored file in the Sauce Labs system. |
tags | | BODY | OPTIONAL | STRING | An optional list of comma-separated tag names assigned to the uploaded file. Each tag name length must be between 1 and 16 characters. Tag names must only consist of uppercase (A-Z), lowercase (a-z), digits (0-9), underscore ("_"), hyphen ("-"), and dot (".") characters. Tag names are case-sensitive. It is allowed to assign up to 10 tags to a single file. The value overrides the previously set tags. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request PUT 'https://api.us-west-1.saucelabs.com/v1/storage/files/43732d5b-5275-4a79-a936-197e4b9cd2d4' \
--header 'Content-Type: text/html' \
--data-raw '{
"item": {
"description": "Sauce Docs iOS Test App",
"tags": "Europe,Asia,US"
}
}'\
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request PUT 'https://api.eu-central-1.saucelabs.com/v1/storage/files/43732d5b-5275-4a79-a936-197e4b9cd2d4' \
--header 'Content-Type: text/html' \
--data-raw '{
"item": {
"description": "Sauce Docs iOS Test App",
"tags": "Europe,Asia,US"
}
}'\
Responses
200 | Success. | |
400 | Bad Request. | |
404 | Not found. |
{
"item": {
"id": "43732d5b-5275-4a79-a936-197e4b9cd2d4",
"owner": {
"id": "e5be7513ba224f6f9463c209cb4c5d83",
"org_id": "bed0a8a559404117b3d10d3bfff4c8ab"
},
"name": "iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa",
"upload_timestamp": 1618522437,
"etag": "184d1c399251e8849edcb0adfc079571",
"kind": "ios",
"group_id": 64612,
"description": "Sauce Docs iOS Test App",
"tags": ["Europe", "Asia", "US"],
"metadata": {
"identifier": "com.saucelabs.SwagLabsMobileApp",
"name": "SwagLabsMobileApp",
"version": "12",
"is_test_runner": false,
"icon": "...",
"icon_hash": "...",
"short_version": "2.7.1",
"is_simulator": false,
"min_os": "10.0",
"target_os": "14.2",
"test_runner_plugin_path": null
},
"access": {...}
},
"changed": true
}
Delete an App Storage File
DELETE /v1/storage/files/{file_id}
Parameters
file_id | | PATH | REQUIRED | STRING | The Sauce Labs identifier of the stored file. You can look up file IDs using the Get App Storage Files endpoint. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request DELETE 'https://api.us-west-1.saucelabs.com/v1/storage/files/43732d5b-5275-4a79-a936-197e4b9cd2d4' | json_pp
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request DELETE 'https://api.eu-central-1.saucelabs.com/v1/storage/files/43732d5b-5275-4a79-a936-197e4b9cd2d4' | json_pp
Responses
200 | Success. | |
404 | Not found. |
{
"item": {
"id": "43732d5b-5275-4a79-a936-197e4b9cd2d4",
"owner": {
"id": "e5be7513ba224f6f9463c209cb4c5d83",
"org_id": "bed0a8a559404117b3d10d3bfff4c8ab"
},
"name": "iOS.RealDevice.SauceLabs.Mobile.Sample.app.2.7.1.ipa",
"upload_timestamp": 1618522437,
"etag": "184d1c399251e8849edcb0adfc079571",
"kind": "ios",
"group_id": 64612,
"description": "Sauce Docs iOS Test App",
"tags": [],
"metadata": {
"identifier": "com.saucelabs.SwagLabsMobileApp",
"name": "SwagLabsMobileApp",
"version": "12",
"is_test_runner": false,
"icon": "...",
"icon_hash": "...",
"short_version": "2.7.1",
"is_simulator": false,
"min_os": "10.0",
"target_os": "14.2",
"test_runner_plugin_path": null
},
"access": {...}
}
}
Delete a Group of App Storage Files
DELETE /v1/storage/groups/{group_id}
Parameters
group_id | | PATH | REQUIRED | STRING | The Sauce Labs identifier of the group of files. You can look up file IDs using the Get App Storage Groups endpoint. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request DELETE 'https://api.us-west-1.saucelabs.com/v1/storage/groups/64612' | json_pp
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request DELETE 'https://api.eu-central-1.saucelabs.com/v1/storage/groups/64612' | json_pp
Responses
200 | Success. |
{
"code": 404,
"title": "NotFound",
"detail": "The group identified by \"64612\" does not exist or is not accessible (Request ID: nancy.swee__delete_group__35803e43)"
}
Get File Icon
GET /v1/storage/icons/{icon_hash}
icon_hash | | PATH | REQUIRED | STRING | Hash string of the particular icon. You can look up icon hashes using the Get App Storage Files endpoint. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.us-west-1.saucelabs.com/v1/storage/icons/<icon_hash>' --output icon.png
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.eu-central-1.saucelabs.com/v1/storage/icons/<icon_hash>' --output icon.png
Responses
200 | Success. | |
404 | Not found. |
List Tags
GET/v1/storage/tags
page | | QUERY | OPTIONAL | INTEGER | Return results beginning with a specific page. Default is |
per_page | | QUERY | OPTIONAL | STRING | The number of results (max. 100) to be shown per page. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.us-west-1.saucelabs.com/v1/storage/tags'
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.eu-central-1.saucelabs.com/v1/storage/tags'
Responses
200 | Success. |
{
"items": [
"Asia",
"Europe",
"US"
]
"links": {
"prev": null,
"next": null,
"self": "?page=1&per_page=25"
},
"page": 1,
"per_page": 25,
"total_items": 3
}
List Projects
GET/v1/storage/projects
kind | | QUERY | OPTIONAL | STRING | The app type associated with the project(s), such as
|
page | | QUERY | OPTIONAL | INTEGER | Return results beginning with a specific page. Default is |
per_page | | QUERY | OPTIONAL | STRING | The number of results (max 100) to be shown per page. |
- United States
- Europe
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.us-west-1.saucelabs.com/v1/storage/projects'
curl -u "$SAUCE_USERNAME:$SAUCE_ACCESS_KEY" --location \
--request GET 'https://api.eu-central-1.saucelabs.com/v1/storage/projects'
Responses
200 | Success. |
{
"items": [
"Asia",
"Buenos Aires",
"Europe",
"Los Angeles",
"US"
]
"links": {
"prev": null,
"next": null,
"self": "?page=1&per_page=25"
},
"page": 1,
"per_page": 25,
"total_items": 5
}