Custom uploaders
ishare opens .iscu files, which are JSON documents that describe where and how to upload captures. Double-click one to import it, drop it on the import sheet in Settings → Uploaders, or build one in the editor there. On Macs with Apple Intelligence, the Assistant button creates an uploader from a few answers.
Property names are case-insensitive, and trailing commas and comments are accepted.
HTTP uploaders
{
"name": "My server",
"requestURL": "https://uploader.example.com/upload",
"headers": { "Authorization": "Bearer YOUR_TOKEN" },
"formData": { "album": "screenshots" },
"fileFormName": "file",
"requestBodyType": "multipartFormData",
"responseURL": "{{files[0].url}}",
"deletionURL": "{{files[0].deleteUrl}}",
"deleteRequestType": "DELETE"
}
| Property | Required | Description |
|---|---|---|
name |
yes | Shown in the menu and settings. |
requestURL |
yes | The http or https URL the file is POSTed to. |
headers |
no | Extra request headers, such as API keys. |
formData |
no | Extra multipart text fields. |
fileFormName |
no | The multipart field that carries the file. Defaults to file. |
requestBodyType |
no | multipartFormData (default) or binary to send the raw file as the body. |
responseURL |
yes | Template for the public URL of the upload. |
deletionURL |
no | Template for a URL that deletes the upload. |
deleteRequestType |
no | GET (default) or DELETE. |
Response templates
Wrap JSON paths from the response in double braces. Nested objects use dots and arrays use indexes, for example {{url}}, {{data.link}} or {{files[0].url}}. Templates can mix text and placeholders, such as https://cdn.example.com/{{id}}.{{ext}}. When a service answers with the URL as plain text, use {{response}}.
Every upload also sends an x-file-name header with the original file name.
S3-compatible storage
Set uploaderType to s3 to upload with AWS Signature Version 4. This works with AWS S3, Cloudflare R2, DigitalOcean Spaces, Backblaze B2, MinIO and other S3-compatible services.
{
"name": "Cloudflare R2",
"uploaderType": "s3",
"s3": {
"endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
"region": "auto",
"bucket": "screenshots",
"accessKeyId": "ACCESS_KEY_ID",
"secretAccessKey": "SECRET_ACCESS_KEY",
"pathStyle": true,
"keyTemplate": "{{date}}/{{uuid}}.{{ext}}",
"publicURL": "https://img.example.com/{{key}}"
}
}
| Property | Required | Description |
|---|---|---|
endpoint |
yes | The service endpoint. https:// is added when the scheme is missing. |
region |
no | Signing region. Defaults to us-east-1; R2 uses auto. |
bucket |
yes | The bucket to upload into. |
accessKeyId, secretAccessKey |
yes | Credentials with permission to put (and optionally delete) objects. |
pathStyle |
no | true (default) for endpoint/bucket/key, false for bucket.endpoint/key. |
keyTemplate |
no | Object key. Defaults to {{filename}}. |
acl |
no | Sent as x-amz-acl, for example public-read. |
publicURL |
no | Template for the shared link. Defaults to the object URL. |
Key templates support {{filename}}, {{name}}, {{ext}}, {{uuid}}, {{random}}, {{timestamp}}, {{date}} (yyyy/MM/dd), {{year}}, {{month}} and {{day}}. Public URL templates support {{key}}, {{rawkey}}, {{bucket}}, {{region}}, {{host}} and {{endpoint}}.
Deleting an S3 upload from the history window sends a signed DELETE for its key.
Shortcuts
Every uploader appears in the Shortcuts app. Use Upload with ishare to upload any image or video and get its URL back, or Set ishare Uploader to switch the default uploader.
Migrating from 1.x uploaders
Version 2.0 replaced responseProp with responseURL templates. Rewrite "responseProp": "url" as "responseURL": "{{url}}", and move any fixed URL prefix into the template.