For Developers

Error Codes

This page contains a list of common error responses you might come across while using the Edlink API. For a breakdown of how to process error responses, check out our guide on errors and warnings. When an API request encounters an error that we cannot handle, you'll receive a 500 response. If the request was proxied to an upstream data source (e.g. an LMS or SIS), you may also receive a pass through error from that system.

General Notes on Failed Requests

  • There is a maximum request size of 32MB for all requests to the Edlink API. If you exceed this limit, you will receive an error.
  • There is a connection timeout of 300 seconds. If your connection remains open (idle or not) for greater than 300 seconds, it will be terminated.

HTTP Response Codes

StatusCodeDescription
400ASSIGNMENT_CANNOT_HAVE_ZERO_POINTSAssignment must be worth more than zero points.
400ENTITY_NOT_PRESENT_IN_SOURCEThe current user or class is not present in the source system. This typically occurs when the user or class is only present in the source through data enrichment. For instance, a user who is only present in the SIS, but does not have a matching profile in the LMS.
400EXPIRED_TOKENThe token you provided, while it was valid at some point, is now expired.
400INTERNALThe server encountered an unexpected condition which prevented it from fulfilling the request.
400INVALID_TOKENYou must supply a valid access token to access this endpoint. Make sure that you're using the correct type of access token for the endpoint you're trying to access.
400INVALID_REQUEST_BODYYour request body was invalid.
400INVALID_PROVIDER_TOKENThe person that the token belongs to has not signed in to Edlink with their provider account, or their provider tokens have expired, in which case they should sign out and back in again.
400INVALID_INTEGRATION_STATEThe integration associated with the provided access token is not in the correct state to perform the requested action. You must set the integration to active or paused.
400INVALID_UUIDYou have provided a UUID in an invalid format. UUIDs must be in the UUID v4 or v5 format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, where each x is a hexadecimal digit. All Edlink IDs are valid v4 UUIDs.
400IDEMPOTENCY_KEY_TOO_LONGThe supplied $idempotency key may not be longer than 255 characters. Please review our guide on idempotency.
400INVALID_CURSORThe supplied cursor is invalid. Please review our guide on pagination.
400INVALID_PAGE_SIZEFor rostering endpoints, the requested page size must be between 1 and 10000. For other endpoints, the maximum page size varies based on the current provider. Omit the $first parameter to use the default page size. Please review our guide on pagination.
400INVALID_SUBMISSION_TYPEOne or more submission_types are invalid.
400INVALID_ASSIGNEESOne or more assignee_ids must be provided when the assignee_mode is individual. Each ID should be that of a Person. The assignee_ids must be valid Edlink IDs, and they must all be enrolled in the associated class.
400INVALID_TASK_TYPEThe task type that was submitted is invalid.
400INCORRECT_STATEThe state of your job is invalid for the requested behavior.
400INVALID_STATE_TRANSITIONJob state can only be updated from draft to queued.
400ID_NOT_PROVIDEDWhen creating, updating, or deleting entities, an id must be specified.
400INVALID_DATE_STRINGFailed to parse the given date field as a datetime. Datetime strings must be in ISO-8601 format.
400INVALID_DATE_ORDERThe display_date, start_date, due_date, and end_date were out of order. The must appear in the order of display_date, start_date, due_date, end_date.
400INVALID_ATTACHMENT_TYPEYour attachment must have a valid attachment type. The must be of type File or Link.
400MISSING_REQUIRED_FIELDOne or more required fields are missing.
404NOT_FOUNDThe requested resource could not be found.
403NO_PERMISSIONThe person that the token belongs to does not have permission to perform the requested action.
500UNKNOWNThe server encountered an unexpected condition which prevented it from fulfilling the request.
400UNSUPPORTED_OPERATIONThe current provider does not support the requested operation.
400UNSHARED_TOKENThe person that this token is associated with is no longer shared with the integration. You should adjust your sharing rules to allow this person to access the integration.
400UNKNOWN_PROVIDEREdlink could not find the proper provider for the authenticated person or integration.
400NOT_IMPLEMENTEDThe method you are trying to call has not been implemented.
400ALREADY_EXISTSThe entity you are trying to create already exists.
429TOO_MANY_REQUESTSYou have exceeded the rate limit for Edlink.
429TOO_MANY_REQUESTS_FOR_SOURCEYou have exceeded the rate limit for the source.

