Expenses API
Create an Expense
POST /api/v2/expenses
Creates a project expense. For LLM cost tracking, use the “LLM Usage” expense category from your company.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
project_id | string | Yes | Project ID |
expense_category_id | string | Yes | Expense category ID |
spent_date | string | Yes | Date of expense (YYYY-MM-DD) |
total_cost | number | Yes* | Total cost amount |
units | number | Yes* | Quantity |
notes | string | No | Description |
billable | boolean | No | Whether the expense is billable |
source | string | No | web, cli, api, or agent |
metadata | object | No | JSON object, max 4KB |
*Provide either total_cost or units.
Example Request
curl -X POST https://app.keito.ai/api/v2/expenses \
-H "Authorization: Bearer kto_xxxxx" \
-H "Keito-Account-Id: your_company_id" \
-H "Content-Type: application/json" \
-d '{
"project_id": "project_id_here",
"expense_category_id": "category_id_here",
"spent_date": "2026-05-05",
"total_cost": 0.135,
"notes": "LLM usage for review session",
"source": "agent",
"metadata": {
"session_id": "550e8400-e29b-41d4-a716-446655440000",
"model": "claude-opus-4-6",
"input_tokens": 30000,
"output_tokens": 15000
}
}'
List Expenses
GET /api/v2/expenses
Returns a paginated list of expenses.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | number | Page number |
per_page | number | Results per page |
source | string | Filter by source |
project_id | string | Filter by project |
client_id | string | Filter by client |
user_id | string | Filter by user |
from | string | Start date, inclusive |
to | string | End date, inclusive |
is_billed | boolean | Filter billed status |
updated_since | string | ISO timestamp lower bound |
Example Request
curl "https://app.keito.ai/api/v2/expenses?source=agent&from=2026-05-01" \
-H "Authorization: Bearer kto_xxxxx" \
-H "Keito-Account-Id: your_company_id"