If the standard PUT
, PATCH
and DELETE
methods cannot adequately describe an operation on a resource the operation may itself be treated as a resource and the endpoint URLs will reflect this accordingly.
For example making a POST
to /asset-uploads
returns an AssetUpload
resource which describes the URL(s) the client should PUT
the binary data to upload a file to an asset.
If an operation is unlikely to complete via a synchronous REST call, or asynchronous beaviour is simpley preferable, job resource endpoints may provided for the operation.
Created job resources can then be periodically polled to check the status of the operation.
Such endpoits can be expected to contain a job
qualifer. e.g /asset-download-jobs
and /asset-download-jobs/{id}
All job resources can be expected to conform to a polymorphic job structure with common properties such as id
, progress
and type specific properties such as dateCompleted
for successfully completed jobs.
If an operation can be applied to multiple resources an endpoint may provided to create a batch resource for the operation.
Such endpoints can be expected to contain a batch
qualifer.
As batch operations almost always need to be asynchronous you can expect to see both qualifiers in the endpoint URL e.g /asset-download-batch-jobs
and /asset-download-batch-jobs/{id}
.
Dash uses OAuth 2.0 for authoriziation. A good overview of OAuth 2.0 can be found here.
The following are the Dash-specific URLs:
Scopes to note:
subdomain:my-account
An audience parameter of https://assetplatform.io
must be provided.
Please contact us to obtain your Client ID and Client Secret, and let us know which post-authorize redirect URLs we need to whitelist.
The Bearer Token is a standard JWT token so can be useful to decode in some cases.
For example, the sub
field of the Bearer Token can be used in cases where you need access to the User.id
of the current user.
e.g. When making an AssetSearch
with the ADDED_BY
criterion to find all Asset
resources added by the current user.
Alternatively the GET Current User endpoint contains properties for the current user to avoid needing to decode the Bearer Token.
In most responses from the Dash API you will find a permittedActions
property alongside a result
property which contains the resource.
This is to provide context for operations the current user is permitted to perform on that resource.
If an expected permitted action is not included in the permittedActions
property then the current user does not have permission to perform the action.
The GET Current User endpoint houses permitted actions which are not associated with a specific API resource instance.
e.g. If the current user has permission to create new Asset
resources then the GET Current User permittedActions
property will contain the permitted action ASSETS
: CREATE_ASSETS
.
Folders in a Dash account are represented by AttributeOption
s, each of which belongs to the account's built-in Folders Attribute
.
The first step in getting all Folders for an account is to determine the attribute ID of the Folders Attribute
, which can be done via the Folder Settings
endpoint.
The attribute ID of the Folders Attribute
can then be used in an Attribute Option Search
.
It is recommended that you first search for top-level folders and then iterate through each of the folders to search for their sub-folders.
The sample attribute option search requests show how to do this for a given attribute, you just need to substitute the attribute ID of your Folders Attribute
.
Attribute
resources define the custom metadata schema for Asset
resources in your Dash account.
Every Asset
in your Dash account can be assigned a value or values for each Attribute
you define.
The type and structure of the data stored against the Asset
for each Attribute
is described by a series of properties specified on the Attribute
.
curl -i -X GET \ https://api-v1.dash.app/attributes \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
[- {
- "result": {
- "id": "a52b5315-15b8-417f-b742-d6902108bac1",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "Folders",
- "dataType": "STRING",
- "multiValue": true,
- "hasFixedOptions": true,
- "hierarchical": true,
- "editControl": "FOLDER_PICKER",
- "indestructible": true,
- "recommended": true
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
]
Get an Attribute
resource.
When Attribute.hasFixedOptions = true
the AttributeOption
resources for this Attribute
can be retrieved via an AttributeOptionSearch
id required | string The unique ID of the attribute Example: cfb665ca-ce35-4418-b9d5-70ee815db4bd |
curl -i -X GET \ https://api-v1.dash.app/attributes/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "result": {
- "id": "a52b5315-15b8-417f-b742-d6902108bac1",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "Folders",
- "dataType": "STRING",
- "multiValue": true,
- "hasFixedOptions": true,
- "hierarchical": true,
- "editControl": "FOLDER_PICKER",
- "indestructible": true,
- "recommended": true
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
AttributeOption
resources define the set of valid choices for an Attribute
when Attribute.hasFixedOptions = true
.
An AttributeOption
has human-readable AttributeOption.value
and an AttributeOption.position
which determines the order in which it appears in relation to the other AttributeOption
resources for an Attribute
.
If Attribute.hierarchical = true
then AttributeOption.parent
is the AttributeOption
which is the parent node of the AttributeOption
in the tree.
AttributeOption.position
then determines the order in which the option appears in relation to the other options with the same AttributeOption.parent
.
The AttributeOption
resource intentionally does not include the list of child AttributeOption
resources.
This is to prevent costly loading of large AttributeOption
tree structures.
AttributeOption.leaf
and AttributeOption.numberOfChildren
properties can be used to determine the number of children for a node, but it is recomended to implement a combination of lazy-loading strategies using the GET Attribute Option and POST Asstribute Option Searches resources for retrieval.
e.g. Doing a GET Attribute Option with an AttributeOption.id
value found in Asset.metadata.values
will give the complete branch of the tree neccessary in the context of the viewing that Asset
via the AttributeOption.parent
property.
For traversing down an AttributeOption
tree POST Asstribute Option Searches can be used to first get all the top-level options and then each sub level as and when neeeded.
Create a new AttributeOption
resource adding it to the set of valid choices for an Attribute
where Attribute.hasFixedOptions = true
.
attributeId | string The unique ID of the |
value | string The human-readable value of the |
position | integer The 0-based position the |
{- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "value": "My Top Level Folder",
- "position": 3,
- "parentId": null
}
{- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "value": "My Top Level Folder",
- "position": 0,
- "leaf": false,
- "parent": null
}, - "permittedActions": [ ]
}
Get an AttributeOption
resource for an Attribute
where Attribute.hasFixedOptions = true
.
id required | string The unique ID of the |
curl -i -X GET \ https://api-v1.dash.app/attribute-options/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "value": "My Top Level Folder",
- "position": 0,
- "leaf": false,
- "parent": null
}, - "permittedActions": [ ]
}
Delete an AttributeOption
resource, removing it from the set of valid choices for an Attribute
.
When deleting an option within a hierarchy of options all options in the hierarchy below the one being deleted will also be deleted.
id required | string The unique ID of the |
curl -i -X DELETE \ https://api-v1.dash.app/attribute-options/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "timestamp": "2021-02-16T16:21:58.640Z",
- "status": 401,
- "error": "Unauthorized",
- "message": null,
- "path": "/folder-settings"
}
Create new AttributeOption
resources adding them to the set of valid choices for an Attribute
where Attribute.hasFixedOptions = true
.
Array of objects (AttributeOptionBatchRequestItem) |
{- "items": [
- {
- "batchItemId": "my-item-1",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "value": "Folder A",
- "position": 2,
- "parentId": null
}
]
}
{- "successes": {
- "property1": {
- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "value": "Folder A",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "position": 2,
- "leaf": true,
- "numberOfChildren": 0,
- "parent": null
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}, - "property2": {
- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "value": "Folder A",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "position": 2,
- "leaf": true,
- "numberOfChildren": 0,
- "parent": null
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
}, - "failures": {
- "property1": "OPTION_ALREADY_EXISTS_AT_THIS_LEVEL",
- "property2": "OPTION_ALREADY_EXISTS_AT_THIS_LEVEL"
}
}
Searching allows you to find AttributeOption
resources in your Dash matching specific criteria
Criteria can be constructed based on direct comparison or pattern matching of a set of fixed AttributeOption
properties.
The logical operators AND
, OR
and NOT
are provided to support complex queries based on mutliple fields.
A list of sorts can also be provided to control the order in the which the results are returned.
Create a new AttributeOptionSearch
The most commmon uses of an AttributeOptionSearch
is to retrieve the AttributeOption
resources for an Attribute
using the ATTRIBUTE_ID
field criterion.
When Attribute.hierarchical = true
it is recommended to retrieve each level of the tree via a separate search using PARENT_ID
field criteria.
from required | integer Default: 0 The item number to begin the result set from |
pageSize required | integer Default: 100 The maximum number of items to return in the result set |
any (AttributeOptionSearchCriterion) | |
Array of objects (AttributeOptionSort) Sorts to be applied to the search in order of precedence |
{- "from": 0,
- "pageSize": 100,
- "criterion": {
- "type": "AND",
- "criteria": [
- {
- "type": "FIELD_EQUALS",
- "field": "ATTRIBUTE_ID",
- "value": "a52b5315-15b8-417f-b742-d6902108bac1"
}, - {
- "type": "FIELD_IS_EMPTY",
- "field": "PARENT_ID"
}
]
}, - "sorts": [
- {
- "field": "POSITION",
- "order": "ASC"
}
]
}
{- "results": [
- {
- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "value": "My Top Level Folder",
- "position": 0,
- "leaf": false,
- "parent": null
}, - "permittedActions": [ ]
}, - {
- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1",
- "value": "Another Top Level Folder",
- "position": 1,
- "leaf": false,
- "parent": null
}, - "permittedActions": [ ]
}
], - "totalResults": 2
}
AttributeView
s provide an ordered view of a subset of Attribute
s, which can be configured by admins. This can be used to decide which Attribute
s to show alongside Asset
s in different contexts.
curl -i -X GET \ https://api-v1.dash.app/attribute-views \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
[- {
- "result": {
- "id": "e9a367e4-8216-497f-b6a9-59e3b945a7f3",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "type": "INTERNAL_DETAILED",
- "attributes": [
- {
- "id": "a52b5315-15b8-417f-b742-d6902108bac1",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "Folders",
- "dataType": "STRING",
- "multiValue": true,
- "hasFixedOptions": true,
- "hierarchical": true,
- "editControl": "FOLDER_PICKER",
- "indestructible": true,
- "recommended": true
}
]
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
]
Coming soon; contact us if you need access to this API endpoint.
An Asset
is the main resource in Dash. It consists of:
AssetFile
resources, detailing the versions of a file for an Asset
. Only the current AssetFile
for an Asset
is returned with the Asset
resource. Use GET Asset Files to retrive all AssetFile
resources for an Asset
Asset.metadata
which defines the assigned values for this Asset
for Attribute
resourcesaddedBy
the User.id
of whoever added the Asset
For the sake of permformance any Attribute
and AttributeOption
resources referenced in the Asset.metadata.values
will need to be retrieved separately, if required.
Get an Asset
id required | string The unique ID of the |
curl -i -X GET \ https://api-v1.dash.app/assets/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "result": {
- "id": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "stagingStatus": {
- "state": "LIVE",
- "dateStaged": "2021-02-15T09:24:01.417Z",
- "dateSentForApproval": "2021-02-16T09:24:01.417Z"
}, - "dateAdded": "2021-02-17T09:24:01.417Z",
- "addedBy": "google-oauth2|110457667287511486432",
- "dateLastModified": "2021-02-17T09:24:01.417Z",
- "metadata": {
- "version": 11,
- "values": {
- "a52b5315-15b8-417f-b742-d6902108bac1": [
- "A view from a mountain"
], - "f992794c-85db-11eb-8dcd-0242ac130003": [
- "Outdoors",
- "Mountain",
- "Snow"
], - "219bc1fa-85dc-11eb-8dcd-0242ac130003": [
- "a32fe863-0a1d-4b54-990a-b094139cf81c",
- "0e1bddba-9339-4e6e-b5ae-3adc60ad927a"
]
}
}, - "currentAssetFile": {
- "id": "e2b03444-8c5d-44ed-bd9f-7eee882bdf81",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "size": 44040192,
- "filename": "a_file.jpg",
- "checksum": "120EA8A25E5D487BF68B5F7096440019",
- "dateAdded": "2021-02-15T09:26:01.417Z",
- "fileType": "IMAGE",
- "dimensions": {
- "width": 800,
- "height": 600
}, - "orientation": "PORTRAIT",
- "orientationTransformation": "HORIZONTAL",
- "duration": null,
- "usesTransparency": false,
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}, - "gpsLocation": {
- "latitude": 50.8256345,
- "longitude": -0.143761
},
}, - "stats": {
- "downloadCount": 42
}
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
id required | string The unique ID of the |
curl -i -X DELETE \ https://api-v1.dash.app/assets/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "timestamp": "2021-02-16T16:21:58.640Z",
- "status": 401,
- "error": "Unauthorized",
- "message": null,
- "path": "/folder-settings"
}
An AssetFile
describes a version of a file for an Asset
.
Properties describe details of the file such as mediaType
and dimensions
(for images and videos).
A previewUrl
provides a means to access previews of the AssetFile
The current AssetFile
for an Asset
is returned with the Asset
resource.
FThe AssetFile.id
can be provided when creating an AssetDownload
to downnload a specific AssetFile
for an Asset
.
id required | string The unique ID of the |
curl -i -X GET \ https://api-v1.dash.app/assets/:id/files \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
[- {
- "result": {
- "id": "e2b03444-8c5d-44ed-bd9f-7eee882bdf81",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "size": 44040192,
- "filename": "a_file.jpg",
- "checksum": "120EA8A25E5D487BF68B5F7096440019",
- "dateAdded": "2021-02-15T09:26:01.417Z",
- "fileType": "IMAGE",
- "dimensions": {
- "width": 800,
- "height": 600
}, - "orientation": "PORTRAIT",
- "orientationTransformation": "HORIZONTAL",
- "duration": null,
- "usesTransparency": false,
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}, - "gpsLocation": {
- "latitude": 50.8256345,
- "longitude": -0.143761
},
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
]
Searching allows you to find Asset
resources in your Dash matching specific criteria.
Criteria can be constructed based on direct comparison or pattern matching of fields, where fields are either Asset.metadata.values
or certain fixed Asset
properties.
The fixed KEYWORDS
field can be used for a general purpose search as it will search across all Asset.metadata.values
and fixed Asset
properties.
For searches involving Attribute
resources where Attribute.hasFixedOptions = true
a search using either the AttributeOption.id
or AttributeOption.name
will match.
Any Asset
which is assigned an AttributeOption.id
value for an Attribute
resource where Attribute.hierarchical = true
implicitly has the values of any parent AttributeOption
resources too.
As such, any search using the parents AttributeOption.id
or AttributeOption.name
will match the Asset
.
e.g. Given the hierarchical AttributeOption
structure Grandparent / Parent / Child
, an Asset
assigned the AttributeOption.id
of Child
will also be returned in searches for Parent
or Grandparent
.
The logical operators AND
, OR
and NOT
are provided to support complex queries based on mutliple fields.
A list of sorts can also be provided to control the order in the which the results are returned.
The action
property of a search, which defaults to SEARCH_FOR_VIEW
, specifies the context in which the search is being run. For example if you only want to return Asset
resources that the search User
has permission to delete then set the action
to be SEARCH_FOR_DELETE
.
By default, searches will only returns results where
Asset.stagingStatus.state = 'LIVE'
. If you require search results to contain results with other state values, this needs to be explicitly included in the criteria.
Two kinds of search are possible, a standard AssetSearch
and a AssetScrollSearch
.
A standard AssetSearch
will only allow you to page to 10,000 results regadless of the value returned in the totalResults
property.
If you need to be able to process more than 10,000 results consider an AssetScrollSearch instead.
from required | integer Default: 0 The item number to begin the result set from |
pageSize required | integer Default: 100 The maximum number of items to return in the result set |
required | any (AssetSearchCriterion) |
required | Array of objects (AssetSort) Sorts to be applied to the search in order of precedence |
action | string Default: "SEARCH_FOR_VIEW" Enum: "SEARCH_FOR_CHANGE_STAGING_STATE_TO_PENDING_APPROVAL" "SEARCH_FOR_CHANGE_STAGING_STATE_TO_LIVE" "SEARCH_FOR_DELETE" "SEARCH_FOR_EDIT" "SEARCH_FOR_PROMOTE_TO_LIVE" "SEARCH_FOR_SEND_FOR_APPROVAL" "SEARCH_FOR_VIEW" |
{- "from": 0,
- "pageSize": 100,
- "criterion": {
- "type": "FIELD_EQUALS",
- "value": "a32fe863-0a1d-4b54-990a-b094139cf81c",
- "field": {
- "type": "ATTRIBUTE",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1"
}
}, - "sorts": [ ]
}
{- "results": [
- {
- "result": {
- "id": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "stagingStatus": {
- "state": "LIVE",
- "dateStaged": "2021-02-15T09:24:01.417Z",
- "dateSentForApproval": "2021-02-16T09:24:01.417Z"
}, - "dateAdded": "2021-02-17T09:24:01.417Z",
- "addedBy": "google-oauth2|110457667287511486432",
- "dateLastModified": "2021-02-17T09:24:01.417Z",
- "metadata": {
- "version": 11,
- "values": {
- "a52b5315-15b8-417f-b742-d6902108bac1": [
- "A view from a mountain"
], - "f992794c-85db-11eb-8dcd-0242ac130003": [
- "Outdoors",
- "Mountain",
- "Snow"
], - "219bc1fa-85dc-11eb-8dcd-0242ac130003": [
- "a32fe863-0a1d-4b54-990a-b094139cf81c",
- "0e1bddba-9339-4e6e-b5ae-3adc60ad927a"
]
}
}, - "currentAssetFile": {
- "id": "e2b03444-8c5d-44ed-bd9f-7eee882bdf81",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "size": 44040192,
- "filename": "a_file.jpg",
- "checksum": "120EA8A25E5D487BF68B5F7096440019",
- "dateAdded": "2021-02-15T09:26:01.417Z",
- "fileType": "IMAGE",
- "dimensions": {
- "width": 800,
- "height": 600
}, - "orientation": "PORTRAIT",
- "orientationTransformation": "HORIZONTAL",
- "duration": null,
- "usesTransparency": false,
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}, - "gpsLocation": {
- "latitude": 50.8256345,
- "longitude": -0.143761
},
}, - "stats": {
- "downloadCount": 42
}
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
], - "totalResults": 1337
}
Asset scroll searches provide a means of scrolling one way through search results of any number of Asset
reources.
Page size can stil be specified, but a scroll search will always proceed sequentially once through each page.
The AssetScrollSearch.scrollId
in the search the response is used to continue the scroll search.
pageSize | integer Default: 100 The maximum number of items to return in the result set |
required | any (AssetSearchCriterion) |
required | Array of objects (AssetSort) Sorts to be applied to the search in order of precedence |
action | string Default: "SEARCH_FOR_VIEW" Enum: "SEARCH_FOR_CHANGE_STAGING_STATE_TO_PENDING_APPROVAL" "SEARCH_FOR_CHANGE_STAGING_STATE_TO_LIVE" "SEARCH_FOR_DELETE" "SEARCH_FOR_EDIT" "SEARCH_FOR_PROMOTE_TO_LIVE" "SEARCH_FOR_SEND_FOR_APPROVAL" "SEARCH_FOR_VIEW" |
{- "pageSize": 100,
- "criterion": {
- "type": "MATCH_ALL"
}, - "sorts": [
- {
- "field": {
- "type": "FIXED",
- "fieldName": "DATE_ADDED"
}, - "order": "DESC"
}
]
}
{- "results": [
- {
- "result": {
- "id": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "stagingStatus": {
- "state": "LIVE",
- "dateStaged": "2021-02-15T09:24:01.417Z",
- "dateSentForApproval": "2021-02-16T09:24:01.417Z"
}, - "dateAdded": "2021-02-17T09:24:01.417Z",
- "addedBy": "google-oauth2|110457667287511486432",
- "dateLastModified": "2021-02-17T09:24:01.417Z",
- "metadata": {
- "version": 11,
- "values": {
- "a52b5315-15b8-417f-b742-d6902108bac1": [
- "A view from a mountain"
], - "f992794c-85db-11eb-8dcd-0242ac130003": [
- "Outdoors",
- "Mountain",
- "Snow"
], - "219bc1fa-85dc-11eb-8dcd-0242ac130003": [
- "a32fe863-0a1d-4b54-990a-b094139cf81c",
- "0e1bddba-9339-4e6e-b5ae-3adc60ad927a"
]
}
}, - "currentAssetFile": {
- "id": "e2b03444-8c5d-44ed-bd9f-7eee882bdf81",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "size": 44040192,
- "filename": "a_file.jpg",
- "checksum": "120EA8A25E5D487BF68B5F7096440019",
- "dateAdded": "2021-02-15T09:26:01.417Z",
- "fileType": "IMAGE",
- "dimensions": {
- "width": 800,
- "height": 600
}, - "orientation": "PORTRAIT",
- "orientationTransformation": "HORIZONTAL",
- "duration": null,
- "usesTransparency": false,
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}, - "gpsLocation": {
- "latitude": 50.8256345,
- "longitude": -0.143761
},
}, - "stats": {
- "downloadCount": 42
}
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
], - "totalResults": 1337,
- "scrollId": "58b0d88b-d0c9-47fc-9038-7195b234cc0b"
}
Continue a previoulsy started AssetScrollSearch
.
You must use the scrollId resturned in each new response as a scrollId is not guarenteed to remain fixed over the course of a scroll
scrollId required | string The ID to continue the |
{- "scrollId": "58b0d88b-d0c9-47fc-9038-7195b234cc0b"
}
{- "results": [
- {
- "result": {
- "id": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "stagingStatus": {
- "state": "LIVE",
- "dateStaged": "2021-02-15T09:24:01.417Z",
- "dateSentForApproval": "2021-02-16T09:24:01.417Z"
}, - "dateAdded": "2021-02-17T09:24:01.417Z",
- "addedBy": "google-oauth2|110457667287511486432",
- "dateLastModified": "2021-02-17T09:24:01.417Z",
- "metadata": {
- "version": 11,
- "values": {
- "a52b5315-15b8-417f-b742-d6902108bac1": [
- "A view from a mountain"
], - "f992794c-85db-11eb-8dcd-0242ac130003": [
- "Outdoors",
- "Mountain",
- "Snow"
], - "219bc1fa-85dc-11eb-8dcd-0242ac130003": [
- "a32fe863-0a1d-4b54-990a-b094139cf81c",
- "0e1bddba-9339-4e6e-b5ae-3adc60ad927a"
]
}
}, - "currentAssetFile": {
- "id": "e2b03444-8c5d-44ed-bd9f-7eee882bdf81",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "size": 44040192,
- "filename": "a_file.jpg",
- "checksum": "120EA8A25E5D487BF68B5F7096440019",
- "dateAdded": "2021-02-15T09:26:01.417Z",
- "fileType": "IMAGE",
- "dimensions": {
- "width": 800,
- "height": 600
}, - "orientation": "PORTRAIT",
- "orientationTransformation": "HORIZONTAL",
- "duration": null,
- "usesTransparency": false,
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}, - "gpsLocation": {
- "latitude": 50.8256345,
- "longitude": -0.143761
},
}, - "stats": {
- "downloadCount": 42
}
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
], - "totalResults": 1337,
- "scrollId": "58b0d88b-d0c9-47fc-9038-7195b234cc0b"
}
An AssetUpload
resource is created when you want to upload a file to an Asset
.
Upon completion a new AssetFile
is created will subsequently be returned in Asset.curentAssetFile
.
You can use GET Asset Files to retrieve the all AssetFile
resources for an Asset
.
The AssetUpload
resource defines one or more URLs to which parts of the file should be PUT to.
The upload is then completed by sending a list of the eTags returned from each of these PUTs to AssetUploadComplete
Create a new AssetUpload
resource for an existing Asset
.
assetId | string The ID of the |
path | string The path of the file including filename and any folders. This path will to set the value of the |
size | integer The size of the file that is to be uploaded (in bytes) |
integer or null Optionally specify the part size (in bytes) for multi-part uploading of the file. If omitted or null a default part size will be used |
{- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "path": "/Folder A/Folder D/a_file.jpg",
- "size": 15318362,
- "partSize": 7000000
}
{- "id": "5a2481e0-819f-4b46-a7e6-143f943345f2,",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47,",
- "uploadParts": [
- {
- "partNumber": "1,",
- "startByte": "0,",
- "endByte": "6999999,",
}, - {
- "partNumber": "2,",
- "startByte": "7000000,",
- "endByte": "13999999,",
}, - {
- "partNumber": "3,",
- "startByte": "14000000,",
- "endByte": "15318361,",
}
]
}
An AssetAndUploadBatchJob
should be created when you want to create multiple Asset
resources and also create an AssetUpload
for each of them.
The AssetUpload
resources in the completed job should then be used to upload the files for each and asset and complete each upload.
After the Asset
resources have been created and files uploaded to them they will still be in Asset.stagingStatus.state = 'STAGED'
.
To send them for approval or put them live see Asset Staging Workflow.
Array of objects (AssetAndUploadBatchRequestItem) |
{- "items": [
- {
- "batchItemId": "my-item-1",
- "path": "/Folder A/Folder D/a_file.jpg",
- "size": 15318362,
- "partSize": 7000000
}
]
}
[- {
- "id": "be161977-d44e-4888-af3c-66522e223963",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "type": "IN_PROGRESS",
- "progress": {
- "steps": [
- {
- "id": "STEP_ID",
- "status": "STARTED",
- "completedItems": 0,
- "totalItems": 2
}
]
}, - "status": "PENDING"
}
]
Get the status and eventual result of an AssetAndUploadBatchJob
id required | string The unique ID of the |
curl -i -X GET \ https://api-v1.dash.app/asset-and-upload-batch-jobs/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "id": "be161977-d44e-4888-af3c-66522e223963",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "type": "COMPLETED",
- "progress": {
- "steps": [
- {
- "id": "assetAndUploadGetJobItemsStep",
- "status": "COMPLETED",
- "completedItems": 2,
- "totalItems": 2
}, - {
- "id": "assetAndUploadProcessJobItemsStep",
- "status": "COMPLETED",
- "completedItems": 2,
- "totalItems": 2
}
]
}, - "dateCompleted": "2021-02-15T09:24:01.417Z",
- "result": {
- "successes": {
- "file-1": {
- "result": {
- "id": "5a2481e0-819f-4b46-a7e6-143f943345f2",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "uploadParts": [
- {
- "partNumber": 1,
- "startByte": 0,
- "endByte": 6999999,
}, - {
- "partNumber": "2,",
- "startByte": 7000000,
- "endByte": 13999999,
}, - {
- "partNumber": 3,
- "startByte": 14000000,
- "endByte": 15318361,
}
]
}, - "permittedActions": [ ]
}, - "file-2": {
- "result": {
- "id": "9f49416e-0813-4930-bf44-a3414ac57938",
- "assetId": "86739a63-a4f3-4655-bd45-7a567379356c",
- "uploadParts": [
- {
- "partNumber": 1,
- "startByte": 0,
- "endByte": 123456,
}
]
}, - "permittedActions": [ ]
}
}
}
}
After an AssetUpload
has been created and each part of the file data has been PUT
to the relavant URL the eTag from each PUT
must be sent to indicate the upload is complete.
assetId | string The ID of the |
uploadId | string The unique identifier for the |
Array of objects (AssetUploadCompletedPart) |
{- "uploadId": "5a2481e0-819f-4b46-a7e6-143f943345f2,",
- "assetId": "7af90a8b-7ccd-430f-a85d-e8614015bc47,",
- "parts": [
- {
- "partNumber": 1,
- "eTag": "569726cc-2149-4167-abee-26a068fbda22"
}, - {
- "partNumber": 2,
- "eTag": "a9398831-2221-4c1f-90e7-b467b926aa16"
}, - {
- "partNumber": 3,
- "eTag": "820f3b61-3ac7-481c-a6e4-d6c5041683af"
}
]
}
{- "result": {
- "type": "SUCCESS"
}, - "permittedActions": [ ]
}
An AssetDownload
resource is created when you want to download and optionally transform an AssetFile
of an Asset
.
When ready a URL is provided to download the transformed file.
An AssetDownloadBatchJob
should be created when you want to download and optionally transform mutliple AssetFile
resources.
You can optionally request that a zip is created of all the transformed files.
The transformationDescription
in the request can be one of two types, CUSTOM
or PRESET
.
A CUSTOM
transformationDescription
is a list of candidateTransformations
which are evaluated in turn against each AssetFile
specified in the request.
If the AssetFile
meets the candidateTransformation.criteria
then the candidateTransformation.transformation
is applied. Otherwise, the next candiate is considered.
The candidateTransformation.transformation
is a series of operations to apply to the AssetFile
in order (e.g. resize to 200 by 100 and then covert to JPG). An empty list of operations indicates the file should be left untransformed.
Putting this all together this allows you to describe a transformations such as:
A PRESET
transformationDescription
is similar to a CUSTOM
transformation except the transformationDescription
has been predefined.
These presets are currently only configurable via the Dash frontend, but can be found via a PresetTransformationSearch
.
Array of objects (AssetDownloadBatchRequestItem) | |
any (TransformationDescription) | |
zip | boolean Whether to combine all the output files into a zip |
{- "items": [
- {
- "batchItemId": "download-1",
- "assetId": "2b746f61-d36d-4627-a547-936f6f20594b"
}, - {
- "batchItemId": "download-2",
- "assetId": "23cfaab7-c9f3-4b28-ac21-7b5b18f2519a"
}, - {
- "batchItemId": "download-3",
- "assetId": "1ef8108f-6c94-4112-9736-abd147a7a940"
}
], - "transformationDescription": {
- "type": "CUSTOM",
- "candidateTransformations": [
- {
- "criteria": [
- {
- "type": "MATCHES_MEDIA_TYPES",
- "mediaTypes": [
- {
- "type": "*",
- "subType": "*"
}
]
}
], - "transformation": [
- {
- "type": "RESIZE",
- "width": 100,
- "height": 200
}, - {
- "type": "CONVERT",
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}
}
]
}
]
}, - "zip": true
}
{- "id": "be161977-d44e-4888-af3c-66522e223963",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "type": "IN_PROGRESS",
- "status": "PENDING",
- "progress": {
- "steps": [
- {
- "id": "assetDownloadGetJobItemsStep",
- "status": "STARTED",
- "completedItems": 0,
- "totalItems": 0
}, - {
- "id": "assetDownloadProcessJobItemsStep",
- "status": "PENDING",
- "completedItems": 0,
- "totalItems": 0
}
]
}
}
Get the status and eventual result of an AssetDownloadBatchJob
id required | string |
curl -i -X GET \ https://api-v1.dash.app/asset-download-batch-jobs/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "id": "be161977-d44e-4888-af3c-66522e223963",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "type": "COMPLETED",
- "progress": {
- "steps": [
- {
- "id": "assetDownloadGetJobItemsStep",
- "status": "COMPLETED",
- "completedItems": 3,
- "totalItems": 3
}, - {
- "id": "assetDownloadProcessJobItemsStep",
- "status": "COMPLETED",
- "completedItems": 3,
- "totalItems": 3
}
]
}, - "dateCompleted": "2021-02-15T09:24:01.417Z",
- "result": {
- "successes": {
- "download-1": {
- "permittedActions": [ ]
}, - "download-2": {
- "permittedActions": [ ]
}, - "download-3": {
- "permittedActions": [ ]
}
},
}
}
Dash provides a simple staging workflow for Asset
resources to faciltate review and approval before they are accessible to other users.
The staging workflow has three states
Depending on the Asset.stagingStatus.state
value an Asset
reources will only be visble to certain users.
Asset
resources begin in the STAGED
state.
While in the STAGED
state Asset
resources are only visble to the user who created the Asset
and users where User.isAdmin = true
.
A User
with permission to create new Asset
resources may not have the permission to move it to the LIVE
state.
While in the PENDING_APPROVAL
state Asset
resources are only visble to users where User.isAdmin = true
.
Once in the LIVE
state Asset
resources visblity is defined by UserGroup
permissions (currently only configurable via the Dash frontend, not via the API)
Move a set of Asset
resources from one Asset.stagingStatus.state
to another.
The Asset
resources to be added to the batch job are specified using the AssetSearch
criteria language.
You must explicitly include criteria describing the state you are moving from in order to account for the fact that the Dash API will only return Assets in the 'LIVE' state by default. See the request examples for more.
any (AssetSearchCriterion) | |
transition | string (StagingWorkflowTransition) The workflow transition. Generally describe the state moving from and to. |
{- "transition": "STAGING_TO_PENDING_APPROVAL",
- "criterion": {
- "type": "AND",
- "criteria": [
- {
- "type": "FIELD_EQUALS",
- "value": "STAGED",
- "field": {
- "type": "FIXED",
- "fieldName": "STAGING_STATE"
}
}, - {
- "type": "FIELD_EQUALS",
- "value": "google-oauth2|110457667287511486432",
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}
}
]
}
}
{- "id": "be161977-d44e-4888-af3c-66522e223963",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "type": "IN_PROGRESS",
- "status": "PENDING",
- "progress": {
- "steps": [
- {
- "id": "stagingWorkflowTransitionGetJobItemsStep",
- "status": "STARTED",
- "completedItems": 0,
- "totalItems": 0
}, - {
- "id": "stagingWorkflowTransitionProcessJobItemsStep",
- "status": "PENDING",
- "completedItems": 0,
- "totalItems": 0
}
]
}
}
Get the status of an AssetStagingWorkflowTransitionBatchJob
id required | string |
curl -i -X GET \ https://api-v1.dash.app/asset-staging-workflow-transition-batch-jobs/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "id": "be161977-d44e-4888-af3c-66522e223963",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "type": "COMPLETED",
- "progress": {
- "steps": [
- {
- "id": "stagingWorkflowTransitionGetJobItemsStep",
- "status": "COMPLETED",
- "completedItems": 3,
- "totalItems": 3
}, - {
- "id": "stagingWorkflowTransitionProcessJobItemsStep",
- "status": "COMPLETED",
- "completedItems": 3,
- "totalItems": 3
}
]
}, - "dateCompleted": "2021-02-15T09:24:01.417Z"
}
Coming soon; contact us if you need access to this API endpoint.
Coming soon; contact us if you need access to this API endpoint.
For the most part Folders in Dash are just like any custom Attribute
with Attribute.hasFixedOptions = true
, Attribute.hierarchical = true
and Attribute.multiValue = true
.
The Folders Attribute
also has the following behaviour.
Attribute.indestructable = true
Asset
permissions for a UserGroup
(currently only configurable via the Dash frontend, not via the API)Attribute
appears on your Dash app homepage.Folder Settings specify the Attribute.id
of the Folders Attribute
in your Dash.
curl -i -X GET \ https://api-v1.dash.app/folder-settings \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "result": {
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "attributeId": "7756d388-110c-4712-b350-0b2b48e156c1"
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
The Search Filter View defines which filters appear, and the order in which they appear, in the left hand filter bar on the search page in the Dash frontend. These filters are used to build search criteria.
Filters either refer to an Attribute
in your Dash or a one of a subset of the fixed search fields available in the search API (currently DATE_ADDED
, FILE_TYPE
or STAGED
)
Get the SearchFilter
resources that have been configured as in use
curl -i -X GET \ https://api-v1.dash.app/search-filter-view \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "searchFilters": [
- {
- "type": "ATTRIBUTE",
- "id": "502d1473-f047-4a2c-9885-16274e4407b9",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "attributeId": "88eb1aca-cf98-4e87-9165-33e7be8b1ea1"
}, - {
- "type": "HARD_CODED_FIXED_OPTION",
- "id": "cb8ad3d9-0c26-4f0e-9884-585d24a86d59",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "searchField": "FILE_TYPE",
- "name": "File Type",
- "options": [
- "Image",
- "Video",
- "Audio",
- "Document",
- "Other"
]
}, - {
- "type": "HARD_CODED_FREE_OPTION",
- "id": "5c02e3a0-57f2-4576-b41c-a0a4e30688bd",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "searchField": "DATE_ADDED",
- "name": "Date Added",
- "dataType": "DATE_TIME"
}, - {
- "type": "HARD_CODED_USER",
- "id": "246b1496-61d3-4b23-ad8e-d6dc990e9ef6",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "searchField": "DATE_ADDED",
- "name": "Added By",
- "dataType": "ADDED_BY"
}
]
}
Create a new PresetTransformationSearch
. This is most commonly used for finding presets that are applicable to a set of assets, so that one can be selected for use to create some AssetDownloads
.
from required | integer Default: 0 The item number to begin the result set from |
pageSize required | integer Default: 100 The maximum number of items to return in the result set |
any (PresetTransformationSearchCriterion) | |
Array of objects (PresetTransformationSort) Sorts to be applied to the search in order of precedence |
{- "from": 0,
- "pageSize": 100,
- "criterion": {
- "type": "AND",
- "criteria": [
- {
- "type": "APPLICABLE_FOR_ANY_ASSETS",
- "assetIds": [
- "2b746f61-d36d-4627-a547-936f6f20594b"
]
}, - {
- "type": "NOT",
- "criterion": {
- "type": "HAS_TRANSFORMATION_OF_TYPE",
- "transformationType": "CROP"
}
}
]
}, - "sorts": [ ]
}
{- "results": [
- {
- "result": {
- "id": "a060635d-5807-4115-a2ed-f0588d47e7ba",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "Medium",
- "position": 1,
- "candidatePresetTransformations": [
- {
- "criteria": [
- {
- "type": "MATCHES_MEDIA_TYPES",
- "mediaTypes": [
- {
- "type": "image",
- "subType": "*"
}, - {
- "type": "application",
- "subType": "psd"
}
]
}, - {
- "type": "IS_TRANSPARENT",
- "isTransparent": true
}
], - "transformationTemplate": [
- {
- "type": "RESIZE",
- "width": 1200,
- "height": 1200
}, - {
- "type": "CONVERT",
- "mediaType": {
- "type": "image",
- "subType": "png"
}
}
]
}, - {
- "criteria": [
- {
- "type": "MATCHES_MEDIA_TYPES",
- "mediaTypes": [
- {
- "type": "image",
- "subtype": "*"
}, - {
- "type": "application",
- "subtype": "psd"
}
]
}, - {
- "type": "IS_TRANSPARENT",
- "isTransparent": false
}
], - "transformationTemplate": [
- {
- "type": "RESIZE",
- "width": 1200,
- "height": 1200
}, - {
- "type": "CONVERT",
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}
}
]
}
]
}, - "permittedActions": [ ]
}, - {
- "result": {
- "id": "917087a6-8f76-4e77-be14-1ac637637c69",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "Large",
- "position": 2,
- "candidatePresetTransformations": [
- {
- "criteria": [
- {
- "type": "MATCHES_MEDIA_TYPES",
- "mediaTypes": [
- {
- "type": "image",
- "subType": "*"
}, - {
- "type": "application",
- "subType": "psd"
}
]
}, - {
- "type": "IS_TRANSPARENT",
- "isTransparent": true
}
], - "transformationTemplate": [
- {
- "type": "RESIZE",
- "width": 1200,
- "height": 1200
}, - {
- "type": "CONVERT",
- "mediaType": {
- "type": "image",
- "subType": "png"
}
}
]
}, - {
- "criteria": [
- {
- "type": "MATCHES_MEDIA_TYPES",
- "mediaTypes": [
- "image/*",
- "application/psd"
]
}, - {
- "type": "IS_TRANSPARENT",
- "isTransparent": false
}
], - "transformationTemplate": [
- {
- "type": "RESIZE",
- "width": 2500,
- "height": 2500
}, - {
- "type": "CONVERT",
- "mediaType": {
- "type": "image",
- "subType": "jpeg"
}
}
]
}
]
}, - "permittedActions": [ ]
}
], - "totalResults": 2
}
The User
resource contains information about a user in Dash such as their email address and their name (if provided).
curl -i -X GET \ https://api-v1.dash.app/current-user \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "result": {
- "id": "google-oauth2|110955770826801837334",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "email": "john.smith@gmail.com",
- "name": "John Smith",
- "lastLogin": "2021-02-16T16:21:58.640Z"
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
Coming soon; contact us if you need access to this API endpoint.
A Collection
is a user defined set of Asset
resources.
The Asset
resources in a Collection
are not returned with the Collection
resource.
To get the Asset
resources you must create an Asset Search and use the Collection.id
as the value in a COLLECTIONS
: FIELD_EQUALS
criterion.
Searching allows you to find Collection
resources in your Dash matching specific criteria.
A list of sorts can also be provided to control the order in the which the results are returned.
Create a new CollectionSearch
The most commmon use of an CollectionSearch
is to retrieve all the Collection
resources assocaited with a User
from required | integer Default: 0 The item number to begin the result set from |
pageSize required | integer Default: 100 The maximum number of items to return in the result set |
any (CollectionSearchCriterion) | |
Array of objects (CollectionSort) Sorts to be applied to the search in order of precedence |
{- "from": 0,
- "pageSize": 100,
- "criterion": {
- "type": "ASSOCIATED_WITH_USER",
- "userId": "google-oauth2|110955770826801837334"
}, - "sorts": [
- {
- "field": "NAME",
- "order": "ASC"
}
]
}
{- "results": [
- {
- "result": {
- "id": "1ecabbb8-85d5-11eb-8dcd-0242ac130003",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "Collaboration Collection",
- "createdBy": "google-oauth2|340955570626871847637",
- "dateCreated": "2021-04-15T09:24:01.417Z",
- "permittedActions": [ ]
}
}, - {
- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "My Collection 1",
- "createdBy": "google-oauth2|110955770826801837334",
- "dateCreated": "2021-02-15T09:24:01.417Z"
}, - "permittedActions": [ ]
}, - {
- "result": {
- "id": "a52b5315-15b8-417f-b742-d6902108bac1",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "name": "My Collection 2",
- "createdBy": "google-oauth2|110955770826801837334",
- "dateCreated": "2021-03-15T09:24:01.417Z"
}, - "permittedActions": [ ]
}
], - "totalResults": 3
}
A SavedSearch is an AssetSearch
(#tag/Assets-Searches).criterion
and AssetSearch
(#tag/Assets-Searches).sorts
that have been saved by a user. The user may also chose to recieve email updates every time a new asset matches the saved criterion.
Create a new SavedSearch
resource.
name required | string Name of the |
emailUserOnNewUploads required | boolean Whether to email the creator when a new upload matches the saved search criterion |
required | any (AssetSearchCriterion) |
required | Array of objects (AssetSort) Sorts to be applied to the search in order of precedence |
{- "name": "My favourite search",
- "emailUserOnNewUploads": true,
- "criterion": {
- "type": "FIELD_EQUALS",
- "value": "Folder",
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}
}, - "sorts": [
- {
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}, - "order": "ASC"
}
]
}
{- "id": "1627573b-1273-441e-90d1-505d1f8ab47c",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "name": "My favourite search",
- "emailUserOnNewUploads": true,
- "criterion": {
- "type": "FIELD_EQUALS",
- "value": "Folder",
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}
}, - "sorts": [
- {
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}, - "order": "ASC"
}
]
}
Get a SavedSearch
resource.
id required | string The unique ID of the |
curl -i -X GET \ https://api-v1.dash.app/saved-searches/:id \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "result": {
- "id": "1627573b-1273-441e-90d1-505d1f8ab47c",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "name": "My favourite search",
- "emailUserOnNewUploads": true,
- "criterion": {
- "type": "FIELD_EQUALS",
- "value": "Folder",
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}
}, - "sorts": [
- {
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}, - "order": "ASC"
}
]
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
Update a SavedSearch
resource. Only the provided fields will be updated
id required | string The unique ID of the |
name | string Name of the |
emailUserOnNewUploads | boolean Whether to email the creator when a new upload matches the saved search criterion |
{- "name": "My favourite search",
- "emailUserOnNewUploads": true
}
{- "result": {
- "id": "1627573b-1273-441e-90d1-505d1f8ab47c",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|110955770826801837334",
- "name": "My favourite search",
- "emailUserOnNewUploads": true,
- "criterion": {
- "type": "FIELD_EQUALS",
- "value": "Folder",
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}
}, - "sorts": [
- {
- "field": {
- "type": "FIXED",
- "fieldName": "ADDED_BY"
}, - "order": "ASC"
}
]
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
Searching allows you to find SavedSearches
resources in your Dash matching specific criteria.
Create a new SavedSearchSearch
The only use of a SavedSearchSearch
as of now is to retrieve all the SavedSearch
resources created by a User
from required | integer Default: 0 The item number to begin the result set from |
pageSize required | integer Default: 100 The maximum number of items to return in the result set |
required | any (SavedSearchSearchCriterion) |
sorts required | Array of objects This search does not accept any sorts, but has the sorts parameter anyway to fit in with other searches. You must always provide an empty list for this parameter. |
{- "from": 0,
- "pageSize": 100,
- "criterion": {
- "type": "FIELD_EQUALS",
- "field": "CREATOR_ID",
- "value": "google-oauth2|110955770826801837334"
}, - "sorts": [ ]
}
{- "results": [
- {
- "result": {
- "id": "1ecabbb8-85d5-11eb-8dcd-0242ac130003",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|340955570626871847637",
- "name": "Favourite search",
- "emailUserOnNewUploads": true,
- "criterion": {
- "type": "FIELD_EQUALS",
- "value": "a32fe863-0a1d-4b54-990a-b094139cf81c",
- "field": {
- "type": "ATTRIBUTE",
- "attributeId": "a52b5315-15b8-417f-b742-d6902108bac1"
}
}, - "sorts": [ ]
}, - "permittedActions": [ ]
}, - {
- "result": {
- "id": "1fc6d6c3-c42d-48e2-b0db-5d680a58ca52",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|340955570626871847637",
- "name": "Added in January",
- "emailUserOnNewUploads": false,
- "criterion": {
- "type": "FIELD_MATCHES",
- "value": "[2021-01-01 - 2021-02-01]",
- "field": {
- "type": "FIXED",
- "fieldName": "DATE_ADDED"
}
}, - "sorts": [ ]
}, - "permittedActions": [ ]
}, - {
- "result": {
- "id": "a52b5315-15b8-417f-b742-d6902108bac1",
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "creatorId": "google-oauth2|340955570626871847637",
- "name": "My saved search",
- "emailUserOnNewUploads": true,
- "criterion": {
- "type": "MATCH_ALL"
}, - "sorts": [
- {
- "field": {
- "type": "FIXED",
- "fieldName": "DATE_ADDED"
}, - "order": "DESC"
}
]
}, - "permittedActions": [ ]
}
], - "totalResults": 3
}
Coming soon; contact us if you need access to this API endpoint.
Coming soon; contact us if you need access to this API endpoint.
Get an access token for making requests as Portal
user. Use this access token in the same way as the normal signed-in user token to make requests with the permissions of the share applied.
This endpoint is unauthenticated. Do not send a Bearer Token in the Authorization Header
id required | string The unique ID of the |
curl -i -X GET \ https://api-v1.dash.app/portals/:id/access-token
{- "result": {
- "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik5UZzNPRFV4TkVKQk56UTVRemswTjBFNFFUTTJOVUV6TlRnNU9VVXpRakU0UmtKQlJrSXpOUSJ9.eyJodHRwczovL2Fzc2V0cGxhdGZvcm0uaW8vYWNjb3VudF9pZCI6IjE3ZmNhYzg5LWNjMmUtNGE0MC1hYTZmLWI4NWQ4MDEzMDRkMyIsImh0dHBzOi8vYXNzZXRwbGF0Zm9ybS5pby9leHRlcm5hbF9hY2Nlc3NfaWQiOiI4NjVjNjBiYi02NzA5LTQxZTAtOGI0ZS0yNTljYTk4MjkzNTEiLCJodHRwczovL2Fzc2V0cGxhdGZvcm0uaW8vZXh0ZXJuYWxfYWNjZXNzX3Jlc291cmNlX3R5cGUiOiJTSEFSRSIsImh0dHBzOi8vYXNzZXRwbGF0Zm9ybS5pby9zY29wZSI6ImFjY2VzczpleHRlcm5hbF9hY2Nlc3MiLCJodHRwczovL2Fzc2V0cGxhdGZvcm0uaW8vdGVtcG9yYXJ5X3VzZXJfaWQiOiJ0ZW1wb3JhcnktdXNlci1mb3ItZXh0ZXJuYWwtYWNjZXNzfDg2NWM2MGJiLTY3MDktNDFlMC04YjRlLTI1OWNhOTgyOTM1MXxTSEFSRXxmMDJmNTE2Mi03OTc4LTRhMzktYWZkMS0zZGU1MzY1ODlmNDkiLCJpc3MiOiJodHRwczovL2xvZ2luLmJyaWdodGRhc2hzdGFnaW5nLmFwcC8iLCJzdWIiOiJWNFhJdWN1eEx5UzFmNjVkd2RmaWRib1BLcnFFb3lkWUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9hc3NldHBzdGFnaW5nLmlvIiwiaWF0IjoxNjIwMTIzMjgyLCJleHAiOjE2MjAyMDk2ODIsImF6cCI6IlY0WEl1Y3V4THlTMWY2NWR3ZGZpZGJvUEtycUVveWRZIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.clGEEfy-8yQNQ_f4TDc0OqA8Zi5gHq_-9gKFRif69DNnhzIbgqduVnaweR6x1KJU8CgnZiDMBKEwsiZw3gs-U8XnBIzbb8ImpdhYjoKnGv520oUKAA5RiAThamj1a0jGphmnDd3cCS6uIqdkSvxziE9ktL-MLNqbNFfgvdQuCo66YDqjhaHN7bqvliqaleUSRYZOd016M_N_ya21lamSxZcVintaktyvOApuAVgTMyIrrO8VuyhWW-cmiRFYKeTWnl2_kv9s_xQyWQ_PHH92rVCgRJwbofQEko4Isj4ZhLkA2xrurCPrz6VCtD5GYUfJNUWN_HcEHFsSqSYCsGfBAg"
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
Send a Portal
via email to a specified email address
portalId | string The unique ID for the |
string The email address to send the |
{- "portalId": "55f9964c-095d-4b8b-bb5e-4118d2e76ad0",
- "email": "john.smith@gmail.com"
}
{- "timestamp": "2021-02-16T16:21:58.640Z",
- "status": 401,
- "error": "Unauthorized",
- "message": null,
- "path": "/folder-settings"
}
At present the Corebook integration with Dash is configured entirely within Corebook. However, Dash allows admins to set their CorebookSettings.corebookUrl
, which will then show up as a "Brand" link to all users.
curl -i -X GET \ https://api-v1.dash.app/corebook-settings \ -H 'Authorization: Bearer <YOUR_JWT_HERE>'
{- "result": {
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "enabled": true,
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
enabled | boolean Whether Corebook integration is enable |
corebookUrl | string The URL to Corebook that will be used to link users to the brand guidelines |
{- "enabled": true,
}
{- "result": {
- "accountId": "cfb665ca-ce35-4418-b9d5-70ee815db4bd",
- "enabled": true,
}, - "permittedActions": [
- {
- "resourceType": "ASSET",
- "resourceId": "7af90a8b-7ccd-430f-a85d-e8614015bc47",
- "action": "VIEW_ASSET"
}
]
}
A SubdomainAvailabilityCheck
is used to check whether a Dash subdomain is in use or not.
This endpoint is unauthenticated. Do not send a Bearer Token in the Authorization Header
subdomain | string The subdomain to check for availability |
{- "subdomain": "my-company"
}
{- "subdomain": "my-company",
- "isAvailable": true
}