---
title: "Update a storage destination"
method: PATCH
path: "/v1/storage-destinations/{destination_id}"
tags: ["Storage"]
---

# Update a storage destination

`PATCH /v1/storage-destinations/{destination_id}`

## Request

- Base URL: `https://api-eu.dynamicdocumentapi.com`
- URL: `https://api-eu.dynamicdocumentapi.com/v1/storage-destinations/{destination_id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Partial update. `provider` is immutable — create a new destination to change it.

## Path parameters

- `destination_id` string, required

## Request body

- PatchedStorageDestinationWrite
  - `config` object
  - `credentials` object: Never returned again; send it only when it changes.
  - `is_default` boolean
  - `keep_hosted_copy` boolean
  - `name` string
  - `path_template` string
  - `provider` 's3' | 's3_compatible' | 'azure_blob' | 'gcs' | 'sftp': * `s3` - Amazon S3 * `s3_compatible` - S3-compatible * `azure_blob` - Azure Blob Storage * `gcs` - Google Cloud Storage * `sftp` - SFTP

## Response `200`

- StorageDestination
  - `config` object, required: Provider settings: bucket, region, endpoint, prefix, …; for SFTP host, port, username, prefix and host_key.
  - `created_at` string, date-time, required
  - `credentials` object, required: Write-only: reads return `{"configured": true|false}`.
  - `id` string, required: `dst_…`
  - `is_default` boolean, required
  - `keep_hosted_copy` boolean, required
  - `last_test` StorageLastTest, required
    - `at` string, date-time, nullable, required
    - `error` string, nullable, required
    - `status` 'succeeded' | 'failed' | 'null', nullable, required: * `succeeded` - succeeded * `failed` - failed
  - `name` string, required
  - `object` string
  - `path_template` string, required: Jinja path for uploaded files.
  - `provider` 's3' | 's3_compatible' | 'azure_blob' | 'gcs' | 'sftp', required: * `s3` - Amazon S3 * `s3_compatible` - S3-compatible * `azure_blob` - Azure Blob Storage * `gcs` - Google Cloud Storage * `sftp` - SFTP
  - `updated_at` string, date-time, required

## Other responses

- `400`: Invalid request body (`errors[]` with JSON pointers).
- `401`: Missing, invalid, expired or revoked credentials.
- `403`: Insufficient scope, IP not allowed, workspace suspended or scheduled for deletion, or email not verified.
- `404`: Storage destination not found.
- `429`: Rate limited (`Retry-After`).
- `503`: The control plane is unreachable (`Retry-After`).

---

[API](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api.md) · [All operations](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dynamicdocumentapi/apis/dynamic-document-api/revisions/0f14bc0000f4?raw)
