---
title: "Copy Storage File By Ref"
method: POST
path: "/api/storage/copy"
tags: ["Files"]
---

# Copy Storage File By Ref

`POST /api/storage/copy`

## Request

- Base URL: `https://api.agentstack.tech` (the document declares no server; this is the origin it was published from)
- URL: `https://api.agentstack.tech/api/storage/copy`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Copy an existing storage object (temp or permanent, any owner) into the caller's permanent storage.

Source is identified by ids (no external URLs) to avoid SSRF / arbitrary file copy.

## Query parameters

- `project_id` integer, nullable
- `scope` 'user' | 'project': user = member row (P, caller); project = project row (P, 0).

## Headers

- `Idempotency-Key` string

## Request body

- CopyBody
  - `source` CopySourceBody, required
    - `owner_id` integer, required: DNA user id of the source file owner
    - `file_id` string, required
    - `is_temp` boolean: True for temp storage, false for permanent
    - `folder_key` string, nullable: Permanent source folder key (required when is_temp=false)
  - `target_folder` string: Target folder key in the caller's permanent storage

## Response `200`

Successful Response

- unknown

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `422`: Validation Error
- `429`: Too Many Requests
- `500`: Internal Server Error

---

[API](https://skmtc.dev/agentstack/apis/agentstack-core-api.md) · [All operations](https://skmtc.dev/agentstack/apis/agentstack-core-api/llms.txt) · [OpenAPI document](https://skmtc.dev/agentstack/apis/agentstack-core-api/revisions/8ecf3406e74a?raw)
