---
title: "Platform Storage Move To Kind"
method: POST
path: "/api/internal/platform/storage/move-to-kind"
tags: ["internal"]
---

# Platform Storage Move To Kind

`POST /api/internal/platform/storage/move-to-kind`

## Request

- Base URL: `https://api.tintin-x.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tintin-x.com/api/internal/platform/storage/move-to-kind`
- Auth: none declared

Reparent an existing `storage_files` row into a different
`Apps/<App Title>[/<new_kind>]/` folder, WITHOUT moving the S3 object.

Used by per-app backends that want to reorganize files after upload —
e.g. nail-art's `/submit` route moves user-uploaded `hand` / `nail_set`
files into a `job-{id}/inputs/` folder once a job_id is known.

The S3 key stays put (so presigned URLs already minted against it
keep working through the move); only `storage_files.folder_id` +
`storage_files.metadata_.kind` change. `new_kind` may contain `/`
so apps can move into a nested per-job tree in one call.

Idempotent — if the file is already in the target folder, returns
`moved=false`. Otherwise creates the destination folder chain (if
needed) and updates the row in one transaction.

Internal-key auth. Caller supplies `app_slug` + `installation_id`
so we can scope-check ownership (file must belong to the install's
user / team).

## Response `200`

Successful Response

- unknown

---

[API](https://skmtc.dev/tintin-x/apis/tintin-api.md) · [All operations](https://skmtc.dev/tintin-x/apis/tintin-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tintin-x/apis/tintin-api/revisions/8839a8d0a66c?raw)
