---
title: "Test a storage destination"
method: POST
path: "/v1/storage-destinations/{destination_id}/test"
tags: ["Storage"]
---

# Test a storage destination

`POST /v1/storage-destinations/{destination_id}/test`

## Request

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

Writes, reads back and deletes a small probe object from the region that owns the workspace. `200` with `ok: false` means the credentials or the bucket policy are wrong — `steps[]` says which check failed. The result is also stored as `last_test`.

## Path parameters

- `destination_id` string, required

## Headers

- `Idempotency-Key` string

## Response `200`

The probe ran; check `ok`.

- StorageTest
  - `destination` StorageDestination, required
    - `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
  - `host_key` string: SFTP: the SHA-256 fingerprint of the host key the server showed (`SHA256:…`). When it isn't `config.host_key`, the `host_key` step fails; update `config.host_key` once you checked it.
  - `object` string
  - `ok` boolean, required
  - `steps` StorageTestStep[], required
    - `detail` string, nullable
    - `name` string, required: e.g. `credentials`, `write`, `read`, `delete`; SFTP starts with `connect` and `host_key`.
    - `ok` boolean, 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)
