Docs

Files

Last updated: 2026-10-032 min read

Two file operations: put an image into GREM to attach it to a listing or pass it to a tool, and collect a tool's generated result.

Base URL: https://developers.grem.capital/api/v1.

Upload an image

curl -X POST https://developers.grem.capital/api/v1/uploads \
  -H "Authorization: Bearer gsk_live_xxx" \
  -F "[email protected]"
{ "files": [ { "id": "...", "url": "..." } ], "requestId": "req_..." }

Needs the media:write scope. Uploads are not charged.

Limits:

ParameterValue
FormatsJPG, PNG, WEBP
One fileup to 15 MB; larger - 413
Files per requestup to 10
Whole requestup to 30 MB

Form field names do not matter - send as many file parts as fit the limits.

Put the returned ids into photos when creating or editing a listing (Listings), and the urls wherever a tool takes photo addresses (content pack, form.media.photos):

{ "photos": ["<first file id>", "<second file id>"] }

Only you get the link to the original. Once the photo is attached to a published listing, the catalog serves others only the watermarked variants.

Download a result

Download files through the GREM domain with the same key:

curl -H "Authorization: Bearer gsk_live_xxx" \
  https://developers.grem.capital/api/v1/artifacts/<path> \
  -o presentation.pdf

Needs the tools:artifacts scope. A download is a GET, so it is free and is not counted as an API call.

Partial downloads via the Range header are supported: large videos and presentations can be fetched in parts or resumed.

The key is needed here too: an artifact link is not public. Do not embed it in a page your visitors see - serve the file from your own server instead.

You cannot pass an arbitrary path: only result download paths and /files/... files are accepted, everything else returns 404. The full list of paths is in Jobs and results.

Was this article helpful?