---
title: "Save and optionally submit the calling person's assignment work"
description: "Online text and uploaded files are saved as the draft, then submitted for marking when submit is true. The assignment's dates, file limits, team rules and submission statement apply as they do on the assignment page.\n\n### Quire permissions\n\nRequired capability: `assignment/submit`.\n\nCredential scopes: `me:write`.\n\nThe acting subject must also be allowed to perform this action in the organisation."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Quire API › me

`POST /me/submissions`

Online text and uploaded files are saved as the draft, then submitted for marking when submit is true. The assignment's dates, file limits, team rules and submission statement apply as they do on the assignment page.

\### Quire permissions

Required capability: `assignment/submit`.

Credential scopes: `me:write`.

The acting subject must also be allowed to perform this action in the organisation.

## Authentication

Requires one of the following:

- `apiKey`, http, header `Authorization`, scopes: `me:write`
- `oauth2`, oauth2, scopes: `me:write`

## Header parameters

- `submitMyAssignment.header.Quire-Version` (string, optional) — The dated API revision to serve this request at. Omitted, the request is served at the revision the credential was issued against. The response echoes the revision actually applied.
  - format `date`
- `submitMyAssignment.header.Idempotency-Key` (string, optional) — A caller-chosen key making this request safe to retry. A replay of a completed request returns the recorded response with `Idempotency-Replayed: true`. Reusing a key for a different request is refused.
  - maxLength 255

## Request body

_Required._

- `submitMyAssignment.activity_id` (string, required) — The assignment activity.
  - format `uuid`; pattern `^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$`
- `submitMyAssignment.online_text` (any of, optional) — Plain text, or an editor document as the product stores it.
  - any of: `string`, `map<unknown>`
- `submitMyAssignment.file_ids` (array<string>, optional) — Files uploaded for this assignment; they replace the draft's files.
  - format `uuid`; pattern `^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$`
- `submitMyAssignment.expected_revision` (any of, optional) — The revision this change is based on, to refuse a lost update; the current one when absent.
  - any of: `integer`, `null`
- `submitMyAssignment.submit` (boolean, optional) — Submit for marking after saving. Without it the work stays a draft.
- `submitMyAssignment.accepted_statement` (string, optional) — The submission statement, when the assignment asks for one.
  - maxLength 100000

## Example request

```json
{
  "activity_id": "98dae057-958f-4b2f-9ed4-41f109afdc3f",
  "online_text": "string",
  "file_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "expected_revision": 9007199254740991,
  "submit": true,
  "accepted_statement": "string"
}
```

## Code samples

### cURL

```curl
curl --request POST \
  --url https://your-organisation.quirelms.com/api/v1/me/submissions \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "activity_id": "98dae057-958f-4b2f-9ed4-41f109afdc3f",
  "online_text": "string",
  "file_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "expected_revision": 9007199254740991,
  "submit": true,
  "accepted_statement": "string"
}
'
```

### TypeScript

