Documentation menu

Core concepts

Media handling

View .md

How Dravo ingests images and video, why you should ingest before publishing, and the format limits.

Ingest then publish

Dravo publishes media by URL. The recommended flow is to ingest a remote file once, then reference the stable URL Dravo returns in your publish call.

curl -X POST https://api.dravo.dev/v1/media \
  -H "Authorization: Bearer $DRAVO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "source_url": "https://example.com/promo.jpg" }'
{
  "public_url": "https://cdn.dravo.dev/u/abc/2f1c....jpg",
  "content_type": "image/jpeg",
  "size_bytes": 84211
}

Then publish:

{
  "account_ids": ["acc_8f2c1d"],
  "text": "New drop.",
  "media_urls": ["https://cdn.dravo.dev/u/abc/2f1c....jpg"]
}

Why ingest first

You can pass any public URL in media_urls, but ingesting first is more reliable:

  • Platforms fetch the URL themselves; a stable, fast, always available URL avoids transient fetch failures at publish time.
  • Some networks (for example TikTok with PULL_FROM_URL) require the source domain to be verified. Serving from Dravo storage sidesteps per customer domain verification for those flows.
  • You validate the file once (size and type) instead of discovering a problem during delivery.

Limits and formats

ConstraintValue
Max file size100 MB
Image typesjpeg, png, webp, gif
Video typesmp4, quicktime (mov), webm

Requests that exceed the size return 413, and unsupported content types return 415. See POST /v1/media for the full error list.

Per network rules

Each platform adds its own constraints on top (aspect ratio, duration, codecs, how many items per post). The current MVP publishes one media item per post. Check the per network notes for the exact rules, for example Instagram requiring JPEG for images and MP4 or MOV for Reels.