REST API¶
Turkle has a REST API for administration of users, groups, projects, and batches. A full OpenAPI schema of the API is available at /api/schema/.
The API uses integer identifiers for all the objects. These identifiers are included in the response when creating or listing objects. In the admin UI, the identifier is included in any URL for that object.
Client¶
ToDo
Authentication¶
It requires token-based authentication and tokens can be created per user in the admin UI. Once a token has been created, it is passed as a header in the request:
token = 'ABCDEF'
headers = {'Authorization': f'TOKEN {token}'}
resp = requests.get('http://localhost:8000/api/users/', headers=headers)
Users¶
Listing users¶
Perform a get on /api/users/. The response is paginated and includes next and previous links to walk the user list.
Creating a user¶
Perform a post on /api/users/. The payload at a minimum must include username and password:
{
"username": "jsmith",
"first_name": "John",
"last_name": "Smith",
"email": "jsmith@example.org",
"password": "p@ssw0rd"
}
Retrieving a user¶
Perform a get on /api/users/{id}/ where id is the user’s integer identifier.
To retrieve based on username. perform a get on /api/users/username/{username}/.
Update a user¶
Perform a patch on /api/users/{id}/ where id is the user’s integer identifier. The JSON payload is a dictionary of fields to update.
Groups¶
Listing groups¶
Perform a get on /api/groups/. The response is paginated and includes next and previous links to walk the list.
Creating a group¶
Perform a post on /api/groups/. The payload must include the name of the group and a list of user integer identifiers:
{
"name": "Spanish",
"users": [7, 34, 35, 36]
}
Retrieving a group¶
Perform a get on /api/groups/{id}/ where id is the group’s integer identifier.
To retrieve based on a group name. perform a get on /api/groups/name/{name}/. This will return a list of groups that exactly match that group name. It is a list since group names are not required to be unique in Turkle.
Adding users to a group¶
Perform a post on /api/groups/{id}/users/ where id is the group’s integer identifier.
The payload is a dictionary with a key of users which is a list of user integer identifiers.
Projects¶
Listing projects¶
Perform a get on /api/projects/. The response is paginated and includes next and previous links to walk the list.
Creating a project¶
Perform a post on /api/projects/. The payload must include the name of the project, the html template, and the template filename:
{
"name": "Image Contains",
"html_template": "<html>template as a string here</html>,
"filename": "image_contains.html"
}
Optional fields include active, allotted_assignment_time, assignments_per_task, and login_required.
Retrieving a project¶
Perform a get on /api/projects/{id}/ where id is the project’s integer identifier.
Update a project¶
Perform a patch on /api/projects/{id}/ where id is the project’s integer identifier. The JSON payload is a dictionary of fields to update and can include the html_template.
Batches¶
Listing batches¶
Perform a get on /api/batches/. The response is paginated and includes next and previous links to walk the list.
Creating a batch¶
Perform a post on /api/batches/. The payload must include the name of the batch, the project identifier, and the csv data and filename:
{
"name": "Bird Photos",
"project": 20,
"filename": "image_contains.csv",
"csv_text": "csv as string"
}
Optional fields include active, allotted_assignment_time, assignments_per_task, and login_required.
Retrieving a batch¶
Perform a get on /api/batches/{id}/ where id is the batch’s integer identifier.
Update a batch¶
Perform a patch on /api/batches/{id}/ where id is the batch’s integer identifier. The JSON payload is a dictionary of fields to update and cannot include the csv data. If a bad batch was created, delete it using the admin UI.
Additional tasks can be added to an existing batch by a post to /api/batches/{id}/tasks/. The payload is a dictionary with a key of csv_text. The fields in the CSV data must match the fields in html template of the project.
Batch status¶
To download the input data for a batch as a CSV file, do a get on /api/batches/{id}/input/.
To download the results data for a batch as a CSV file, do a get on /api/batches/{id}/results/.
To get up-to-date progress for a batch, do a get on /api/batches/{id}/progress/.
Permissions¶
Projects and Batches can be restricted to particular users or groups. To retrieve the current permissions, perform a get on /api/projects/{id}/permissions/ (replacing “projects” with “batches” to get a batch’s permissions).
To add additional users and groups to a project’s permissions, perform a post on /api/projects/{id}/permissions/ with a payload of users and groups:
{
"users": [],
"groups": [29, 63]
}
To replace the current permissions for a project, perform a put on the endpoint.