Skip to main content
POST
Upload a reply photo from a file or URL

Authorizations

Authorization
string
header
required

A Replier API key (rpl_...).

Headers

Idempotency-Key
string

Send the same key when you retry, and the request runs once. Without one, every request runs.

Required string length: 1 - 128

Path Parameters

workspace_id
string<uuid>
required

Workspace ID returned by GET /v1/workspaces

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$

Body

application/json
file
object

When available it is the cheapest path (Replier fetches the download_url server-side; no shell, no base64).

data
string

Base64 image bytes (raw base64 or a data:image/…;base64,… URI). Large base64 payloads are expensive to serialize, so exhaust the other paths first.

Minimum string length: 1
url
string<uri>

Public HTTPS URL of a JPEG or PNG image (≤ 8 MB) that Replier will fetch. Provide exactly one of file, url, or data.

channel
enum<string>

Marks this upload as one channel's pre-cropped card variant inside a bundle. Instagram = 1:1 exactly, Facebook = 1.91:1 exactly (2% tolerance). Bytes MUST already match the ratio — the server rejects mismatches. Omit for a photo sent with display "photo", or for a card on a single channel whose bytes already match that channel's ratio.

Available options:
instagram,
facebook
parent_image_id
string<uuid>

Chain this upload onto a prior channel upload so one dm_image_id carries crops for both channels. Set to the image.id returned by the first upload (usually the instagram one). Omit on the first upload of a bundle.

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$

Response

OK

workspace
object
required
image
object
required