Estimates API
Reading estimates requires Owner/Administrator or Manager access. Writes require Owner/Administrator access or the Manager Manage estimates permission. AI app connections additionally follow their estimate/invoice capabilities. All requests remain scoped to the selected workspace. Personal sync keys cannot use this surface.
Endpoints
| Method | Endpoint | Purpose |
|---|---|---|
GET, POST |
/api/v2/estimates |
List or create estimates |
GET, PATCH, DELETE |
/api/v2/estimates/{id} |
Read, update, or delete a draft |
POST |
/api/v2/estimates/{id}/send |
Mark sent without delivering email |
POST |
/api/v2/estimates/{id}/accept |
Record acceptance |
POST |
/api/v2/estimates/{id}/decline |
Record decline |
POST |
/api/v2/estimates/{id}/convert |
Convert an accepted estimate to a draft invoice |
POST |
/api/v2/estimates/{id}/duplicate |
Create a new draft copy |
List supports client_id, state, from, to, owner_id, page and per_page. States are draft, sent, viewed, accepted, declined and expired. owner_id=unassigned selects unassigned records. An AI connection also needs the corresponding capability.
Create a draft
curl --fail-with-body 'https://app.keito-test.com/api/v2/estimates' \
-H "Authorization: Bearer $KEITO_API_KEY" \
-H "Keito-Account-Id: $KEITO_ACCOUNT_ID" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: estimate-create-unique-001' \
-d '{"client_id":"YOUR_CLIENT_ID","subject":"Proposed implementation","line_items":[{"description":"Implementation","quantity":1,"unit_price":1000}]}'
client_id is required. Optional fields include owner, number, issue/valid-until dates, currency, purchase order, tax, discount, notes, introduction and line items. A line’s project must belong to that client and workspace. Use OpenAPI for exact field schemas and state constraints. Create accepts numeric strings for numeric fields, but integrations should send JSON numbers.
Send, decisions and conversion
The /send operation records sent activity with no recipients; it does not email the estimate. It refuses empty estimates and accepted/declined records. If your application delivers the document elsewhere, make that delivery explicit rather than treating this endpoint as an email sender.
Only draft estimates can be deleted. Acceptance, decline and conversion follow the existing estimate state rules. Conversion creates a draft invoice, not a payment or an issued invoice. Create and mark-sent support optional Idempotency-Key; reuse only for an identical request. Other operations retain their documented contracts and should not be assumed idempotent automatically.