API Documentation for Imageurl.dev
Introduction
Welcome to the Imageurl.dev API documentation. This API provides a streamlined, secure, and scalable solution for uploading, saving, and processing media files from various sources. It simplifies file management for web applications, providing multiple upload methods including URL-based uploads, Base64 encoding, local image uploads, and document file uploads.
Supported File Types
- Images:
jpeg
,jpg
,png
,gif
,bmp
,webp
,tiff
- Documents:
pdf
,doc
,docx
,txt
,rtf
,odt
- Spreadsheets:
xls
,xlsx
,csv
,ods
- Presentations:
ppt
,pptx
,odp
- Archives:
zip
,rar
,7z
- Other:
json
,xml
Why Use Imageurl.dev API?
- Web-Optimized: Reduce image sizes by up to 90% while preserving quality, ensuring faster web performance.
- Secure: API key-based authentication ensures that only authorized users can upload and manage files.
- Efficient: Automatically manages storage containers and optimizes uploads for fast processing.
- Scalable: Built to handle large-scale applications and high volumes of file uploads.
- Developer-Friendly: Simplifies complex storage operations and offers quick integration into applications.
- Versatile: Support for multiple file types and upload methods to fit your application needs.
How to Use the API
Prerequisites
Before using the API, ensure you have the following:
- A valid API key, which can be generated from your dashboard.
- Content ready to upload (URL, Base64 string, local file, etc.)
Upload Endpoints
The API provides four main endpoints for uploading different types of content:
- /api/upload - Upload images via URL
- /api/base64 - Upload images via Base64 strings
- /api/imageupload - Upload images from local device files
- /api/fileupload - Upload documents and other files from local device files
Image Upload Endpoints
URL-based Image Upload
POST https://imageurl.dev/api/upload
Upload images by providing their URLs.
Request Parameters
- urls (
Array of strings
) - Required: A list of image URLs to be uploaded. - folderName (
string
) - Required: The name of the folder or container where the images will be stored. - imageFormat (
string
) - Required: The desired format for the exported images (e.g.,png
,jpeg
).
Headers
- Authorization:
Bearer [token]
- Required: A valid API token must be included in the request headers.
Example Usage
import axios from "axios";
async function uploadImage() {
try {
const data = {
urls: ["https://example.com/image.jpg"],
folderName: "MyApp",
imageFormat: "jpeg",
};
const response = await axios.post("https://imageurl.dev/api/upload", data, {
headers: {
"Content-Type": "application/json",
Authorization: "Bearer YOUR_TOKEN_HERE",
},
});
const responseData = response.data;
console.log("Uploaded Image URLs:", responseData.uploadedUrls);
return responseData.uploadedUrls;
} catch (error) {
console.error("Error uploading image:", error);
}
}
Base64 Image Upload
POST https://imageurl.dev/api/base64
Upload images by providing their Base64-encoded strings.
Request Parameters
- base64Strings (
Array of strings
) - Required: A list of Base64-encoded strings representing images. - folderName (
string
) - Required: The name of the folder or container where the images will be stored. - imageFormat (
string
) - Required: The desired format for the exported images (e.g.,png
,jpeg
).
Headers
- Authorization:
Bearer [token]
- Required: A valid API token must be included in the request headers.
Example Usage
import axios from "axios";
async function uploadImagesByBase64() {
try {
const data = {
base64Strings: ["iVBORw0KGgoAAAANSUhEUgAA..."], // Truncated Base64 string
folderName: "MyApp",
imageFormat: "jpeg",
};
const response = await axios.post("https://imageurl.dev/api/base64", data, {
headers: {
"Content-Type": "application/json",
Authorization: "Bearer YOUR_TOKEN_HERE",
},
});
const responseData = response.data;
return responseData.uploadedUrls;
} catch (error) {
console.error("Error uploading Base64 image:", error);
}
}
Local File Upload Endpoints
Local Image Upload
POST https://imageurl.dev/api/imageupload
Upload images directly from a local device.
Request Parameters
- files (
File
) - Required: The image file to be uploaded (multipart/form-data). - folderName (
string
) - Required: The name of the folder or container where the image will be stored. - imageFormat (
string
) - Optional: The desired format for the exported images (e.g.,png
,jpeg
). Defaults tojpeg
.
Headers
- Authorization:
Bearer [token]
- Required: A valid API token must be included in the request headers. - Content-Type:
multipart/form-data
- Required for file uploads.
Example Usage
import axios from "axios";
async function uploadLocalImage(imageFile) {
try {
const formData = new FormData();
formData.append("files", imageFile);
formData.append("folderName", "MyApp");
formData.append("imageFormat", "jpeg");
const response = await axios.post(
"https://imageurl.dev/api/imageupload",
formData,
{
headers: {
"Content-Type": "multipart/form-data",
Authorization: "Bearer YOUR_TOKEN_HERE",
},
},
);
const responseData = response.data;
console.log("Uploaded Image URL:", responseData.uploadedUrls[0]);
return responseData.uploadedUrls;
} catch (error) {
console.error("Error uploading local image:", error);
}
}
// Usage with a file input
document.getElementById("fileInput").addEventListener("change", async (e) => {
const file = e.target.files[0];
if (file) {
const uploadedUrls = await uploadLocalImage(file);
// Do something with the uploaded URLs
}
});
Document and File Upload
POST https://imageurl.dev/api/fileupload
Upload documents and other file types directly from a local device.
Request Parameters
- files (
File
) - Required: The file to be uploaded (multipart/form-data). - folderName (
string
) - Optional: The name of the folder or container where the file will be stored. Defaults toFileStorage
.
Supported File Types
- Documents: PDF, DOC, DOCX, TXT, RTF, ODT
- Spreadsheets: XLS, XLSX, CSV, ODS
- Presentations: PPT, PPTX, ODP
- Archives: ZIP, RAR, 7Z
- Other: JSON, XML
Headers
- Authorization:
Bearer [token]
- Required: A valid API token must be included in the request headers. - Content-Type:
multipart/form-data
- Required for file uploads.
Example Usage
import axios from "axios";
async function uploadDocument(documentFile) {
try {
const formData = new FormData();
formData.append("files", documentFile);
formData.append("folderName", "Documents");
const response = await axios.post(
"https://imageurl.dev/api/fileupload",
formData,
{
headers: {
"Content-Type": "multipart/form-data",
Authorization: "Bearer YOUR_TOKEN_HERE",
},
},
);
const responseData = response.data;
console.log("Uploaded File URL:", responseData.uploadedUrls[0]);
console.log("File Name:", responseData.fileName);
console.log("File Type:", responseData.fileType);
console.log("File Size:", responseData.fileSize);
return responseData.uploadedUrls;
} catch (error) {
console.error("Error uploading document:", error);
}
}
// Usage with a file input
document
.getElementById("documentInput")
.addEventListener("change", async (e) => {
const file = e.target.files[0];
if (file) {
const uploadedUrls = await uploadDocument(file);
// Do something with the uploaded URLs
}
});
React Component Examples
Image Upload Component Example
Here's an example of a React component that handles image uploads:
import React, { useState, useRef } from "react";
import axios from "axios";
const ImageUploader = ({ apiKey }) => {
const [selectedImage, setSelectedImage] = useState(null);
const [preview, setPreview] = useState(null);
const [uploadedUrl, setUploadedUrl] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fileInputRef = useRef(null);
const handleImageChange = (e) => {
const file = e.target.files[0];
if (!file) return;
// Validate image type
const validTypes = [
"image/jpeg",
"image/jpg",
"image/png",
"image/gif",
"image/webp",
];
if (!validTypes.includes(file.type)) {
setError("Please select a valid image file (JPEG, PNG, GIF, WebP)");
return;
}
setSelectedImage(file);
setError(null);
// Create preview
const reader = new FileReader();
reader.onloadend = () => {
setPreview(reader.result);
};
reader.readAsDataURL(file);
};
const handleUpload = async () => {
if (!selectedImage) return;
setLoading(true);
setError(null);
const formData = new FormData();
formData.append("files", selectedImage);
formData.append("folderName", "MyAppImages");
formData.append("imageFormat", "jpeg");
try {
const response = await axios.post(
"https://imageurl.dev/api/imageupload",
formData,
{
headers: {
"Content-Type": "multipart/form-data",
Authorization: `Bearer ${apiKey}`,
},
},
);
setUploadedUrl(response.data.uploadedUrls[0]);
setLoading(false);
} catch (err) {
setError("Upload failed. Please try again.");
console.error("Upload error:", err);
setLoading(false);
}
};
return (
<div className="image-uploader">
<div className="upload-area" onClick={() => fileInputRef.current.click()}>
{preview ? (
<img src={preview} alt="Preview" className="image-preview" />
) : (
<div className="upload-placeholder">Click to select an image</div>
)}
<input
ref={fileInputRef}
type="file"
onChange={handleImageChange}
accept="image/*"
style={{ display: "none" }}
/>
</div>
{error && <div className="error-message">{error}</div>}
<button
onClick={handleUpload}
disabled={!selectedImage || loading}
className="upload-button"
>
{loading ? "Uploading..." : "Upload Image"}
</button>
{uploadedUrl && (
<div className="result">
<h3>Uploaded Successfully!</h3>
<a href={uploadedUrl} target="_blank" rel="noopener noreferrer">
{uploadedUrl}
</a>
<img src={uploadedUrl} alt="Uploaded" className="result-image" />
</div>
)}
</div>
);
};
export default ImageUploader;
Document Upload Component Example
Here's an example of a React component that handles document and file uploads:
import React, { useState, useRef } from "react";
import axios from "axios";
const FileUploader = ({ apiKey }) => {
const [selectedFile, setSelectedFile] = useState(null);
const [uploadedUrl, setUploadedUrl] = useState(null);
const [fileDetails, setFileDetails] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fileInputRef = useRef(null);
const getFileIcon = (fileType) => {
// Return appropriate icon based on file type
// This is a simplified example - you might want to use a library for icons
if (fileType.includes("pdf")) return "📄";
if (fileType.includes("doc")) return "📝";
if (
fileType.includes("sheet") ||
fileType.includes("csv") ||
fileType.includes("xls")
)
return "📊";
if (fileType.includes("presentation") || fileType.includes("ppt"))
return "📑";
if (
fileType.includes("zip") ||
fileType.includes("rar") ||
fileType.includes("7z")
)
return "🗄️";
return "📁";
};
const handleFileChange = (e) => {
const file = e.target.files[0];
if (!file) return;
// Validate file type
const validExtensions = [
"pdf",
"doc",
"docx",
"txt",
"rtf",
"odt",
"xls",
"xlsx",
"csv",
"ods",
"ppt",
"pptx",
"odp",
"zip",
"rar",
"7z",
"json",
"xml",
];
const extension = file.name.split(".").pop().toLowerCase();
if (!validExtensions.includes(extension)) {
setError("Please select a valid file type");
return;
}
// Validate file size (max 10MB)
if (file.size > 10 * 1024 * 1024) {
setError("File size must be less than 10MB");
return;
}
setSelectedFile(file);
setError(null);
setFileDetails({
name: file.name,
size: (file.size / 1024 / 1024).toFixed(2) + " MB",
type: file.type,
});
};
const handleUpload = async () => {
if (!selectedFile) return;
setLoading(true);
setError(null);
const formData = new FormData();
formData.append("files", selectedFile);
formData.append("folderName", "MyAppDocuments");
try {
const response = await axios.post(
"https://imageurl.dev/api/fileupload",
formData,
{
headers: {
"Content-Type": "multipart/form-data",
Authorization: `Bearer ${apiKey}`,
},
},
);
setUploadedUrl(response.data.uploadedUrls[0]);
setLoading(false);
} catch (err) {
setError("Upload failed. Please try again.");
console.error("Upload error:", err);
setLoading(false);
}
};
return (
<div className="file-uploader">
<div className="upload-area" onClick={() => fileInputRef.current.click()}>
{fileDetails ? (
<div className="file-preview">
<span className="file-icon">{getFileIcon(fileDetails.type)}</span>
<p className="file-name">{fileDetails.name}</p>
<p className="file-size">{fileDetails.size}</p>
</div>
) : (
<div className="upload-placeholder">
<p>Click to select a file</p>
<p className="supported-files">
Supported formats: PDF, DOC, XLSX, CSV, etc.
</p>
</div>
)}
<input
ref={fileInputRef}
type="file"
onChange={handleFileChange}
style={{ display: "none" }}
/>
</div>
{error && <div className="error-message">{error}</div>}
<button
onClick={handleUpload}
disabled={!selectedFile || loading}
className="upload-button"
>
{loading ? "Uploading..." : "Upload File"}
</button>
{uploadedUrl && (
<div className="result">
<h3>File Uploaded Successfully!</h3>
<a href={uploadedUrl} target="_blank" rel="noopener noreferrer">
{uploadedUrl}
</a>
<div className="file-info">
<p>File: {fileDetails?.name}</p>
<p>Size: {fileDetails?.size}</p>
</div>
</div>
)}
</div>
);
};
export default FileUploader;
Response Format
Image Upload Response
All image upload endpoints (/api/upload
, /api/base64
, and /api/imageupload
) return a response in the following format:
{
"success": true,
"containerName": "myapp",
"uploadedUrls": [
"https://mycontainer.blob.core.windows.net/myapp/12345_6789.jpeg"
],
"dateCreated": "2023-09-15T12:34:56.789Z",
"imageFormat": "jpeg"
}
File Upload Response
The file upload endpoint (/api/fileupload
) returns a response in the following format:
{
"success": true,
"containerName": "filestorage",
"uploadedUrls": [
"https://mycontainer.blob.core.windows.net/filestorage/12345_6789.pdf"
],
"fileName": "document.pdf",
"fileSize": 1024000,
"fileType": "pdf",
"dateCreated": "2023-09-15T12:34:56.789Z"
}
Error Handling
All endpoints return appropriate HTTP status codes and error messages:
400 Bad Request
: Invalid parameters or file type401 Unauthorized
: Missing or invalid API key413 Payload Too Large
: File size exceeds limits500 Internal Server Error
: Server-side issues
Example error response:
{
"error": "Invalid file type. File extension not supported."
}
Last updated on March, 2025