Get a week's order

read

The week's order: every unit, its window and its affidavit.

GEThttps://affiliates.radioworkflow.com/api/v1/affiliations/{id}/weeks/{week}
Read: this changes nothing.

The whole order for one broadcast week: every ROS unit with its window, copy and affidavit, every show day with its spots and certificate, the versions the network has published, the week's creatives and the station's shows.

Windows and times are minutes after midnight in the station's time zone (affiliation.timezone): 360 is 6:00 AM and 1139 is 6:59 PM. now is the station's date and minute when the week was read; a unit takes a time once its window has closed.

The report endpoints check what you read here. Send week.epoch and each unit's or show day's rev back unchanged: when the network reopens the week the epoch moves and a report built on the older read answers 409 epoch_changed, and an item someone else changed answers rev_conflict with its current value.

Send known_version with the version you hold to learn whether the order changed: notModified is true when it did not. Affidavit state is always current. Reading a week records that the station has seen its latest version. A week the network has not published answers week.published false with empty lists.

Authentication

Send a station key as Authorization: Bearer rwaff_k_.... A key with the read scope. Keys and scopes

Path parameters

idstring1 to 64 charactersrequired
The affiliation id from GET /v1/affiliations: one station's relationship with one network.
weekdaterequired
Monday of the broadcast week, YYYY-MM-DD. Any other day answers 400.

Query parameters

known_versionintegerat least 0optional
The version you already hold. notModified says whether the order has changed since.

Response

200application/jsonThe station, its clock, the week, the week's creatives and the station's shows.

Response schema

affiliationAffiliationrequired
nowNowrequired
weekOrderWeekrequired
creativesCreative[]required
showsShowVehicle[]required
notModifiedbooleanrequired
Affiliation23 fields
idstringrequired
networkNamestringrequired
networkShortstringrequired
stationCallstringrequired
stationNamestringrequired
marketstringrequired
lane"portal" | "radioworkflow"required
canSignbooleanrequired
canReportbooleanrequired
role"view" | "report" | "sign"required
readOnlybooleanrequired
timezonestringrequired
networkContactobjectrequired
networkContact.namestringrequired
networkContact.titlestringrequired
networkContact.emailstringrequired
networkContact.phonestringrequired
deadlineRulestringrequired
audioDeliverystringrequired
vehiclesobject[]required
vehicles[].idstringrequired
vehicles[].namestringrequired
vehicles[].kind"show" | "ros"required
Now4 fields
datedaterequired
minutesinteger (0 to 1439)required
tsintegerrequired
timezonestringrequired
OrderWeek22 fields
startdaterequired
daysdate[]required
versionintegerrequired
state"signed" | "ready_to_sign" | "in_progress" | "published"required
duestringrequired
dueAtintegerrequired
epochintegerrequired
revintegerrequired
publishedbooleanrequired
signedobjectoptional
signed.namestringrequired
signed.titlestringrequired
signed.atstringrequired
signed.atTsintegerrequired
signed.via"portal" | "mcp"required
signed.latebooleanrequired
showsShowWeek[]required
rosNamestringoptional
unitsAffiliateUnit[]required
removedAffiliateUnit[]required
revisionsRevision[]required
acknowledgedVersionintegerrequired
Creative15 fields
idstringrequired
advertiserstringrequired
titlestringrequired
iscistringrequired
lengthintegerrequired
flightStartdaterequired
flightEnddaterequired
audioReadybooleanrequired
replacesstringoptional
instructionsstringoptional
cartstringrequired
timesThisWeekintegerrequired
mediaStatus"ready" | "pending" | "external"required
audioUrlstringoptional
audioUrlExpiresAtintegeroptional
ShowVehicle11 fields
idstringrequired
namestringrequired
kind"daily" | "weekend"required
daysinteger[] (0 to 6)required
hoursinteger (0 to 24)required
breakCountintegerrequired
usualStartinteger (0 to 1439)optional
usualEndinteger (0 to 1439)optional
localBreaksobject[]required
localBreaks[].hourinteger (1 to 24)required
localBreaks[].breakNumberinteger (1 to 1000)required
ShowWeek12 fields
showShowVehiclerequired
showNumberstringrequired
spotsShowSpot[]required
removedShowSpot[]required
airingsShowAiring[]required
breaksobject[]required
breaks[].hourinteger (1 to 24)required
breaks[].breakNumberinteger (1 to 1000)required
breaks[].localbooleanrequired
excludedDaysobject[]required
excludedDays[].datedaterequired
excludedDays[].reasonstringrequired
AffiliateUnit27 fields
idstringrequired
datedaterequired
daypartstringrequired
windowStartinteger (0 to 1439)required
windowEndinteger (0 to 1439)required
creativeIdstringrequired
advertiserstringrequired
productstringrequired
titlestringrequired
iscistringrequired
lengthintegerrequired
cartstringrequired
status"pending" | "aired" | "outside" | "not_aired"required
airedAtinteger (0 to 1439)optional
airedDatedateoptional
reasonstringoptional
source"portal" | "log_upload" | "rw_log" | "network" | "api" | "mcp"optional
addedInVersionintegerrequired
removedInVersionintegeroptional
kind"dated" | "weekly"required
weekStartdaterequired
allowedDaysdate[]optional
revintegerrequired
copyStatus"ready" | "to_follow"required
instructionsstringoptional
rwState"confirmed" | "not_confirmed"optional
flagsstring[]required
Revision9 fields
versionintegerrequired
publishedAtstringrequired
publishedAtTsintegerrequired
summarystringrequired
changesChange[]required
acknowledgedobjectoptional
acknowledged.bystringrequired
acknowledged.atstringrequired
acknowledged.atTsintegerrequired
ShowSpot15 fields
idstringrequired
showIdstringrequired
datedaterequired
hourinteger (1 to 24)required
breakNumberinteger (1 to 1000)required
breakNote"Not on the break map" | "Now a local break"optional
positionintegerrequired
creativeIdstringrequired
advertiserstringrequired
productstringrequired
titlestringrequired
iscistringrequired
lengthintegerrequired
addedInVersionintegerrequired
removedInVersionintegeroptional
ShowAiring12 fields
keystringrequired
showIdstringrequired
datedaterequired
status"pending" | "carried" | "not_carried"required
startinteger (0 to 1439)optional
endinteger (0 to 1439)optional
uneditedbooleanoptional
dropped(object or object or object)[]optional
reasonstringoptional
source"portal" | "log_upload" | "rw_log" | "network" | "api" | "mcp"optional
airedDatedateoptional
revintegerrequired
Change9 fields
kind"initial" | "added" | "removed" | "changed" | "copy"required
vehiclestringoptional
datedateoptional
wherestringoptional
advertiserstringoptional
iscistringoptional
lengthintegeroptional
detailstringrequired
unitIdstringoptional

