Bug - Due Date Outside Grading Period - OneRoster

@Todd DeSchuiteneer, we're having an issue creating assignments under certain conditions. It looks like Blackbaud may be converting due date timezones incorrectly.

The grading period we're using has a start date of 2025-08-01 and an end date of 2025-12-05.

Our assignment is due on December 5 at 11:59 PM Eastern Time. We send the due time in UTC, so the due date/time is December 6 at 4:59 AM: 2025-12-06T04:59:00.000Z. From my testing, I'm remembering that Blackbaud requires UTC here; correct me if I'm wrong. This time represents December 5 in the school's timezone in any case.

Blackbaud rejects the line item with the error message shown under "Actual result" below.

For background, here's the term/grading period that we're using. This is taken from the array returned by /terms:

{  "title": "1st Trimester",  "startDate": "2025-08-01",  "endDate": "2025-12-05",  "type": "term",  "parent": {    "sourcedId": "as-syr-0000-2026",    "href": "https://api.sky.blackbaud.com/afe-rostr/ims/oneroster/v1p1/academicSessions/as-syr-0000-2026",    "type": "academicSession"  },  "children": [    {      "sourcedId": "as-grp-0000-00001",      "href": "https://api.sky.blackbaud.com/afe-rostr/ims/oneroster/v1p1/academicSessions/as-grp-0000-00001",      "type": "academicSession"    }  ],  "schoolYear": "2026",  "sourcedId": "as-trm-0000-000001",  "status": "active",  "dateLastModified": "2025-04-25T15:30:46.983Z"}

Steps to reproduce:

  1. Prepare line item JSON.
  2. Due date: The last day of the grading period.
  3. Due time: 11:59 PM in the school's time zone, Eastern Time.
  4. Convert the due date, due time to UTC for OneRoster.
  5. Example (IDs have been anonymized):

    {    "lineItem": {        "title": "Due on the last day",        "description": "This assignment is due on the last day of the grading period.",        "assignDate": "2025-11-30T19:23:50.283Z",        "dueDate": "2025-12-06T04:59:00.000Z",        "class": {            "sourcedId": "cls-0000-111111111",            "href": null,            "type": "class"        },        "category": {            "sourcedId": "lic-0000-2222",            "href": null,            "type": "category"        },        "gradingPeriod": {            "sourcedId": "as-grp-0000-00001",            "href": null,            "type": "academicSession"        },        "resultValueMin": 0,        "resultValueMax": 100,        "sourcedId": "012345678900",        "status": "active",        "dateLastModified": null,        "metadata": null    }}
  6. Send the PUT request to https://api.sky.blackbaud.com/afe-rostr/ims/oneroster/v1p1/lineItems/$lineItemId

Expected result:

The line item is created successfully.

Actual result:

Error:

{     "statusInfoSet": [          {               "imsx_codeMajor": "failure",               "imsx_severity": "error",               "imsx_operationRefIdentifier": "putLineItem",               "imsx_description": "DueDateOutsideGradingPeriod",               "imsx_codeMinor": "invalid_data"          }     ]}

Answers

Categories