Upload a file
Multipart: `file`, `bucket` (one of avatars, bookmark-thumbnails, bookmark-attachments, bug-reports), and optional `usage_context`, `alt_text`, `description`. The file is stored under the caller and recorded as their media; the answer carries a signed URL valid for an hour. Accepted types: image/jpeg, image/jpg, image/png, image/gif, image/webp, image/svg+xml, image/avif, image/bmp, image/tiff, image/heic, image/heif, image/x-icon, image/vnd.microsoft.icon, application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, text/plain, text/markdown, application/zip, application/x-zip-compressed. At most 50 MB. Past the storage or daily upload limit, 429.
Sends a real request with your token. Prefer a read-only token; it is kept in this browser's storage.
Multipart: file, bucket (one of avatars, bookmark-thumbnails, bookmark-attachments, bug-reports), and optional usage_context, alt_text, description. The file is stored under the caller and recorded as their media; the answer carries a signed URL valid for an hour. Accepted types: image/jpeg, image/jpg, image/png, image/gif, image/webp, image/svg+xml, image/avif, image/bmp, image/tiff, image/heic, image/heif, image/x-icon, image/vnd.microsoft.icon, application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, text/plain, text/markdown, application/zip, application/x-zip-compressed. At most 50 MB. Past the storage or daily upload limit, 429.
AuthorizationBearer <token>A personal access token (rsk_…) or a Supabase access token.
multipart/form-data- body
file*filebinarybucket*string"avatars""bookmark-thumbnails""bookmark-attachments""bug-reports"usage_context?|nullalt_text?|nulldescription?|nullStored
application/json- response
media*signed_url*stringcurl -X POST 'https://www.ressource.social/api/v1/media' \ -F 'file=string' \ -F 'bucket=avatars'{ "media": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "uploaded_by": "e134ce2c-a199-4e99-9c11-627b70a7ff28", "original_filename": "string", "storage_path": "string", "bucket_name": "string", "file_size": -9007199254740991, "mime_type": "string", "media_type": "string", "usage_context": "string", "alt_text": "string", "description": "string", "created_at": "string" }, "signed_url": "string"}Remove an attachment and its file DELETE
Owner only: someone else's attachment is 404.
Resolve a URL's title, description, preview and category POST
What the source form shows before saving. Counted against the caller's metadata windows (`metadata_per_hour`, `metadata_per_day`; 429 with `details` when spent). Every outbound request is SSRF-checked, including redirects and an `image` hint. Needs the `write` scope: the preview image is stored as the caller's media. With `bookmark_id` (one of the caller's imported rows, `pending`, same URL) the import window is spent instead and the row is filled in and marked `completed` — or put back to `pending` on a 429, or `failed` when the fetch fails.