API Reference
REST API
Getting Started Authorization Best PracticesMCP (AI Assistants)
MCP Overview MCP AuthenticationGeneral
Status Get Business Identity Get Business DetailsContacts
List ContactsJobs
List JobsEstimates
List EstimatesInvoices
List InvoicesOfferings
List OfferingsEquipment
List EquipmentEvents
List EventsBest Practices
Keep Your Private Key Secret
Never expose your private key in client-side JavaScript, mobile apps, or public repositories. All API calls should be made from a secure server-side environment.
Use Accurate Timestamps
The API rejects requests where
X-Timestamp is more than 5 minutes from the server clock. Make sure your server's clock is synchronized using NTP. If you see REQUEST_EXPIRED errors, check your system time.
Respect Rate Limits
Requests are rate-limited per public key (or per IP if no key is provided).
When rate-limited, the API returns
| Condition | Limit |
|---|---|
With X-Public-Key header | 60 requests/minute per key |
Without X-Public-Key header | 10 requests/minute per IP |
429 Too Many Requests. Implement exponential backoff in your retry logic.
Include the Full Path in Signatures
When generating the signature, the
path component must include the full URI with query string and a leading /. For example: /api/v1/events?count=5, not /events?count=5 or api/v1/events.
Handle Errors Gracefully
Always check HTTP status codes before processing response bodies. The API uses standard status codes:
- 200 — Success
- 401 — Authentication failure (bad key, bad signature, or expired timestamp)
- 403 — Account inactive
- 429 — Rate limited
- 500 — Server error (retry with backoff)
Cache When Appropriate
For data that doesn't change frequently (e.g., events list), consider caching responses for a reasonable TTL (e.g., 5–15 minutes) to reduce API calls and improve your application's performance.