---
title: "Get a form's upload destination"
method: GET
path: "/api/v1/manage/forms/{form}/storage"
tags: ["Storage"]
---

# Get a form's upload destination

`GET /api/v1/manage/forms/{form}/storage`

## Request

- Base URL: `https://fillo.so`
- URL: `https://fillo.so/api/v1/manage/forms/{form}/storage`
- Auth: HTTP bearer

Where this form's uploads land: the destination pinned on the form, the stored record, and what an upload would `resolve` to right now (including Fillo's short-lived transit staging). Scope: storage:manage.

## Path parameters

- `form` string, required

## Response `200`

The form's storage destination.

- FormStorage
  - `destination` 'gdrive' | 'box' | 's3' | 'r2' | 'none', required: The destination pinned on the form. `none` means the form follows the workspace default.
  - `storage` object, nullable, required: The stored destination record: provider (gdrive, box, or s3), an optional r2 variant, and any selected Drive folder.
  - `resolved` 'gdrive' | 's3' | 'box' | 'transit' | 'null', nullable, required: Where an upload would actually land right now — including Fillo's short-lived transit staging. null means uploads are blocked.

## Other responses

- `400`: Invalid request (e.g. a body on a GET/DELETE, or a missing required query parameter).
- `401`: Missing, malformed, unknown, revoked, or expired key.
- `403`: The key is valid but lacks the required scope.
- `404`: No such resource in this project (returned instead of 403 for ids in other projects).
- `429`: Per-key (120/min), per-workspace (240/min), or per-IP (300/min) rate limit exceeded. Retry after the Retry-After header.

---

[API](https://skmtc.dev/fillo/apis/fillo-management-api.md) · [All operations](https://skmtc.dev/fillo/apis/fillo-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fillo/apis/fillo-management-api/revisions/867f943f04f5?raw)
