List Estimates

GET https://backend.localbusiness.pro/api/v1/estimates

Returns a paginated list of estimates for the authenticated business, sorted by creation date (newest first).

Header Parameters

X-Public-Key string required

Your business public key. Used to identify which business is making the request.

X-Timestamp string required

Current Unix timestamp in seconds. Requests older than 5 minutes are rejected.

X-Signature string required

HMAC-SHA256 signature of the signing string: {timestamp}\n{METHOD}\n{path}\n{body}, using your private key as the secret.

Query Parameters

page integer

Page number (1-indexed).

per_page integer

Items per page (max 100). Default: 25.

status string

Filter by estimate status (e.g., draft, sent, approved, declined, expired).

payment_status string

Filter by payment status (e.g., unpaid, partial, paid).

Responses

200 Paginated list of estimates.
{
  "estimates": [
    {
      "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "estimate_number": "EST-00015",
      "title": "Roof Replacement - 30-Year Architectural Shingles",
      "status": "sent",
      "payment_status": "unpaid",
      "subtotal": "14200.00",
      "discount_type": "percentage",
      "discount_value": "5.00",
      "tax_rate": "8.25",
      "tax_amount": "1112.15",
      "total_amount": "14602.15",
      "deposit_required": true,
      "deposit_amount": "3500.00",
      "amount_paid": "0.00",
      "expires_at": "2026-04-01T00:00:00.000000Z",
      "sent_at": "2026-03-01T12:00:00.000000Z",
      "approved_at": null,
      "created_at": "2026-02-28T09:30:00.000000Z",
      "updated_at": "2026-03-01T12:00:00.000000Z"
    }
  ],
  "pagination": {
    "current_page": 1,
    "per_page": 25,
    "total_items": 15,
    "total_pages": 1
  }
}
401 Missing credentials, expired timestamp, or invalid signature.
{
  "error": "Invalid API credentials",
  "code": "INVALID_CREDENTIALS"
}
403 Business account exists but is not active.
{
  "error": "Business account is not active",
  "code": "ACCOUNT_INACTIVE"
}
429 Rate limit exceeded (60 requests/minute per key).
{
  "message": "Too Many Attempts."
}