HTTP API
Image links,
built for agents.
Upload an image, get a short-lived direct URL. No account, no API key, no SDK — just HTTP. Paste this page to your agent and it has everything it needs.
No auth
JSON or HTML
Auto-expiring
JPEG · PNG · WebP · ≤10MB
BASE URL
https://img.equivalent.work
01
Getting JSON
Every response is HTML for browsers or JSON for agents. Ask for JSON in either way:
Send a header
Accept: application/json
…or add a suffix
/i/<id>.json
02
Endpoints
- POST
/imagesUpload an image, get a link + expiry - GET
/i/<id>.jsonFetch metadata (direct URL + expiry) - GET
/i/<id>/rawThe image bytes, served inline - GET
/i/<id>Human-facing share page (HTML)
03
Upload an image
POST /images — multipart form-data.
| Field | Type | Req. | Description |
|---|---|---|---|
file | file | yes | The image (JPEG, PNG, or WebP), up to 10 MB. The browser form field image[file] also works. |
expires_in_hours | integer | no | Hours until auto-deletion. Defaults to 1; capped at 1 for now (longer periods are paused due to high demand). |
hours | integer | no | Alias for expires_in_hours. |
curl -X POST "https://img.equivalent.work/images" \
-H "Accept: application/json" \
-F "file=@/path/to/image.png" \
-F "expires_in_hours=1"
{
"public_id": "9cc4d3f4-1fb2-4dc8-9e3b-bf3579d1be30",
"show_url": "https://img.equivalent.work/i/9cc4d3f4-1fb2-4dc8-9e3b-bf3579d1be30",
"download": "https://img.equivalent.work/i/9cc4d3f4-1fb2-4dc8-9e3b-bf3579d1be30/raw",
"expires_at": "2026-04-02T17:00:00Z"
}
download is the direct image URL. show_url is the shareable HTML page. expires_at is UTC (ISO 8601).
04
Fetch metadata
GET /i/<id>.json — or send Accept: application/json.
curl -s "https://img.equivalent.work/i/9cc4d3f4-1fb2-4dc8-9e3b-bf3579d1be30.json"
{
"public_id": "9cc4d3f4-1fb2-4dc8-9e3b-bf3579d1be30",
"download": "https://img.equivalent.work/i/9cc4d3f4-1fb2-4dc8-9e3b-bf3579d1be30/raw",
"expires_at": "2026-04-02T17:00:00Z"
}
05
Errors
JSON requests get a JSON error body with a matching status code.
- 422Invalid, missing, or oversized file
{"errors": ["…"]} - 429More than 30 uploads from your IP in the last hour; wait for
Retry-Afterseconds{"errors": ["…"]} - 503Uploads paused because the server is low on space
{"errors": ["…"]} - 404Unknown id
{"error": "Image not found"} - 410Link has expired
{"error": "Image has expired"}
06
Agent workflow
- 1Upload.
POST /imageswithAccept: application/jsonand your image file. - 2Read
download. That's the direct image URL — share it or fetch it. - 3Re-check anytime. Metadata lives at
/i/<id>.json. - 4Respect
expires_at. After it passes, the image is deleted and returns410.
Tip: pass the URL plainly (e.g. https://img.equivalent.work/images), not wrapped in angle brackets.