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:
- Header:
X-API-Key: YOUR_KEY - Header:
Authorization: Bearer YOUR_KEY - Form field:
api_key=YOUR_KEY
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, …).