flye.win

CDN

v1 stable

Image hosting with public links, organized in projects and folders.

base url https://flye.win/v1/cdn

overview

Upload images up to 100 MB and get a public link ready for your site, app or bot. Organize them in projects and folders, track your storage and manage everything from the dashboard too. Each project is yours alone: other accounts can't list, reach through the API or delete what you uploaded.

Authentication, error format, and limits are the same across all APIs. See the general docs.

plans

Starter

Black Friday

US$ 2.89 first month

US$ 3.59 · then US$ 3.59/mo

until Nov 30, 2026

For small sites and bots.

quota/month
20,000
req/min
60
  • 5 GB of storage
  • Files up to 20 MB
  • Up to 5 projects
  • 20,000 requests / month
  • Unlimited image views

Pro

Black Friday

US$ 5.29 first month

US$ 9.09 · then US$ 9.09/mo

until Nov 30, 2026

For stores and production apps.

quota/month
500,000
req/min
300
  • 50 GB of storage
  • Files up to 50 MB
  • Up to 25 projects
  • 500,000 requests / month
  • Unlimited image views

Business

Black Friday

US$ 45.59 first month

US$ 54.89 · then US$ 54.89/mo

until Nov 30, 2026

No limits on storage, requests or projects.

quota/month
unlimited
req/min
1,200
  • Unlimited storage
  • Unlimited monthly requests
  • Unlimited projects
  • Files up to 100 MB
  • Unlimited image views
  • Priority support
Get a key

Use a test key (flye_test_…): it answers with the examples, without using quota or needing a plan. The key stays in this browser tab only and is never sent to our site.

POST /v1/cdn/upload — Upload an image

Uploads one image as multipart/form-data. The project is created the first time you use it. Accepts jpg, jpeg, png, gif, webp, svg, up to your plan's per-file limit. The type is checked from the file's content, and SVG with scripts or external links is rejected.

parameterintypedescription
image* form file The file. Also accepted under the name file.
project* form string Project name: letters, numbers, - and _, up to 48 characters. Uppercase becomes lowercase.
folder form string Folder inside the project, optional, with the same rules as the name.
curl -X POST "https://flye.win/v1/cdn/upload" \
  -H "Authorization: Bearer $FLYE_KEY" \
  -F "[email protected]" \
  -F "project=loja" \
  -F "folder=produtos"

response · 200

{
  "id": "6f1c2a9e-4b7d-4e1a-9c3f-2d8b7a6e5f40",
  "project": "loja",
  "folder": "produtos",
  "filename": "1743580800000000000.jpg",
  "original_name": "tenis-azul.jpg",
  "url": "https://cdn.flye.win/images/fw_9c41d2e07ab3f5168e2d/produtos/1743580800000000000.jpg",
  "size": 204800,
  "content_type": "image/jpeg",
  "created_at": "2026-11-02T13:30:00Z"
}
Try it now
The call goes from your browser straight to the API.
GET /v1/cdn/projects — List projects

Lists your account's projects, with the image count and storage used by each.

curl "https://flye.win/v1/cdn/projects" \
  -H "Authorization: Bearer $FLYE_KEY"

response · 200

{
  "projects": [
    { "name": "loja", "images": 128, "bytes": 52428800, "created_at": "2026-10-01T12:00:00Z" }
  ]
}
Try it now
The call goes from your browser straight to the API.
POST /v1/cdn/projects — Create a project

Creates an empty project. Optional: uploading already creates the project when it doesn't exist.

parameterintypedescription
name* body string Project name.
curl -X POST "https://flye.win/v1/cdn/projects" \
  -H "Authorization: Bearer $FLYE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"loja"}'

response · 200

{ "name": "loja", "images": 0, "bytes": 0, "created_at": "2026-11-02T13:30:00Z" }
Try it now
The call goes from your browser straight to the API.
GET /v1/cdn/projects/{project} — List images

Lists the project's images, newest first, and the folders it has.

parameterintypedescription
project* path string Project name.
folder query string Only this folder's images. Without it, every image in the project. Use / for only those outside folders.
page query integer Page, starting at 1.
per_page query integer Items per page, 1 to 100. Defaults to 20.
curl "https://flye.win/v1/cdn/projects/loja?folder=produtos&page=1" \
  -H "Authorization: Bearer $FLYE_KEY"

response · 200

{
  "project": "loja",
  "folders": [{ "name": "produtos", "images": 96 }],
  "images": [{
    "id": "6f1c2a9e-4b7d-4e1a-9c3f-2d8b7a6e5f40",
    "project": "loja",
    "folder": "produtos",
    "filename": "1743580800000000000.jpg",
    "original_name": "tenis-azul.jpg",
    "url": "https://cdn.flye.win/images/fw_9c41d2e07ab3f5168e2d/produtos/1743580800000000000.jpg",
    "size": 204800,
    "content_type": "image/jpeg",
    "created_at": "2026-11-02T13:30:00Z"
  }],
  "pagination": { "page": 1, "per_page": 20, "total": 96, "total_pages": 5 }
}
Try it now
The call goes from your browser straight to the API.
GET /v1/cdn/images/{id} — Image details

Returns one of your images by the id returned on upload.

parameterintypedescription
id* path string Image id.
curl "https://flye.win/v1/cdn/images/6f1c2a9e-4b7d-4e1a-9c3f-2d8b7a6e5f40" \
  -H "Authorization: Bearer $FLYE_KEY"

response · 200

{
  "id": "6f1c2a9e-4b7d-4e1a-9c3f-2d8b7a6e5f40",
  "project": "loja",
  "folder": "produtos",
  "filename": "1743580800000000000.jpg",
  "original_name": "tenis-azul.jpg",
  "url": "https://cdn.flye.win/images/fw_9c41d2e07ab3f5168e2d/produtos/1743580800000000000.jpg",
  "size": 204800,
  "content_type": "image/jpeg",
  "created_at": "2026-11-02T13:30:00Z"
}
Try it now
The call goes from your browser straight to the API.
DELETE /v1/cdn/images/{id} — Delete an image

Deletes the image and frees the space right away. The link stops working within moments.

parameterintypedescription
id* path string Image id.
curl -X DELETE "https://flye.win/v1/cdn/images/6f1c2a9e-4b7d-4e1a-9c3f-2d8b7a6e5f40" \
  -H "Authorization: Bearer $FLYE_KEY"

response · 200

{ "deleted": true, "id": "6f1c2a9e-4b7d-4e1a-9c3f-2d8b7a6e5f40" }
Try it now
The call goes from your browser straight to the API.
DELETE /v1/cdn/projects/{project} — Delete a project

Deletes the project with all its images and frees the space right away. This can't be undone.

parameterintypedescription
project* path string Project name.
curl -X DELETE "https://flye.win/v1/cdn/projects/loja" \
  -H "Authorization: Bearer $FLYE_KEY"

response · 200

{ "deleted": true, "project": "loja", "images": 128 }
Try it now
The call goes from your browser straight to the API.
GET /v1/cdn/usage — Storage and limits

Shows the storage used, your plan's limits and the largest file accepted. A null limit means unlimited.

curl "https://flye.win/v1/cdn/usage" \
  -H "Authorization: Bearer $FLYE_KEY"

response · 200

{
  "storage": { "used_bytes": 52428800, "limit_bytes": 5368709120 },
  "max_file_bytes": 20971520,
  "images": 128,
  "projects": { "used": 1, "limit": 5 }
}
Try it now
The call goes from your browser straight to the API.

Are you sure?