API documentation

Upload images to your Mewshot account from any app or script with a single request.

Authentication

Generate a key in your dashboard, then send it with every request in one of these ways:

Upload an image

POST https://mewshot.com/api/v1/upload.php — multipart/form-data with a file field named image.

Accepted formats: PNG, JPG, GIF, WebP · max 10 MB · limit 120 requests per hour.

Example — cURL

curl -X POST "https://mewshot.com/api/v1/upload.php" \
  -H "X-API-Key: YOUR_KEY" \
  -F "image=@screenshot.png"

Example — JavaScript

const form = new FormData();
form.append("image", fileInput.files[0]);

const res = await fetch("https://mewshot.com/api/v1/upload.php", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY" },
  body: form
});
const data = await res.json();
console.log(data.upload.url);

Example — PHP

$ch = curl_init("https://mewshot.com/api/v1/upload.php");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: YOUR_KEY"],
    CURLOPT_POSTFIELDS => ["image" => new CURLFile("screenshot.png")],
]);
$response = json_decode(curl_exec($ch), true);
echo $response["upload"]["url"];

Response

{
  "ok": true,
  "upload": {
    "code": "aB3xK9mQ",
    "url": "https://mewshot.com/i/aB3xK9mQ",
    "direct_url": "https://mewshot.com/raw/aB3xK9mQ",
    "delete_token": "…",
    "expires_at": null,
    "size": 48231,
    "width": 1280,
    "height": 720
  }
}

Files uploaded with an API key belong to your account and never expire ("expires_at": null). Errors return {"ok": false, "error": "…"} with a matching HTTP status (401, 413, 415, 429, …).