---
title: "Complete a module for a user"
description: "Marks progress as complete for a single user in a module, with an optional backdated completion timestamp."
contentType: "api-reference"
url: "https://developer.mindtickle.com/docs/training/modules/complete-a-module-for-a-user/"
---

## Prerequisites

1. [Authentication and setup](/docs/getting-started/authentication-and-setup/): A valid access token.
2. [Invite users to a module](/docs/training/modules/invite-users-to-a-module/): The user must be invited to the module and belong to the series.
3. [Search users](/docs/users-and-groups/users/search-users/): Get the Mindtickle user ID for the user.

## Endpoint

```http
POST /services/data/v4.0/mtobjects/Series/SID/Module/MODULE_ID/User/USER_ID/complete_progress
```

Replace `SID`, `MODULE_ID`, and `USER_ID` with the Mindtickle IDs of the series, the module, and the user.

Base URL: the standard REST host for your region. See [Base URLs](/docs/getting-started/authentication-and-setup/#base-urls).

Headers: `Authorization: Bearer ACCESS_TOKEN`, `Content-Type: application/json`.

## Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `SID` | string | Required | Mindtickle ID for the series. |
| `MODULE_ID` | string | Required | Mindtickle ID for the module. |
| `USER_ID` | string | Required | Mindtickle ID for the user. |

## Request

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `completed_on` | timestamp | Optional | Epoch timestamp, in seconds, indicating when the user should be marked as completed. |

### Request example

```json
{
  "completed_on": 1747226602
}
```

## Response

| Field | Type | Description |
| --- | --- | --- |
| `requestId` | string | Unique ID for tracking the request. |
| `completionStatus` | boolean | Indicates whether the user's progress was successfully marked as complete. |

### Response example

```json
{
  "requestId": "req_101",
  "completionStatus": true
}
```

## Errors

| Status | Error | Reason |
| --- | --- | --- |
| `400 Bad Request` | Invalid User Id | The format or value of user ID is incorrect. |
| `400 Bad Request` | User not part of the module! | User is not eligible for the specified module. |
| `400 Bad Request` | User not part of the module for the series! | User is not linked to both module and series. |
| `400 Bad Request` | Completion date cannot be smaller than invitation date! | Logical validation failure. |
| `400 Bad Request` | Invalid request body | Malformed or missing request payload. |
| `400 Bad Request` | Invalid date in epoch timestamp! | Date format or logic is invalid. |
| `400 Bad Request` | Future completion time not allowed! | Completion timestamp must not be in the future. |
| `429 Too Many Requests` | Too Many Requests | Rate limit is exceeded, retry after the seconds given in the `Retry-After` header. |
| `404 Not Found` | Invalid Module ID! | Provided module ID does not exist. |
| `500 Internal Server Error` | Failed to complete progress for users | General server-side failure completing progress. |
| `500 Internal Server Error` | Unable to complete progress for users | Processing issue during update. |
| `500 Internal Server Error` | Unknown exception while completing progress!! | Catch-all for unhandled runtime exceptions. |
| `500 Internal Server Error` | Unable to check user invitation! | Unexpected failure when validating invitation. |

## Notes

- **Defaults:** If `completed_on` is omitted or left blank, the current date and time is used by default.
- **User IDs:** Use the [Search users](/docs/users-and-groups/users/search-users/) API to get the Mindtickle user ID for a user.
- **Backdated invitations:** When migrating users or recording past progress, invite dates must align with completion dates. Completion APIs accept backdated completions as long as the learner's invitation date is also backdated appropriately. See [Backdated series invitations](/docs/training/series/invite-users-to-a-series/#backdated-series-invitations) and [Backdated module invitations](/docs/training/modules/invite-users-to-a-module/#backdated-module-invitations).
- **Supported module types:** Course, quick update, and assessment.
- **Limitations:** The module must be published and must be part of the specified series, and the user must belong to the series.
- **Scoring:** This API marks the user as 100% complete with a 100% score for the selected module. Partial or granular completion and scores cannot be recorded, and future-dated completions are not allowed.

## Related

- [Complete modules for multiple users](/docs/training/modules/complete-modules-for-multiple-users/): Complete the module for up to 50 users at once.
- [Invite users to a series](/docs/training/series/invite-users-to-a-series/): Backdate the series invitation before recording a past completion.
- [Invite users to a module](/docs/training/modules/invite-users-to-a-module/): Backdate the module invitation before recording a past completion.
