Getting started and Authentication
The PythonAnywhere API uses token-based authentication. You can get your token
from your Account page on the API Token tab.
It's used in a header called Authorization
, and the value is encoded as the
string "Token", followed by a space, followed by your token, like this:
'Authorization': 'Token {}'.format(token)
For example, this code using the requests
module would get the details of your
CPU usage on PythonAnywhere; you would just need to change the three variables
at the top to match your actual username, your API token, and the correct host:
-
www.pythonanywhere.com
if your account is on our US-based system.
-
eu.pythonanywhere.com
if your account is on our EU-based system.
import requests
username = 'your username'
token = 'your token'
host = 'your host'
response = requests.get(
'https://{host}/api/v0/user/{username}/cpu/'.format(
host=host, username=username
),
headers={'Authorization': 'Token {token}'.format(token=token)}
)
if response.status_code == 200:
print('CPU quota info:')
print(response.content)
else:
print('Got unexpected status code {}: {!r}'.format(response.status_code, response.content))
Once you've generated your token, you can copy and paste it for use in your scripts. You can also access
it at any time from PythonAnywhere consoles, webapps and tasks in a pre-populated environment variable,
$API_TOKEN
.
You will need to reload your webapp and start new consoles for this environment variable to be in place.
Endpoints
All endpoints are hosted at https://www.pythonanywhere.com/ or
https://eu.pythonanywhere.com/ depending on where your account is registered.
Rate-limits
Each endpoint has a 40 requests per minute rate limit, apart from the send_input
endpoint on consoles, which is 120 requests per minute.
Always_On
/api/v0/user/{username}/always_on/
Method |
Description |
Parameters |
GET |
List all of your always-on tasks |
(no parameters) |
POST |
Create and start a new always-on task |
command, description, enabled |
/api/v0/user/{username}/always_on/{id}/
Method |
Description |
Parameters |
GET |
Return information about an always-on task. |
(no parameters) |
PUT |
Endpoints for always-on tasks |
command, description, enabled |
PATCH |
Endpoints for always-on tasks |
command, description, enabled |
DELETE |
Stop and delete an always-on task |
(no parameters) |
/api/v0/user/{username}/always_on/{id}/restart/
Method |
Description |
Parameters |
POST |
Endpoints for always-on tasks |
command, description, enabled |
Consoles
/api/v0/user/{username}/consoles/
Method |
Description |
Parameters |
GET |
List all your consoles |
(no parameters) |
POST |
Create a new console object (NB does not actually start the process. Only
connecting to the console in a browser will do that). |
executable, arguments, working_directory |
/api/v0/user/{username}/consoles/shared_with_you/
Method |
Description |
Parameters |
GET |
View consoles shared with you. |
(no parameters) |
/api/v0/user/{username}/consoles/{id}/
Method |
Description |
Parameters |
GET |
Return information about a console instance. |
(no parameters) |
DELETE |
Kill a console. |
(no parameters) |
/api/v0/user/{username}/consoles/{id}/get_latest_output/
Method |
Description |
Parameters |
GET |
Get the most recent output from the console (approximately 500 characters). |
(no parameters) |
Method |
Description |
Parameters |
POST |
"type" into the console. Add a "\n" for return. |
POST parameter: input |
Cpu
/api/v0/user/{username}/cpu/
Method |
Description |
Parameters |
GET |
Returns information about cpu usage in json format:
{
"daily_cpu_limit_seconds": <int>,
"next_reset_time": <isoformat>,
"daily_cpu_total_usage_seconds": <float>
}
|
(no parameters) |
Databases
/api/v0/user/{username}/databases/mysql/
Method |
Description |
Parameters |
GET |
|
(no parameters) |
Default_Python3_Version
/api/v0/user/{username}/default_python3_version/
Method |
Description |
Parameters |
GET |
Returns information about user's current and available default Python 3 version
in json format:
{
"default_python3_version": <str>,
"available_python3_versions": [<str>],
}
|
(no parameters) |
PATCH |
Sets default Python 3 version for user. |
(no parameters) |
Default_Python_Version
/api/v0/user/{username}/default_python_version/
Method |
Description |
Parameters |
GET |
Returns information about user's current and available default Python version
in json format:
{
"default_python_version": <str>,
"available_python_versions": [<str>],
}
|
(no parameters) |
PATCH |
Sets default Python version for user. |
(no parameters) |
Default_Save_And_Run_Python_Version
/api/v0/user/{username}/default_save_and_run_python_version/
Method |
Description |
Parameters |
GET |
Returns information about user's current and available Python version used for
the "Run" button in the editor, in json format:
{
"default_save_and_run_python_version": <str>,
"available_python_versions": [<str>],
}
|
(no parameters) |
PATCH |
Sets Python version used for the "Run" button in the editor. |
(no parameters) |
Files
/api/v0/user/{username}/files/path{path}
Method |
Description |
Parameters |
GET |
|
(no parameters) |
POST |
Uploads a file to the specified file path. Contents should be in a
multipart-encoded file with the name "content". The attached filename is
ignored.
If the directories in the given path do not exist, they will be created.
Any file already present at the specified path will be overwritten.
Returns 201 on success if a file has been created, or 200 if an existing
file has been updated. |
(no parameters) |
DELETE |
Deletes the file at the specified path. This method can be used to
delete log files that are not longer required.
Returns 204 on success. |
(no parameters) |
/api/v0/user/{username}/files/sharing/
Method |
Description |
Parameters |
POST |
Start sharing a file. Returns 201 on success, or 200 if file was already shared. |
POST parameter: path |
/api/v0/user/{username}/files/sharing/?path={path}
Method |
Description |
Parameters |
GET |
Check sharing status for a path. Returns 404 if path not currently shared. |
Query parameter: path |
DELETE |
Stop sharing a path. Returns 204 on successful unshare. |
Query parameter: path |
/api/v0/user/{username}/files/tree/?path={path}
Method |
Description |
Parameters |
GET |
Returns a list of the contents of a directory, and its subdirectories
as a list. Paths ending in slash/ represent directories. Limited to
1000 results. |
Query parameter: path |
Schedule
/api/v0/user/{username}/schedule/
Method |
Description |
Parameters |
GET |
List all of your scheduled tasks |
(no parameters) |
POST |
Create a new scheduled task |
command, enabled, interval, hour, minute, description |
/api/v0/user/{username}/schedule/{id}/
Method |
Description |
Parameters |
GET |
Return information about a scheduled task. |
(no parameters) |
PUT |
Endpoints for scheduled tasks |
command, enabled, interval, hour, minute, description |
PATCH |
Endpoints for scheduled tasks |
command, enabled, interval, hour, minute, description |
DELETE |
Delete an scheduled task |
(no parameters) |
Students
/api/v0/user/{username}/students/
Method |
Description |
Parameters |
GET |
Returns a list of students of the current user
{
"students": [
{"username": <string>},
{"username": <string>},
...
]
}
|
(no parameters) |
/api/v0/user/{username}/students/{student}/
Method |
Description |
Parameters |
DELETE |
|
(no parameters) |
System_Image
/api/v0/user/{username}/system_image/
Method |
Description |
Parameters |
GET |
Returns information about user's current and available system images
in json format:
{
"system_image": <str>,
"available_system_images": [<str>],
}
|
(no parameters) |
PATCH |
Sets system image for user. |
(no parameters) |
Webapps
/api/v0/user/{username}/webapps/
Method |
Description |
Parameters |
GET |
List all webapps |
(no parameters) |
POST |
Create a new webapp with manual configuration. Use (for example) "python36" to
specify Python 3.6. |
POST parameters: domain_name, python_version |
/api/v0/user/{username}/webapps/{domain_name}/
Method |
Description |
Parameters |
GET |
Return information about a web app's configuration |
(no parameters) |
PUT |
Modify configuration of a web app. (NB a reload is usually required to apply changes). |
python_version, source_directory, virtualenv_path, force_https, password_protection_enabled, password_protection_username, password_protection_password |
PATCH |
Modify configuration of a web app. (NB a reload is usually required to apply changes). |
python_version, source_directory, virtualenv_path, force_https, password_protection_enabled, password_protection_username, password_protection_password |
DELETE |
Delete the webapp. This will take the site offline.
Config is backed up in /var/www, and your code is not touched. |
(no parameters) |
/api/v0/user/{username}/webapps/{domain_name}/disable/
Method |
Description |
Parameters |
POST |
Disable the webapp. |
POST parameters: none |
/api/v0/user/{username}/webapps/{domain_name}/enable/
Method |
Description |
Parameters |
POST |
Enable the webapp. |
POST parameters: none |
/api/v0/user/{username}/webapps/{domain_name}/reload/
Method |
Description |
Parameters |
POST |
Reload the webapp to reflect changes to configuration and/or source code on disk. |
POST parameters: none |
/api/v0/user/{username}/webapps/{domain_name}/ssl/
Method |
Description |
Parameters |
GET |
Get and set TLS/HTTPS info. POST parameters to the right are incorrect, use
`cert` and `private_key` when posting.
POST {'cert_type': 'letsencrypt-auto-renew'} to this endpoint to enable
an auto-renewing Let's Encrypt certificate.
|
(no parameters) |
POST |
Get and set TLS/HTTPS info. POST parameters to the right are incorrect, use
`cert` and `private_key` when posting.
POST {'cert_type': 'letsencrypt-auto-renew'} to this endpoint to enable
an auto-renewing Let's Encrypt certificate.
|
python_version, source_directory, virtualenv_path, force_https, password_protection_enabled, password_protection_username, password_protection_password |
DELETE |
Get and set TLS/HTTPS info. POST parameters to the right are incorrect, use
`cert` and `private_key` when posting.
POST {'cert_type': 'letsencrypt-auto-renew'} to this endpoint to enable
an auto-renewing Let's Encrypt certificate.
|
(no parameters) |
/api/v0/user/{username}/webapps/{domain_name}/static_files/
Method |
Description |
Parameters |
GET |
List all the static files mappings for a domain. |
(no parameters) |
POST |
Create a new static files mapping. (webapp restart required) |
url, path |
/api/v0/user/{username}/webapps/{domain_name}/static_files/{id}/
Method |
Description |
Parameters |
GET |
Get URL and path of a particular mapping. |
(no parameters) |
PUT |
Modify a static files mapping. (webapp restart required) |
url, path |
PATCH |
Modify a static files mapping. (webapp restart required) |
url, path |
DELETE |
Remove a static files mapping. (webapp restart required) |
(no parameters) |
/api/v0/user/{username}/webapps/{domain_name}/static_headers/
Method |
Description |
Parameters |
GET |
List all the static headers for a domain. |
(no parameters) |
POST |
Create a new static header. (webapp restart required) |
url, name, value |
/api/v0/user/{username}/webapps/{domain_name}/static_headers/{id}/
Method |
Description |
Parameters |
GET |
Get URL, name and value of a particular header. |
(no parameters) |
PUT |
Modify a static header. (webapp restart required) |
url, name, value |
PATCH |
Modify a static header. (webapp restart required) |
url, name, value |
DELETE |
Remove a static header. (webapp restart required) |
(no parameters) |
Websites
/api/v1/user/{username}/websites
Method |
Description |
Parameters |
POST |
Create a new domain and associated webapp
Returns information about created website (domain with webapp)
in json format:
{
'id': <int>,
'user': <str>,
'domain_name': <str>,
'enabled': <bool>,
'webapp': {
'id': <str>,
'command': <str>,
'domains': [{'domain_name': <str>, 'enabled': <bool>}]
},
'logfiles': {
'access': <str>,
'server': <str>,
'error': <str>,
}
}
logfiles paths are ready to be used in the files API |
domain_name, enabled, webapp |
/api/v1/user/{username}/websites/
Method |
Description |
Parameters |
GET |
List all domains with their webapp details in json format:
[
{
'id': <int>,
'user': <str>,
'domain_name': <str>,
'enabled': <bool>,
'webapp': {
'id': <str>,
'command': <str>,
'domains': [{'domain_name': <str>, 'enabled': <bool>}]
},
'logfiles': {
'access': <str>,
'server': <str>,
'error': <str>,
}
}
]
|
(no parameters) |
POST |
Create a new domain and associated webapp
Returns information about created website (domain with webapp)
in json format:
{
'id': <int>,
'user': <str>,
'domain_name': <str>,
'enabled': <bool>,
'webapp': {
'id': <str>,
'command': <str>,
'domains': [{'domain_name': <str>, 'enabled': <bool>}]
},
'logfiles': {
'access': <str>,
'server': <str>,
'error': <str>,
}
}
logfiles paths are ready to be used in the files API |
domain_name, enabled, webapp |
/api/v1/user/{username}/websites/{domain_name}/
Method |
Description |
Parameters |
GET |
Get information about the domain and its webapp
in json format:
{
'id': <int>,
'user': <str>,
'domain_name': <str>,
'enabled': <bool>,
'webapp': {
'id': <str>,
'command': <str>,
'domains': [{'domain_name': <str>, 'enabled': <bool>}]
},
'logfiles': {
'access': <str>,
'server': <str>,
'error': <str>,
}
}
logfiles paths are ready to be used in the files API |
(no parameters) |
PATCH |
Modify the domain/webapp |
domain_name, enabled, webapp |
DELETE |
Remove the domain and webapp |
(no parameters) |
/api/v1/user/{username}/websites/{domain_name}/reload/
Method |
Description |
Parameters |
POST |
Reload the webapp to reflect changes to configuration and/or source code on disk. |
POST parameters: none |