Blackboard HTTP Response Codes

StatusCodeDescription
400BLACKBOARD_CANNOT_RETURN_WITHOUT_ATTEMPTCannot return a submission that has not yet had any attempts made on it. An attempt is a record of a person's submitted work for an assignment.
400BLACKBOARD_CANNOT_SET_GRADE_WITHOUT_ATTEMPTCannot add grade_points or grade_comment to a submission without any attempts. An attempt is a record of a person's submitted work for an assignment.

Brightspace HTTP Response Codes

| Status | Code | Description | | ------ | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------- | | 400 | BRIGHTSPACE_DISALLOWED_CHARACTER | Text submitted contains characters not allowed by Brightspace. These characters are as follows ', /, ", <, >, |, +, =, ,, %. | | 400 | BRIGHTSPACE_UNSUPPORTED_GRADING_TYPE | An unsupported grading type was given, Brightspace only supports the points grading type. | | 400 | BRIGHTSPACE_INVALID_SUBMISSION_TYPE | Brightspace submissions must provide exactly one entry in 'attachments' | | 400 | BRIGHTSPACE_POINTS_REQUIRED | Brightspace requires the grade_points field to be specified when updating a submission. |

Canvas HTTP Response Codes

StatusCodeDescription
400CANVAS_TEST_STUDENT_DENIEDWe do not sync Canvas test students and they cannot be used to sign in via Edlink API connections.
400CANVAS_UNSUPPORTED_MULTIPLE_ATTEMPTSCanvas does not support multiple attempts. Please include fewer than two attempts.
400CANVAS_UNSUPPORTED_MULTIPLE_ATTACHMENTSCanvas does not support multiple attachments for an attempt.
400CANVAS_INVALID_URL_SCHEMECanvas link submissions must have an 'http' or 'https' url.
400CANVAS_CANNOT_DELETE_CATEGORY_WITH_ASSIGNMENTSCannot delete a Canvas category that contains assignments.
400CANVAS_INVALID_SUBMISSION_TYPEYour submission type is invalid in Canvas. Valid types are link, file, discussion, assessment, and text.
400CANVAS_UNSUPPORTED_GRADING_TYPECanvas only supports the following grading types pass_fail, percent, letter_grade, and points.
400CANVAS_LTI_PERMISSION_DENIEDEdlink cannot submit grades for an LTI assignment that does not belong to your application.
400CANVAS_LTI_NO_SUBMISSIONEdlink cannot submit grades for an LTI submission that has never been launched by the respective student.
400CANVAS_UNPUBLISHED_CLASSYou cannot create an assignment for an unpublished Canvas class. Please publish this class in Canvas and try again.
400CANVAS_NO_GRADING_SCHEME_FOUNDAssignment grading_type was set, but no grading scheme was found in Canvas for the class.
400CANVAS_INVALID_GRADEThe assignment grading_type is pass_fail, but the grade value for submission is not pass or fail.

Google HTTP Response Codes

StatusCodeDescription
400GOOGLE_INVALID_ATTACHMENT_TYPEYour attachment type is not supported by Google.
400GOOGLE_INVALID_SUBMISSION_TYPEYour submission type is not supported by Google.
400GOOGLE_INVALID_ASSIGNEE_MODEYour submitted assignee mode is not supported by Google (only all or individuals may be specified).
400GOOGLE_PROJECT_PERMISSION_DENIEDDue to a limitation in Google Classroom, you can only modify your own assignments and submissions using the API.
400GOOGLE_CATEGORY_NAME_TOO_LONGGoogle category names cannot exceed 100 characters.
400GOOGLE_CATEGORY_NAME_INVALIDYou must specify a valid name for the category.
400GOOGLE_ASSIGNMENT_ALREADY_SUBMITTEDThe assignment has already been submitted. In order to change it, you should first reclaim it.
400GOOGLE_DUE_DATE_FUTUREAssignments in Google Classroom must have a due date in the future.

LTI HTTP Response Codes

