Skip to content

Create a submission

POST
/v1/submissions
curl --request POST \
--url https://api.learningaide.ai/v1/submissions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example' \
--data '{ "paper_id": "example", "student": { "external_id": "example", "name": "example" }, "files": [ { "file_id": "example", "url": "https://example.com" } ], "metadata": { "additionalProperty": "example" }, "test_outcome": "graded" }'
Idempotency-Key
required
string
/^[\x21-\x7e]{1,255}$/

A unique value, such as a v4 UUID, that you reuse only to retry this request.

Media typeapplication/json
object
paper_id
required
string
>= 1 characters <= 64 characters
student
required
object
external_id
required
string
>= 1 characters <= 128 characters /^[^\u0000-\u001f\u007f]*$/
name
string
>= 1 characters <= 100 characters /^[^\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]*$/
files
required
Array<object>
>= 1 items <= 50 items
One of:
object
file_id
required
string
>= 1 characters <= 64 characters
url

An https:// URL.

string format: uri
<= 2048 characters /^[Hh][Tt][Tt][Pp][Ss]:///
metadata
object
<= 20 properties
key
additional properties
string
<= 500 characters
test_outcome
string
Allowed values: graded no_readable_answers file_unreadable insufficient_credits grading_failed

A new object was created. Its processing may continue in the background.

Media typeapplication/json
object
id
required
string
object
required
string
Allowed value: submission
livemode
required
boolean
paper_id
required
string
student
required
object
external_id
required
string
name
required
Any of:
string
status
required
string
Allowed values: queued processing graded released failed canceled
failure
required
Any of:
object
code
required
string
Allowed values: file_download_failed file_unreadable unsupported_file_type file_too_large too_many_pages image_too_small insufficient_credits credits_expired processing_timeout invalid_file_combination grading_failed
message
required
string
no_readable_answers
required
boolean
files
required
Array<object>
object
file_id
required
Any of:
string
pages
required
Any of:
integer
billing
required
object
status
required
string
Allowed values: pending held charged not_charged
pages
required
Any of:
integer
credits
required
Any of:
integer
score
required
Any of:
object
awarded
required
number
available
required
number
percentage
required
number
graded_at
required
Any of:
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:Z))$/
released_at
required
Any of:
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:Z))$/
metadata
required
object
key
additional properties
string
created_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:Z))$/
updated_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:Z))$/

Example

{
"object": "submission",
"status": "queued",
"failure": {
"code": "file_download_failed"
},
"billing": {
"status": "pending"
}
}
X-Request-Id
required
string

This request’s ID. Quote it when you contact support.

RateLimit-Limit
integer

Requests allowed per window.

RateLimit-Remaining
integer

Requests left in the current window.

RateLimit-Reset
integer

Seconds until the window resets.

Idempotent-Replayed
string
Allowed value: true

On the saved response to an earlier request with this Idempotency-Key.

An error (client docs, “Errors”).

Media typeapplication/json
object
error
required
object
type
required
string
Allowed values: invalid_request_error authentication_error billing_error permission_error rate_limit_error api_error
code
required
string
Allowed values: parameter_missing parameter_invalid parameter_unknown invalid_json idempotency_key_missing api_key_missing api_key_invalid api_key_revoked insufficient_credits credits_expired insufficient_scope ip_not_allowed account_suspended resource_missing route_not_found idempotency_key_reused idempotency_request_in_progress external_id_taken paper_not_ready paper_not_awaiting_review paper_in_progress paper_has_empty_question review_link_unavailable file_already_attached file_purpose_mismatch file_not_uploaded file_expired submission_exists submission_not_cancelable submission_not_releasable submission_in_progress result_not_available report_not_available too_many_webhook_endpoints request_too_large unsupported_media_type rate_limit_exceeded internal_error service_unavailable
message
required
string
param
required
Any of:
string
resource_id
required
Any of:
string
request_id
required
Any of:
string

Example

{
"error": {
"type": "invalid_request_error",
"code": "parameter_missing"
}
}
X-Request-Id
required
string

This request’s ID. Quote it when you contact support.

RateLimit-Limit
integer

Requests allowed per window.

RateLimit-Remaining
integer

Requests left in the current window.

RateLimit-Reset
integer

Seconds until the window resets.

Retry-After
integer

Seconds to wait before asking again.