# SeqsLab DRS API

In the [DRS-1.0.0 Spec](https://ga4gh.github.io/data-repository-service-schemas/preview/release/drs-1.0.0/docs/#_read_only) (![external link](../images/external-link.png)) DRS v1 is a read-only API. The Seqslab DRS API not only implements the GA4GH specifications, it also provides a set of APIs to **create**, **modify** and **delete** DRS objects. Moreover, it supports **search** so you can query DRS objects by tags or by name.

The Seqslab DRS API does not currently support dataset uploads. As a workaround, you can either:

* upload content using Seqslab CLI and then using the API to register the DRS objects 
* upload content and register using the Seqslab CLI

## DRS IDs

- The SeqsLab DRS API uses DRS IDs that include a`drs_` prefix with strings made up of uppercase and lowercase alphanumeric characters. Unlike the [GA4GH DRS-1.0.0](https://ga4gh.github.io/data-repository-service-schemas/preview/release/drs-1.0.0/docs/#_drs_ids) (![external link](../images/external-link.png)), we do not support hypen, period, underscore, and tilde characters.
- One DRS ID MUST always return the same object data.
- DRS implementations MAY have more than one ID that maps to the same object.

## DRS uniform resource identifiers (URIs)

- A DRS URI refers to a DRS object.
- DRS URIs use the format `drs://<server>/<id>` where `<server>` is the DRS server and `<id>` is the DRS ID.
- With DRS URI, contents can be accessed in a standard way.
- If the DRS URI is `drs://drs.atgenomix.com/271828`, then you can send API requests to `https://drs.atgenomix.com/ga4gh/drs/v1/objects/271828`
	- Get DRS object![Get DRS object](../images/get-drs.png)
	- Update DRS object![Update DRS object](../images/update-drs.png)
	- Partial update DRS object![Partial update DRS object](../images/partial-update-drs.png)
	- Delete DRS object![Delete DRS object](../images/delete-drs.png)

## DRS data types

DRS supports two types of content:

* blob — Like a file, a blob is a single blob of bytes that is represented by a `DrsObject` without a `contents` array.
* bundle — Like a folder, a bundle is a collection of other DRS content (either blobs or bundles) that is represented by a `DrsObject` with a `contents` array.