StatusCodeDescription
400LTI_UNSUPPORTED_MULTIPLE_ATTEMPTSLTI does not support multiple submission attempts. Please include fewer than two attempts.

Microsoft HTTP Response Codes

StatusCodeDescription
400MICROSOFT_UNSUPPORTED_GRADING_TYPEMicrosoft does not support the selected grading type.
400MICROSOFT_ASSIGNMENT_TITLE_MAX_LENGTHMicrosoft has a 70 character limit on assignment titles.
400MICROSOFT_ASSIGNMENT_MAX_END_DATEMicrosoft only allows assignment end dates up to 365 days in the future.
400MICROSOFT_ASSIGNMENT_MAX_DISPLAY_DATEMicrosoft only allows assignment display dates up to 365 days in the future.
400MICROSOFT_INVALID_ATTACHMENT_TYPEMicrosoft does not support attachments of this type.
400MICROSOFT_ASSIGNMENT_ALREADY_SUBMITTEDThe assignment has already been submitted. In order to change it, you should first reclaim it.
400MICROSOFT_CANNOT_MODIFY_DISPLAY_DATEMicrosoft does not allow modification of display_date after an assignment has been published.
400MICROSOFT_CANNOT_MODIFY_ASSIGNEE_MODEMicrosoft does not allow modification of assignee_mode after an assignment has been created.
400MICROSOFT_INVALID_ASSIGNEE_MODEMicrosoft does not support the selected assignee mode (only all or individuals may be specified).

Schoology HTTP Response Codes

| Status | Code | Description | | ------ | --------------------------------------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 400 | SCHOOLOGY_INVALID_SESSION | The schoology session you are accessing is invalid. | | 400 | SCHOOLOGY_CANNOT_DELETE_CATEGORY_WITH_ASSIGNMENTS | A Schoology category that contains assignments cannot be deleted. | | 400 | SCHOOLOGY_UNSUPPORTED_MULTIPLE_ATTACHMENTS | Schoology does not support multiple attachments for an attempt. | | 400 | SCHOOLOGY_UNSUPPORTED_LINK_SUBMISSION | Schoology does not support link submissions. | | 400 | SCHOOLOGY_INVALID_ATTACHMENT_TYPE | Schoology does not support this attachment type. | | 400 | | SCHOOLOGY_NO_VALID_ASSIGNEES | There were no 'assignee_ids' that matched a 'person_id' enrolled in the class. Schoology will automatically assign this assignment to all students if no valid assignees are provided. |

StatusCodeDescription
400CLEVER_LIBRARY_DISABLEDClever Library is disabled for your application and districts should share roster data via Secure Sync.
400CLEVER_API_VERSION_DISABLEDYou are trying to access a version of the Clever API that is not enabled for your Clever team. You can configure which version you are accessing via the Edlink application settings page.
400CLEVER_DATA_NOT_AVAILABLECurrently unused.

Clever HTTP Response Codes

StatusCodeDescription
400CLASSLINK_MISSING_SOURCED_IDEdlink requires all Classlink Launchpad users to have a valid sourcedID that matches their sourcedID on Classlink Roster Server.
400CLASSLINK_LAUNCHPAD_DISABLEDYour application is configured such that Edlink will reject SSO requests that initiate from the Classlink Launchpad.

These are codes that you receive specifically for errors that may occur during the OAuth 2.0 authentication process. You will only receive these error codes if you have enabled the SSO Error Behavior flag. You can find this flag on the Application > Feature Flags page of the Edlink dashboard.

Codes will be passed back to you via the error query parameter in the redirect URI. For example, if you have specified https://example.com/edlink/sso as your redirect URI, you will receive the following redirect URI if the user is trying to sign into a disabled integration:

https://example.com/edlink/sso?error=INVALID_INTEGRATION_STATE

You will also receive your state parameter back in the redirect URI. This is the same state parameter that you passed to Edlink in the initial authorization request. You can use this to identify the user that was trying to sign in.

