API Reference

Programmatic access to every TurfPilot feature: customers, measurements, estimates, and proposals. All endpoints return JSON, are versioned under /v1, and require a workspace API key.

Base URL
https://api.turfpilot.io
Format
application/json
SLA
99.9% uptime

Authentication

curl example
curl https://api.turfpilot.io/v1/customers \
  -H "Authorization: Bearer tp_live_sk_..." \
  -H "TurfPilot-Version: 2026-08-01"
All requests are authenticated with a bearer token. Generate keys under Settings → API keys. Live keys start with tp_live_sk_; sandbox keys with tp_test_sk_.

Endpoints

  • GET
    /v1/customers
    List all customers with pagination and filters.
  • POST
    /v1/customers
    Create a new customer.
  • GET
    /v1/customers/{id}
    Retrieve a single customer with related projects.
  • PATCH
    /v1/customers/{id}
    Update a customer record.
  • GET
    /v1/projects
    List projects across your workspace.
  • POST
    /v1/projects
    Create a new project under a customer.
  • POST
    /v1/estimates
    Build a new estimate from a project.
  • POST
    /v1/estimates/{id}/calculate
    Re-run the estimating rules engine.
  • POST
    /v1/measurements
    Submit a polygon and receive area + roll layout.
  • GET
    /v1/products
    List active turf, infill, base, and accessory SKUs.
  • POST
    /v1/proposals
    Generate a proposal PDF from an estimate.
  • POST
    /v1/proposals/{id}/send
    Email or SMS a proposal to a customer.
  • POST
    /v1/webhooks
    Register a webhook (proposal.signed, payment.received).
  • GET
    /v1/analytics/pipeline
    Return pipeline metrics for the workspace.

Rate limits

Starter
60 req/min
Pro
300 req/min
Enterprise
2,000 req/min

Webhooks

customer.created
POST
project.updated
POST
estimate.calculated
POST
proposal.sent
POST
proposal.signed
POST
payment.received
POST
subscription.renewed
POST

Official SDKs

Node.js
npm i turfpilot
Python
pip install turfpilot
Ruby
gem install turfpilot
Go
go get turfpilot