my-storage-api

$npx mdskill add myapihq/myapi/my-storage-api

Upload or ingest files to edge-hosted asset storage with stable CDN URLs.

  • Upload local images or files via multipart or fetch from a public URL.
  • Depends on edge CDN infrastructure and optional myimageapi integration.
  • Accepts specific file types; for others, recommends ingest from public URL.
  • Returns a permanent public CDN URL for embedding in pages or emails.

SKILL.md

.github/skills/my-storage-apiView on GitHub ↗
---
name: my-storage-api
version: 1.0.0
description: >
  Edge-hosted asset storage. Upload local files (.png/.jpg/.gif/.webp) directly, or have the server fetch from a public URL. Each asset gets a stable public CDN URL.
triggers: [storage, upload, ingest, asset, cdn, image hosting, file upload, get-url, download, public url]
checksum: sha256-pending
---

# MyStorageAPI

Per-org asset storage with edge CDN delivery. Two ways in: direct upload (local file → multipart) or ingest (server fetches a public URL). Both produce a stable public URL like `https://api.mystorageapi.com/storage/<id>`.

## Capabilities
<!-- llm:start -->
Storage is the asset layer. Anything you upload or ingest is served from the edge under a permanent public URL — embed it in funnel pages, email templates, anywhere.

`upload` accepts `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.svg`, `.pdf`, `.mp4`, `.webm` from the local filesystem. For any other extension, host the file somewhere public and use `ingest` instead — the server fetches it for you.

Generated images from **myimageapi** automatically land here; they appear in `storage list` under their job id.

Use `get` for a round-trip metadata fetch. Use `get-url` when you just need the URL — it's a pure local URL constructor (no API call, no auth, no rate limit), perfect for piping to curl or embedding into HTML.
<!-- llm:end -->

## Commands
<!-- generated:start -->
| Command | What it does |
|---|---|
| `myapi storage list` | List all stored assets |
| `myapi storage upload <file>` | Direct multipart upload of a local file (image/svg/pdf/mp4/webm) |
| `myapi storage ingest <url>` | Server fetches a public URL into storage |
| `myapi storage get <asset_id>` | Round-trip the API for full metadata (`--json` or human block) |
| `myapi storage get-url <asset_id>` | Pure local URL constructor — no API call, no auth |
| `myapi storage delete <asset_id>` | Permanently delete the asset |
<!-- generated:end -->

## Examples
<!-- llm:start -->
```bash
# Direct upload of a local image
myapi storage upload ./logo.png --name "brand-logo"

# Ingest a remote file (server pulls it down)
myapi storage ingest https://example.com/hero.jpg --name "hero"

# Inspect
myapi storage list
myapi storage get <asset_id>

# Embed the URL — no API call, perfect for scripts
URL=$(myapi storage get-url <asset_id>)
echo "<img src=\"$URL\" />"
curl -O "$URL"

# Clean up
myapi storage delete <asset_id>
```
<!-- llm:end -->

## Upload vs Ingest

- **`upload`** — file is on your machine. Multipart POST. Supported extensions: `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.svg`, `.pdf`, `.mp4`, `.webm`.
- **`ingest`** — file is at a public HTTP(S) URL. Server downloads and stores. Useful for migrating assets, pulling in third-party files you have rights to, or for extensions `upload` doesn't accept.

Both produce identical asset records — `list` doesn't distinguish.

## `get` vs `get-url`

- **`get <id>`** — round-trips the API. Returns name, URL, created_at. Honors `--json`. Use when you want metadata.
- **`get-url <id>`** — local URL constructor. No API call, no auth, no rate limit. Output is exactly `https://api.mystorageapi.com/storage/<id>` (or whatever `MYAPI_STORAGE_URL` is set to). Use to embed URLs into HTML, pipe to curl, or build download links cheaply.

## Notes

- Assets are public by default — don't store sensitive files.
- Delete is immediate and unrecoverable — run `myapi storage list` first to confirm the asset, pass `--org` explicitly, and pass `--yes` in non-interactive runs.
- The URL is permanent until you `myapi storage delete <id>` — embed it freely.

Run `myapi storage --help` for full flag reference.

More from myapihq/myapi