---
title: "Copy a public URL into FilePost"
method: POST
path: "/v1/upload/url"
tags: ["Files"]
---

# Copy a public URL into FilePost

`POST /v1/upload/url`

## Request

- Base URL: `https://filepost.dev` (the document declares no server; this is the origin it was published from)
- URL: `https://filepost.dev/v1/upload/url`
- Auth: none declared

Download a public http or https URL and store it as a permanent FilePost file. This endpoint requires an API key from a verified account. It rejects private or reserved network destinations, revalidates every redirect, allows only ports 80 and 443, and applies the account's normal upload, file-size, storage, and rate limits.

## Headers

- `X-API-Key` string, nullable

## Request body

- UrlUploadRequest
  - `url` string, required: Public http or https URL to download and store in FilePost.
  - `filename` string, nullable: Optional stored filename. Defaults to the final source URL path.
  - `content_type` string, nullable: Optional MIME type override. Defaults to the source response Content-Type.
  - `expires_in` string, nullable: Optional auto-delete period, such as 30s, 24h, or 7d.
  - `filename_mode` 'download' | 'public', nullable: Override the account default. 'download' keeps the filename out of the public URL; 'public' includes it.

## Response `200`

Successful Response

- UploadResponse
  - `file_id` string, required: Stable FilePost file ID.
  - `url` string, required: Public CDN URL. Anyone with this URL can view/download the file without a FilePost account.
  - `name` string, required: Original filename.
  - `size` integer, required: Decoded file size in bytes.
  - `content_type` string, required: Stored MIME type.
  - `expires_at` string, nullable: UTC expiry timestamp when the file is temporary; otherwise null.
  - `provisional` boolean: True when email verification is required before the file becomes permanent.
  - `filename_mode` 'download' | 'public', required: Effective filename visibility mode used for this upload.
  - `quota` QuotaAdvisoryResponse
    - `code` 'monthly_upload_limit_approaching' | 'monthly_upload_limit_reached', required
    - `urgency` 'warning' | 'high' | 'critical' | 'blocked', required
    - `message` string, required
    - `used` integer, required
    - `limit` integer, required
    - `remaining` integer, required
    - `reset_at` string, required
    - `upgrade` QuotaUpgradeResponse
      - `plan` string, required
      - `url` string, required
      - `promotion_code` string, required
      - `offer` string, required
      - `uploads_per_month` integer, required
      - `benefits` QuotaUpgradeBenefitsResponse, required
        - `uploads_per_month` integer, required
        - `additional_uploads_per_month` integer, required
        - `max_file_size_mb` integer, required
        - `additional_file_size_mb` integer, required
        - `storage` string, required
        - `max_intake_links` integer, required
        - `rate_limit` string, required
        - `monthly_price_usd` integer, required
        - `annual_price_usd` integer, required
      - `action` QuotaActionResponse, required
        - `label` string, required
        - `method` 'POST', required
        - `url` string, required
        - `auth_header` 'X-API-Key', required
      - `alternative` QuotaUpgradeAlternativeResponse
        - `plan` string, required
        - `offer` string, required
        - `uploads_per_month` integer, required
        - `action` QuotaActionResponse, required
          - `label` string, required
          - `method` 'POST', required
          - `url` string, required
          - `auth_header` 'X-API-Key', required
    - `next_action` QuotaNextActionResponse
      - `code` string, required
      - `message` string, required
    - `action` QuotaActionResponse
      - `label` string, required
      - `method` 'POST', required
      - `url` string, required
      - `auth_header` 'X-API-Key', required
    - `action_reason` 'lite_trial' | 'paid_upgrade', nullable
    - `action_benefit` string, nullable
  - `conversion` ConversionOfferResponse
    - `code` 'lite_trial_available' | 'lite_trial_active', required
    - `message` string, required
    - `action_url` string, required
    - `action` object, nullable
    - `lite_trial` object, required
  - `journey` JourneyResponse
    - `stage` 'first_value' | 'repeat_value' | 'returning_workflow', required
    - `upload_index` integer, required
    - `workflow_source` string, required
    - `title` string, required
    - `message` string, required
    - `action_label` string, required
    - `action_url` string, required
    - `suggested_tool` string, nullable: Dashboard uploads only: the tool to highlight for repeating this upload.

## Other responses

- `422`: Validation Error

---

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