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.