Skip to main content
Upload between 1 and 9 files in a single request. Every upload automatically creates a post. When sending multiple files, they are grouped into an album by default.

Headers

HeaderRequiredDescription
relay-keyYesYour Relay key
post-privacyNopublic, unlisted, or private (default)
post-titleNoPost title, max 30 characters
post-descriptionNoPost description, max 200 characters
post-typeNoalbum (default) or individual. Only applies to two or more files.
include-metadataNotrue to keep file metadata. Omitted or false strips it (default).

Behavior

  • One file: creates a single post. post-type is ignored.
  • Two or more files, no header or album: creates one album post containing all files.
  • Two or more files, individual: creates a separate post for each file.
  • post-privacy: private: the returned url (and any urls in albums) is a signed URL with a 24-hour expiry. After it expires, call GET /posts/{code} or GET /uploads to get a fresh signed URL.
  • Video uploads: .mp4, .mov, and .mkv files are remuxed to MP4 with +faststart so the browser can begin playback before the full file has downloaded. .mov and .mkv uploads are stored (and returned) with an .mp4 extension. If remuxing fails, the original file is stored unchanged. See File Types for details.
  • Metadata: Metadata (camera, GPS location, timestamp) is stripped by default. For images, EXIF is removed from PNG, JPG, and WebP up to 100 MB (larger images are stored unchanged). For videos, container metadata is removed during the MP4 remux. Send include-metadata: true to keep it.

Examples

Upload a single file:
curl -X POST "https://relay.snipp.gg/upload" \
  -H "relay-key: YOUR_RELAY_KEY" \
  -H "post-privacy: unlisted" \
  -H "post-title: my gaming POV" \
  -F "file=@screenshot.png"
Upload an album (two or more files default to album):
curl -X POST "https://relay.snipp.gg/upload" \
  -H "relay-key: YOUR_RELAY_KEY" \
  -H "post-privacy: public" \
  -H "post-title: Game Moderation Evidence" \
  -F "file=@photo1.png" \
  -F "file=@photo2.png" \
  -F "file=@photo3.png"
Upload multiple files as individual posts:
curl -X POST "https://relay.snipp.gg/upload" \
  -H "relay-key: YOUR_RELAY_KEY" \
  -H "post-type: individual" \
  -F "file=@image1.png" \
  -F "file=@image2.png"

Responses

Single file:
{
  "message": "Upload successful!",
  "url": "https://i.snipp.gg/123456789012345678/a1b2c3d4e5f6789012345678abcdef01.png",
  "file": {
    "size": 2487312,
    "size_formatted": "2.37 MB",
    "mime_type": "image/png",
    "dimensions": { "width": 1920, "height": 1080 }
  },
  "processing_time": 412,
  "post": {
    "code": "AbCd1234",
    "url": "https://snipp.gg/p/AbCd1234",
    "postPrivacy": "unlisted"
  }
}
Album (two or more files, default): one post containing every file.
{
  "message": "Upload successful!",
  "files": [
    {
      "index": 0,
      "url": "https://i.snipp.gg/123456789012345678/a1b2c3d4e5f6789012345678abcdef01.png",
      "size": 2487312,
      "size_formatted": "2.37 MB",
      "mime_type": "image/png",
      "status": "success",
      "dimensions": { "width": 1920, "height": 1080 }
    },
    {
      "index": 1,
      "url": "https://i.snipp.gg/123456789012345678/b2c3d4e5f6789012345678abcdef0102.png",
      "size": 1840221,
      "size_formatted": "1.76 MB",
      "mime_type": "image/png",
      "status": "success",
      "dimensions": { "width": 1280, "height": 720 }
    }
  ],
  "processing_time": 938,
  "post": {
    "posts": [
      {
        "code": "AbCd1234",
        "url": "https://snipp.gg/p/AbCd1234",
        "postPrivacy": "public"
      }
    ]
  }
}
Individual (post-type: individual): one entry in post.posts per file. If a file fails, a failed array is included alongside files.
{
  "message": "Upload successful!",
  "files": [
    {
      "index": 0,
      "url": "https://i.snipp.gg/123456789012345678/a1b2c3d4e5f6789012345678abcdef01.png",
      "size": 2487312,
      "size_formatted": "2.37 MB",
      "mime_type": "image/png",
      "status": "success"
    }
  ],
  "failed": [
    {
      "index": 1,
      "error": "Weekly quota exceeded",
      "status": "failed"
    }
  ],
  "processing_time": 938,
  "post": {
    "posts": [
      {
        "code": "AbCd1234",
        "url": "https://snipp.gg/p/AbCd1234",
        "postPrivacy": "public"
      }
    ]
  }
}