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 /api/v2/time-entries # List with filtering & pagination
POST /api/v2/time-entries # Create
GET /api/v2/time-entries/:id # Get single
PATCH /api/v2/time-entries/:id # Update
DELETE /api/v2/time-entries/:id # Delete
Here’s what a typical API call looks like:
curl -X GET https://app.keito.ai/api/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/api/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. Official Node and Python SDKs are available if you would rather not hand-roll HTTP calls — see the developer quickstart and the API reference to get going.