Nimply Developers
Examples

Create a Reel

Upload a video by URL and publish it as short-form vertical video.

Scopes: media:write, posts:write, posts:publish.

Setting "contentType": "REEL" publishes the post to the platform's short-form video surface instead of the regular feed.

1. Import the video

curl -X POST https://api.nimply.io/v1/media \
  -H "Authorization: Bearer $NIMPLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/videos/behind-the-scenes.mp4",
    "name": "behind-the-scenes.mp4"
  }'
{
  "id": "c4d5e6f7-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
  "name": "behind-the-scenes.mp4",
  "type": "VIDEO",
  "url": "https://…signed…",
  "thumbnailUrl": null,
  "size": 18874368,
  "createdAt": "2026-07-09T10:00:00.000Z"
}

Confirm type is VIDEO. thumbnailUrl may still be null right after upload β€” thumbnails are generated asynchronously.

2. Create the post with contentType: REEL

curl -X POST https://api.nimply.io/v1/posts \
  -H "Authorization: Bearer $NIMPLY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: bts-reel-001" \
  -d '{
    "channelIds": ["123e4567-e89b-12d3-a456-426614174000"],
    "content": "Behind the scenes of our launch 🎬",
    "contentType": "REEL",
    "mediaIds": ["c4d5e6f7-1a2b-4c3d-9e8f-0a1b2c3d4e5f"],
    "schedule": "next_slot"
  }'
[
  {
    "id": "7a245d46-…",
    "channelId": "123e4567-e89b-12d3-a456-426614174000",
    "contentType": "REEL",
    "status": "SCHEDULED",
    "scheduledAt": "2026-07-09T18:00:00.000Z",
    "mediaIds": ["c4d5e6f7-1a2b-4c3d-9e8f-0a1b2c3d4e5f"]
  }
]

Gotchas

  • A Reel needs a video media asset β€” attach the VIDEO media id, not an image.
  • Media import happens by URL: the video must be publicly reachable over http(s). Plan quotas (file size, storage, monthly uploads) apply β€” an oversized file returns 400.
  • Target a channel type that has a Reels-style format; check your channel's type from GET /v1/channels.
  • Video publishing takes longer than images β€” watch for post.published / post.failed webhooks rather than assuming success.

On this page