API Docs/Reference/Set Posting Schedule
API Reference

Set Posting Schedule

Replace your recurring posting schedule grid. Requires a paid Creator or Lifetime plan.

PUThttps://api.linkedmash.com/v1/schedule

PUT /v1/schedule replaces the recurring posting schedule. Both timezone (an IANA name, as a string) and grid (an array) are required, and the write is a full replacement — the stored schedule becomes exactly what you send.

Each grid entry is a repeating slot: a wall-clock time plus the weekdays it applies to, for example { time: "8:30 am", days: { Mon: true, Wed: true, Fri: true } }. Together they define every candidate publishing time for 'next-slot' scheduling.

Example request

Authenticate with a bearer token in the Authorization header. Create a key on the API page in your LinkedMash settings and export it as LINKEDMASH_API_KEY before running this.

curl
curl -X PUT "https://api.linkedmash.com/v1/schedule" \
  -H "Authorization: Bearer $LINKEDMASH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "timezone": "America/New_York",
    "grid": [
      {
        "time": "8:30 am",
        "days": {
          "Mon": true,
          "Wed": true,
          "Fri": true
        }
      }
    ]
  }'

Header parameters

AuthorizationstringRequired

Your secret API key as a Bearer token.

Body parameters

timezonestringRequired

IANA timezone for the schedule.

gridarrayRequired

The schedule grid as [{ time, days }].

Response

{
  "status": true,
  "data": {
    "timezone": "America/New_York",
    "grid": [
      {
        "time": "8:30 am",
        "days": {
          "Mon": true,
          "Wed": true,
          "Fri": true
        }
      }
    ]
  }
}

Response fields

Every response is wrapped in the same envelope: a status flag and a data payload, with meta present where there is pagination or a plan limit to report.

statusboolean

true on success. Every LinkedMash API response carries this envelope flag alongside data, so a client can branch on it without re-reading the HTTP status.

data.timezonestring

The stored IANA zone, echoed back after the write.

data.gridarray

The stored slots. This is the whole schedule as it now stands — PUT replaces rather than merges, so anything absent here was deleted.

data.grid[].timestring

Wall-clock time in the stored timezone.

data.grid[].daysobject

Weekday flags for that slot.

Changing a posting schedule safely

This is a replace, so the risk is deleting slots you meant to keep.

1

Fetch the current grid

GET /v1/schedule first, always. There is no partial update and no merge — whatever you send becomes the entire schedule.

2

Modify the array locally

Append, edit or drop entries in your own copy, keeping the ones you are not changing.

3

Send timezone and grid together

Both are required. timezone must be a non-empty string and grid must be an array; the contents of each entry are not validated, so a malformed time is stored and simply never resolves to a slot.

4

Re-check the resolved slots

Call GET /v1/queue/slots afterwards. If it returns nothing, the grid is not producing usable times regardless of what the write returned.

5

Remember existing entries do not move

Posts already in the queue hold their own resolved timestamps. Changing the grid affects future slot resolution only.

Behaviour and limits

Requires a Creator or Lifetime plan

Everything under /v1/posts, /v1/queue, /v1/schedule, /v1/media and /v1/analytics sits behind one middleware that checks for an unlocked Studio, so a Reader-plan or free key gets 402 with code SUBSCRIPTION_REQUIRED before the handler runs. Bookmark and label reads are on a separate router and are not affected by this gate.

PUT means replace, not merge

Sending a one-entry grid deletes every other slot. Read GET /v1/schedule, append, and send the whole array back if you are adding to an existing schedule.

Validation is shallow by design

timezone must be a non-empty string and grid must be an array — both are checked before the write. The contents of each grid entry are not validated here, so a malformed time silently produces a slot that never resolves.

Changing the timezone reinterprets every slot

The grid stores wall-clock times, so moving the schedule from Europe/Berlin to America/New_York shifts every existing slot by the offset rather than keeping the same absolute times.

Already-scheduled posts do not move

Existing queue entries hold their own resolved timestamps. Editing the grid changes future slot resolution only; use the reschedule route to move something already queued.

Errors

Failures carry the same envelope as a success, with the reason in message and a stable machine-readable code where the status alone is ambiguous — several distinct conditions share a 402.

Status
Meaning
400Bad Request
timezone was missing or not a string, or grid was not an array.
401Unauthorized
The Authorization header is missing or the key is not a valid LinkedMash API key. Create or rotate keys on the API page in your LinkedMash settings.
402Payment Required
Returned with code SUBSCRIPTION_REQUIRED. The content API requires a Creator or Lifetime plan; Reader and free accounts get this on every /v1/posts, /v1/queue, /v1/schedule, /v1/media and /v1/analytics call.
500Server Error
Something failed on our side. The body carries message "Failed to update the posting schedule". Retry once; if it persists the request is not the problem.