CodeDescription
INVALID_STATEThe state query parameter you passed to Edlink was missing or invalid.
INVALID_INTEGRATION_STATEThe integration that the user is trying to access must be in the active or paused state.
INVALID_AUTHORIZATION_CODEThe code you tried to exchange in your POST body was invalid.
INVALID_PROVIDERThe source for this integration is not a valid SSO provider.
INVALID_REDIRECT_URIYou did not provide a redirect_uri or the one you provided was not on your list of valid redirect URIs.
INVALID_CLIENT_IDYou did not provide a client_id or the one you provided was not valid.
INVALID_INTEGRATION_IDYou did not provide a valid integration_id or the one you provided was not owned by your application.
INSTANT_LOGIN_DISABLEDYou do not have a valid login cookie to utilize instant login.
INVALID_ALTERNATIVE_LOGIN_URLSome LMS providers allow for multiple entry points into their SSO flow and you may have provided one that was not valid. This error is extremely rare and not one that you'll come across unless you have a particular district who utilizes multiple login URLs.
UNKNOWNThe SSO request failed for an unknown reason.

LTI & OIDC Error Codes

These codes will only be passed to you if the end user (e.g. a student or teacher) is using the LTI 1.1 / 1.3 login flow, or some other OIDC-based login flow.

CodeDescription
NO_LTI_CONSUMER_KEYNo LTI consumer key was provided in the POST body of the LTI 1.1 request.
INVALID_LTI_CONSUMER_KEYAn LTI consumer key was provided in the POST body of the LTI 1.1 request, but it was not found or it did not belong to your application.
INVALID_LTI_SIGNATUREThe signature of the LTI 1.1 request did not match the provided consumer key and shared secret.
INVALID_LTI_TIMESTAMPThe timestamp of the LTI 1.1 request was greater than 1 minute old (or more than 1 minute in the future).
INVALID_LTI_ROLESThe LTI launch request must contain an array of at least one valid role.
INVALID_LTI_MESSAGE_TYPEThe LTI 1.3 launch request contained an invalid message type.
INVALID_KEYSET_URLThe keyset URL entered into Edlink during source configuration was invalid.
INVALID_KEYSETThere were no valid keys in the keyset.
INVALID_JWTThe OIDC JWT was not valid.
INVALID_JWT_MISSING_KIDThe OIDC JWT was missing the kid field.
KID_NOT_FOUND_IN_KEYSETThe OIDC JWT contained a kid, but the specified key ID was not found in your keyset.
INVALID_LTI_VERSIONThe LTI 1.3 version claim must say 1.3.0.
INVALID_JWT_SUBJECTThe JWT sub claim was missing or invalid.
INVALID_LTI_DEPLOYMENT_IDThe LTI 1.3 deployment ID claim was missing or invalid.
INVALID_LTI_RESOURCE_LINK_CLAIMThe LTI 1.3 resource link claim was missing or invalid.
INVALID_LAUNCH_CONTEXTThe launch context that Edlink added to the end of the LTI launch link was not valid. This typically only applies to Canvas Speedgrader launches.
INVALID_OIDC_CONFIGURATIONNo OIDC authentication endpoint was provided.
INVALID_ISSUERNo issuer value was provided in the query parameters or request body.
INVALID_LTI_CLIENT_ID_ISSUER_PAIRNo integration was found matching the LTI client ID and issuer that you provided.
CLASS_NOT_SHAREDThe class context into which the user launched was valid, but it was not shared with your application via Edlink sharing rules.
PERSON_NOT_SHAREDThe person who launched is either not synced or not shared with your application via Edlink sharing rules.
INVALID_LTI_RETURN_URLThe LTI 1.3 deep linking return URL was invalid.
LTI_LAUNCH_ERRORThe LTI launch request failed for an unknown reason.
INVALID_CUSTOM_PARAMETERSThe custom parameters provided in the LTI launch request were invalid or missing.
INVALID_RESPONSE_TYPEThe response type provided in the OIDC or LTI request was invalid.
INVALID_SCOPEThe scope provided in the OIDC or LTI request was invalid.
MISSING_INITIATION_URLThe initiation URL for the OIDC or LTI request was missing.

Powerschool Error Codes

CodeDescription
POWERSCHOOL_INCORRECT_SCORE_TYPEThe score type you provided was not valid.

Skyward Error Codes

CodeDescription
SKYWARD_CLASS_NOT_IN_SESSIONThe specified class is not part of an active session.