---
title: DeleteObject · S3 API
description: Deletes an object, or one version of an object.
doc_version: 0.1.0-preview
last_updated: 2026-09-14
---

# DeleteObject

`DELETE /{bucket}/{key}`

Deletes an object, or one version of an object.

Without versionId, storage removes the object. In a bucket with versioning on, it adds a delete marker and keeps the versions. With versionId, storage removes that version for good.

- Role: Editor or higher.
- Support: supported.
- Auth: AWS Signature Version 4 with your API key. See [S3 API](/api/s3.md).
- With versionId, removes that version. In a versioned bucket, adds a delete marker.
- A key with no object returns `404 NoSuchKey`. Amazon S3 returns `204` for a missing key.
- A version under object lock retention cannot be deleted before its retain-until date.

## Example request

```http
DELETE /support-tickets/a.json HTTP/1.1
Host: wspq7ws2np5l8z4.storage.beta.graphon.sh
x-amz-date: 20261007T093000Z
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Authorization: AWS4-HMAC-SHA256 Credential=<ACCESS_KEY_ID>/20261007/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=<SIGNATURE>
```

## Path parameters

- `bucket` (string, required): The bucket name.
- `key` (string, required): The object key. Keep each `/` as it is. Percent-encode the other reserved characters.

## Query parameters

- `versionId` (string, optional): Remove this version for good.

## Headers

- `x-amz-expected-bucket-owner` (string, optional): The workspace ID that must own the bucket. Another owner returns `403 AccessDenied`.

## Responses

### 204 · No Content

Storage deleted the object, or added a delete marker.

Response headers:

- `x-amz-version-id` (string, optional): The version that the delete removed or created.
- `x-amz-delete-marker` (boolean, optional): `true` when the delete added a delete marker.

```http
HTTP/1.1 204 No Content
x-amz-version-id: ver_1a2b3c4d5e6f47a8b9c0d1e2f3a4b5c6
x-amz-delete-marker: true
x-amz-request-id: 4F8A2C7D1E6B4093A5C2D8E1F7B3A960
```

## Errors

Any request can also get the common errors on [S3 API](/api/s3.md).

### 404 · `NoSuchKey`

The bucket has no object at this key, or no version with this versionId.

Check the key and the versionId.

### 404 · `NoSuchBucket`

No bucket has this name, or the bucket was deleted.

Check the bucket name. ListBuckets shows the buckets of the workspace.

### 403 · `AccessDenied`

The key does not have the Editor role, or the version is under object lock retention.

Use an Editor key. A retained version stays until its retain-until date.

## Other request languages

### aws CLI

```bash
# The graphon profile from the S3 API overview.
export AWS_PROFILE=graphon

aws s3 rm s3://support-tickets/a.json
```

### Python (boto3)

```python
# Replace wspq7ws2np5l8z4 with your workspace ID.
import os

import boto3
from botocore.config import Config

api_key = os.environ["GRAPHON_API_KEY"]
access_key_id = api_key.split("_", 1)[1].split(".")[0]

s3 = boto3.client(
    "s3",
    endpoint_url="https://wspq7ws2np5l8z4.storage.beta.graphon.sh",
    region_name="us-east-1",
    aws_access_key_id=access_key_id,
    aws_secret_access_key=api_key,
    config=Config(signature_version="s3v4", s3={"addressing_style": "path"}),
)

response = s3.delete_object(
    Bucket="support-tickets",
    Key="a.json",
)
print(response["ResponseMetadata"]["HTTPStatusCode"])
```

### JavaScript (AWS SDK)

```javascript
// Replace wspq7ws2np5l8z4 with your workspace ID.
import { S3Client, DeleteObjectCommand } from '@aws-sdk/client-s3';

const apiKey = process.env.GRAPHON_API_KEY;
if (!apiKey) throw new Error('Set GRAPHON_API_KEY.');
const accessKeyId = apiKey.split('_')[1].split('.')[0];

const s3 = new S3Client({
  endpoint: 'https://wspq7ws2np5l8z4.storage.beta.graphon.sh',
  region: 'us-east-1',
  forcePathStyle: true,
  credentials: { accessKeyId, secretAccessKey: apiKey },
});

const response = await s3.send(new DeleteObjectCommand({
  Bucket: 'support-tickets',
  Key: 'a.json',
}));
console.log(response.$metadata.httpStatusCode);
```

## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
