Qwickly Attendance Public API - Getting Started
- Base Information
- Obtaining OAuth 2.0 Keys
- Authenticating Requests: OAuth 2.0 Client Credentials
- Python Example: Obtain Token and Upload
- Rate Limits
- API Endpoints and Schemas
- Support
Base Information
- Auth token endpoint: https://www.qwickly.tools/api/auth/token/
- API docs (endpoints and schemas): https://www.qwickly.tools/api/dashboard/v1/docs/
Obtaining OAuth 2.0 Keys
- Navigate to the Qwickly dashboard (www.qwickly.tools) and click on the Manage API Keys icon.
-
Name your key and select the appropriate scopes. Click Submit.
Note: A Key name must be provided, and the user must select at least one scope. The submit button will remain disabled until the criteria have been met.
Note: When the user selects a scope using the checkbox input, the default selection will be the scope_name:write scope. If the user unselects the scope checkbox, associated scope selections for that endpoint will be unselected as well.
Note: For Example, the user:write scope is required to initiate a CSV upload. -
Save the Client ID and Client Secret that appear.
Important: The Client Secret can not be displayed again once the modal has closed or has been navigated away from.
Authenticating Requests: OAuth 2.0 Client Credentials
Use your client_id and client_secret to obtain an access token.
- Request Token
- POST https://www.qwickly.tools/api/auth/token/
- Content-Type: application/x-www-form-urlencoded
- Body parameters:
- grant_type=client_credentials
- client_id=YOUR_CLIENT_ID
- client_secret=YOUR_CLIENT_SECRET
- Successful Response
- JSON containing:
- access_token: string
- token_type: "Bearer"
- expires_in: integer (seconds)
- scope: string
- Using the Token
- Add the Authorization header to all API calls:
- Authorization: Bearer YOUR_ACCESS_TOKEN
- Renewal
- When the token expires, request a new one using the same client credentials.
Python Example: Obtain Token and Upload
The snippet below obtains an OAuth token and performs an authenticated POST to the upload endpoint at https://www.qwickly.tools/dashboard/api/upload/.
# Python
import requests
TOKEN_URL = "https://www.qwickly.tools/api/auth/token/"
UPLOAD_URL = "https://www.qwickly.tools/api/dashboard/v1/upload/"
client_id = 'YOUR_CLIENT_ID'
client_secret = 'YOUR_CLIENT_SECRET'
# Obtain token (OAuth2 client_credentials)
token_resp = requests.post(
TOKEN_URL,
headers={"Content-Type": "application/x-www-form-urlencoded"},
data={
"grant_type": "client_credentials",
"client_id": client_id,
"client_secret": client_secret,
},
timeout=30,
)
token_resp.raise_for_status()
access_token = token_resp.json()["access_token"]
# Authenticated POST to upload endpoint (example CSV upload)
with open('PATH_TO_YOUR_CSV_FILE', 'rb') as csv_file:
files = {"file": ("example.csv", csv_file, "text/csv")}
post_data = {"selected_id_field": "sis_id"}
resp = requests.post(
UPLOAD_URL,
headers={"Authorization": f"Bearer {access_token}"},
files=files,
data=post_data,
timeout=60,
)
resp.raise_for_status()
print(resp.json())
Notes:
- Replace the example CSV with your actual file and fields as defined in the API docs.
- If the endpoint expects JSON or additional form fields, adjust the request accordingly.
Rate Limits
- Public API limit: 60 requests per minute
- CSV upload limit: 5 requests per minute
Best practices:
- Implement exponential backoff on HTTP 429 responses.
- Prefer batching where supported.
- Monitor usage and avoid bursts that exceed the per-minute thresholds.
API Endpoints and Schemas
For the up-to-date list of available endpoints, request/response schemas, and example payloads, see: https://www.qwickly.tools/api/dashboard/v1/docs/
This documentation is the source of truth for:
- Endpoint paths and methods
- Request parameters and bodies
- Response formats
- Error codes
Support
- If you have a use case in mind or questions about what the APIs can support, submit a support ticket at www.goqwickly.com/support and let us know what you're trying to build.
Comments
0 comments
Please sign in to leave a comment.