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.

FieldTypeReq.Description
filefileyesThe image (JPEG, PNG, or WebP), up to 10 MB. The browser form field image[file] also works.
expires_in_hoursintegernoHours until auto-deletion. Defaults to 1; capped at 1 for now (longer periods are paused due to high demand).
hoursintegernoAlias for expires_in_hours.
curl
curl -X POST "https://img.equivalent.work/images" \
  -H "Accept: application/json" \
  -F "file=@/path/to/image.png" \
  -F "expires_in_hours=1"
201 Createdjson
{
  "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
curl -s "https://img.equivalent.work/i/9cc4d3f4-1fb2-4dc8-9e3b-bf3579d1be30.json"
200 OKjson
{
  "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-After seconds{"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

  1. 1
    Upload. POST /images with Accept: application/json and your image file.
  2. 2
    Read download. That's the direct image URL — share it or fetch it.
  3. 3
    Re-check anytime. Metadata lives at /i/<id>.json.
  4. 4
    Respect expires_at. After it passes, the image is deleted and returns 410.

Tip: pass the URL plainly (e.g. https://img.equivalent.work/images), not wrapped in angle brackets.