> ## Documentation Index
> Fetch the complete documentation index at: https://docs.openlayer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Retrieve a download url

> Exchange a `storageUri` for a short-lived presigned url you can download the object from.

Use it to collect anything the platform stored on your behalf -- for example the archive a
framework export leaves behind, whose `storageUri` comes back in the background task's `outputs`.

The workspace is taken from the API key, so there is nothing else to send. The url is only
issued for objects your workspace owns, and `404` covers both "no such object" and "not yours".




## OpenAPI

````yaml get /storage/presigned-url
openapi: 3.0.3
info:
  contact:
    email: support@openlayer.com
    name: Openlayer
    url: https://openlayer.com/
  description: API for interacting with the Openlayer server.
  title: Openlayer API
  version: '1.0'
  x-logo:
    url: https://logo.clearbit.com/openlayer.com
servers:
  - url: https://api.openlayer.com/v1
    description: Our prod backend
security:
  - bearerAuth: []
paths:
  /storage/presigned-url:
    get:
      tags:
        - Storage
      summary: Retrieve a download url
      description: >
        Exchange a `storageUri` for a short-lived presigned url you can download
        the object from.


        Use it to collect anything the platform stored on your behalf -- for
        example the archive a

        framework export leaves behind, whose `storageUri` comes back in the
        background task's `outputs`.


        The workspace is taken from the API key, so there is nothing else to
        send. The url is only

        issued for objects your workspace owns, and `404` covers both "no such
        object" and "not yours".
      operationId: getPresignedUrlForDownload
      parameters:
        - name: storageUri
          in: query
          required: true
          description: The object's storage uri.
          schema:
            type: string
      responses:
        '200':
          description: Response OK.
          content:
            application/json:
              schema:
                type: object
                required:
                  - url
                properties:
                  url:
                    description: The presigned url. Short-lived -- download promptly.
                    type: string
                    format: url
        '404':
          description: No such object, or it is not yours to read.
        default:
          $ref: '#/components/responses/UnexpectedError'
      x-codeSamples:
        - lang: curl
          source: |
            curl --request GET \
              --url 'https://api.openlayer.com/v1/storage/presigned-url?storageUri=s3%3A%2F%2Fopenlayer-storage%2Fexports%2Fsoc2-2026-09-15.zip' \
              --header 'Authorization: Bearer <token>'
components:
  responses:
    UnexpectedError:
      description: Unexpected error.
      content:
        application/json:
          schema:
            type: object
            required:
              - code
              - error
            properties:
              code:
                type: integer
                format: int32
              error:
                type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Bearer authentication header of the form `Bearer <token>`, where
        `<token>` is your workspace API key. See [Find your API
        key](https://www.openlayer.com/docs/workspace-and-projects/find-your-api-key)
        for more information.

````