Examples
Schedule an image post
Upload an image by URL and schedule it for a specific time.
Scopes: media:write, posts:write, posts:publish (needed for any schedule value other than "draft").
1. Import the image
Give Nimply a publicly reachable URL; it downloads and stores the file:
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/images/launch-banner.png",
"name": "launch-banner.png"
}'{
"id": "9f2b1c3d-5a6e-4f70-8b91-2c3d4e5f6a70",
"name": "launch-banner.png",
"type": "IMAGE",
"url": "https://β¦signedβ¦",
"thumbnailUrl": null,
"size": 245760,
"createdAt": "2026-07-09T10:00:00.000Z"
}2. Create the post with an ISO 8601 schedule
Passing a datetime as schedule creates and schedules in one call:
curl -X POST https://api.nimply.io/v1/posts \
-H "Authorization: Bearer $NIMPLY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: launch-banner-2026-08-01" \
-d '{
"channelIds": ["123e4567-e89b-12d3-a456-426614174000"],
"content": "Launching something new today π",
"mediaIds": ["9f2b1c3d-5a6e-4f70-8b91-2c3d4e5f6a70"],
"schedule": "2026-08-01T09:00:00.000Z"
}'The response is an array β one post per channel id:
[
{
"id": "7a245d46-β¦",
"channelId": "123e4567-e89b-12d3-a456-426614174000",
"content": "Launching something new today π",
"contentType": "POST",
"status": "SCHEDULED",
"scheduledAt": "2026-08-01T09:00:00.000Z",
"publishedAt": null,
"mediaIds": ["9f2b1c3d-5a6e-4f70-8b91-2c3d4e5f6a70"]
}
]Gotchas
- The schedule time must be in the future; a past datetime fails validation (
422). - The response is always an array, even with a single channel id.
- Always send an
Idempotency-KeyonPOSTβ a timed-out retry then returns the original result instead of scheduling a duplicate. - To confirm it went live, subscribe to
post.published/post.failedwebhooks or poll the post.