Quickstart
Draft and submit a social post for approval in four signed requests.
This walkthrough covers the end-to-end agent flow: find a channel, create a draft, submit it for approval, and read what's already live. Every request is signed — see Authentication for the details.
Set up a signing helper
These examples reuse a small bash helper that refreshes x-date and the signature
before each call.
KEY="<api key>"; SECRET="<secret>"
# Base URL from the environments table — already ends in /v1.
BASE="https://us-central1-seamless-pro.cloudfunctions.net/externalApi/v1"
sign() {
XDATE=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)
SIG=$(printf '%s' "$XDATE" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')
}
H() { echo -H "x-api-key: $KEY" -H "x-date: $XDATE" -H "x-signature: $SIG"; }Find a channel id
List the channels your org can post to. Use a returned id as the key in a scheduled
post's channels map.
sign; curl -s $(H) "$BASE/channels"[
{ "id": "FB_PAGE_123456789012345", "type": "FB_PAGE", "name": "Acme Sports" }
]See GET /channels.
Create a draft
Create a scheduled post with status: "DRAFT". A draft is permissive — no validation
of media, caption, or date — so it's the safest way to stage content.
sign
curl -s -X POST "$BASE/scheduled-posts" $(H) \
-H "Content-Type: application/json" -d '{
"status": "DRAFT",
"media": "https://res.cloudinary.com/demo/image/upload/sample.png",
"mediaType": "IMAGE",
"scheduledFor": "2026-07-01T13:00:00.000Z",
"channels": {
"FB_PAGE_123456789012345": { "mediumType": "FB_PAGE", "caption": "Hello 👋" }
}
}'The response (201) returns the created post — keep its id. See
POST /scheduled-posts.
Submit it for approval
Move the draft into the approval queue. This runs full publish validation (a future
scheduledFor, a media URL, ≥1 channel, and a caption per channel).
sign
curl -s -X POST "$BASE/scheduled-posts/<id>/submit-for-approval" $(H)A human then reviews and schedules it in the app. See Submit for approval.
Read what's live
Read the posts already published on a channel, with their engagement metrics.
sign; curl -s $(H) "$BASE/posts?mediumId=FB_PAGE_123456789012345&limit=10"See GET /posts.
The API can't take a post live. status may only be DRAFT or
WAITING_FOR_APPROVAL — the move to SCHEDULED (and publishing) is always done by a
human in the app. See the state machine.