Announcing Keito API v2
TL;DR — API v2 is a complete redesign: predictable RESTful routes, webhook support for real-time integrations, 10x higher rate limits, and structured error responses. v1 remains supported for 12 months.
We’ve been working on a major overhaul of the Keito API and today we’re thrilled to announce that API v2 is now available in beta.
What’s New
- RESTful resource design — predictable URLs and standard HTTP methods throughout
- Webhook support — get notified in real-time when time entries are created, updated, or approved
- Improved rate limits — 1,000 requests per minute for all plans, up from 100
- Better error responses — structured JSON errors with actionable messages
New Endpoint Structure
v2 follows a consistent pattern for all resources:
GET /v2/time-entries # List with filtering & pagination
POST /v2/time-entries # Create
GET /v2/time-entries/:id # Get single
PATCH /v2/time-entries/:id # Update
DELETE /v2/time-entries/:id # Delete
Here’s what a typical API call looks like:
curl -X GET https://api.keito.ai/v2/time-entries \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"project_id": "proj_abc123", "from": "2026-01-01", "to": "2026-01-31"}'
The response now includes pagination metadata:
{
"data": [
{
"id": "te_xyz789",
"user_id": "usr_abc123",
"project_id": "proj_abc123",
"duration_minutes": 120,
"description": "API endpoint implementation",
"date": "2026-01-15",
"status": "approved"
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 142,
"total_pages": 6
}
}
Webhook Events
You can now subscribe to events and receive POST requests to your endpoint:
| Event | Description |
|---|---|
time_entry.created | A new time entry was logged |
time_entry.updated | An existing entry was modified |
time_entry.approved | An entry was approved by a manager |
invoice.created | A new invoice was generated |
invoice.sent | An invoice was sent to a client |
Security — Every webhook request includes an
X-Keito-Signatureheader with an HMAC-SHA256 signature. Always verify this before processing the payload.
Structured Error Responses
v1 returned plain text errors. v2 gives you structured JSON you can parse programmatically:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "duration_minutes must be a positive integer",
"field": "duration_minutes",
"docs_url": "https://keito.ai/docs/api/time-entries#create"
}
}
Migration Path
API v1 will continue to work for at least 12 months. We’ve published a migration guide to help you transition at your own pace. The key changes:
- All endpoints move from
/api/to/v2/ - Authentication header changes from
X-API-KeytoAuthorization: Bearer - Response envelopes now use
dataandpaginationkeys - Date formats standardised to ISO 8601
Getting Started
Head to the developer section of your Keito dashboard to generate v2 API keys and explore the interactive documentation.