CloudSoda facilitates the transfer of files from one storage to another. This documentation describes the secure public API for accessing a subset of CloudSoda functionality.
The primary use case supported by the API is to allow a client to programmatically track and manage transfers. As such, the API is not designed to be a one-to-one replacement of the CloudSoda web interface.
CloudSoda is continuously deployed and as such the API will change, but all changes will be backward compatible. If a change needs to be made that breaks backward compatibility, a new major version of the API will be released under a different endpoint to expose the new functionality. Ample notice will be given that the existing API is being deprecated and allow for integrated applications to migrate.
However, the current API version can be found by making an authenticated request to the root API URL.
At a high level, CloudSoda deployments allow users to transfer files from one storage to another. File transfers occur by running file transfer jobs. Jobs can be one time transfers, but users also have the ability to schedule future jobs by creating recurring job templates called policies.
Deployments are top-level entities under which all resources are grouped. As a result, various resources, such as jobs,
groups, and users, have a deploymentId
property. This id uniquely identifies the deployment to which a resource
belongs. Note that deploymentId
is being deprecated in favor of accountId
.
Jobs describe the instructions to copy or move files. Storages act as sources and targets for file transfer jobs. Users are provided credentials to sign in and interact with the system via the WebUI.
The CloudSoda API can be accessed by using the .api.cloudsoda.io subdomain. For example, if your URL is https://acme-us-1.cloudsoda.io, your API can be reached at https://acme-us-1.api.cloudsoda.io.
Pagination for all API resources is done in accordance with the JSON:API specification. Details on JSON:API pagination can be found here.
Any third party client must authenticate against the API using the client id and secret. The client credentials authentication flow must only be used in cases where the client application can be completely trusted to securely store the secret, which is effectively a password. If the secret is exposed, new client credentials must be generated because malicious clients could make authorized requests with compromised credentials.
A third party client seeking to integrate against the API can request credentials from the on-site CloudSoda product administrator. Specifically, the client id and the client secret can be generated in the API section of the CloudSoda web interface.
Authentication is performed via OAuth 2.0 using the token endpoint. The access_token
returned in the response can be used to authenticate subsequent requests on behalf of the client.
grant_type required | string Value: "client_credentials" The OAuth 2.0 authentication grant flow being initiated |
client_id required | string The unique id for the client making the request |
client_secret required | string The secret key generated alongside the client id |
{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiZXhwIjoxNTE2MzI1NDIyLCJpYXQiOjE1MTYyMzkwMjJ9.Afybwh_KiVPNG9yEEk7cW8V9d3UYfLHwV5CjhR9mLxI",
- "token_type": "Bearer",
- "expires_in": 86400
}
Accounts are the top level organizational construct encapsulating a billable unit of the system. All descendent resources can be managed collectively and ultimately derive their authority from the account.
Examples include a company or isolated divisions within a company that are billed separately. Alternatively, a managed services partner may have their own account which secures login and identity management while they manage multiple accounts for their customers.
id required | string |
type required | string Value: "accounts" |
required | object |
{- "id": "6fb61290-6679-4fff-be37-60e3563930b5",
- "type": "accounts",
- "attributes": {
- "name": "Regional Operations Asia",
- "createdAt": "2022-03-04T19:01:26.532Z",
- "updatedAt": "2024-02-12T21:04:25.520Z"
}
}
Returns a collection of all visible accounts.
object Example: filter[name]=Customer Support Filters out records without all of the matching fields | |
object Example: page[limit]=10 Determines how to paginate the record set | |
sort | string Example: sort=-name Determines how to sort the record set |
{- "meta": {
- "page": {
- "after": null,
- "total": 2
}
}, - "data": [
- {
- "id": "6fb61290-6679-4fff-be37-60e3563930b5",
- "type": "accounts",
- "attributes": {
- "name": "Regional Operations Asia",
- "createdAt": "2022-03-04T19:01:26.532Z",
- "updatedAt": "2024-02-12T21:04:25.520Z"
}
}, - {
- "id": "481b2a6c-9872-4c58-bc2f-2cc70d449f39",
- "type": "accounts",
- "attributes": {
- "name": "Enterprise HR",
- "createdAt": "2023-12-20T14:42:24.521Z",
- "updatedAt": "2024-10-22T12:10:33.599Z"
}
}
],
}
Show the requested account.
id required | string Example: 256e9943-bde2-406c-bfb2-ceb478027bc6 The id of the requested account |
{- "data": {
- "id": "6fb61290-6679-4fff-be37-60e3563930b5",
- "type": "accounts",
- "attributes": {
- "name": "Regional Operations Asia",
- "createdAt": "2022-03-04T19:01:26.532Z",
- "updatedAt": "2024-02-12T21:04:25.520Z"
}
}
}
id required | string |
type required | string Value: "groups" |
required | object |
{- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "groups",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "name": "Marketing",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}
Returns a collection of all visible groups.
object Example: filter[accountId]=02127c6a-d0d8-4599-9bf1-7d9c43e16eb9 Filters out records without all of the matching fields | |
object Example: page[limit]=10 Determines how to paginate the record set | |
sort | string Example: sort=-accountId,name Determines how to sort the record set |
{- "meta": {
- "page": {
- "after": null,
- "total": 2
}
}, - "data": [
- {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "groups",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "name": "Marketing",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}, - {
- "id": "471b4c97-8670-4776-8e78-2fcba0b505f2",
- "type": "groups",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "name": "Sales",
- "createdAt": "2020-04-07T17:15:25.550Z",
- "updatedAt": "2020-04-07T17:15:25.550Z"
}
}
],
}
Allows for a new group to be created.
required | object |
{- "data": {
- "type": "groups",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "name": "Marketing"
}
}
}
{- "data": {
- "id": "471b4c97-8670-4776-8e78-2fcba0b505f2",
- "type": "groups",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "name": "Sales",
- "createdAt": "2020-04-07T17:15:25.550Z",
- "updatedAt": "2020-04-07T17:15:25.550Z"
}
}
}
Show the requested group.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested group |
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "groups",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "name": "Marketing",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}
}
Update an existing group.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested group |
required | object |
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "groups",
- "attributes": {
- "name": "Legal"
}
}
}
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "groups",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "name": "Legal",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}
}
Delete an existing group.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested group |
{- "errors": [
- {
- "code": "entity-not-found",
- "title": "Entity Not Found",
- "detail": "The requested entity was not found."
}
]
}
Users can use their credentials to interact with CloudSoda resources through the UI.
Two classes of users exist in the system. The primary class of user has login credentials and can interact with the system through the UI. Alternatively, users can be registered without a password, preventing anyone from signing in with that user account. However, the user still exists as a stub, which can be used for tracking purposes. For instance, those accounts might correspond to users interacting with the system through a third party integration rather than directly the web portal.
id required | string |
type required | string Value: "users" |
required | object |
{- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "users",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "groupId": "6976cc65-bcc1-4410-b950-adc9284f11c3",
- "email": "william@protonmail.com",
- "firstName": "William",
- "lastName": "Scofflaw",
- "timezone": "America/Denver",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}
Returns a collection of all visible users.
object Example: filter[deploymentId]=02127c6a-d0d8-4599-9bf1-7d9c43e16eb9 Filters out records without all of the matching fields | |
object Example: page[limit]=10 Determines how to paginate the record set | |
sort | string Example: sort=-deploymentId,email Determines how to sort the record set |
{- "meta": {
- "page": {
- "after": null,
- "total": 2
}
}, - "data": [
- {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "users",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "groupId": "6976cc65-bcc1-4410-b950-adc9284f11c3",
- "email": "william@protonmail.com",
- "firstName": "William",
- "lastName": "Scofflaw",
- "timezone": "America/Denver",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}, - {
- "id": "471b4c97-8670-4776-8e78-2fcba0b505f2",
- "type": "users",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "groupId": null,
- "email": "john.doe@cloudsoda.io",
- "firstName": "John",
- "lastName": "Doe",
- "timezone": null,
- "createdAt": "2020-04-07T17:15:25.550Z",
- "updatedAt": "2020-04-07T17:15:25.550Z"
}
}
],
}
Allows for a new user to be created. Password credentials cannot be provided, so a user created through this method cannot login without granting access through the administrative dashboard.
required | object |
{- "data": {
- "type": "users",
- "attributes": {
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "groupId": null,
- "email": "john.doe@cloudsoda.io",
- "firstName": "John",
- "lastName": "Doe"
}
}
}
{- "data": {
- "id": "471b4c97-8670-4776-8e78-2fcba0b505f2",
- "type": "users",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "groupId": null,
- "email": "john.doe@cloudsoda.io",
- "firstName": "John",
- "lastName": "Doe",
- "timezone": null,
- "createdAt": "2020-04-07T17:15:25.550Z",
- "updatedAt": "2020-04-07T17:15:25.550Z"
}
}
}
Show the requested user.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested user |
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "users",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "deploymentId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "groupId": "6976cc65-bcc1-4410-b950-adc9284f11c3",
- "email": "william@protonmail.com",
- "firstName": "William",
- "lastName": "Scofflaw",
- "timezone": "America/Denver",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}
}
Update an existing user.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested user |
required | object |
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "users",
- "attributes": {
- "firstName": "Guy",
- "lastName": "Fawkes",
- "timezone": "Etc/UTC"
}
}
}
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "users",
- "attributes": {
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "groupId": "6976cc65-bcc1-4410-b950-adc9284f11c3",
- "email": "william@protonmail.com",
- "firstName": "Guy",
- "lastName": "Fawkes",
- "timezone": "Etc/UTC",
- "createdAt": "2020-04-07T18:15:25.550Z",
- "updatedAt": "2020-05-14T23:25:44.334Z"
}
}
}
Delete an existing user account.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested user |
{- "errors": [
- {
- "code": "entity-not-found",
- "title": "Entity Not Found",
- "detail": "The requested entity was not found."
}
]
}
Jobs are used to transfer files or objects from one storage to another.
Jobs are customizable and offer flexibility in executing transfers. The job object contains information describing a transfer, which specifies which files will be transferred, which storages to transfer files to and from, and how files should be transferred. In addition to information related to the transfer, the job object may contain information about the user who initiated the transfer or the related group/deployment.
Once initiated, a job goes through various stages of preparation and execution through to completion or failure. The job
object's status
property keeps track of the given stage a job is going through.
Before transferring files, a job begins by looking through a storage and identifying the files to be transferred. During
this initial stage, the job's status will be scanning.
When a job completes its scanning stage and is transferring
files its status will change to running
. A job that has been paused will have a status of paused
. If a job is
interrupted due to resources not being available to execute it, the job's status will be set to stuck
. Canceled jobs
have their status set to canceled
. Once the file transfer is complete, the job's status will be set to finished
. If
the job fails to complete its status will change to failed
.
Jobs can either be executed as one time quick transfers, or scheduled in advance using policies. All jobs can be similarly handled using the API, irrespective of how they were triggered.
It is also possible to have a job execute as a dry run and not move any data. In this case, it simply returns information on what would have been transferred and the cost of doing so.
Files can either be copied to a new storage, or moved over without retaining copies in the original storage. The
transferType
property specifies the type of transfer a job will execute.
Setting the transfer type property to copy
will result in preserving all data on the source storage. A copy of the
files will be created on the target storage. If the transfer type is move
, files will be moved over to the target, and
then removed from the source. Finally, the sync
transfer type will synchronize the files between the source, and the
target, by making the target mirror the source. Please note that all files on the target that are not on the source will
be deleted. This is also true when using rules: all files not matching the rules on the target will be deleted. For
example, with a rule set to sync all .txt
files from a source to a target, then, after the transfer, previously
existing files on the target will be deleted, and only the synced .txt
files will be present on the target.
A naming conflict occurs when a target directory contains files of the same name as one or more of the files to be
transferred into that directory. With its conflictHandling
property, a job must specify how such conflicts will be
handled if they occur. Valid values for conflict handling include: skip
, rename
, overwrite
, and null
. The
conflictHandling
property must not be null
, unless the transferType
is sync
. When transferType
is sync
,
conflictHandling
must be null
.
skip
will cause existing files not to be replaced by remote ones with the same name. Such remote files will not be
transferred to the target storage. rename
will result in both files being present in the target storage after the
transfer, but with different names. For example, a file named file.txt
, would be saved as file_copy-1.txt
.
overwrite
will cause a previously existing file to be removed and replaced by the remote one if the two have the same
name. null
must only be used when the transferType
property is set to sync
. In that case, all data will be
synchronized between the source and the target storage, and therefore, the manner in which naming conflicts will be
handled has already been specified.
There are some limitations when working with the job object. Please see the limitations enumerated below.
id required | string |
type required | string Value: "jobs" |
required | object |
{- "id": "87c4a37f-c09f-46bf-b283-7791df258aff",
- "type": "jobs",
- "attributes": {
- "name": "ShyAnimalsWorshipSlowly",
- "status": "failed",
- "accountId": "365462c8-001d-4732-8276-3398f282b8a0",
- "deploymentId": "365462c8-001d-4732-8276-3398f282b8a0",
- "groupId": null,
- "userId": null,
- "dryRun": true,
- "transferType": "copy",
- "source": {
- "type": "file",
- "id": "11d05755-3c9e-4c96-baef-28462fae2357",
- "path": null
}, - "target": {
- "type": "file",
- "id": "c0c2383a-94e7-4d07-8ea9-942524374009",
- "path": "test/751/perms"
}, - "scope": {
- "type": "rules",
- "method": "include-if-all",
- "rules": [ ]
}, - "conflictHandling": "overwrite",
- "failureConditions": [
- {
- "type": "error-count",
- "value": 10
}
], - "transferRateLimit": null,
- "stats": {
- "startedAt": "2020-02-11T22:58:42.197Z",
- "finishedAt": "2020-02-11T22:58:42.331Z",
- "estimatedDuration": null,
- "estimatedCost": null,
- "estimatedFinishedAt": null,
- "scannedFilesCount": 6,
- "filesCount": 6,
- "filesSize": 1073756178,
- "transferredCount": 0,
- "transferredSize": 0
}, - "createdAt": "2020-02-11T22:58:42.198Z",
- "updatedAt": "2020-02-12T00:29:27.143Z"
}
}
Returns a collection of all visible jobs.
object Example: filter[dryRun]=false Filters out records without all of the matching fields | |
object Example: page[limit]=10 Determines how to paginate the record set | |
sort | string Example: sort=stats.startedAt Determines how to sort the record set |
{- "meta": {
- "page": {
- "after": null,
- "total": 2
}
}, - "data": [
- {
- "id": "87c4a37f-c09f-46bf-b283-7791df258aff",
- "type": "jobs",
- "attributes": {
- "name": "ShyAnimalsWorshipSlowly",
- "status": "failed",
- "accountId": "365462c8-001d-4732-8276-3398f282b8a0",
- "deploymentId": "365462c8-001d-4732-8276-3398f282b8a0",
- "groupId": null,
- "userId": null,
- "dryRun": true,
- "transferType": "copy",
- "source": {
- "type": "file",
- "id": "11d05755-3c9e-4c96-baef-28462fae2357",
- "path": null
}, - "target": {
- "type": "file",
- "id": "c0c2383a-94e7-4d07-8ea9-942524374009",
- "path": "test/751/perms"
}, - "scope": {
- "type": "rules",
- "method": "include-if-all",
- "rules": [ ]
}, - "conflictHandling": "overwrite",
- "failureConditions": [
- {
- "type": "error-count",
- "value": 10
}
], - "transferRateLimit": null,
- "stats": {
- "startedAt": "2020-02-11T22:58:42.197Z",
- "finishedAt": "2020-02-11T22:58:42.331Z",
- "estimatedDuration": null,
- "estimatedCost": null,
- "estimatedFinishedAt": null,
- "scannedFilesCount": 6,
- "filesCount": 6,
- "filesSize": 1073756178,
- "transferredCount": 0,
- "transferredSize": 0
}, - "createdAt": "2020-02-11T22:58:42.198Z",
- "updatedAt": "2020-02-12T00:29:27.143Z"
}
}, - {
- "id": "72d4d3c6-559e-4a38-a147-35a9917761f0",
- "type": "jobs",
- "attributes": {
- "name": "My Transfer",
- "accountId": "0856832d-d258-4edf-bff1-22b86002c391",
- "groupId": "b83ae574-fe54-48ae-b30f-e0728e8c7a2d",
- "userId": "6a6b359f-e2d5-40d9-b724-c55df687bf29",
- "status": "finished",
- "dryRun": false,
- "transferType": "copy",
- "source": {
- "type": "object-aws",
- "id": "5b70703d-c537-4eae-82bc-718509d7450e",
- "path": "archive",
- "retrievalType": "expedited"
}, - "target": {
- "type": "file",
- "id": "b6d8d8d5-4205-4dc3-baab-85b5ae0db9bb",
- "path": "shares"
}, - "scope": {
- "type": "rules",
- "rules": [
- {
- "type": "name",
- "condition": "ends-with",
- "value": ".txt"
}, - {
- "type": "name",
- "condition": "matches",
- "value": "/\\w+/"
}
], - "method": "include-if-all"
}, - "conflictHandling": "overwrite",
- "failureConditions": [
- {
- "type": "error-count",
- "value": 10
}
], - "transferRateLimit": 1048576,
- "stats": {
- "startedAt": "2019-03-21T21:23:41.000Z",
- "finishedAt": "2019-03-21T21:24:01.000Z",
- "estimatedCost": {
- "amount": "111.19",
- "currency": "USD"
}, - "estimatedDuration": 360000,
- "estimatedFinishedAt": "2019-03-21T21:06:40.000Z",
- "scannedFilesCount": 96622,
- "filesCount": 84636,
- "filesSize": 6829321856,
- "transferredCount": 84636,
- "transferredSize": 6829321856
}, - "createdAt": "2019-03-21T21:23:41.000Z",
- "updatedAt": "2019-03-21T21:24:01.000Z"
}
}
],
}
Allows for a new job to be created.
"dryRun:" true
indicates the job should not be executed and just return cost estimates.
required | object |
{- "data": {
- "type": "jobs",
- "attributes": {
- "status": "running",
- "accountId": "35032dbf-cea7-4e68-8c19-52212b627e6a",
- "userId": null,
- "transferType": "copy",
- "source": {
- "type": "file",
- "id": "11d05755-3c9e-4c96-baef-28462fae2357",
- "path": null
}, - "target": {
- "id": "c0c2383a-94e7-4d07-8ea9-942524374009",
- "path": "test/751/perms"
}, - "scope": {
- "type": "rules",
- "method": "include-if-all",
- "rules": [ ]
}, - "conflictHandling": "overwrite"
}
}
}
{- "data": {
- "id": "72d4d3c6-559e-4a38-a147-35a9917761f0",
- "type": "jobs",
- "attributes": {
- "name": "My Transfer",
- "accountId": "0856832d-d258-4edf-bff1-22b86002c391",
- "groupId": "b83ae574-fe54-48ae-b30f-e0728e8c7a2d",
- "userId": "6a6b359f-e2d5-40d9-b724-c55df687bf29",
- "status": "finished",
- "dryRun": false,
- "transferType": "copy",
- "source": {
- "type": "object-aws",
- "id": "5b70703d-c537-4eae-82bc-718509d7450e",
- "path": "archive",
- "retrievalType": "expedited"
}, - "target": {
- "type": "file",
- "id": "b6d8d8d5-4205-4dc3-baab-85b5ae0db9bb",
- "path": "shares"
}, - "scope": {
- "type": "rules",
- "rules": [
- {
- "type": "name",
- "condition": "ends-with",
- "value": ".txt"
}, - {
- "type": "name",
- "condition": "matches",
- "value": "/\\w+/"
}
], - "method": "include-if-all"
}, - "conflictHandling": "overwrite",
- "failureConditions": [
- {
- "type": "error-count",
- "value": 10
}
], - "transferRateLimit": 1048576,
- "stats": {
- "startedAt": "2019-03-21T21:23:41.000Z",
- "finishedAt": "2019-03-21T21:24:01.000Z",
- "estimatedCost": {
- "amount": "111.19",
- "currency": "USD"
}, - "estimatedDuration": 360000,
- "estimatedFinishedAt": "2019-03-21T21:06:40.000Z",
- "scannedFilesCount": 96622,
- "filesCount": 84636,
- "filesSize": 6829321856,
- "transferredCount": 84636,
- "transferredSize": 6829321856
}, - "createdAt": "2019-03-21T21:23:41.000Z",
- "updatedAt": "2019-03-21T21:24:01.000Z"
}
}
}
Show the requested job.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested job |
{- "data": {
- "id": "87c4a37f-c09f-46bf-b283-7791df258aff",
- "type": "jobs",
- "attributes": {
- "name": "ShyAnimalsWorshipSlowly",
- "status": "failed",
- "accountId": "365462c8-001d-4732-8276-3398f282b8a0",
- "deploymentId": "365462c8-001d-4732-8276-3398f282b8a0",
- "groupId": null,
- "userId": null,
- "dryRun": true,
- "transferType": "copy",
- "source": {
- "type": "file",
- "id": "11d05755-3c9e-4c96-baef-28462fae2357",
- "path": null
}, - "target": {
- "type": "file",
- "id": "c0c2383a-94e7-4d07-8ea9-942524374009",
- "path": "test/751/perms"
}, - "scope": {
- "type": "rules",
- "method": "include-if-all",
- "rules": [ ]
}, - "conflictHandling": "overwrite",
- "failureConditions": [
- {
- "type": "error-count",
- "value": 10
}
], - "transferRateLimit": null,
- "stats": {
- "startedAt": "2020-02-11T22:58:42.197Z",
- "finishedAt": "2020-02-11T22:58:42.331Z",
- "estimatedDuration": null,
- "estimatedCost": null,
- "estimatedFinishedAt": null,
- "scannedFilesCount": 6,
- "filesCount": 6,
- "filesSize": 1073756178,
- "transferredCount": 0,
- "transferredSize": 0
}, - "createdAt": "2020-02-11T22:58:42.198Z",
- "updatedAt": "2020-02-12T00:29:27.143Z"
}
}
}
Update an existing job. Currently only updating the job status is supported.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested job |
required | object |
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "jobs",
- "attributes": {
- "status": "paused"
}
}
}
{- "data": {
- "id": "abf1f76d-3105-4478-846a-e2045cb35d57",
- "type": "jobs",
- "attributes": {
- "name": "ShyAnimalsWorshipSlowly",
- "status": "paused",
- "accountId": "365462c8-001d-4732-8276-3398f282b8a0",
- "groupId": null,
- "userId": null,
- "dryRun": true,
- "transferType": "copy",
- "source": {
- "type": "file",
- "id": "11d05755-3c9e-4c96-baef-28462fae2357",
- "path": null
}, - "target": {
- "type": "file",
- "id": "c0c2383a-94e7-4d07-8ea9-942524374009",
- "path": "test/751/perms"
}, - "scope": {
- "type": "rules",
- "method": "include-if-all",
- "rules": [ ]
}, - "conflictHandling": "overwrite",
- "failureConditions": [
- {
- "type": "error-count",
- "value": 10
}
], - "transferRateLimit": null,
- "stats": {
- "startedAt": "2020-02-11T22:58:42.197Z",
- "finishedAt": "2020-02-11T22:58:42.331Z",
- "estimatedDuration": null,
- "estimatedCost": null,
- "estimatedFinishedAt": null,
- "scannedFilesCount": 6,
- "filesCount": 6,
- "filesSize": 1073756178,
- "transferredCount": 0,
- "transferredSize": 0
}, - "createdAt": "2020-02-11T22:58:42.198Z",
- "updatedAt": "2020-02-12T00:29:27.143Z"
}
}
}
This endpoint allows you to check on the status of file transfers associated with a job ID.
The endpoint returns a collection of all transfers associated with a job. Each item in the collection contains information about the path, size and hash of a transferred file. The status attribute indicates the status of the transfer for the particular file.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested job |
object Example: page[limit]=10 Determines how to paginate the record set |
{- "meta": {
- "page": {
- "after": null,
- "total": 1
}
}, - "data": [
- {
- "type": "job-transfers",
- "attributes": {
- "path": "The Americans (2013) - S01E04 - In Control WEBDL-1080p.mkv",
- "status": -1,
- "size": 2231021568,
- "hash": {
- "md5": "faa91027696c7ed7889a3900987c2d1f",
- "s3Etag": "2255128d8ff059f1f5d398990f79a731-213"
}
}
}
], - "links": {
- "next": null
}
}
You can use this endpoint to get errors and warnings associated with file transfers in a given job.
The endpoint returns a collection of all errors and warnings associated with a job. Each item in the collection includes information about a warning or error pertaining to a particular file transfer.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested job |
object Example: page[limit]=10 Determines how to paginate the record set |
{- "meta": {
- "page": {
- "after": null,
- "total": 1
}
}, - "data": [
- {
- "id": "12",
- "type": "job-errors",
- "attributes": {
- "sourcePath": "The Americans (2013) - S05E06 - Crossbreed SDTV Proper.mkv",
- "message": "an error message",
- "timestamp": "2020-03-20T01:30:52.151Z",
- "event": "error"
}
}
], - "links": {
- "next": null
}
}
Storages store files and act as sources and targets in file transfer jobs. Currently, these resources are read-only.
id required | string |
type required | string Value: "storages" |
required | object |
{- "id": "c60b80ec-22a4-48ea-9473-5dbf470739c5",
- "type": "storages",
- "attributes": {
- "type": "file",
- "name": "Local NFS",
- "status": "ready",
- "metadata": {
- "address": "10.0.0.1",
- "path": "home/data",
- "options": "async,port=445"
}, - "stats": {
- "capacity": {
- "bytesUsed": 1946157056000,
- "bytesTotal": 87960930222080,
- "fileCount": 512651
}
}, - "createdAt": "2019-06-01T23:30:50.000Z",
- "updatedAt": "2019-06-02T04:18:15.000Z"
}
}
Returns a collection of all storages.
object Example: filter[enabled]=true Filters out records without all of the matching fields | |
object Example: page[limit]=10 Determines how to paginate the record set | |
sort | string Example: sort=createdAt Determines how to sort the record set |
{- "meta": {
- "page": {
- "after": null,
- "total": 2
}
}, - "data": [
- {
- "id": "c60b80ec-22a4-48ea-9473-5dbf470739c5",
- "type": "storages",
- "attributes": {
- "type": "file",
- "name": "Local NFS",
- "status": "ready",
- "metadata": {
- "address": "10.0.0.1",
- "path": "home/data",
- "options": "async,port=445"
}, - "stats": {
- "capacity": {
- "bytesUsed": 1946157056000,
- "bytesTotal": 87960930222080,
- "fileCount": 512651
}
}, - "createdAt": "2019-06-01T23:30:50.000Z",
- "updatedAt": "2019-06-02T04:18:15.000Z"
}
}, - {
- "id": "ac706378-dc99-4eac-b6fc-1416378e5ea8",
- "type": "storages",
- "attributes": {
- "type": "object-aws",
- "name": "My S3 Bucket",
- "status": "ready",
- "metadata": {
- "bucket": "my-bucket",
- "prefix": "sub-folder",
- "storageClass": "standard"
}, - "stats": {
- "capacity": {
- "bytesUsed": 1946157056000,
- "fileCount": 512651
}
}, - "createdAt": "2019-06-02T04:18:15.000Z",
- "updatedAt": "2019-06-03T07:01:00.000Z"
}
}
],
}
Show the requested storage.
id required | string Example: 6a6b359f-e2d5-40d9-b724-c55df687bf29 The id of the requested storage |
{- "data": {
- "id": "c60b80ec-22a4-48ea-9473-5dbf470739c5",
- "type": "storages",
- "attributes": {
- "type": "file",
- "name": "Local NFS",
- "status": "ready",
- "metadata": {
- "address": "10.0.0.1",
- "path": "home/data",
- "options": "async,port=445"
}, - "stats": {
- "capacity": {
- "bytesUsed": 1946157056000,
- "bytesTotal": 87960930222080,
- "fileCount": 512651
}
}, - "createdAt": "2019-06-01T23:30:50.000Z",
- "updatedAt": "2019-06-02T04:18:15.000Z"
}
}
}