Home
Blog
Product Updates
Blog
What Aveiro’s Product Hunt Launch Day Actually Looked Like
Seedance 2.0 Comes to Aveiro — With Video Uploads and Bunny.net Under the Hood
Connect Aveiro to Any AI Agent in 10 Seconds — One MCP URL
How to Migrate from Squarespace to Aveiro
Integrating ByteDance Models Directly: What We Learned Building Aveiro
Auto-update Docs and Blog with Cursor Cloud Agents and the Aveiro API
What Is Connected Publishing?
Website CTA Analytics: Beyond Page Views
How to Connect a Custom Domain on Aveiro
Edit Your Website with AI Without Breaking Layout
Build a Portfolio Website on Aveiro
The Hidden Cost of a Fragmented Publishing Stack
How to Start a Newsletter From Your Website
Build a Documentation Site with Collections and MDX
Embed a Signup Form on Any Site
Your First Week on Aveiro
Updates
Plan Storage Limits — Metered Bytes at Rest for Media, Video, and Agent Uploads
Org-Wide Asset Management — Browse, Bulk Move, and Delete in One Place
Direct Media Uploads for Agents — Push Local Images and Videos Without a Public URL
Social Update — Publishing Credits Pool
Social Fix — First-Comment Outcome on the Post Row
Social Update — First Comments Publish With the Post
MCP Fix — Per-Platform First Comments on the Stdio Proxy
MCP Marketplace Template Clone — Bootstrap Sites from the Gallery
Homepage Rework — Template to Publish, Free Trial, and MCP for Agents
Usage Counters Now Reset on Your Billing Cycle
Social Dashboard: Post Sections, Scheduling Picker, and Platform Comments
Social Dashboard: Upload Aspect Ratios and New Post Dialog
MCP Fix — aveiro_update_page Retries on Revision Conflicts
LinkedIn Joins Social Publishing — Personal Profiles and Company Pages
Quasar Max Chat Upgrades to Claude Sonnet 5
Recoverable Failed Social Posts
Social Caption Guards and Safer Publish Dates
Media Library Folders and Unified Picker — One Org Library Across Sites
Newsletter Agent API and MCP Tools — Draft Campaigns from Cursor and Claude
Plain-Voice Quasar Chat Errors
Clearer AI Credit Messages and Fewer Continue Prompts
MDX Placeholder Tags Render as Text
AI and MCP Page Reordering — Move, Sort, and Reorder Site Structure
Translation Jobs: Live Progress, Cost Estimates, and Cleaner Pickers
Translations UI Polish and Connect Claude
Character References for Social AI Media + First Comment Field
AI Video Generation — Short Clips from the Site Editor
Social Org Media Browsing and Register-by-URL — Reuse Dashboard Uploads in Agent Drafts
MCP Fix — tools/call Accepts null and Stringified Arguments
MCP Fix — Parameterless Tools Work Without an Arguments Field
Multi-Aspect AI Media for Social Posts — Platform Crops in One Call
Social Agent API and MCP Tools — Draft Posts from Cursor and Claude
Social Publishing Beta — Draft, Approve, and Schedule Instagram and Threads
Once UI Effects on Published Sites
MDX Code Blocks and Smarter Validation
Subscribe Users from Your Product with the Audience API
Agency Template Blocks Are Now Reusable Page Builder Components
Sell Merch on Your Aveiro Site with Fourthwall
Visitor Login and Support Chat on Your Site
Safer AI Edits and Publish Guards
Newsletter Deliverability Dashboard
TrademarkTrademark
Ctrl k
Search...
Sign up
TrademarkTrademark© Aveiro. All rights reserved.
Built with Aveiro
Updates

Direct Media Uploads for Agents — Push Local Images and Videos Without a Public URL

POST /api/v1/social/media/upload and aveiro_social_prepare_upload hand agents a short-lived upload target: PUT the bytes over plain HTTPS, register the returned URL, attach to posts. Images up to 10MB, videos up to 200MB straight onto the CDN.
Updated 19h ago
Org-Wide Asset Management — Browse, Bulk Move, and Delete in One Place
Social Update — Publishing Credits Pool
In short
Agents with a local file and no public URL — an image generated on their own AI plan, a video rendered locally — can now upload it directly: one prepare call returns an upload target, the bytes go over plain HTTPS, and the returned public URL registers into the social library like any other asset.

What we shipped

Org media browsing and register-by-URL covered media that already lives somewhere public. This release closes the last gap: media that exists only on the agent's machine.

Prepare an upload

POST /api/v1/social/media/upload — and its MCP wrapper aveiro_social_prepare_upload — validates the file type and declared size, then returns a short-lived upload target:
  • Images (JPEG, PNG, WebP, GIF, max 10 MB) land in org image storage, alongside dashboard uploads
  • Videos (MP4, WebM, MOV, max 200 MB) land directly on the platform video CDN — already host-stable, no host: true needed at register time

PUT the bytes, register the URL

The upload itself is a plain HTTPS PUT of the raw bytes — it never rides through a tool call, so MCP context limits and request-body caps don't apply: Then aveiro_social_register_media with the returned publicUrl, and the asset attaches to drafts via media_assignments like any other.

Why we built it this way

MCP tool calls travel through the model's context as JSON — a real file upload through a tool call would mean the model typing out megabytes of base64. So the tool only issues the target; the bytes take the normal HTTP path. That makes the flow work for any agent that can make an HTTP request — Claude Code, Cursor, a plain script — not just MCP clients. Chat-only clients without code execution keep using register-by-URL.
curl -X PUT -H "Content-Type: image/jpeg" --data-binary @photo.jpg "<upload.url>"
It also changes the economics: agents can generate imagery on whatever AI plan they already have and push the results into Aveiro, where storage — not generation credits — is the only cost. aveiro_social_generate_media stays the built-in path; direct upload is the bring-your-own-generator path. Uploads are capped per organization per rolling day.

Try it

  • In Claude Code with Aveiro MCP, generate or pick a local image.
  • Call aveiro_social_prepare_upload with content_type and size_bytes.
  • curl -X PUT the file to the returned upload.url with the returned headers.
  • Call aveiro_social_register_media with the returned publicUrl and attach the asset to a draft.
Or over REST: POST /api/v1/social/media/upload → PUT bytes → POST /api/v1/social/media.

Read next

  • Social agents and API (platform docs)
  • Social media API (API reference)
  • Org media and register-by-URL (previous media release)
  • Multi-aspect AI media (aspect ratios and auto crop)