openapi: 3.2.0
info:
title: Nasuni Data Service (NDS) AWS API
description: "# Overview\n\nWelcome to Nasuni Data Service (NDS) for AWS API Documentation.\n\nThis documentation describes the S3-compatible, read-only endpoints exposed via AWS S3 Object Lambda for accessing data stored in a Nasuni Volume.\n\n## Authentication\n\nThis API sits behind **AWS S3 Object Lambda**. Authenticate exactly as you would to S3:\n\n- **AWS Signature Version 4 (headers)** — Signed requests include:\n - `Authorization: AWS4-HMAC-SHA256 ...`\n - `X-Amz-Date: YYYYMMDD'T'HHMMSS'Z'`\n - `X-Amz-Content-Sha256: UNSIGNED-PAYLOAD`\n - `X-Amz-Security-Token` (when using temporary credentials)\n\n- **Presigned URLs** — Generated by AWS SDK/CLI. Credentials/signature appear as query params:\n `X-Amz-Algorithm`, `X-Amz-Credential`, `X-Amz-Date`, `X-Amz-Expires`,\n `X-Amz-SignedHeaders`, `X-Amz-Signature`, and optional `X-Amz-Security-Token`.\n\n## Available Operations\n* **ListObjects / ListObjectsV2**: List files in a volume.\n* **HeadObject**: Retrieve file metadata and headers.\n* **GetObject**: Download file content; supports single byte-range requests.\n"
termsOfService: https://www.nasuni.com/legal
contact:
name: Nasuni Support
url: https://www.nasuni.com/support
email: support@nasuni.com
license:
name: Nasuni
url: https://www.nasuni.com/legal
version: 1.1.0
security:
- awsSigV4: []
tags:
- name: Nasuni Data Service (NDS) AWS API
paths:
/:
get:
summary: ListObjects — list objects in a bucket (V1 Legacy)
description: 'Returns a list of objects (files) in the specified bucket (Nasuni volume) using the legacy S3 ListObjects API.
This is the legacy method for listing objects, using markers for pagination.
**Request example**:
```
GET /?prefix=documents/&max-keys=1000&marker=documents/old.txt
```
'
operationId: listObjects
parameters:
- $ref: '#/components/parameters/AwsAuthorizationHeader'
- $ref: '#/components/parameters/XAmzDateHeader'
- $ref: '#/components/parameters/XAmzContentSha256Header'
- $ref: '#/components/parameters/XAmzSecurityTokenHeader'
- name: prefix
in: query
required: false
schema:
type: string
description: Limits the response to keys that begin with the specified prefix
example: documents/2025/
- name: delimiter
in: query
required: false
schema:
type: string
maxLength: 1
description: 'Character used to group keys. Typically set to ''/'' to simulate directory hierarchy.
When specified, keys containing the delimiter after the prefix are rolled up into CommonPrefixes.
'
example: /
- name: max-keys
in: query
required: false
schema:
type: integer
minimum: 0
description: 'Maximum number of keys to return. If 0, returns an empty result.
Default and maximum are deployment-configured (commonly 1000).
'
- name: marker
in: query
required: false
schema:
type: string
description: Marker for pagination. Set to the key to start with when listing objects.
- name: encoding-type
in: query
required: false
schema:
type: string
enum:
- url
description: Requests URL encoding for object keys in the response.
responses:
'200':
description: Successful ListObjects (V1) response
content:
application/xml:
schema:
$ref: '#/components/schemas/ListBucketResultV1'
examples:
listObjectsV1:
summary: V1 response (with NextMarker)
value: "\n\n 6c19a28d-19cd-4876-ac90-1a2fe3a22426-1\n documents/\n /\n 1\n 1000\n true\n documents/videos/sample.mp4\n \n documents/readme.txt\n 2025-01-15T10:30:00.000Z\n \"abc123\"\n 512\n STANDARD\n \n \n documents/images/\n \n \n documents/videos/\n \n\n"
'403':
$ref: '#/components/responses/AccessDenied'
'404':
$ref: '#/components/responses/NoSuchBucket'
'424':
$ref: '#/components/responses/FailedDependency'
'500':
$ref: '#/components/responses/InternalError'
'501':
$ref: '#/components/responses/NotImplemented'
tags:
- Nasuni Data Service (NDS) AWS API
/{key}:
head:
summary: Get object metadata
description: 'Retrieves metadata about an object without returning the object content.
Returns standard S3 headers plus Nasuni-specific metadata as x-amz-meta-* headers.
'
operationId: headObject
parameters:
- $ref: '#/components/parameters/AwsAuthorizationHeader'
- $ref: '#/components/parameters/XAmzDateHeader'
- $ref: '#/components/parameters/XAmzContentSha256Header'
- $ref: '#/components/parameters/XAmzSecurityTokenHeader'
- name: key
in: path
required: true
schema:
type: string
description: The object key (file path within the volume)
example: documents/report.pdf
responses:
'200':
description: Object metadata retrieved successfully
headers:
Content-Length:
schema:
type: integer
description: Size of the object in bytes
example: 1048576
Content-Type:
schema:
type: string
description: MIME type of the object (guessed from file extension)
example: application/pdf
Last-Modified:
schema:
type: string
description: Date and time the object was last modified
example: Wed, 15 Jan 2025 10:30:00 GMT
ETag:
schema:
type: string
description: Entity tag for the object (quoted)
example: '"9bb58f26192e4ba00f01e2e7b136bbd8"'
x-amz-meta-nasuni-meta-chunked-info:
schema:
type: string
description: If present, a JSON dictionary that maps each metadata field that was split across multiple headers to the number of chunks it was split into.
example: 'x-amz-meta-nasuni-meta-chunked-info: {"large-metadata-value":2}, x-amz-meta-large-metadata-value-1: ..., x-amz-meta-large-metadata-value-2: ...'
x-amz-meta-nasuni-meta-trimmed:
schema:
type: string
description: If present and set to "true", indicates that the server omitted some custom metadata from the response because the total payload exceeded the allowed size.
x-amz-meta-handle:
schema:
type: string
description: Nasuni internal file handle
example: 3.uni8eF3bF59-1749497123-456
x-amz-meta-uid:
schema:
type: string
description: Unix user ID of file owner
example: '1000'
x-amz-meta-gid:
schema:
type: string
description: Unix group ID
example: '1000'
x-amz-meta-mode:
schema:
type: string
description: Unix file permissions (octal)
example: '0100644'
x-amz-meta-size:
schema:
type: string
description: File size in bytes
example: '1048576'
x-amz-meta-mtime:
schema:
type: string
description: Modification time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-ctime:
schema:
type: string
description: Change time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-atime:
schema:
type: string
description: Access time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-firsthandle:
schema:
type: string
description: First handle in the file version chain
example: 3.uni8eF3bF59-1749497123-1
'403':
description: Access denied or NDS disabled.
'404':
description: Object not found
'424':
description: Failed dependency (volume not accessible)
'500':
$ref: '#/components/responses/InternalError'
'501':
$ref: '#/components/responses/NotImplemented'
tags:
- Nasuni Data Service (NDS) AWS API
get:
summary: Get object content
description: 'Downloads the content of an object from the bucket.
## Range Requests
Supports HTTP range requests for partial file downloads. Use the `Range` header to specify byte ranges.
## Size Limitations
Files exceeding the configured maximum size limit of 2 GiB will return a 416 error with code `InvalidRange`.
## Response Headers
The response includes all headers from HeadObject plus content-specific headers.
'
operationId: getObject
parameters:
- $ref: '#/components/parameters/AwsAuthorizationHeader'
- $ref: '#/components/parameters/XAmzDateHeader'
- $ref: '#/components/parameters/XAmzContentSha256Header'
- $ref: '#/components/parameters/XAmzSecurityTokenHeader'
- name: key
in: path
required: true
schema:
type: string
description: The object key (file path within the volume)
- name: Range
in: header
required: false
schema:
type: string
description: 'HTTP Range header for partial object retrieval.
Format: `bytes=start-end` where start and end are 0-based byte offsets.
Multiple ranges are not supported.
'
example: bytes=0-1023
responses:
'200':
description: Object retrieved successfully (full content)
headers:
Content-Length:
schema:
type: integer
description: Size of the returned content
Content-Type:
schema:
type: string
description: MIME type of the object
Last-Modified:
schema:
type: string
description: Date and time the object was last modified
ETag:
schema:
type: string
description: Entity tag for the object
x-amz-meta-nasuni-meta-chunked-info:
schema:
type: string
description: If present, a JSON dictionary that maps each metadata field that was split across multiple headers to the number of chunks it was split into.
example: 'x-amz-meta-nasuni-meta-chunked-info: {"large-metadata-value":2}, x-amz-meta-large-metadata-value-1: ..., x-amz-meta-large-metadata-value-2: ...'
x-amz-meta-nasuni-meta-trimmed:
schema:
type: string
description: If present and set to "true", indicates that the server omitted some custom metadata from the response because the total payload exceeded the allowed size.
x-amz-meta-handle:
schema:
type: string
description: Nasuni internal file handle
example: 3.uni8eF3bF59-1749497123-456
x-amz-meta-uid:
schema:
type: string
description: Unix user ID of file owner
example: '1000'
x-amz-meta-gid:
schema:
type: string
description: Unix group ID
example: '1000'
x-amz-meta-mode:
schema:
type: string
description: Unix file permissions (octal)
example: '0100644'
x-amz-meta-size:
schema:
type: string
description: File size in bytes
example: '1048576'
x-amz-meta-mtime:
schema:
type: string
description: Modification time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-ctime:
schema:
type: string
description: Change time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-atime:
schema:
type: string
description: Access time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-firsthandle:
schema:
type: string
description: First handle in the file version chain
example: 3.uni8eF3bF59-1749497123-1
content:
'*/*':
schema:
type: string
format: binary
examples:
textFile:
summary: Text file content
value: This is the content of the file.
'206':
description: Partial content returned (range request successful)
headers:
Content-Range:
schema:
type: string
description: The byte range returned
example: bytes 0-1023/1048576
Content-Length:
schema:
type: integer
description: Size of the partial content returned
Last-Modified:
schema:
type: string
description: Date and time the object was last modified
ETag:
schema:
type: string
description: Entity tag for the object
x-amz-meta-nasuni-meta-chunked-info:
schema:
type: string
description: If present, a JSON dictionary that maps each metadata field that was split across multiple headers to the number of chunks it was split into.
example: 'x-amz-meta-nasuni-meta-chunked-info: {"large-metadata-value":2}, x-amz-meta-large-metadata-value-1: ..., x-amz-meta-large-metadata-value-2: ...'
x-amz-meta-nasuni-meta-trimmed:
schema:
type: string
description: If present and set to "true", indicates that the server omitted some custom metadata from the response because the total payload exceeded the allowed size.
x-amz-meta-handle:
schema:
type: string
description: Nasuni internal file handle
example: 3.uni8eF3bF59-1749497123-456
x-amz-meta-uid:
schema:
type: string
description: Unix user ID of file owner
example: '1000'
x-amz-meta-gid:
schema:
type: string
description: Unix group ID
example: '1000'
x-amz-meta-mode:
schema:
type: string
description: Unix file permissions (octal)
example: '0100644'
x-amz-meta-size:
schema:
type: string
description: File size in bytes
example: '1048576'
x-amz-meta-mtime:
schema:
type: string
description: Modification time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-ctime:
schema:
type: string
description: Change time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-atime:
schema:
type: string
description: Access time (ISO 8601)
example: '2025-01-15T10:30:00.000Z'
x-amz-meta-firsthandle:
schema:
type: string
description: First handle in the file version chain
example: 3.uni8eF3bF59-1749497123-1
content:
'*/*':
schema:
type: string
format: binary
'403':
$ref: '#/components/responses/AccessDenied'
'404':
$ref: '#/components/responses/NoSuchKey'
'416':
description: Range not satisfiable
content:
application/xml:
schema:
$ref: '#/components/schemas/Error'
examples:
invalidRange:
summary: File size exceeds limit
value: "\n\n InvalidRange\n File exceeds max size of 2147483648 bytes\n\n"
'424':
$ref: '#/components/responses/FailedDependency'
'500':
$ref: '#/components/responses/InternalError'
'501':
$ref: '#/components/responses/NotImplemented'
tags:
- Nasuni Data Service (NDS) AWS API
components:
schemas:
Object:
type: object
xml:
name: Contents
properties:
Key:
type: string
description: Object key (file path)
LastModified:
type: string
format: date-time
description: Last modification time
ETag:
type: string
description: Entity tag (always quoted)
Size:
type: integer
format: int64
description: Size in bytes
StorageClass:
type: string
enum:
- STANDARD
description: Storage class (always STANDARD for NDS)
Error:
type: object
xml:
name: Error
properties:
Code:
type: string
description: Error code
Message:
type: string
description: Human-readable error message
Resource:
type: string
description: Resource related to the error
RequestId:
type: string
description: Unique request identifier
ListBucketResultBase:
type: object
xml:
name: ListBucketResult
properties:
Name:
type: string
description: Name of the bucket
Prefix:
type: string
description: Keys that begin with the indicated prefix
Delimiter:
type: string
description: Delimiter used for grouping
MaxKeys:
type: integer
description: Maximum number of keys returned
KeyCount:
type: integer
description: Number of keys returned in this result
IsTruncated:
type: string
enum:
- 'true'
- 'false'
description: Whether additional keys exist beyond MaxKeys
EncodingType:
type: string
enum:
- url
description: Encoding type applied to object keys
Contents:
type: array
xml:
wrapped: false
items:
$ref: '#/components/schemas/Object'
CommonPrefixes:
type: array
xml:
wrapped: false
items:
type: object
properties:
Prefix:
type: string
ListBucketResultV1:
allOf:
- $ref: '#/components/schemas/ListBucketResultBase'
- type: object
properties:
NextMarker:
type: string
description: Marker for next page (ListObjects only)
responses:
AccessDenied:
description: Access denied or NDS disabled
content:
application/xml:
schema:
$ref: '#/components/schemas/Error'
examples:
ndsNotLicensed:
summary: NDS not available in license
value: "\n\n NDSDisabled\n NDS is not available in your license\n\n"
ndsDisabledConfig:
summary: NDS disabled in configuration
value: "\n\n NDSDisabled\n NDS is available in your license but is disabled or misconfigured\n\n"
FailedDependency:
description: Volume not accessible (not shared or missing TOC)
content:
application/xml:
schema:
$ref: '#/components/schemas/Error'
example: "\n\n FailedDependency\n Volume requires Remote Access enabled and at least one snapshot\n\n"
InternalError:
description: Internal server error
content:
application/xml:
schema:
$ref: '#/components/schemas/Error'
example: "\n\n InternalError\n Unexpected error.\n\n"
application/octet-stream:
schema:
type: string
description: May be empty depending on operation.
NoSuchBucket:
description: The specified bucket does not exist
content:
application/xml:
schema:
$ref: '#/components/schemas/Error'
example: "\n\n NoSuchBucket\n The specified bucket does not exist\n\n"
NoSuchKey:
description: The specified key does not exist
content:
application/xml:
schema:
$ref: '#/components/schemas/Error'
example: "\n\n NoSuchKey\n The specified key does not exist.\n\n"
NotImplemented:
description: Not Implemented - Operation not supported by NDS
content:
application/xml:
schema:
$ref: '#/components/schemas/Error'
example: "\n\n NotImplemented\n The specified operation is not supported by NDS\n\n"
parameters:
AwsAuthorizationHeader:
name: Authorization
in: header
required: false
description: 'AWS Signature Version 4 authorization header.
Omit when using a presigned URL.
'
schema:
type: string
example: AWS4-HMAC-SHA256 Credential=AKIA.../20250115/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=0123456789abcdef...
XAmzSecurityTokenHeader:
name: X-Amz-Security-Token
in: header
required: false
description: Session token when using temporary credentials (STS/role).
schema:
type: string
XAmzDateHeader:
name: X-Amz-Date
in: header
required: false
description: ISO8601 timestamp used by SigV4, e.g. 20250115T103000Z. Omit with presigned URLs.
schema:
type: string
example: 20250115T103000Z
XAmzContentSha256Header:
name: X-Amz-Content-Sha256
in: header
required: false
description: 'For GET/HEAD, S3 commonly uses `UNSIGNED-PAYLOAD`.
SDKs set this automatically. Omit with presigned URLs.
'
schema:
type: string
example: UNSIGNED-PAYLOAD
securitySchemes:
awsSigV4:
type: apiKey
in: header
name: Authorization
description: AWS Signature Version 4. Presigned URLs also supported.