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

# Get a data asset's latest metadata and a presigned download URL



## OpenAPI

````yaml /api-reference/openapi.yml get /data-assets/{username}/{namespace}/{assetId}
openapi: 3.0.3
info:
  title: DataLinks
  version: 3.10.0
servers:
  - url: https://api.datalinks.com/api/v1
    description: production server
security:
  - bearerAuth: []
  - openId:
      - implicit
paths:
  /data-assets/{username}/{namespace}/{assetId}:
    get:
      tags:
        - data-assets
      summary: Get a data asset's latest metadata and a presigned download URL
      operationId: getDataAsset
      parameters:
        - name: username
          in: path
          description: The username associated with the request.
          required: true
          schema:
            type: string
        - name: namespace
          in: path
          description: Namespace for the dataset.
          required: true
          schema:
            type: string
          example: cinematography
        - name: assetId
          in: path
          description: The data asset's id.
          required: true
          schema:
            type: string
            format: uuid
        - name: ttl
          in: query
          description: Presigned download URL lifetime in seconds (default 900, max 3600).
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: The latest version's metadata and download URL
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataAssetLatestResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
components:
  schemas:
    DataAssetLatestResponse:
      required:
        - assetId
        - createdAt
        - currentVersion
        - downloadUrl
        - expiresAt
        - name
        - updatedAt
      type: object
      properties:
        assetId:
          type: string
          format: uuid
        name:
          type: string
        description:
          type: string
        currentVersion:
          type: integer
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        downloadUrl:
          type: string
          description: >
            Presigned GET URL, valid until `expiresAt`. Send no `Authorization`
            header - the

            signature is the credential.


            A `Content-Disposition: attachment` naming the asset is signed into
            the URL, so S3

            returns it on the response and a browser saves the file under the
            asset's name rather

            than the opaque S3 key. Because it is part of the signature it
            cannot be overridden by

            the caller. Every version of an asset downloads under the same name,
            so saving two

            versions to one directory will collide - rename client-side if that
            matters.
        expiresAt:
          type: string
          format: date-time
    ErrorResponse:
      required:
        - error_code
        - message
      type: object
      properties:
        error_code:
          type: string
          example: UNAUTHORIZED
        error_message:
          type: string
          example: ''
        message:
          type: string
          example: Missing authentication token
        sub_errors:
          type: array
          items:
            required:
              - code
              - message
            type: object
            properties:
              code:
                type: string
              message:
                type: string
  responses:
    Unauthorized:
      description: >-
        Unauthorized. This error occurs if the authentication token is missing
        or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    UnprocessableEntity:
      description: Invalid request (e.g. version out of retention, TTL above max).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      description: >
        Use a Bearer token for authentication. Submit the token using the
        `Authorization`

        header: `Authorization: Bearer <token>`.
      scheme: bearer
    openId:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: >-
            https://login.datalinks.com/realms/datalinks-realm/protocol/openid-connect/auth
          scopes:
            openid: openid

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.