```typescript
const url = 'https://your-organisation.quirelms.com/api/v1/me/submissions';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json', Authorization: 'Bearer <token>'},
  body: JSON.stringify({
    activity_id: '98dae057-958f-4b2f-9ed4-41f109afdc3f',
    online_text: 'string',
    file_ids: ['497f6eca-6276-4993-bfeb-53cbbbba6f08'],
    expected_revision: 9007199254740991,
    submit: true,
    accepted_statement: 'string'
  })
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://your-organisation.quirelms.com/api/v1/me/submissions"

payload = {
    "activity_id": "98dae057-958f-4b2f-9ed4-41f109afdc3f",
    "online_text": "string",
    "file_ids": ["497f6eca-6276-4993-bfeb-53cbbbba6f08"],
    "expected_revision": 9007199254740991,
    "submit": True,
    "accepted_statement": "string"
}
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <token>"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

## Responses

### 201

Success.

#### Example

```json
{
  "id": "string",
  "activity_id": "string",
  "state": "string",
  "attempt": -9007199254740991,
  "revision": -9007199254740991,
  "submitted_at": "string",
  "is_late": true,
  "word_count": -9007199254740991,
  "latest": true
}
```

- `submitMyAssignment.response.201.id` (string, required)
- `submitMyAssignment.response.201.activity_id` (string, required)
- `submitMyAssignment.response.201.state` (string, required)
- `submitMyAssignment.response.201.attempt` (integer, required)
  - min -9007199254740991; max 9007199254740991
- `submitMyAssignment.response.201.revision` (integer, required)
  - min -9007199254740991; max 9007199254740991
- `submitMyAssignment.response.201.submitted_at` (string | null, required)
- `submitMyAssignment.response.201.is_late` (boolean, required)
- `submitMyAssignment.response.201.word_count` (any of, required)
  - any of: `integer`, `null`
- `submitMyAssignment.response.201.latest` (boolean, required)

### 401

The credential is missing, malformed, expired or revoked.

#### Example

```json
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "code": "string",
  "category": "validation",
  "detail": "string",
  "request_id": "string",
  "errors": [
    {
      "path": "string",
      "code": "string",
      "detail": "string"
    }
  ],
  "retry_after": 0,
  "docs_url": "http://example.com"
}
```

- `submitMyAssignment.response.401.type` (string, required)
  - format `uri`
- `submitMyAssignment.response.401.title` (string, required)
- `submitMyAssignment.response.401.status` (integer, required)
- `submitMyAssignment.response.401.code` (string, required)
- `submitMyAssignment.response.401.category` (string, required)
  - one of `"validation"`, `"authentication"`, `"authorization"`, `"not_found"`, `"conflict"`, `"precondition"`, `"quota"`, `"rate_limit"`, `"upstream"`, `"internal"`
- `submitMyAssignment.response.401.detail` (string, required)
- `submitMyAssignment.response.401.request_id` (string, required)
- `submitMyAssignment.response.401.docs_url` (string, required)
  - format `uri`
- `submitMyAssignment.response.401.errors` (array<object>, optional)
  - `submitMyAssignment.response.401.errors.path` (string, required) — RFC 6901 JSON Pointer into the request body.
  - `submitMyAssignment.response.401.errors.code` (string, required)
  - `submitMyAssignment.response.401.errors.detail` (string, required)
- `submitMyAssignment.response.401.retry_after` (integer | null, optional)

### 403

The credential lacks the scope this operation requires, or the acting subject lacks the capability.

#### Example

```json
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "code": "string",
  "category": "validation",
  "detail": "string",
  "request_id": "string",
  "errors": [
    {
      "path": "string",
      "code": "string",
      "detail": "string"
    }
  ],
  "retry_after": 0,
  "docs_url": "http://example.com"
}
```

- `submitMyAssignment.response.403.type` (string, required)
  - format `uri`
- `submitMyAssignment.response.403.title` (string, required)
- `submitMyAssignment.response.403.status` (integer, required)
- `submitMyAssignment.response.403.code` (string, required)
- `submitMyAssignment.response.403.category` (string, required)
  - one of `"validation"`, `"authentication"`, `"authorization"`, `"not_found"`, `"conflict"`, `"precondition"`, `"quota"`, `"rate_limit"`, `"upstream"`, `"internal"`
- `submitMyAssignment.response.403.detail` (string, required)
- `submitMyAssignment.response.403.request_id` (string, required)
- `submitMyAssignment.response.403.docs_url` (string, required)
  - format `uri`
- `submitMyAssignment.response.403.errors` (array<object>, optional)
  - `submitMyAssignment.response.403.errors.path` (string, required) — RFC 6901 JSON Pointer into the request body.
  - `submitMyAssignment.response.403.errors.code` (string, required)
  - `submitMyAssignment.response.403.errors.detail` (string, required)
- `submitMyAssignment.response.403.retry_after` (integer | null, optional)

### 409

The request conflicts with the current state, with a previous use of the same idempotency key, or with a concurrent write.

#### Example

```json
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "code": "string",
  "category": "validation",
  "detail": "string",
  "request_id": "string",
  "errors": [
    {
      "path": "string",
      "code": "string",
      "detail": "string"
    }
  ],
  "retry_after": 0,
  "docs_url": "http://example.com"
}
```

- `submitMyAssignment.response.409.type` (string, required)
  - format `uri`
- `submitMyAssignment.response.409.title` (string, required)
- `submitMyAssignment.response.409.status` (integer, required)
- `submitMyAssignment.response.409.code` (string, required)
- `submitMyAssignment.response.409.category` (string, required)
  - one of `"validation"`, `"authentication"`, `"authorization"`, `"not_found"`, `"conflict"`, `"precondition"`, `"quota"`, `"rate_limit"`, `"upstream"`, `"internal"`
- `submitMyAssignment.response.409.detail` (string, required)
- `submitMyAssignment.response.409.request_id` (string, required)
- `submitMyAssignment.response.409.docs_url` (string, required)
  - format `uri`
- `submitMyAssignment.response.409.errors` (array<object>, optional)
  - `submitMyAssignment.response.409.errors.path` (string, required) — RFC 6901 JSON Pointer into the request body.
  - `submitMyAssignment.response.409.errors.code` (string, required)
  - `submitMyAssignment.response.409.errors.detail` (string, required)
- `submitMyAssignment.response.409.retry_after` (integer | null, optional)

### 422

The request was understood and its content is not valid. `errors` names each field.

#### Example

```json
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "code": "string",
  "category": "validation",
  "detail": "string",
  "request_id": "string",
  "errors": [
    {
      "path": "string",
      "code": "string",
      "detail": "string"
    }
  ],
  "retry_after": 0,
  "docs_url": "http://example.com"
}
```

- `submitMyAssignment.response.422.type` (string, required)
  - format `uri`
- `submitMyAssignment.response.422.title` (string, required)
- `submitMyAssignment.response.422.status` (integer, required)
- `submitMyAssignment.response.422.code` (string, required)
- `submitMyAssignment.response.422.category` (string, required)
  - one of `"validation"`, `"authentication"`, `"authorization"`, `"not_found"`, `"conflict"`, `"precondition"`, `"quota"`, `"rate_limit"`, `"upstream"`, `"internal"`
- `submitMyAssignment.response.422.detail` (string, required)
- `submitMyAssignment.response.422.request_id` (string, required)
- `submitMyAssignment.response.422.docs_url` (string, required)
  - format `uri`
- `submitMyAssignment.response.422.errors` (array<object>, optional)
  - `submitMyAssignment.response.422.errors.path` (string, required) — RFC 6901 JSON Pointer into the request body.
  - `submitMyAssignment.response.422.errors.code` (string, required)
  - `submitMyAssignment.response.422.errors.detail` (string, required)
- `submitMyAssignment.response.422.retry_after` (integer | null, optional)

### 429

A rate limit or a concurrency cap was reached. `Retry-After` says when to try again.

#### Example

```json
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "code": "string",
  "category": "validation",
  "detail": "string",
  "request_id": "string",
  "errors": [
    {
      "path": "string",
      "code": "string",
      "detail": "string"
    }
  ],
  "retry_after": 0,
  "docs_url": "http://example.com"
}
```

- `submitMyAssignment.response.429.type` (string, required)
  - format `uri`
- `submitMyAssignment.response.429.title` (string, required)
- `submitMyAssignment.response.429.status` (integer, required)
- `submitMyAssignment.response.429.code` (string, required)
- `submitMyAssignment.response.429.category` (string, required)
  - one of `"validation"`, `"authentication"`, `"authorization"`, `"not_found"`, `"conflict"`, `"precondition"`, `"quota"`, `"rate_limit"`, `"upstream"`, `"internal"`
- `submitMyAssignment.response.429.detail` (string, required)
- `submitMyAssignment.response.429.request_id` (string, required)
- `submitMyAssignment.response.429.docs_url` (string, required)
  - format `uri`
- `submitMyAssignment.response.429.errors` (array<object>, optional)
  - `submitMyAssignment.response.429.errors.path` (string, required) — RFC 6901 JSON Pointer into the request body.
  - `submitMyAssignment.response.429.errors.code` (string, required)
  - `submitMyAssignment.response.429.errors.detail` (string, required)
- `submitMyAssignment.response.429.retry_after` (integer | null, optional)

### 500

Something failed at our end. Quote `request_id` when reporting it.

#### Example

```json
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "code": "string",
  "category": "validation",
  "detail": "string",
  "request_id": "string",
  "errors": [
    {
      "path": "string",
      "code": "string",
      "detail": "string"
    }
  ],
  "retry_after": 0,
  "docs_url": "http://example.com"
}
```

- `submitMyAssignment.response.500.type` (string, required)
  - format `uri`
- `submitMyAssignment.response.500.title` (string, required)
- `submitMyAssignment.response.500.status` (integer, required)
- `submitMyAssignment.response.500.code` (string, required)
- `submitMyAssignment.response.500.category` (string, required)
  - one of `"validation"`, `"authentication"`, `"authorization"`, `"not_found"`, `"conflict"`, `"precondition"`, `"quota"`, `"rate_limit"`, `"upstream"`, `"internal"`
- `submitMyAssignment.response.500.detail` (string, required)
- `submitMyAssignment.response.500.request_id` (string, required)
- `submitMyAssignment.response.500.docs_url` (string, required)
  - format `uri`
- `submitMyAssignment.response.500.errors` (array<object>, optional)
  - `submitMyAssignment.response.500.errors.path` (string, required) — RFC 6901 JSON Pointer into the request body.
  - `submitMyAssignment.response.500.errors.code` (string, required)
  - `submitMyAssignment.response.500.errors.detail` (string, required)
- `submitMyAssignment.response.500.retry_after` (integer | null, optional)


Source: https://docs.quirelms.com/api/me/submitMyAssignment/index.md
