API reference

POST/v1/media/upload

Create a media upload URL

Returns a presigned PUT URL. Upload the bytes directly to it, then reference publicUrl in a post.

Required permission: `media:write`

Accepts `profileId` to target a specific profile. Omit it to use the key’s home profile.

Base URL
https://api.cutedyno.com
Permission
media:write
Idempotency
Not applicable. This request has no side effects worth deduplicating.
MCP tool
upload_media

Request

curl -X POST "https://api.cutedyno.com/v1/media/upload" \
  -H "Authorization: Bearer $CUTEDYNO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "profileId": "profile_a1b2c3d4",
  "fileName": "Acme Corp",
  "fileType": "image/jpeg"
}'

Body

fileNamestringrequired

Original file name, used to pick an extension.

fileTypeenumrequired

MIME type of the file you are about to upload.

One of:image/jpegimage/jpgimage/pngimage/webpimage/gifvideo/mp4video/quicktimevideo/webmvideo/x-msvideo

profileIdstringoptional

Profile to act on. Defaults to the profile the API key was created in.

Response

Returns 200 with the following body.

signedUrlstringrequired

PUT the file bytes here.

publicUrlstringrequired

Use this URL in the post's media array.

keystringrequired
expiresInnumberrequired

Seconds until signedUrl expires.

maxBytesnumberrequired

Largest file the upload will accept.

Example

{
  "signedUrl": "https://cdn.example.com/media/launch.jpg",
  "publicUrl": "https://cdn.example.com/media/launch.jpg",
  "key": "string",
  "expiresIn": 0,
  "maxBytes": 0
}

Errors

Failures use the standard error envelope. Branch on code, never on the message.

StatusCodeWhen it happens
400invalid_requestThe request body or query string failed validation. The message names the offending field.
401invalid_api_keyThe key does not exist, was revoked, or is malformed. Keys start with cdyn_live_.
415unsupported_media_typeThe fileType passed to POST /v1/media/upload is not an accepted image or video type.
429rate_limit_exceededToo many requests for this key. Honour the Retry-After header before retrying.
500internal_errorSomething failed on our side. Retry with the same Idempotency-Key; report the requestId if it persists.