openapi: 3.0.0 info: description: Indexd is a data indexing and tracking service. The code is open source on [github](https://github.com/uc-cdis/indexd) version: 1.0.0 title: Indexd OpenAPI Specification termsOfService: http://cdis.uchicago.edu/terms/ contact: email: cdis@uchicago.edu license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html servers: - url: https://data.example.domain/ tags: - name: global description: Search for an alias or index, potentially even a distributed search. externalDocs: description: Find out more url: https://github.com/uc-cdis/indexd - name: index description: Associate a file (object) with a unique id, and store some basic metadata. externalDocs: description: Find out more url: https://github.com/uc-cdis/indexd - name: bulk description: bulk endpoints - name: query description: query endpoints - name: alias description: create an alias for an entity stored in an external system managed by some other authority externalDocs: description: Find out more url: https://github.com/uc-cdis/indexd - name: DOS description: Data Object Service Retrieval Endpoints - name: DRS description: Data Repository Service Retrieval Endpoints - name: bundle description: Bundle endpoints. - name: GUID description: Endpoints for generation of Gen3 GUIDs - name: system description: System endpoints paths: /{GUID}: get: tags: - global summary: Get the metadata associated with the given id, alias, or distributed identifier description: Only the hashes which exist will be included in the response. operationId: getEntry parameters: - name: GUID in: path description: entry id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/OutputInfo' '400': description: Invalid status value '404': description: Record not found security: [] /urls: get: tags: - global summary: Get a list of urls that match query params description: '' operationId: listUrls parameters: - name: size in: query description: object size required: false schema: type: integer - name: hash in: query description: hashes specified as algorithm:value. Multiple hashes can be specified, for example "?hash=a:xxx&hash=b:yyy" schema: type: string - name: ids in: query description: comma delimited ids schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/UrlOutputRef' '400': description: Invalid input security: - basic_auth: [] /index: post: tags: - index summary: Add a new entry to the index description: '' operationId: addEntry responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/OutputRef' '400': description: Invalid input security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/InputInfo' description: Metadata object that needs to be added to the store. Providing at least one hash is necessary and sufficient. required: true get: tags: - index summary: List all records description: '' operationId: listEntries parameters: - name: form in: query description: specify whether you want to list bundle, objects or both Defaults to object. required: false schema: type: string enum: - bundle - object - all - name: urls_metadata in: query description: 'urls_metadata in JSON string format "{url_key: {key: value, ...}, ...}". Will get records whose url_metadata have at least one key containing the substring "url_key" AND whose url_metadata have all the "key: value" properties ' required: false schema: type: string - name: metadata in: query description: metadata in format key:value. Multiple metadata values can be specified, for example "?metadata=a:xxx&metadata=b:yyy" required: false schema: type: string - name: size in: query description: object size required: false schema: type: integer - name: hash in: query description: hash in format hash_type:hash_value. Multiple hashes can be specified, for example "?hash=a:xxx&hash=b:yyy" required: false schema: type: string - name: uploader in: query description: uploader id required: false schema: type: string - name: ids in: query description: 'comma delimited ids, when provided, pagination params(start, limit) are not supported ' required: false schema: type: string - name: url in: query description: URL to query. Multiple URLs can be specified, for example "?url=url1&url=url2" - in that case, returned records will have ALL URLs required: false schema: type: string - name: acl in: query description: comma delimited ACE - if multiple ACE are specified, returned records will have ALL ACEs required: false schema: type: string - name: authz in: query description: comma delimited resources - if multiple resources are specified, returned records will have ALL resources required: false schema: type: string - name: negate_params in: query description: 'The negate params in JSON string format. For string params (version, file_name): filters value != param value For list params (urls, acl): filters records that don''t include the param value For dict params (metadata, urls_metadata), for each (key,value) pair: - if param value is None or empty: filters with key doesn''t exist - if param value is provided: filters with value != param value OR key doesn''t exist ' required: false schema: type: string - name: start in: query description: start did required: false schema: type: string - name: limit in: query description: number of records to return for this page, default to 100 required: false schema: type: integer - name: page in: query description: pagination support without relying on dids. offsets results by limit*page required: false schema: type: integer responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/ListRecords' security: [] /index/blank: post: tags: - index summary: Create a blank record description: An authz can optionally be specified. operationId: createBlankEntry responses: '201': description: successful operation content: application/json: schema: $ref: '#/components/schemas/OutputRef' '400': description: Invalid status value security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/InputBlankInfo' description: Metadata object that needs to be added to the store required: true /index/blank/{GUID}: post: tags: - index summary: Create a new, blank version for the document associated to the provided uuid. description: Creates a new blank version of a record with the provided GUID. Returns the GUID of the new version of the record and the baseid common to all versions of the record. Authorization (acl/authz fields) carry over from the original record to the new blank version, unless an authz is provided. No other metadata (md5sum, etc) carries over from the original record to the new blank version. operationId: addNewBlankVersion parameters: - name: GUID in: path description: the uuid associated to the record needed to have new version required: true schema: type: string responses: '201': description: successful operation content: application/json: schema: $ref: '#/components/schemas/OutputRef' '400': description: Invalid status value '404': description: GUID does not exist security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/InputBlankVersionInfo' description: Metadata object that needs to be added to the store required: true put: tags: - index summary: Update only hashes, size and optionally urls and authz for blank index description: '' operationId: updateBlankEntry parameters: - name: GUID in: path description: entry id required: true schema: type: string - name: rev in: query description: data revision - simple consistency mechanism required: true schema: type: string responses: '200': description: success content: application/json: schema: $ref: '#/components/schemas/OutputRef' '400': description: Invalid input security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateBlankInputInfo' description: index record that needs to be updated required: true /index/{GUID}: get: tags: - index summary: Get the metadata associated with the given id. Resolves bundle id. operationId: getIndexEntry parameters: - name: GUID in: path description: entry id required: true schema: type: string - name: expand in: query description: Only shows first layer of contents when expand=false. Recursively unbundles contents when expand=true. false by default schema: type: boolean responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/OutputInfo' '400': description: Invalid status value security: [] post: tags: - index summary: Add new version for the document associated to the provided uuid. description: Since data content is immutable, when you want to change the size or hash, a new index document with new uuid need to be created as its new version. That uuid is returned in the did field of the response. The old index document is not deleted. operationId: addNewVersion parameters: - name: GUID in: path description: the uuid associated to the record needed to have new version required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/OutputRef' '400': description: Invalid status value security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/VersionInputInfo' description: index record metadata for the new version required: true put: tags: - index summary: Update an existing entry in the index description: '' operationId: updateEntry parameters: - name: GUID in: path description: entry id required: true schema: type: string - name: rev in: query description: data revision - simple consistency mechanism required: true schema: type: string responses: '200': description: success content: application/json: schema: $ref: '#/components/schemas/OutputRef' '400': description: Invalid input security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateInputInfo' description: index record that needs to be updated required: true delete: tags: - index summary: Delete an entry from the index description: '' operationId: deleteEntry parameters: - name: GUID in: path description: entry id required: true schema: type: string - name: rev in: query description: data revision - simple consistency mechanism required: true schema: type: string responses: '400': description: Invalid ID supplied '200': description: Record is deleted successfully security: - basic_auth: [] /index/{GUID}/aliases: get: tags: - index summary: Get all aliases associated with this GUID operationId: getAliases parameters: - name: GUID in: path description: The GUID to query. required: true schema: type: string responses: '200': description: Successful operation. Returns 0 or more aliases associated with this GUID. content: application/json: schema: $ref: '#/components/schemas/AliasInfo' '404': description: GUID not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' security: [] post: tags: - index summary: Append new aliases to this GUID description: Adds new aliases to the aliases already associated with this GUID. The new aliases must be globally unique. operationId: addNewAliases parameters: - name: GUID in: path description: The GUID to associate the new aliases with. required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/AliasInfo' '400': description: 'Invalid request: One or more aliases are non-unique: one or more of the aliases are already associated with this or another GUID.' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: GUID not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AliasInfo' description: The new aliases to associate with this GUID. The new aliases must be globally unique. required: true put: tags: - index summary: Replace all aliases for this GUID description: Replaces all aliases associated with this GUID with new aliases. The new aliases can be the same as the aliases already associated with this GUID, but must otherwise be globally unique. operationId: updateAliases parameters: - name: GUID in: path description: The GUID to associate the new aliases with. required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/AliasInfo' '400': description: 'Invalid request: One or more aliases are non-unique: one or more of the aliases are already associated with another GUID.' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: GUID not found. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AliasInfo' description: The new aliases to associate with this GUID. The new aliases can be the same as the aliases already associated with this GUID, but must otherwise be globally unique. required: true delete: tags: - index summary: Delete all aliases for this GUID description: '' operationId: deleteAllAliases parameters: - name: GUID in: path description: The GUID to delete these aliases from. required: true schema: type: string responses: '200': description: Aliases were deleted successfully. '404': description: GUID not found. No aliases were deleted. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' security: - basic_auth: [] /index/{GUID}/aliases/{ALIAS}: delete: tags: - index summary: Delete one alias for this GUID description: '' operationId: deleteOneAlias parameters: - name: GUID in: path description: The GUID to delete this alias from. required: true schema: type: string - name: ALIAS in: path description: The alias to delete from this GUID. The alias should be URL-encoded. required: true schema: type: string responses: '200': description: Alias was deleted successfully. '404': description: GUID not found. No aliases were deleted. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' security: - basic_auth: [] /index/{GUID}/latest: get: tags: - index summary: Get the metadata of the latest index record version associated with the given id operationId: getLatestVersion parameters: - name: GUID in: path description: entry id required: true schema: type: string - name: has_version in: query description: filter by latest doc that has version value populated required: false schema: type: boolean responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/OutputInfo' '400': description: Invalid status value security: [] /index/{GUID}/versions: get: tags: - index summary: Get the metadata of index record versions associated with the given id, in the order the versions were created operationId: getAllVersions parameters: - name: GUID in: path description: GUID of any record version, or the baseid common to all versions required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/BulkOutputInfo' '400': description: Invalid status value security: [] put: tags: - index summary: Update metadata for all versions of this record. Only some metadata fields can be updated in this way. operationId: updateAllVersions parameters: - name: GUID in: path description: GUID of any record version, or the baseid common to all versions required: true schema: type: string responses: '200': description: Successful operation. Returns the GUIDs of the records that were updated. content: application/json: schema: type: array items: $ref: '#/components/schemas/OutputRef' '400': description: The metadata to update is invalid. '403': description: The requester is not authorized to perform this action. The requester must have the Update permission on all versions of the record. '404': description: GUID not found. security: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateAllVersionsInputInfo' description: The metadata to update for all versions of the record. Only some fields can be updated in this way. required: true /alias/: get: deprecated: true tags: - alias summary: list aliases with pagination operationId: listAlistEntries parameters: - name: size in: query required: false description: size in bytes schema: type: integer format: int64 - name: start in: query required: false description: start index for the pagination schema: type: integer format: int64 - name: limit in: query required: false description: number of aliases to return schema: type: integer - name: hash in: query required: false schema: type: string responses: '200': description: successful operation content: application/json: schema: type: object properties: aliases: type: array items: type: string size: type: integer format: int64 description: size in bytes start: type: integer format: int64 description: start index for the pagination limit: type: integer format: int64 description: number of aliases to return hashes: $ref: '#/components/schemas/HashInfo' /alias/{ALIASSTRING}: put: deprecated: true tags: - alias summary: Create or update an alias description: '' operationId: upsertEntry parameters: - name: ALIASSTRING in: path required: true description: alias like ark:/31807/DC1-TESTARK schema: type: string - name: rev in: query required: false description: Revision of the current alias to be updated. If you do not specify this then the last update wins in races. schema: type: string pattern: ^[a-z,0-9]{8}$ responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/AliasRef' '400': description: Invalid input security: - basic_auth: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/AliasInputInfo' description: Metadata object that needs to be added to the store required: true get: deprecated: true tags: - alias summary: Fetch an alias description: '' operationId: getAliasEntry parameters: - name: ALIASSTRING in: path required: true description: alias like ark:/31807/DC1-TESTARK schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/AliasOutputInfo' '400': description: Invalid input security: [] delete: deprecated: true tags: - alias summary: Delete an alias description: '' operationId: deleteAliasEntry parameters: - name: ALIASSTRING in: path required: true description: alias like ark:/31807/DC1-TESTARK schema: type: string - name: rev in: query required: false description: Revision of the current alias to be deleted. schema: type: string pattern: ^[a-z,0-9]{8}$ responses: '200': description: successful operation '400': description: Invalid input security: - basic_auth: [] /_status: get: tags: - system summary: Returns if IndexD is healthy or not description: Health check endpoint which checks if IndexD can connect to its backing datastore or not. responses: '200': description: Healthy default: description: Unhealthy /_dist: get: tags: - system summary: Returns the IndexD dist configuration responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: name: type: string description: Commons name host: type: string description: Resolver URL hints: type: array items: type: string description: Regex for prefix matching type: type: string description: Type of resolver (one of [indexd, doi, dos, hs]) /_version: get: tags: - system summary: Returns the version of IndexD responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/SystemVersionOutputRef' /_stats: get: tags: - system summary: Returns basic information about the records in IndexD parameters: - in: query name: month description: Month for which data is to be returned. (Either both month and year or neither must be provided) required: false schema: type: integer - in: query name: year description: year for which data is to be returned. (Either both month and year or neither must be provided) required: false schema: type: integer responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/SystemStatsOutputRef' /ga4gh/dos/v1/dataobjects: get: summary: List the Data Objects operationId: ListDataObjects responses: '200': description: The Data Objects were listed successfully. content: application/json: schema: $ref: '#/components/schemas/ListDataObjectsResponse' '400': description: The request is malformed. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: The request is unauthorized. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: The requester is not authorized to perform this action. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: An unexpected error occurred. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' parameters: - name: alias in: query required: false description: If provided will only return Data Objects with the given alias. schema: type: string - name: url in: query required: false description: 'If provided will return only Data Objects with a that URL matches this string.' schema: type: string - name: checksum in: query required: false description: The hexlified checksum that one would like to match on. schema: type: string - name: checksum_type in: query required: false description: 'If provided will restrict responses to those that match the provided type. possible values: md5 # most blob stores provide a checksum using this multipart-md5 # multipart uploads provide a specialized tag in S3 sha256 sha512' schema: type: string - name: page_size in: query required: false description: 'Specifies the maximum number of results to return in a single page. If unspecified, a system default will be used.' schema: type: integer format: int32 - name: page_token in: query required: false description: 'The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of next_page_token from the previous response.' schema: type: string tags: - DOS /ga4gh/dos/v1/dataobjects/{GUID}: get: summary: Retrieve a Data Object operationId: GetDataObject responses: '200': description: The Data Object was found successfully. content: application/json: schema: $ref: '#/components/schemas/GetDataObjectResponse' '400': description: The request is malformed. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: The request is unauthorized. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: The requested Data Object wasn't found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: The requester is not authorized to perform this action. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: An unexpected error occurred. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' parameters: - name: GUID in: path required: true schema: type: string tags: - DOS /ga4gh/drs/v1/objects: get: summary: List all DrsObject. description: Url field here contains their location and not the presigned url. operationId: ListDrsObject parameters: - name: form in: query description: specify whether you want to list bundle, objects or both. required: false schema: type: string enum: - bundle - object - all responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/ListDrsObject' security: [] tags: - DRS /ga4gh/drs/v1/objects/{object_id}: get: summary: Get info about a DrsObject. description: Returns object metadata, and a list of access methods that can be used to fetch object bytes. Resolves for bundles. operationId: GetObject responses: '200': description: The DrsObject was found successfully. content: application/json: schema: $ref: '#/components/schemas/DrsObject' '400': description: The request is malformed. content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: The request is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: The requester is not authorized to perform this action. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The requested DrsObject wasn't found content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: An unexpected error occurred. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: - name: object_id in: path required: true schema: type: string - in: query name: expand description: 'NOT IMPLEMENTED YET. If false and the object_id refers to a bundle, then the ContentsObject array contains only those objects directly contained in the bundle. That is, if the bundle contains other bundles, those other bundles are not recursively included in the result. If true and the object_id refers to a bundle, then the entire set of objects in the bundle is expanded. That is, if the bundle contains aother bundles, then those other bundles are recursively expanded and included in the result. Recursion continues through the entire sub-tree of the bundle. If the object_id refers to a blob, then the query parameter is ignored.' schema: type: boolean default: false x-swagger-router-controller: ga4gh.drs.server security: - authToken: [] tags: - DRS /bundle: post: tags: - bundle summary: Create a bundle. description: '' responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/BundleResponse' '400': description: Invalid input '404': description: GUID in bundle doesn't exist. security: - authToken: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/InputBundle' description: Body takes in GUID, bundle_name, checksum, list of bundles/objects to bundle, and size. Only list of bundles/objects is required, rest will be created by indexd if not provided. required: true get: summary: List all Bundles. description: By default lists all the bundles operationId: ListBundles parameters: - name: form in: query description: specify whether you want to list bundle, objects or both. required: false schema: type: string enum: - bundle - object - all - name: start in: query description: start did required: false schema: type: string - name: limit in: query description: number of records to return for this page, default to 100 required: false schema: type: integer - name: page in: query description: pagination support without relying on dids. offsets results by limit*page required: false schema: type: integer responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/ListBundles' security: [] tags: - bundle /bundle/{GUID}: get: tags: - bundle summary: Get bundle info for a given GUID parameters: - name: GUID in: path description: Resolves for both bundle id and object id. required: true schema: type: string - name: expand in: query description: Only shows first layer of contents when expand=false. Recursively unbundles contents when expand=true. false by default schema: type: boolean responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/BundleGet' '404': description: bundle not found delete: tags: - bundle summary: delete bundle from bundle records description: '' parameters: - name: GUID in: path description: bundle id required: true schema: type: string responses: '200': description: Bundle is successfully deleted '404': description: Bundle ID not found security: - authToken: [] /bulk/documents: post: tags: - bulk summary: Get a list of documents given a list of dids operationId: getBulkIds responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/BulkOutputInfo' '400': description: Invalid status value security: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/BulkInputInfo' description: List of dids to retrieve required: true /_query/urls/q: get: tags: - query summary: search index records by urls operationId: queryUrls parameters: - in: query name: exclude description: search for documents without a single URL that match this pattern required: false schema: type: string - in: query name: include description: search for documents with at least one URL that match this pattern required: false schema: type: string - in: query name: versioned description: if true search for documents with a version set, else search documents without version required: false schema: type: boolean default: false - in: query name: limit description: maximum rows to return required: false schema: type: integer default: 100 - in: query name: offset description: pointer position to start search required: false schema: type: integer default: 0 responses: '200': description: successful content: application/json: schema: $ref: '#/components/schemas/URLsOutput' '400': description: invalid request parameters /_query/urls/metadata/q: get: tags: - query summary: search index records by urls metadata key and value operationId: queryUrlsMetadata parameters: - in: query name: key description: metadata key to search by required: true schema: type: string - in: query name: value description: metadata value for provided key required: true schema: type: string - in: query name: url description: URL patter to filter by required: false schema: type: string - in: query name: versioned description: if true search for documents with a version set, else search documents without version required: false schema: type: boolean default: false - in: query name: limit description: maximum rows to return required: false schema: type: integer default: 100 - in: query name: offset description: pointer position to start search required: false schema: type: integer default: 0 responses: '200': description: successful content: application/json: schema: $ref: '#/components/schemas/URLsOutput' '400': description: invalid request parameters /guid/mint: get: tags: - GUID summary: Get a list of valid GUIDs without actually indexing records operationId: getGUIDs parameters: - in: query name: count description: Number of GUIDs to return, default is 1 (note that there is a max of 10k) required: false schema: type: string responses: '200': description: successful content: application/json: schema: $ref: '#/components/schemas/GetGUIDsOutput' /guid/prefix: get: tags: - GUID summary: Provide prefix used for this instance (if any) operationId: getPrefix responses: '200': description: successful content: application/json: schema: $ref: '#/components/schemas/GetPrefixOutput' components: schemas: GetGUIDsOutput: type: object properties: guids: type: array items: type: string description: GUIDs GetPrefixOutput: type: object properties: prefix: type: string description: Prefix AliasInfo: type: object properties: aliases: type: array items: type: object properties: value: type: string description: The identifier that acts as an alias for this GUID. HashInfo: type: object properties: md5: type: string pattern: ^[0-9a-f]{32}$ sha: type: string pattern: ^[0-9a-f]{40}$ sha256: type: string pattern: ^[0-9a-f]{64}$ sha512: type: string pattern: ^[0-9a-f]{128}$ crc: type: string pattern: ^[0-9a-f]{8}$ etag: type: string pattern: ^[0-9a-f]{32}(-\d+)?$ VersionInputInfo: type: object required: - size - hashes - urls - form properties: did: $ref: '#/components/schemas/DID' form: type: string description: how the entry was submitted to storage enum: - object - container - multipart size: type: integer format: int64 description: size in bytes file_name: type: string metadata: type: object urls_metadata: type: object version: type: string urls: type: array items: type: string acl: type: array items: type: string authz: type: array items: type: string hashes: $ref: '#/components/schemas/HashInfo' description: type: string description: optional description of the object content_created_date: type: string format: date-time description: optional creation date and time of the content being indexed content_updated_date: type: string format: date-time description: optional creation date and time of the content being indexed BulkInputInfo: type: array items: type: string InputInfo: type: object required: - size - hashes - urls - form properties: did: $ref: '#/components/schemas/DID' baseid: $ref: '#/components/schemas/UUID' form: type: string description: how the entry was submitted to storage enum: - object - container - multipart size: type: integer format: int64 description: size in bytes file_name: type: string metadata: type: object urls_metadata: type: object version: type: string urls: type: array items: type: string acl: type: array items: type: string authz: type: array items: type: string hashes: $ref: '#/components/schemas/HashInfo' InputBlankInfo: type: object properties: uploader: type: string description: optional; user who uploaded this file file_name: type: string description: name of the uploaded file authz: description: optional type: array items: type: string InputBlankVersionInfo: type: object properties: did: type: string description: optional; specify the GUID of the new blank version that is created. uploader: type: string description: optional; user who uploaded this file file_name: type: string description: optional; name of the uploaded file authz: description: optional type: array items: type: string UpdateInputInfo: type: object properties: file_name: type: string metadata: type: object urls_metadata: type: object version: type: string urls: type: array items: type: string acl: type: array items: type: string authz: type: array items: type: string UpdateBlankInputInfo: type: object properties: size: type: integer hashes: $ref: '#/components/schemas/HashInfo' urls: type: array items: type: string authz: description: optional type: array items: type: string UpdateAllVersionsInputInfo: type: object properties: acl: type: array items: type: string authz: type: array items: type: string OutputRef: type: object properties: did: $ref: '#/components/schemas/DID' baseid: $ref: '#/components/schemas/UUID' rev: type: string pattern: ^[0-9a-f]{8}$ AliasInputInfo: type: object required: - size - hashes - release properties: release: type: string description: has the entity been released? enum: - public - private - controlled size: type: integer format: int64 description: size in bytes keeper_authority: description: who is keeping this entry up to date? type: string host_authority: description: who is hosting this entity? type: array items: type: string hashes: $ref: '#/components/schemas/HashInfo' metadata: type: string AliasRef: type: object properties: name: type: string rev: type: string pattern: ^[0-9a-f]{8}$ AliasOutputInfo: type: object properties: name: type: string rev: type: string pattern: ^[0-9a-f]{8}$ release: type: string description: has the entity been released? enum: - public - private - controlled size: type: integer format: int64 description: size in bytes keeper_authority: description: who is keeping this entry up to date? type: string host_authorities: description: who is hosting this entity? type: array items: type: string hashes: $ref: '#/components/schemas/HashInfo' metadata: type: string limit: type: integer format: int64 description: number of aliases to return start: type: integer format: int64 description: start index for the pagination urls: type: array items: type: string DID: type: string pattern: ^.*[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$ UUID: type: string pattern: ^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$ BulkOutputInfo: type: array items: $ref: '#/components/schemas/OutputInfo' OutputInfo: type: object properties: did: $ref: '#/components/schemas/DID' baseid: $ref: '#/components/schemas/UUID' rev: type: string pattern: ^[0-9a-f]{8}$ form: type: string description: how the entry was submitted to storage enum: - object - container - multipart size: type: integer format: int64 description: size in bytes file_name: type: string version: type: string uploader: type: string urls: type: array items: type: string acl: type: array items: type: string authz: type: array items: type: string hashes: $ref: '#/components/schemas/HashInfo' updated_date: type: string format: date-time description: last updated time created_date: type: string format: date-time description: time created metadata: type: object description: user defined optional metadata urls_metadata: type: object description: url level optional metadata SystemVersionOutputRef: type: object properties: commit: type: string description: the current git commit hash for this version version: type: string description: the current git tag version SystemStatsOutputRef: type: object properties: fileCount: type: integer description: the number of records stored in IndexD totalFileSize: type: integer description: the accumulated size of the object files recorded in IndexD DataObject: type: object required: - id - size - created - checksums properties: id: type: string description: An identifier unique to this Data Object. name: type: string description: A string that can be optionally used to name a Data Object. size: type: string format: int64 description: The computed size in bytes. created: type: string format: date-time description: Timestamp of object creation in RFC3339. updated: type: string format: date-time description: 'Timestamp of update in RFC3339, identical to create timestamp in systems that do not support updates.' version: type: string description: A string representing a version. mime_type: type: string description: 'A string providing the mime-type of the Data Object. For example, "application/json".' checksums: type: array items: $ref: '#/components/schemas/Checksum' description: The checksum of the Data Object. At least one checksum must be provided. urls: type: array items: $ref: '#/components/schemas/URL' description: The list of URLs that can be used to access the Data Object. description: type: string description: A human readable description of the contents of the Data Object. aliases: type: array items: type: string description: 'A list of strings that can be used to find this Data Object. These aliases can be used to represent the Data Object''s location in a directory (e.g. "bucket/folder/file.name") to make Data Objects more discoverable. They might also be used to represent' ListDataObjectsRequest: type: object properties: alias: type: string description: If provided will only return Data Objects with the given alias. url: type: string description: 'If provided will return only Data Objects with a that URL matches this string.' checksum: type: string description: The hexlified checksum that one would like to match on. checksum_type: type: string description: 'If provided will restrict responses to those that match the provided type. possible values: md5 # most blob stores provide a checksum using this multipart-md5 # multipart uploads provide a specialized tag in S3 sha256 sha512' page_size: type: integer format: int32 description: 'Specifies the maximum number of results to return in a single page. If unspecified, a system default will be used.' page_token: type: string description: 'The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of next_page_token from the previous response.' description: 'Allows a requester to list and filter Data Objects. Only Data Objects matching all of the requested parameters will be returned.' ListDataObjectsResponse: type: object properties: data_objects: type: array items: $ref: '#/components/schemas/DataObject' description: The list of Data Objects. next_page_token: type: string description: 'The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results. This field will be empty if there aren''t any additional results.' description: 'A list of Data Objects matching the requested parameters, and a paging token, that can be used to retrieve more results.' GetDataObjectResponse: type: object required: - data_object properties: data_object: $ref: '#/components/schemas/DataObject' URL: type: object required: - url properties: url: type: string description: A URL that can be used to access the file. system_metadata: $ref: '#/components/schemas/SystemMetadata' user_metadata: $ref: '#/components/schemas/UserMetadata' URLsOutput: type: array items: type: object properties: did: type: string urls: type: array items: type: string SystemMetadata: type: object additionalProperties: true description: 'OPTIONAL These values are reported by the underlying object store. A set of key-value pairs that represent system metadata about the object.' UserMetadata: type: object additionalProperties: true description: 'OPTIONAL A set of key-value pairs that represent metadata provided by the uploader.' Checksum: type: object required: - checksum properties: checksum: type: string description: The hex-string encoded checksum for the Data. type: type: string description: 'The digest method used to create the checksum. If left unspecified md5 will be assumed. possible values: md5 # most blob stores provide a checksum using this multipart-md5 # multipart uploads provide a specialized tag in S3 sha256 sha512' ChecksumRequest: type: object properties: checksum: type: string description: 'REQUIRED The hexlified checksum that one would like to match on.' type: type: string description: 'OPTIONAL If provided will restrict responses to those that match the provided type. possible values: md5 # most blob stores provide a checksum using this multipart-md5 # multipart uploads provide a specialized tag in S3 sha256 sha512' ErrorResponse: description: An object that can optionally include information about the error. type: object properties: msg: type: string description: A detailed error message. status_code: type: integer description: The integer representing the HTTP status code (e.g. 200, 404). UrlObject: type: object properties: url: type: string metadata: type: object UrlOutputRef: type: object properties: urls: type: array items: $ref: '#/components/schemas/UrlObject' size: type: integer format: int64 description: size in bytes start: type: integer format: int64 description: start index for the pagination limit: type: integer format: int64 description: number of aliases to return hashes: $ref: '#/components/schemas/HashInfo' DrsObject: type: object required: - id - self_uri - size - created_time - checksums properties: id: type: string description: An identifier unique to this DrsObject. name: type: string description: 'A string that can be used to name a DrsObject. This string is made up of uppercase and lowercase letters, decimal digits, hypen, period, and underscore [A-Za-z0-9.-_]. See http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_282[portable filenames].' self_uri: type: string description: 'A drs:// URI, as defined in the DRS documentation, that tells clients how to access this object. The intent of this field is to make DRS objects self-contained, and therefore easier for clients to store and pass around.' example: drs://drs.example.org/314159 size: type: integer format: int64 description: 'For blobs, the blob size in bytes. For bundles, the cumulative size, in bytes, of items in the contents field.' created_time: type: string format: date-time description: 'Timestamp of content creation in RFC3339. (This is the creation time of the underlying content, not of the JSON object.)' updated_time: type: string format: date-time description: Timestamp of content update in RFC3339, identical to created_time in systems that do not support updates. (This is the update time of the underlying content, not of the JSON object.) version: type: string description: A string representing a version. (Some systems may use checksum, a RFC3339 timestamp, or an incrementing version number.) mime_type: type: string description: A string providing the mime-type of the DrsObject. example: application/json checksums: type: array minItems: 1 items: $ref: '#/components/schemas/Checksum' description: 'The checksum of the DrsObject. At least one checksum must be provided. For blobs, the checksum is computed over the bytes in the blob. For bundles, the checksum is computed over a sorted concatenation of the checksums of its top-level contained objects (not recursive, names not included). The list of checksums is sorted alphabetically (hex-code) before concatenation and a further checksum is performed on the concatenated checksum value. For example, if a bundle contains blobs with the following checksums: md5(blob1) = 72794b6d md5(blob2) = 5e089d29 Then the checksum of the bundle is: md5( concat( sort( md5(blob1), md5(blob2) ) ) ) = md5( concat( sort( 72794b6d, 5e089d29 ) ) ) = md5( concat( 5e089d29, 72794b6d ) ) = md5( 5e089d2972794b6d ) = f7a29a04' access_methods: type: array minItems: 1 items: $ref: '#/components/schemas/AccessMethod' description: 'The list of access methods that can be used to fetch the DrsObject. Required for single blobs; optional for bundles.' contents: type: array description: If not set, this DrsObject is a single blob. If set, this DrsObject is a bundle containing the listed ContentsObject s (some of which may be further nested). items: $ref: '#/components/schemas/ContentsObject' description: type: string description: A human readable description of the DrsObject. aliases: type: array items: type: string description: A list of strings that can be used to find other metadata about this DrsObject from external metadata sources. These aliases can be used to represent secondary accession numbers or external GUIDs. AccessURL: type: object required: - url properties: url: type: string description: A fully resolvable URL that can be used to fetch the actual object bytes. AccessMethod: type: object required: - type properties: type: type: string enum: - s3 - gs - ftp - gsiftp - globus - htsget - https - file description: Type of the access method. access_url: $ref: '#/components/schemas/AccessURL' description: An AccessURL that can be used to fetch the actual object bytes. Note that at least one of access_url and access_id must be provided. access_id: type: string description: An arbitrary string to be passed to the /access method to get an AccessURL. This string must be unique within the scope of a single object. Note that at least one of access_url and access_id must be provided. region: type: string description: Name of the region in the cloud service provider that the object belongs to. example: us-east-1 ContentsObject: type: object properties: name: type: string description: A name declared by the bundle author that must be used when materialising this object, overriding any name directly associated with the object itself. The name must be unique with the containing bundle. This string is made up of uppercase and lowercase letters, decimal digits, hypen, period, and underscore [A-Za-z0-9.-_]. See http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_282[portable filenames]. id: type: string description: A DRS identifier of a DrsObject (either a single blob or a nested bundle). If this ContentsObject is an object within a nested bundle, then the id is optional. Otherwise, the id is required. drs_uri: type: array description: A list of full DRS identifier URI paths that may be used to obtain the object. These URIs may be external to this DRS instance. example: drs://drs.example.org/314159 items: type: string contents: type: array description: If this ContentsObject describes a nested bundle and the caller specified "?expand=true" on the request, then this contents array must be present and describe the objects within the nested bundle. items: example: {} required: - name Error: description: An object that can optionally include information about the error. type: object properties: msg: type: string description: A detailed error message. status_code: type: integer description: The integer representing the HTTP status code (e.g. 200, 404). ListDrsObject: type: object properties: drs_objects: type: array items: $ref: '#/components/schemas/DrsObject' BundleGet: type: object properties: id: type: string drs_uri: type: string name: type: string size: type: integer created_time: type: string format: date-time updated_time: type: string format: date-time checksums: type: array items: $ref: '#/components/schemas/Checksum' contents: type: array items: $ref: '#/components/schemas/BundleContent' BundleContent: type: object properties: id: type: string drs_uri: type: string name: type: string contents: type: array items: type: object ListBundles: type: object properties: ids: type: array items: $ref: '#/components/schemas/DID' records: type: array items: $ref: '#/components/schemas/OutputBundle' size: type: integer format: int64 description: size in bytes start: type: integer format: int64 description: start index for the pagination limit: type: integer format: int64 description: number of dids to return file_name: type: string urls: type: array items: type: string acl: type: array items: type: string authz: type: array items: type: string checksums: $ref: '#/components/schemas/Checksum' metadata: type: object version: type: string ListRecords: type: object properties: ids: type: array items: $ref: '#/components/schemas/DID' records: type: array items: $ref: '#/components/schemas/OutputInfo' size: type: integer format: int64 description: size in bytes start: type: integer format: int64 description: start index for the pagination limit: type: integer format: int64 description: number of dids to return file_name: type: string urls: type: array items: type: string acl: type: array items: type: string authz: type: array items: type: string hashes: $ref: '#/components/schemas/HashInfo' metadata: type: object version: type: string InputBundle: type: object required: - bundles properties: bundle_id: $ref: '#/components/schemas/DID' name: type: string size: type: integer format: int64 description: size in bytes checksums: type: array items: $ref: '#/components/schemas/Checksum' description: type: string description: optional description of the object version: type: string description: optional version string of the object bundles: type: array items: type: string description: list of guid to be in the bundle BundleResponse: type: object properties: bundle_id: $ref: '#/components/schemas/DID' name: type: string contents: type: array items: $ref: '#/components/schemas/OutputBundle' OutputBundle: type: object properties: id: $ref: '#/components/schemas/DID' form: type: string description: how the entry was submitted to storage enum: - object - container - multipart - bundle size: type: integer format: int64 description: size in bytes name: type: string checksums: $ref: '#/components/schemas/Checksum' updated_time: type: string format: date-time description: last updated time created_time: type: string format: date-time description: time created securitySchemes: basic_auth: type: http scheme: basic authToken: type: apiKey in: header name: Authorization