Export, import and account deletion
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
multipart/form-data- body
file*FileSuccessful Response
application/json- response
id*Idstatus*Status"uploaded""importing""imported""failed"size_bytes*integer|nullpreview*report*|nullerror_code*string|nulljob_id*string|nullcreated_at*Created Atdate-timeexpires_at*Expires Atdate-timecurl -X POST 'https://example.com/me/imports' \ -F 'file=string'{ "id": "string", "status": "uploaded", "size_bytes": 0, "preview": { "exported_at": "2019-08-24T14:15:22Z", "app_version": "string", "include_files": true, "files_bytes": 0, "counts": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } }, "programs": [ { "id": "string", "name": "string", "term_count": 0, "course_count": 0 } ], "quota_exceeded": true, "unknown_modules": [ "string" ] }, "report": { "imported": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } }, "skipped": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } } }, "error_code": "string", "job_id": "string", "created_at": "2019-08-24T14:15:22Z", "expires_at": "2019-08-24T14:15:22Z"}semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
export_id*Export IdSuccessful Response
application/zipcurl -X GET 'https://example.com/me/exports/string/download'Irreversible. Signs out everywhere at once; the data is deleted by a background job. Not for agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
application/json- body
confirmation*ConfirmationThe typed confirmation sentence.
length <= 100acknowledged*AcknowledgedThe user ticked that this cannot be undone.
password?|Re-authentication when the last sign-in is older than 10 minutes.
Successful Response
application/json- response
id*Idkind*Kindstatus*Status"pending""running""succeeded""failed""cancelled"progress*Progressstep*string|nullstep_current*integer|nullstep_total*integer|nullresult*|nullerror_code*string|nullerror_params*|nullattempts*Attemptsmax_attempts*Max Attemptscancel_requested*Cancel Requestedcreated_at*Created Atdate-timestarted_at*|nullfinished_at*|nullwaiting?|nullcurl -X POST 'https://example.com/me:delete' \ -H 'Content-Type: application/json' \ -d '{ "confirmation": "string", "acknowledged": true}'{ "id": "string", "kind": "string", "status": "pending", "progress": 0, "step": "string", "step_current": 0, "step_total": 0, "result": {}, "error_code": "string", "error_params": {}, "attempts": 0, "max_attempts": 0, "cancel_requested": true, "created_at": "2019-08-24T14:15:22Z", "started_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z", "waiting": { "reason": "string", "until": "2019-08-24T14:15:22Z" }}Every table the portability adapters cover (the user data purged with the account, whether or not a backup exports it), and the caps some modules put on a table. Not for agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
Successful Response
application/json- response
tables*Rows the user has in each table the portability adapters cover (the user data purged with the account, exported or not), by table name
limits*Most rows a user may have, for the tables a module caps, by table name
curl -X GET 'https://example.com/me/data-counts'{ "tables": { "property1": 0, "property2": 0 }, "limits": { "property1": 0, "property2": 0 }}Newest first; expired exports are left out.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
Successful Response
application/json- response
items*array<>curl -X GET 'https://example.com/me/exports'{ "items": [ { "id": "string", "status": "pending", "include_files": true, "size_bytes": 0, "job_id": "string", "created_at": "2019-08-24T14:15:22Z", "expires_at": "2019-08-24T14:15:22Z" } ]}Runs as a background job; the file can be downloaded for 24 hours.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
application/json- body
include_files?Include FilesPack the stored files into the backup too.
falseSuccessful Response
application/json- response
id*Idstatus*Status"pending""ready""failed"include_files*Include Filessize_bytes*integer|nulljob_id*string|nullcreated_at*Created Atdate-timeexpires_at*Expires AtThe download link works until then.
date-timecurl -X POST 'https://example.com/me/exports' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "string", "status": "pending", "include_files": true, "size_bytes": 0, "job_id": "string", "created_at": "2019-08-24T14:15:22Z", "expires_at": "2019-08-24T14:15:22Z"}Not for agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
id*IdUpload id, as returned by the upload.
Successful Response
application/json- response
id*Idstatus*Status"uploaded""importing""imported""failed"size_bytes*integer|nullpreview*report*|nullerror_code*string|nulljob_id*string|nullcreated_at*Created Atdate-timeexpires_at*Expires Atdate-timecurl -X GET 'https://example.com/me/imports/string'{ "id": "string", "status": "uploaded", "size_bytes": 0, "preview": { "exported_at": "2019-08-24T14:15:22Z", "app_version": "string", "include_files": true, "files_bytes": 0, "counts": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } }, "programs": [ { "id": "string", "name": "string", "term_count": 0, "course_count": 0 } ], "quota_exceeded": true, "unknown_modules": [ "string" ] }, "report": { "imported": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } }, "skipped": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } } }, "error_code": "string", "job_id": "string", "created_at": "2019-08-24T14:15:22Z", "expires_at": "2019-08-24T14:15:22Z"}Not for agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
id*IdUpload id, as returned by the upload.
Successful Response
application/json- response
id*Idcurl -X DELETE 'https://example.com/me/imports/string'{ "id": "string"}Runs as a background job in one transaction. Not for agents.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
id*IdUpload id, as returned by the upload.
application/json- body
mode*Modemerge adds the backup as new data; replace deletes the current data first.
"merge""replace"program_ids?array<string>|Ids (from the preview) of the Programs to import; all if null.
include_preferences?Include PreferencesAlso import preferences, layouts and account-level settings.
falseconfirmation?|The typed confirmation sentence; required for replace.
Successful Response
application/json- response
id*Idstatus*Status"uploaded""importing""imported""failed"size_bytes*integer|nullpreview*report*|nullerror_code*string|nulljob_id*string|nullcreated_at*Created Atdate-timeexpires_at*Expires Atdate-timecurl -X POST 'https://example.com/me/imports/string:start' \ -H 'Content-Type: application/json' \ -d '{ "mode": "merge"}'{ "id": "string", "status": "uploaded", "size_bytes": 0, "preview": { "exported_at": "2019-08-24T14:15:22Z", "app_version": "string", "include_files": true, "files_bytes": 0, "counts": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } }, "programs": [ { "id": "string", "name": "string", "term_count": 0, "course_count": 0 } ], "quota_exceeded": true, "unknown_modules": [ "string" ] }, "report": { "imported": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } }, "skipped": { "property1": { "property1": 0, "property2": 0 }, "property2": { "property1": 0, "property2": 0 } } }, "error_code": "string", "job_id": "string", "created_at": "2019-08-24T14:15:22Z", "expires_at": "2019-08-24T14:15:22Z"}