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/customersList all customers with pagination and filters.
- POST/v1/customersCreate a new customer.
- GET/v1/customers/{id}Retrieve a single customer with related projects.
- PATCH/v1/customers/{id}Update a customer record.
- GET/v1/projectsList projects across your workspace.
- POST/v1/projectsCreate a new project under a customer.
- POST/v1/estimatesBuild a new estimate from a project.
- POST/v1/estimates/{id}/calculateRe-run the estimating rules engine.
- POST/v1/measurementsSubmit a polygon and receive area + roll layout.
- GET/v1/productsList active turf, infill, base, and accessory SKUs.
- POST/v1/proposalsGenerate a proposal PDF from an estimate.
- POST/v1/proposals/{id}/sendEmail or SMS a proposal to a customer.
- POST/v1/webhooksRegister a webhook (proposal.signed, payment.received).
- GET/v1/analytics/pipelineReturn 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 turfpilotPython
pip install turfpilotRuby
gem install turfpilotGo
go get turfpilot