Dynamo Developer DocsDynamo Developer Docs
Getting Started

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.

Signing helper
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.

On this page