Errors

400bad_requestThe request is not valid: a path value, a query value or a body field is missing, malformed or out of range.
403forbiddenThe key is valid but cannot do this for this affiliation: the affiliation is not one of the key's, or the person who made the key lacks the role.
502upstream_failedThe service behind the API answered in a way the portal could not use.
Possible on every endpoint
401invalid_principalThe key is missing, malformed, unknown, revoked or expired; all of these answer the same way.
429rate_limitedToo many requests: the key's bucket, a daily limit or the failed sign-in brake refused this one.
500server_errorSomething went wrong on our side. The answer never carries internal detail.
503unavailableThe service is not available right now: it could not be reached, or it is not set up yet.

Every code, its fix and when to retry

Rate limits

Failed sign-ins per address10 per minuteportal:auth
Burst per key60 per minuteportal:key
Calls per key600 per 10 minuteskey:{prefix}

The limits and the RateLimit headers

MCP

An assistant calls this as the tool get_week, with the same input as one object. The MCP server
Request
curl -X GET 'https://affiliates.radioworkflow.com/api/v1/affiliations/srn-ksmt/weeks/2026-09-21' \
  -H "Authorization: Bearer $AFFILIATE_API_KEY"
Response200
{
  "affiliation": {
    "id": "srn-ksmt",
    "networkName": "Summit Radio Network",
    "networkShort": "SRN",
    "stationCall": "KSUMT-FM",
    "stationName": "KSUMT 101.5 The Summit",
    "market": "Cedar Falls",
    "lane": "portal",
    "canSign": false,
    "canReport": true,
    "role": "sign",
    "readOnly": false,
    "timezone": "America/Chicago",
    "networkContact": {
      "name": "Marcus Bell",
      "title": "Network Traffic Coordinator",
      "email": "affiliates@summit-sample.example",
      "phone": "(555) 010-2440"
    },
    "deadlineRule": "Friday after the broadcast week, 5:00 PM",
    "audioDelivery": "Delivered by the network's spot delivery service",
    "vehicles": [
      {
        "id": "show-wd",
        "name": "The Summit Show",
        "kind": "show"
      },
      {
        "id": "demo-ros",
        "name": "ROS",
        "kind": "ros"
      }
    ]
  },
  "now": {
    "date": "2026-09-24",
    "minutes": 630,
    "ts": 1790263800,
    "timezone": "America/Chicago"
  },
  "week": {
    "start": "2026-09-21",
    "days": [
      "2026-09-21",
      "2026-09-22",
      "2026-09-23",
      "2026-09-24",
      "2026-09-25",
      "2026-09-26",
      "2026-09-27"
    ],
    "version": 3,
    "state": "in_progress",
    "due": "Fri, Oct 2, 5:00 PM",
    "dueAt": 1790978400,
    "epoch": 1,
    "rev": 1,
    "published": true,
    "shows": [
      {
        "show": {
          "id": "show-wd",
          "name": "The Summit Show",
          "kind": "daily",
          "days": [
            0,
            1,
            2,
            3,
            4
          ],
          "hours": 5,
          "breakCount": 19,
          "usualStart": 1140,
          "usualEnd": 1439,
          "localBreaks": [
            {
              "hour": 2,
              "breakNumber": 5
            }
          ]
        },
        "showNumber": "#26-39",
        "spots": [
          {
            "id": "s-1sjkdlr",
            "showId": "show-wd",
            "date": "2026-09-21",
            "hour": 1,
            "breakNumber": 1,
            "position": 1,
            "creativeId": "mhcl-a",
            "advertiser": "Meridian Health Clinics",
            "product": "",
            "title": "Walk-In Care",
            "isci": "SR_MHCL0901030",
            "length": 30,
            "addedInVersion": 1
          }
        ],
        "removed": [],
        "airings": [
          {
            "key": "srn-ksmt:show-wd:2026-09-23",
            "showId": "show-wd",
            "date": "2026-09-23",
            "status": "pending",
            "rev": 1
          }
        ],
        "breaks": [
          {
            "hour": 1,
            "breakNumber": 1,
            "local": false
          },
          {
            "hour": 1,
            "breakNumber": 2,
            "local": false
          }
        ],
        "excludedDays": []
      }
    ],
    "rosName": "Summit ROS",
    "units": [
      {
        "id": "u-01oso1x",
        "date": "2026-09-22",
        "daypart": "ROS",
        "windowStart": 360,
        "windowEnd": 1139,
        "creativeId": "trhd",
        "advertiser": "Trailhead Outfitters",
        "product": "",
        "title": "Hunting Season Kickoff",
        "isci": "SR_TRHD0921060",
        "length": 60,
        "cart": "K90388",
        "status": "pending",
        "addedInVersion": 1,
        "kind": "dated",
        "weekStart": "2026-09-21",
        "rev": 1,
        "copyStatus": "ready",
        "flags": []
      }
    ],
    "removed": [],
    "revisions": [
      {
        "version": 3,
        "publishedAt": "Thu, Sep 24, 9:12 AM",
        "publishedAtTs": 1790259120,
        "summary": "1 added, 1 removed",
        "changes": [
          {
            "kind": "added",
            "vehicle": "The Summit Show",
            "date": "2026-09-24",
            "where": "Hour 2, Break 6",
            "advertiser": "Golden Grain Bakery",
            "isci": "SR_GGBK0901030",
            "length": 30,
            "detail": "Added inside the show. Nothing to schedule: it is in the show audio."
          }
        ]
      }
    ],
    "acknowledgedVersion": 2
  },
  "creatives": [
    {
      "id": "trhd",
      "advertiser": "Trailhead Outfitters",
      "title": "Hunting Season Kickoff",
      "isci": "SR_TRHD0921060",
      "length": 60,
      "flightStart": "2026-09-21",
      "flightEnd": "2026-10-25",
      "audioReady": true,
      "cart": "K90388",
      "timesThisWeek": 5,
      "mediaStatus": "ready"
    }
  ],
  "shows": [
    {
      "id": "show-wd",
      "name": "The Summit Show",
      "kind": "daily",
      "days": [
        0,
        1,
        2,
        3,
        4
      ],
      "hours": 5,
      "breakCount": 19,
      "usualStart": 1140,
      "usualEnd": 1439,
      "localBreaks": [
        {
          "hour": 2,
          "breakNumber": 5
        }
      ]
    }
  ],
  "notModified": false
}

Try it

Demo data, no key, nothing saved