Schedule posts with the REST API

Step-by-step guide
  • About 8 minutes
  • 6 steps
  • Growth and Agency
  • Checked 2 Nov 2026
0 of 6 steps done

Before you start

  • An API key with accounts:read, posts:read and posts:write - see Create and use an API key.
  • A tool that can send HTTPS requests, such as curl, Postman or your own code.

Steps

  1. Step 1

    Find your workspace

    Call /api/v1/me. It lists your workspaces and which one is used by default. To use another, send its id in the Skylane-Workspace-Id header.

    Who am Ishell
    curl https://skylane-api.moneymasterhq.com/api/v1/me \
      -H "Authorization: Bearer YOUR_API_KEY"
  2. Step 2

    Get your account ids

    List connected accounts and copy the id of each one you want to post to.

    List accountsshell
    curl https://skylane-api.moneymasterhq.com/api/v1/accounts \
      -H "Authorization: Bearer YOUR_API_KEY"
  3. Step 3

    Create and schedule in one call

    Send the caption, the account ids and a schedule. Add an Idempotency-Key so a retry after a network error never makes a second post. Leave out schedule to save a draft.

    Create a postshell
    curl -X POST https://skylane-api.moneymasterhq.com/api/v1/posts \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: blog-launch-1" \
      -d '{"caption": "Our new guide is live.", "accountIds": ["YOUR_ACCOUNT_ID"], "schedule": {"mode": "schedule", "scheduledAt": "2026-11-20T09:30:00Z"}}'
  4. Step 4

    Fix anything pre-flight finds

    If a platform would reject the post, you get 422 with error.issues: each issue names the account, the problem and how to fix it. Nothing is saved, so fix it and send the request again with a new idempotency key.

  5. Step 5

    Follow the result

    Call /results to see each account's state: scheduled, published with its url, or failed with error.message and error.fixHint. Or subscribe to webhooks to be told - see Receive Developer webhooks.

    Post resultsshell
    curl https://skylane-api.moneymasterhq.com/api/v1/posts/YOUR_POST_ID/results \
      -H "Authorization: Bearer YOUR_API_KEY"
  6. Step 6

    Add media

    Upload a file with POST /api/v1/media (multipart, field file) or import one with POST /api/v1/media/from-url, then put the returned id in mediaIds. Files get the same type, size and storage checks as in the app.

    Import from a linkshell
    curl -X POST https://skylane-api.moneymasterhq.com/api/v1/media/from-url \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"url": "https://example.com/photo.jpg", "altText": "What the photo shows"}'

Good to know

  • Other routes: GET /api/v1/posts (newest first, status and account_id filters), GET and PATCH and DELETE /api/v1/posts/{id}, POST /api/v1/posts/{id}/schedule, POST /api/v1/posts/{id}/cancel, GET /api/v1/accounts/{id}/queue and GET /api/v1/media.
  • Lists come back as data, hasMore and nextCursor. Pass cursor= with the nextCursor value for the next page.
  • Each key has its own limit (30, 60, 120 or 300 requests a minute). X-RateLimit-Remaining shows what is left; a 429 carries Retry-After.
  • The full machine-readable reference is at https://skylane-api.moneymasterhq.com/api/v1/openapi.json (opens in a new tab).

Common problems

403 "does not have the posts:write permission"

Create a key with that permission. A key's permissions cannot be changed after it is made.

403 "You need the contributor role"

The key belongs to someone who is only a Viewer in that workspace. Ask an admin to change their role.

422 "Idempotency-Key was already used for a different request"

Use a new key for each different post. Reuse a key only to retry the same request.

402 Payment required

The workspace owner's plan does not include the API, or a plan limit (such as Free's 15 posts a month) is reached.

Still stuck? Contact support

Tell us which step you reached and what you see on screen. A screenshot helps.