API Documentation WS24.dev
REST API for programmatic task management.
The WS24 Dev API lets authenticated clients list, create, update and comment on tasks. All requests are authenticated via the X-API-Key header and rate-limited at 500 req/min.
One key per user, sent on every request.
X-API-Key header. Keys are issued through your profile and rotate at your discretion.API Key Format
Keys are 32-character random strings, prefixed with ws24_live_:
ws24_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sending the key
Include your API key in the X-API-Key header for every request:
$ curl -H "X-API-Key: ws24_live_your_key_here" https://ws24.dev/api/v1/tasks
Managing API keys
Open your Profile → API Keys section to:
- Click Create API Key and give it a name.
- Copy the full key — it's shown once and cannot be retrieved again.
- Revoke a key with the delete button when it's no longer needed.
Limit: only one active key per user at a time.
500 requests per minute per key.
retryAfter hint — implement exponential backoff in your client.{
"error": "Rate limit exceeded",
"message": "Too many requests. Rate limit: 500 requests per minute",
"retryAfter": 45
}
Tasks · v1.
application/json. Errors share a common shape — see Error Responses below.List tasks
Returns a paginated list of tasks visible to the authenticated user.
status, page, limit, sort, order
$ curl -H "X-API-Key: ws24_live_..." \ "https://ws24.dev/api/v1/tasks?status=in_progress&page=1&limit=10&sort=created_at&order=desc"
{
"tasks": [
{
"id": 123,
"title": "Website redesign",
"description": "Update homepage with new branding",
"status": "in_progress",
"budget": "1000",
"deadline": "2025-12-31",
"createdAt": "2025-11-01T10:00:00Z",
"updatedAt": "2025-11-10T15:30:00Z"
}
],
"pagination": {
"page": 1, "limit": 10, "total": 45, "totalPages": 5
}
}
Get task by ID
$ curl -H "X-API-Key: ws24_live_..." https://ws24.dev/api/v1/tasks/123
{
"task": {
"id": 123,
"title": "Website redesign",
"status": "in_progress",
"clientId": "user_123",
"specialistId": "specialist_456",
"createdAt": "2025-11-01T10:00:00Z",
"updatedAt": "2025-11-10T15:30:00Z"
}
}
Create a task
Requires Content-Type: application/json. Returns the created task with its assigned ID.
title // string, required description // string, required budget // numeric string, optional deadline // ISO date, optional
$ curl -X POST -H "X-API-Key: ws24_live_..." -H "Content-Type: application/json" \ -d '{ "title": "Mobile app development", "description": "Develop iOS app for our service", "budget": "5000", "deadline": "2025-12-31" }' https://ws24.dev/api/v1/tasks
{
"message": "Task created successfully",
"task": { "id": 124, "status": "created", ... }
}
Update a task
$ curl -X PUT -H "X-API-Key: ws24_live_..." -H "Content-Type: application/json" \ -d '{ "status": "completed", "description": "Task completed successfully" }' \ https://ws24.dev/api/v1/tasks/123
{
"message": "Task updated successfully",
"task": { "id": 123, "status": "completed", "updatedAt": "..." }
}
Add comment / update
$ curl -X POST -H "X-API-Key: ws24_live_..." -H "Content-Type: application/json" \ -d '{ "content": "Work in progress, 50% completed", "type": "comment" }' \ https://ws24.dev/api/v1/tasks/123/updates
{
"message": "Update added successfully",
"update": { "id": 456, "taskId": 123, "type": "comment", ... }
}
Same envelope, mapped to HTTP status.
error, message, and optional details array.{
"error": "Error type",
"message": "Human-readable error message",
"details": []
}
Five things that ship resilient integrations.
Secure your API key
Never expose the key in client-side code or public repositories. Treat it like a password.
Handle rate limits
Implement exponential backoff with jitter when you receive 429 responses. Honour the retryAfter hint.
Use pagination
Always paginate list endpoints — the default limit is sized for browsers, not bulk loads.
Handle errors gracefully
Match on error and message fields rather than parsing free-text strings.
Rotate keys periodically
Create a new key, switch your client, then revoke the old one. Aim for quarterly rotation.
Copy/paste in your language.
requests), Node.js (axios), and a plain bash script.import requests API_KEY = "ws24_live_your_key_here" BASE_URL = "https://ws24.dev/api/v1" headers = { "X-API-Key": API_KEY, "Content-Type": "application/json", } # Get tasks response = requests.get(f"{BASE_URL}/tasks", headers=headers) tasks = response.json() # Create a task new_task = { "title": "New project", "description": "Project description", "budget": "2000", } created = requests.post(f"{BASE_URL}/tasks", headers=headers, json=new_task).json()
const axios = require('axios'); const API_KEY = 'ws24_live_your_key_here'; const BASE_URL = 'https://ws24.dev/api/v1'; const headers = { 'X-API-Key': API_KEY, 'Content-Type': 'application/json', }; async function getTasks() { const { data } = await axios.get(`${BASE_URL}/tasks`, { headers }); console.log(data); } async function createTask() { const { data } = await axios.post(`${BASE_URL}/tasks`, { title: 'New project', description: 'Project description', budget: '2000', }, { headers }); console.log(data); }
#!/bin/bash API_KEY="ws24_live_your_key_here" BASE_URL="https://ws24.dev/api/v1" # List tasks curl -H "X-API-Key: $API_KEY" "$BASE_URL/tasks" # Create a task curl -X POST \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "New project", "description": "Project description", "budget": "2000" }' \ "$BASE_URL/tasks"
Stuck or hitting a wall? Reach the team.
Support
Email [email protected] — typically < 4h response.
For scope/billing: open a ticket from your dashboard.
Changelog · v1.0 (Nov 2025)
- Initial API release
- Tasks endpoints (list, get, create, update)
- Comment / update endpoint
- API-key authentication
- Rate limiting (500 req/min)